Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
DIV BX ; Dx:Ax/Bx, результат Ax,Dx.Содержание книги
Поиск на нашем сайте
DIV MEM_BYTE; AX/MEM_byte, результат Al,Ah
Пример1: необходимо выполнить деление 514/2, D=2d=2h, C=514d=202h. .data C dw 514 D db 2 .code
mov bl,D div bl; Ax/Bl; 10 0000 0010/10; 2d*256d=512d<=514d
2*256=512<514
Пример2: необходимо выполнить деление 2 293 830/35, D=35d=23h, C=2293830d=0023 0046h. .data C dd 2 293 830; 00230046h D dw 35; 0023h .code
mov bx,D div bx; Dx:Ax/Bx=00230046h/0023h; 35d*65536d=2 293 760d<2 293 830d
35*65536=2 293 760<2 293 830
Деление двоичных чисел со знаком Для деления чисел со знаком предназначена команда: – IDIV <делитель>;
Команда выполняет целочисленное деление со знаком АХ, DX:AX или EDX:ЕАХ (в зависимости от размера делителя) на делитель (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно.
Для этой команды верно всё то же, что и для команды DIV.
Арифметические операции над двоично-десятичными числами (BCD числами) В приложениях, в которых числа должны быть большими и точными необходимо использовать BCD –числа. Отдельных команд сложения, вычитания, умножения и деления BCD-чисел нет. Складывать и вычитать можно BCD-числа как в упакованном формате, так и в неупакованном, а делить и умножать можно только неупакованные BCD-числа. Микропроцессор хранит BCD-числа в двух форматах (рис. 1): – упакованный формат – каждый байт содержит две десятичные цифры. Десятичная цифра представляет собой двоичное значение в 4 бита. Диапазон представления десятичного упакованного числа в одном байте составляет от 0 до 99; – неупакованный формат – каждый байт содержит одну десятичную цифру в четырёх младших битах. Старшие четыре бита имеют нулевое значение и называются зоной. Диапазон представления десятичного неупакованного числа в одном байте составляет от 0 до 9. Рис. 1. Представление BCD- чисел.
Для того, чтобы описать BCD- числа в программе необходимо использовать директивы описания и инициализации данных – db и dt. К примеру (dt - 10 байт): .data Per_1 db 2,3,4,5,6,8,2;02 03 04 05 06 08 02 Per_2 dt 9875645; 00 00 00 00 00 00 98 75 64 05 Неупакованные BCD-числа Пример1: Результат сложения не больше 9. 6+3 6=0000 0110 + 3=0000 0011 = 9=0000 1001 – результат правильный. Пример2: Результат сложения больше 9. 06=0000 0110 + 07=0000 0111 = 13=0000 1101 – результат неправильный. Правильный результат в неупакованном BCD-формате: 0000 0001 0000 0011 1 3
Пример описания BCD-чисел: Oper_1 DB '295';BCD-число 592 в ASCII- формате Oper_2 DB 2,9,5;BCD-число 592 в неупакованном формате Oper_3 DB 2h,59h;Упакованное BCD-число 5902 Oper_4 DT 592;Упакованное BCD- число 00 00 00 00 00 00 00 00 59 02, занимающее 10 байт в памяти (старший байт отведён для кодирования знака: 80h (1000 0000b)- отрицательное число, 00h- положительное).
Для коррекции операции сложения двух однозначных неупакованных BCD-чисел в системе команд микропроцессора существует специальная команда: ААА; ASCII-коррекция после сложения для представления в символьном виде. Команда работает с регистром AL и анализирует значение его младших четырёх разрядов (младшей тетрады). Если это значение меньше 9, то флаг cf сбрасывается в 0, и осуществляется переход к следующей команде. Если это значение больше 9, то выполняются следующие действия: 1) к содержимому младшей тетрады al прибавляется 6; Флаг cf устанавливается в 1, тем самым фиксируется перенос в старший разряд для того, чтобы его можно было учесть в последующих действиях.
Пример 1: просуммировать 06+07. 0000 0110 + (add) 0000 0111 = al= 0000 1101
После команды ааа: 1) к результату прибавляется 6d 0000 1101b + 0000 0110b = 0000 0011b, то есть al=0000 00112 =310 2) флаг cf установится в 1, то есть запомнится перенос в старший разряд 3) чтобы учесть перенос из предыдущего разряда необходимо использовать команду сложения adc. Пример: сложим два неупакованных BCD-числа 71+54=125
Вычитание неупакованных BCD-чисел Пример1. 6=0000 0110 - 4=0000 0100 = 2=0000 0010 – результат верный Пример2. 6=0000 0110 - 7=0000 0111 = -1=1111 1111 – результат неверный.
Правильный результат должен быть 0000 10012 =910. При этом предполагается заём из старшего разряда, то есть cf=1. Для корректировки результата существует команда: AAS – коррекция результата вычитания для представления в символьном виде. Команда работает с регистром al, анализируя его младшую тетраду: если её значение меньше 9, то флаг cf сбрасывается в 0, и управление передаётся следующей команде. Если значение тетрады в al больше 9, то команда aas выполняет следующие действия: 1) из содержимого младшей тетрады регистра al вычитается 6; 2) обнуляется старшая тетраду регистра al;
|
||||||||||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 396; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.137.13 (0.005 с.) |