Sei sulla pagina 1di 30

ASCII ADJUST AND

DECIMAL ADJUST

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

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 BCD
3

Unpacked BCD Data


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
4

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

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 10s complement

11

.model small .data b1 dw 38h b2 dw 34h .code mov ax,@data mov ds,ax mov ax,b1 mov bx,b2 sub ax,bx aas or ax,3030h end

;moving unpacked BCD into ax ;moving unpacked BCD into bx


;adjusting unpacked BCD after subtraction

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 format
15

.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 BL contains Instruction ADD AL,BL DAA

45h 45h Comment AL ; AL=AL+BL 8Ah ; 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

.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

26

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

.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

29

THANK U

30

Potrebbero piacerti anche