ascii adjust & decimal adjust

30
ASCII ADJUST AND DECIMAL ADJUST 1

Upload: techmx

Post on 19-Jul-2015

3.506 views

Category:

Entertainment & Humor


4 download

TRANSCRIPT

Page 1: Ascii adjust & decimal adjust

ASCII ADJUST AND

DECIMAL ADJUST

1

Page 2: Ascii adjust & 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

2

Page 3: Ascii adjust & decimal adjust

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

Page 4: Ascii adjust & decimal adjust

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

Page 5: Ascii adjust & decimal adjust

5

Packed BCD Data

Packed BCD representation packs two

Decimal digits into a single byte.

Example: Representing 1527

15 27h

Page 6: Ascii adjust & decimal adjust

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

Page 7: Ascii adjust & decimal adjust

Operation 2:

Clear left nibble form AL.

Operation 3:

In AH

ADD 1

Operation 4:

Set Carry and AuxilaryCarry

7

Page 8: Ascii adjust & decimal adjust

.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

Page 9: Ascii adjust & decimal adjust

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

Page 10: Ascii adjust & decimal adjust

Operation 2:

Clear left nibble in AL.

Operation 3:

Subtracts 1 from AH

Operation 4:

Set Carry and AuxilaryCarry

10

Page 11: Ascii adjust & decimal adjust

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

Page 12: Ascii adjust & decimal adjust

.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

Page 13: Ascii adjust & decimal adjust

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

Page 14: Ascii adjust & decimal adjust

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

Page 15: Ascii adjust & decimal adjust

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

Page 16: Ascii adjust & decimal adjust

.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

Page 17: Ascii adjust & decimal adjust

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

Page 18: Ascii adjust & decimal adjust

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

Page 19: Ascii adjust & decimal adjust

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

Page 20: Ascii adjust & decimal adjust

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

Page 21: Ascii adjust & decimal adjust

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

Page 22: Ascii adjust & decimal adjust

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

Page 23: Ascii adjust & decimal adjust

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

Page 24: Ascii adjust & decimal adjust

AL contains 45h

BL contains 45h

Instruction Comment AL

ADD AL,BL ; AL=AL+BL 8Ah

DAA ; Adjust packed BCD 90h

addition

24

Page 25: Ascii adjust & decimal adjust

DAA checks the rightmost nibble of AL, it

is A so add 6 to AL

Now AL = 90

25

Page 26: Ascii adjust & decimal adjust

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

Page 27: Ascii adjust & decimal adjust

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

Page 28: Ascii adjust & decimal adjust

AL contains 80h

BL contains 49h

Instruction Comment AL

SUB AL,BL ; AL=AL-BL 37h

DAS ; Adjust packed BCD 31h

Subtraction

28

Page 29: Ascii adjust & decimal adjust

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

Page 30: Ascii adjust & decimal adjust

THANK U

30