Daa десяткова корекція в регістрі al після складання

DAA Десяткова корекція в регістрі AL після складання

Команда daa коригує результат складання в регістрі AL двох упакованих двійково-десяткових (BCD) чисел (по одній цифрі в кожному полубайте), щоб отримати пару правильних упакованих двійково-десяткових цифр. Команда використовується услід за операцією складання упакованих двійково-десяткових чисел. Якщо результат складання перевищує 99, виникає перенесення і встановлюється прапор CF. Команда впливає на прапори SF, ZF, AF, PF і CF.


mov AL, 87h; Упаковане BCD 87

add AL, 04h; Після складання AL = 8Bh

daa; AL = 91h, тобто упаковане BCD 91


mov AL, 87h; Упаковане BCD 87
add AL, 11h; Після складання AL = 97h
daa; AL = 97h, тобто упаковане
; BCD 97 (в даному випадку
; Команда daa нічого не робить)

DAS Десяткова корекція в регістрі AL після вирахування


Команда das коректує результат віднімання в регістрі AL двох упакованих двійково-десяткових (BCD) чисел (по одній цифрі в кожному полубайте), щоб отримати пару правильних упакованих десяткових цифр. Команда використовується услід за операцією віднімання упакованих двійково-десяткових чисел. Якщо для вирахування був потрібний позику, встановлюється прапор CF. Команда впливає на прапори SF, ZF, AF, PF і CF.


mov AL, 55h; Упаковане BCD 55

sub AL, 19h; Після вирахування AL = 3Ch

das; AL = 36h, тобто упаковане BCD 36


mov AL, 55h; Упаковане BCD 55

sub AL, 15h; Після вирахування AL = 40h

das; AL = 40h, тобто упаковане

; BCD 40 (в даному випадку

; Команда das нічого не робить)

DEC Декремент (зменшення на 1)


Команда dec віднімає 1 з операнда, в якості якого можна указувати регістр (окрім сегментного) або елемент пам'яті розміром як в байт, так і в слово. Не допускається використовувати як операнд безпосереднє значення. Операнд інтерпретується як число без знака. Команда впливає на прапори OF, SF, ZF, AF і PF.


mov AX, 0FFFFh
dec AX; AX = FFFEh


mov CX, 3500h
dec CL; CX = 35FFh


; У полях даних
mem dw 68
; B програмному сегменті
dec mem mem = 67


mov EAX, 0
dec EAX; EAX = FFFFFFFFh

DIV Розподіл цілих чисел без знака


Команда div виконує ділення цілого числа без знака, що знаходиться в регістрах АХ (у разі поділу на байт) або DX: AX (в разі поділу на слово), на операнд-джерело (ціле число без знака). Розмір діленого в два рази більше розмірів дільника і залишку.
Для однобайтових операцій ділиме поміщається в регістр АХ; після виконання операції приватне записується в регістр AL, залишок - в регістр АН.
Для двобайтових операцій ділиме поміщається в регістри DX: AX (в DX - старша частина, в АХ - молодша); після виконання операції приватне записується в регістр АХ, залишок - в регістр DX.
Як операнд-дільник команди div можна указувати регістр (окрім сегментного) або елемент пам'яті; не допускається поділ на безпосереднє значення. Якщо дільник дорівнює 0, або якщо приватне не поміщається в призначений регістр, збуджується переривання з вектором 0. Команда не впливає на прапори процесора.
Команду div можна використовувати для цілочисельного ділення неупакованого двійковій-десяткового числа в регістрі АХ НЕ неупакований двійковій-десятковий дільник, якщо перед нею виконати команду aad (див. Приклад 3).


mov AX, 506; Подільне
mov BL, 50; Дільник
div BL; AL = 0Ah (приватне), AH = 06h (залишок)


; У полях даних
long dd 65537; Подільне
; В програмному сегменті
mov DX, word ptr long + 2; DX = 0001h, старша
; Частина діленого
mov AX, word ptr long; AX = 0001h, молодша
; Частина діленого
mov CX, 256; Дільник
div CX; AX = 0100h (приватне),
; DX = 0001h (залишок)


mov AX, 0807h; неупаковані BCD 87
mov DL, 09h; неупаковані BCD 9
aad; AX = 0057h = 87
div DL; AX = 0609h, тобто 9 і 6 в залишку


mov ЕАХ, 0FFFFFFFh; Молодша частина діленого
mov EDX, 0; Старша частина діленого
mov EBX, 256; Дільник
div EBX; Приватне в EAX = 000FFFFFh,
; Залишок в EDX = 000000FFh

386+ ENTER Створення стекового кадру для параметрів процедури


; Зухвала процедура
call subrl
; Підпрограма subrl
subrl proc
enter2048,0; Місце під локальні дані
. ; Робота з локальними даними
leave
ret

Схожі статті