Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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
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
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; просмотров: 523; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.169 (0.005 с.) |