ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Деление двоичных чисел.X – 16-ти разрядное делимое (XH, XL) Y – 8-ми разрядный делитель Z – 8-ми разрядное частное При выполнении делении необходимо исключить возможность деления на 0. Если для представления частного потребуется более одного слова, то возникает переполнение. Поэтому перед выполнением деления необходимо проверить условие – делитель должен быть больше старшего байта делимого.
Алгоритм деления по методу итераций с восстановлением остатка. Пример: X=19; y=4. X=00010011 Y=0100 Программная процедура деления:
AL REG R3 AH REGR4 MOV R2,#8; счетчик циклов MOV AL,#DATA; делимое MOV AH,#DATA MOV B, #DATA; делитель CLR C; обнулим флаг заёма MOV A, AH SUBB A,B JZ OV_DIV; AH=B JNC OV_DIV; AH>B LOOP: CLR C RLC A MOV AL,A; сдвиг MOV A,AH; делимого RLCA MOV AH,A
SUBB A,B MOV AH,A JNC digC1; переход на занесение 1 в Сi ADD A,B; восстановление MOV AH,A JMP M1 Digc1: ORL AL,#1 M1: DJNZ R2, LOOP ;вывод результата OV_DIV:…; вывод сообщения о переполнении
16. Арифметическая обработка многобайтных операндов в микропроцессорах и микроконтроллерах с 8 – разрядной архитектурой. 16 разрядные числа A и B: AH AL, BH, BL AL+BL=>CL; С- флаг переноса AH+BH+CL=>CH
Вычитание A=0001 0011 0000 00012 = 130116 B=0000 0101 0000 00112 = 050316
1. AL-BL
11111101 111111102 = [-0316]доп. C=1
2. AH-BH
11111010 * - последний разряд не 1 из-за заёма 00001101 = [0D16] Программная процедура сложения/вычитания: Addr_A EQU 10h Addr_B EQU 20h MOV R2, #2;обработка 2-х байтов MOV R0, #Addr_A MOV R1, #Addr_B CLR C loop: MOV A, @R0 ADD A, @R1; SUB для вычитания, ADDC и SUBB для ДД чисел MOV @R0, A inc R0 inc R1 DJNZ R2, loop
Сложение многобайтных 2-10 чисел. 1) Складываем L-байты; 2) Коррекция. (DDA – коррекция содержимого аккумулятора после сложения). 3) Складываем H-байты + возможный перенос (ADC); 4) Коррекция. Алгоритм коррекции состоит из двух шагов: а) Если AС = 1 (дополнительный перенос между тетрадами), или младшая тетрада больше 9, но меньше 15, то к ней прибавляется код 6. Возникающий перенос прибавляется к старшей тетраде; б) Если C = 1, или старшая тетрада содержит недопустимую комбинацию, то к результирующему байту прибавляется код 60h. Пример: 2985 + 4936 = 7921 1) 10000101 00110110
2) 10111011 0110 0110 \ 2 / \ 1 /
3) 00101001 1 (перенос)
4) 01110011 0110 0110 \ 7 / \ 9 /
Вычитание многобайтных 2-10 чисел. 1) Вычитаемое заменяем дополнительным кодом. 2) Добавляем уменьшаемое. 3) Проводи коррекцию. 4) Повтор шагов 1-3 для всех байтов 2-10 чисел. (-35) доп = 65 – дополнение до десятки. Пример 1. 0493 – 0298 = 0195
этот перенос указывает на то, что получен результат в прямом коде. Пример 2. 0298 – 0493 = 9805
Программная процедура вычитания ДД чисел
addr_A EQU 10h addr_B EQU 20h mov R2,#2; число повторений mov R0,#addr_A mov R1,#addr_B setb C; перенос - 1 loop: mov A,#99h addc A,#0 subb A,@R1 add A,@r0; + 1-ый операнд DA A; коррекция mov @R0,A; сохраняем результат вместо 1го операнда inc R0 inc R1 djnz R2,loop
Не нашли, что искали? Воспользуйтесь поиском:
|