ascii adjust & decimal adjust
TRANSCRIPT
ASCII ADJUST AND
DECIMAL ADJUST
1
INSTRUCTIONS
AAA - ASCII Adjust After Addition
AAS - ASCII Adjust After Subtraction
AAM - ASCII Adjust After Multiply
AAD - ASCII Adjust Before Division
DAA - Decimal Adjust for Addition
DAS - Decimal Adjust for Subtraction
2
INTRODUCTION
The PC supports BCD format,
Uses of BCD
1)No loss of precision
2)Simpler to perform arithmetic
operation on small values from keyboard
BCD can be stored in two way:
Unpacked BCD
Packed BCD3
4
Unpacked BCD representation contains only
One decimal digit per byte. The digit is
stored in the least significant 4 bits; the
most significant 4 bits are not relevant to
the value of the represented number.
Example: Representing 1527
01 05 02 07h
Unpacked BCD Data
5
Packed BCD Data
Packed BCD representation packs two
Decimal digits into a single byte.
Example: Representing 1527
15 27h
ASCII Adjust After Addition
Adjusts the result of the addition of two unpacked BCD values to create a unpacked BCD result.
Operation 1:
In AL
If rightmost nibble is >9 (ie)A to F
Or AuxilaryFlag=1
ADD 6 to rightmost nibble
6
Operation 2:
Clear left nibble form AL.
Operation 3:
In AH
ADD 1
Operation 4:
Set Carry and AuxilaryCarry
7
.model small
.data
b1 dw 38h
b2 dw 34h
.code
mov ax,@data
mov ds,ax
mov ax,b1 ;moving unpacked BCD into ax
mov bx,b2 ;moving unpacked BCD into bx
add ax,bx
aaa ;adjusting unpacked BCD after addition
or ax,3030h
end
8
ASCII Adjust After Subtraction
Adjusts the result of the subtraction of two unpacked BCD values to create a unpacked BCD result.
Operation 1:
a)AAS checks the rightmost nibble in AL
b)If rightmost nibble is >9 (ie)A to F
Or AuxilaryFlag=1
c)Then Subtract 6 from rightmost nibble
9
Operation 2:
Clear left nibble in AL.
Operation 3:
Subtracts 1 from AH
Operation 4:
Set Carry and AuxilaryCarry
10
Example :
d1 contains 34h , d2 contains 38h of byte type
Ax AF
Mov AL, d1 ; 0034
Sub AL, d2; 00fc 1
AAS ; ff06 1
since the rightmost digit of AL is c , subtract 6 from AL
Subtract 1 from ah, set AF and CF flags
The answer is -4, is ff06 in 10’s complement 11
.model small
.data
b1 dw 38h
b2 dw 34h
.code
mov ax,@data
mov ds,ax
mov ax,b1 ;moving unpacked BCD into ax
mov bx,b2 ;moving unpacked BCD into bx
sub ax,bx
aas ;adjusting unpacked BCD after subtraction
or ax,3030h
end
12
ASCII Adjust After Multiplication
For multiplication and Division of ASCII numbers require that the numbers first be converted into unpacked BCD format.
Before Multiplication First clear the leftmost nibble in each Byte.
After Multiplication
AAM performs the following operations
1) Divides AL value by 10 (0AH)
2) Stores Quotient in AH
3) Store Remainder in AL
13
Example:
AL contains 35H and CL contains 39H
Instruction comment AX CL
and CL, 0Fh; Convert CL to 09 0035 39
and AL,0Fh; Convert AL to 05 0005 09
mul CL; Multiply AL by CL 002D
AAM ; Convert to unpacked 0405
BCD
Or AX,3030h; covert to ASCII 3435
14
Mul operation generates 45 (002Dh) in
AX
AAM divides this value by 10, so quotient
of 04 in AH and remainder of 05 in AL
OR instruction converts the unpacked
BCD to
ASCII format15
.model small
.data
b1 dw 39h ; 9 in ASCII Format
b2 dw 35h ; 5 in ASCII Format
.code
mov ax,@data
mov ds,ax
mov ax,b1 ;AX=0039h
and AL,0fh ;AX=0009h
mov bx,b2 ;BX=0035h
and bl,0fh ;BX=0005h
mul bx ;AX=002Dh
aam
or ax,3030h
end
16
ASCII Adjust Before Division
AAD allows for a 2-Byte Dividend in AX. The divisor can be only a single Byte(0-9)
Before Division First clear the leftmost nibble in each Byte.
Operations done by AAD instruction
1) AAD multiplies the AH by 10(0Ah).
2) Then adds the product to AL and clears the AH
After AAD , division is performed.
17
Example:
AX contains 3238 (28) - Dividend
CL contains 37 (07) – Divisor
Instruction comment AX CL
and CL,0Fh; convert to unpacked 3238 07
BCD
and AX,0F0Fh; convert to unpacked 0208 07
BCD
AAD; convert to binary 001C
div CL; divide by 7 0004
18
AAD multiplies the AH by 10(0Ah)
Adds the product 20(14h) to the AL and
clears
the AH
The result is 001Ch, is hex
representation of decimal 28
Then division is performed.
Remainder stored in AH, Quotient stored
in AL
19
model small
.data
b1 dw 3238h ; 28 in ASCII Format
b2 db 37h ; 7 in ASCII Format
.code
mov ax,@data
mov ds,ax
mov ax,b1 ;AX=3238h
and ax,0f0fh ;AX=0208h
mov cl,b2 ;CL=37h
and cl,0fh ;CL=07h
aad ; AX= 001c
div cl ; AX=0004
or ax,3030h; AX=3034
end
20
Decimal Adjust
To adjust the result of packed BCD
numbers which stored in AL.
DAA - Decimal Adjust for Addition
DAS - Decimal Adjust for Subtraction
21
Decimal Adjust for Addition
DAA performs the following operations:
Operation 1:
If AL is >9 (ie) A to F
or AuxilaryCarry=1 then
ADD 6 to AL
Set AuxilaryCarry=1
22
Operation 2:
If AL contains value > 99
or Carry=1 then
ADD 60 to AL and set Carry =1
Otherwise
AuxilaryCarry=0 ,carry=0
23
AL contains 45h
BL contains 45h
Instruction Comment AL
ADD AL,BL ; AL=AL+BL 8Ah
DAA ; Adjust packed BCD 90h
addition
24
DAA checks the rightmost nibble of AL, it
is A so add 6 to AL
Now AL = 90
25
26
.model small
.data
d1 dw 45h ;moving 45 as packed BCD
d2 dw 45h ;moving 45 as packed BCD
.code
mov ax,@data
mov ds,ax
mov ax,d1
mov bx,d2
add ax,bx
daa ;adjusting the packed BCD after addition
end
Decimal Adjust for Subtraction
Operations performed by DAS :
If AL is >9 (ie) A to F
or AuxilaryCarry=1 then
Subtract 6 from AL
Set Carry=1
Otherwise
AuxilaryCarry=0 ,carry=0
27
AL contains 80h
BL contains 49h
Instruction Comment AL
SUB AL,BL ; AL=AL-BL 37h
DAS ; Adjust packed BCD 31h
Subtraction
28
29
.model small
.data
d1 dw 57h
d2 dw 48h
.code
mov ax,@data
mov ds,ax
mov ax,d1 ;moving 45 as packed BCD
mov bx,d2 ;moving 45 as packed BCD
sub ax,bx
das ; adjusting the packed BCD after subraction
end
THANK U
30