Результаты работы программы.
Отчет о лабораторной работе №1 Задачи 1, 2 по курсу «Вычислительные машины, системы и сети»
Выполнил: студ. гр.БАГ-08-01 Ю.В.Новикова Проверил: доцент М.Р. Сафаров
Уфа 2010
Задача 1. Первое слагаемое задавать с клавиатуры в строке 20h-2Fh РПД (младший байт по адресу 2Fh), второе слагаемое – в строке 30h-3Fh РПД (младший байт по адресу 3Fh). Байты суммы должны замещать соответствующие байты второго слагаемого. Формат слагаемых выбрать в диапазоне 6-8 байт. Код программы с комментариями. ;ADN1.ASM ;СЛОЖЕНИЕ ДВУХ N-БАЙТНЫХ ЧИСЕЛ БЕЗ ЗНАКА $MOD845
CSEG
ORG 0000H MOV R0,#2Fh; загрузка в регистр R0 адреса младшего байта первого слагаемого MOV R1,#3Fh; загрузка в регистр R1 адреса младшего байта второго слагаемого MOV R2,#08h; счетчик цикла CLR C; сброс бита переноса LOOP: MOV A,@R0; в А идет содержимое регистра РПД с адресом, находящимся в R0 ADDC A,@R1; A<=[A]+[@R1]+[C] MOV @R1,A; DEC R0; декремент R0 DEC R1; DJNZ R2,LOOP; проверка конца цикла RET; END
Результаты работы программы.
Исходные данные
Шаг первый: Команда MOV R0,#2FH (двухбайтная команда занимает два адреса 0000h-КОП-78h и 0001h-68h, второй байт команды – адрес младшего байта первого слагаемого, который в результате выполнения программы записывается в регистр R0 РПД).
Шаг второй: Команда MOV R1,#3FH. Выполняется аналогично предыдущей, только второй байт команды – адрес младшего байта второго слагаемого.
Шаг третий: Команда MOV R2,#08H. Устанавливаем счетчик цикла. Шаг четвертый: Команда CLR C сбрасывает бит С, т.е. в окне Flags устанавливается СY=0.
Шаг пятый: Команда MOV A,@R0. В аккумулятор идет содержимое регистра РПД с адресом, находящимся в R0, т.е. младший байт первого слагаемого – АА (в окне Registers Acc=AA).
Шаг шестой: Команда ADDC A,@R1. A<=[A]+[@R1]+[C]. Шаг седьмой: Команда MOV @R1,A. Выполняется пересылка данных из аккумулятора в регистр R1, который выбран в качестве регистра косвенного адреса. В РПД по адресу 2F устанавливается сумма 6Dh, что соответствует полученным нами результатам. AAh+C3h=6Dh=0110 1101. CY=1, AC=0, P=1.
Шаг восьмой: Команда DEC R0 – декремент R0. В окне 8051 Сore R0=2E.
Шаг девятый: Аналогично следующая команда DEC R1. R1=3Е. Шаг десятый: Команда DJNZ R2,0007H – команда проверки конца цикла. R2<=[R2]-1, затем если NZ, то переход на строку 0007H, если Z, то конец цикла. Цикл 7 закончен. Цикл 6 закончен. Цикл 5 закончен Цикл 4 закончен Цикл 3 закончен Цикл 2 закончен
Таким образом проходим восемь циклов и результате получаем следующее. Вывод: Результаты, которые получили мы, соответствуют результатам, полученными симулятором. Программа работает исправно.
Задача 2. В отличие от задачи 1б байты суммы должны располагаться в соответствующих столбцах строки 40h-4Fh (младший байт по адресу 4Fh). Код программы. ;ADN2.ASM ;СЛОЖЕНИЯЕ N-БАЙТНЫХ ЧИСЕЛ БЕЗ ЗНАКА ; $MOD845 CSEG ORG 000H ADN: MOV R0,#2FH; загрузка в регистр R0 адреса младшего байта первого слагаемого MOV R1,#3FH; загрузка в регистр R1 адреса младшего байта второго слагаемого MOV R2,#08H; счетчик цикла MOV 09H,#4FH;загружаем первый регистр в банке первом CLR C очистка бита переноса LOOP: MOV A,@R0; в А идет содержимое регистра РПД с адресом, находящимся в R0 ADDC A,@R1; A<=[A]+[@R1]+[C] SETB PSW.3; вызов первого банка MOV @R1,A; DEC R1; декремент R1 CLR PSW.3; переход в нулевой банк DEC R0; декремент R0 DEC R1; декремент R1 DJNZ R2, LOOP;проверка цикла программы RET; END
Результаты работы программы. Первые 3 команды аналогичны командам в задаче 1.
Команда MOV 09H,#4FH заменяет команды: Команда SETB PSW.3 подключает банк 1, устанавливая RS0=1. Команда MOV R0,#4FH загружает в R0 первого банка адрес младшего байта суммы двух слагаемых – 4F.
Команда CLR PSW.3 устанавливает RS0=0, подключая банк 0.
Следующие команды CLR C; MOV A,@R0; ADDC A,@R1 аналогичны таким же командам в задании 1. Далее команда SETB PSW.3 подключает банк 1.
Команда MOV @R1,A пересылает данные из аккумулятора – сумму двух слагаемых - в регистр R1, который выбран в качестве регистра косвенного адреса в РПД по адресу 4F устанавливается 10h.
Команда DEC R1 – декремент содержимого регистра R1 первого банка – 4Е. CLR PSW.3 - очистка RS0 – подключение банка 0. Команды DEC R0; DEC R1 – декременты содержимого регистров R0 и R1 соответственно нулевого банка. Результат первого цикла
Результат работы последнего цикла Вывод: Результаты работы программы. Они соответствуют тем, которые получили мы. Программа работает исправно. Задача 2с: Решение задачи 2, оформленное с выделением подпрограммы ADN21. Код программы: ;ADN2.ASM ;СЛОЖЕНИЯЕ N-БАЙТНЫХ ЧИСЕЛ БЕЗ ЗНАКА ; $MOD845 CSEG ORG 000H ADN: MOV R0,#2FH;основная программа; загрузка в регистр R0 адреса младшего байта первого слагаемого MOV R1,#3FH; загрузка в регистр R1 адреса младшего байта второго;слагаемого MOV R2,#08H; счетчик цикла MOV 11H,#4FH;загружаем регистр первый в банке втором CALL ADN21;вызываем подпрограмму NOP; ADN21:начало подпрограммы CLR C;текст подпрограммы LOOP: MOV A,@R0; в А идет содержимое регистра РПД с адресом, находящимся в R0 ADDC A,@R1; A<=[A]+[@R1]+[C] SETB PSW.4;вызов второго банка MOV @R1,A;работа с первым регистром второго банка; DEC R1; декремент R1 CLR PSW.4; переход из второго банка в первый DEC R0; декремент R0 DEC R1; декремент R1 DJNZ R2, LOOP; проверка цикла подпрограммы RET; END Результат работы программы: Исходные данные Загружаем регистр первый в банке втором Вызываем подпрограмму В аккумулятор идет содержимое регистра РПД с адресом, находящимся в R0
В аккумулятор идёт: A<=[A]+[@R1]+[C] Вызов второго банка Работа с первым регистром второго банка;
Декремент R1 в банке втором Декремент R0 в банке нулевом Декремент R1 в банке нулевом
Проверка цикла подпрограммы Цикл первый закончен Результат работы последнего цикла Вывод: Результаты, которые получили мы, соответствуют результатам, полученными симулятором. Программа работает исправно.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|