Команда AAD
•AAD (ASCII adjust before division) выполняет коррекцию неупакованного BCD-числа (делимое) в AX, перед выполнением команды деления
.data |
BYTE ? |
|
|
quotient |
|
|
|
remainder BYTE ? |
|
|
|
.code |
|
; dividend |
|
mov ax,0307h |
|
||
aad |
|
; AX = 0025h |
|
mov bl,5 |
|
; divisor |
|
div bl |
|
; AX = 0207h |
|
mov quotient,al |
|
|
|
mov remainder,ah |
|
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
61 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 |
http://ppl.yohng.com. |
|
|
Упакованные BCD-числа
•Упакованные BCD-числа (packed BCD) сохраняют 2 цифры на байт, в обычно для цифр порядке (от старших к младшим), но в обратном для байт (от младших к старшим)
•Пример, 12 345 678:
12 34 56 78
4 байта
Применяются в задачах бухгалтерского учета.
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 62 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
Команда DAA
•DAA (decimal adjust after addition) выполняет коррекцию результата суммирования двух упакованных BCD-чисел, полученного с помощью команд ADD или ADC
•Сумма должна находится в AL
•Если корректировалась младшая цифра,
устанавливается флаг AF (Auxiliary Carry flag).
•Если корректировалась старшая цифра, устанавливается флаг CF (Carry flag).
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 63 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
Пример
• Пример: BCD 35 + 48 |
• Пример: BCD 35 + 65 |
|
|||
mov al,35h |
|
|
mov al,35h |
|
|
add al,48h ; AL = 7Dh |
|
add al,65h ; AL = 9Ah |
|
||
daa |
; AL = 83h, |
daa |
; AL = 00h, |
|
|
|
CF = 0 |
|
|
CF = 1 |
|
• Пример: BCD 69 + 29 |
|
|
|
|
|
mov al,69h |
; AL = 92h |
|
|
||
add al,29h |
|
|
|||
daa |
|
; AL = 98h, CF = 0 |
|
|
|
• Задача: Реализуйте команду DAA на языке ассемблера. |
|
||||
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site |
Examples |
65 |
||
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com. |
|
|
|
Алгоритм работы DAA
If (AL(lo) > 9) or (AuxCarry = 1)
AL = AL + 6
AuxCarry = 1
Else
AuxCarry = 0
Endif
If (AL(hi) > 9) or Carry = 1
AL = AL + 60h
Carry = 1
Else
Carry = 0
Endif
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 64 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
Команда DAS
•DAS (decimal adjust after subtraction ) выполняет коррекцию результата вычитания двух упакованных BCD-чисел, полученного с помощью команд SUB или SBB
•Разность в AL
•Пример: BCD 48 - 85
mov al,48h |
; AL = |
13h |
|
sub al,35h |
CF = 0 |
||
das |
; AL = |
13h |
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 66 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
11
Алгоритм работы DAS
If (AL(lo) > 9) OR (AuxCarry = 1)
AL = AL − 6;
AuxCarry = 1;
Else
AuxCarry = 0;
Endif
If (AL > 9FH) or (Carry = 1)
AL = AL − 60h;
Carry = 1;
Else
Carry = 0;
Endif
ЕслиAL = AL - 6
устанавливается CF, который используется
для расчета AL .
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 67 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
|
Пример (2 - 2) |
|
|
• Пример: BCD 32 – 39 |
|
|
|
mov al,32h |
; AL = F9h, CF = 1 |
|
|
sub al,39h |
|
||
das |
; AL = 93h, CF = 1 |
|
|
Steps: |
|
|
|
AL = F9h |
|
|
|
CF = 1, so subtract 6 from F9h |
|
|
|
AL = F3h |
|
|
|
F3h > 9Fh, so subtract 60h from F3h |
|
||
AL = 93h, CF = 1 |
|
|
|
• Задача: Реализуйте команду DAA на языке ассемблера. |
|
||
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
69 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 |
http://ppl.yohng.com. |
|
|
|
|
|
|
|
Примеры (1 - 2) |
|
|
• Пример: BCD 48 – 35 |
|
|
|
mov al,48h |
; AL = 13h |
|
|
sub al,35h |
|
|
|
das |
; AL = 13h CF = 0 |
|
|
• Пример: BCD 62 – 35 |
|
|
|
|
|
|
|
mov al,62h |
; AL = 2Dh, CF = 0 |
|
|
sub al,35h |
|
||
das |
; AL = 27h, CF = 0 |
|
|
• Пример: BCD 32 – 29 |
|
|
|
mov al,32h |
; AL = 09h, CF = 0 |
|
|
add al,29h |
|
||
daa |
; AL = 03h, CF = 0 |
|
|
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. |
Web site Examples |
68 |
|
Мусин С.Б., каф. ПОИТ, БГУИР, 2007 |
http://ppl.yohng.com. |
|
|
|
|
|
|
The End
0000000 2 0000001 3
0000002 4
0000003 0
0000004 1
0000005 mov al, [00000000] add al, [00000001] mov ch, [00000002] mul ch
mov [000000003],ax
Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 70 Мусин С.Б., каф. ПОИТ, БГУИР, 2007 http://ppl.yohng.com.
12