Скачиваний:
80
Добавлен:
15.06.2014
Размер:
289.98 Кб
Скачать
ЕслиAL = AL + 6
устанавливается CF, значение флага используется при определении AL(hi).

Команда 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