3. BCD (Binary-Coded Decimal) code :
- Four-bit code that represents one of the ten decimal digits from 0 to 9.
can not use hex digits A-F
- Let us take an Example:
Consider 10 as a decimal number
Its BCD will be 0001 0000 ( not the binary Form 1010)
- BCD can be stored in two way
- Unpacked BCD
- Packed BCD
Packed BCD
- Packed BCD data are stored as two digits per byte
E.g. 17d is stored as 17= 0001 0111
Unpacked BCD
- Unpacked BCD data are stored as one digit per byte
E.g. 17d is stored as 01 07 = 0000 0001 0000 0111
4. ASCII Code (American Standard Code for Information Interchange)
- ASCII code is a 7 bit code which assigns a binary value to letters, numbers &
other characters from 0 to 127 in decimal (00-7F in hexadecimal)
- In this code number 0 through 9 are represented as 30 through 39
- letters A through Z are represented as 41H through 5AH
- letters a through z are represented as 61H through 7AH
Example: 1234 is stored as 31 32 33 34H
ASCII for 1 is 31H, for 2 is 32H etc.
5. BCD Arithmetic
- 8086 Microprocessor allows arithmetic manipulation of BCD data
- This is accomplished by instructions that adjust the numbers for BCD
arithmetic
- used to correct the BCD addition/subtraction
- These instructions do not take any operands. The operand is assumed to
be in AL.
• DAA (decimal adjust after addition) instruction follows BCD addition.
• DAS (decimal adjust after subtraction) instruction follows BCD subtraction
6. DAA: Decimal adjust after addition
Syntax: DAA ; AL←AL converted for BCD addition
- This instruction is used to convert the result of addition of two packed BCD numbers to a valid
BCD number.
- The instruction should be issued after an ADD, ADC instruction. The result has to be only in AL
register.
- On execution of this instruction,
- If the lower nibble in AL register is greater than 9 or AF is set, then 6 will be added to the
AL register. & the AF is set.
- If the upper nibble in AL register is greater than 9 or CF is set, then 60 will be added to the
AL register. & the CF is set.
Flags affected: AF, CF, PF, ZF
Examples:
MOV AL,53H ; AL<-53 BCD = 01010011
MOV CL, 29H; CL<-29 BCD= 00101001
ADD AL, CL ; AL<-7CH = 01111100
DAA ; add 6 to AL because C>9
; AL←7C = 01111100
+6 = 00000110
; AL←82 (BCD)= 10000010
7. DAS: Decimal adjust after subtraction
- This instruction is used to convert the result of subtraction of two packed BCD numbers
to a valid BCD number.
- The instruction should be issued after an SUB, SBB instruction. The result has to be
only in AL register.
- On execution of this instruction,
- if the lower nibble in AL register is greater than 9 or AF is set, then 6 will be
subtracted from the AL register. & the AF is set.
- If the result of the upper nibble in AL register is greater than 9 or CF is set, then 60
will be subtracted from the AL register. & the CF is set.
Examples:
MOV AL,32H ; Load 32 BCD = 00110010
MOV CL, 17H; Load 17 BCD = 00010111
SUB AL, CL ; AL←32H-17H = 00011010
; AL←1BH
DAS ; subtract 6 from AL because B>9
; AL←1B-6 = 00011010
; - 00000110
; AL←15 (BCD) = 00010101
8. ASCII Arithmetic
- The ASCII arithmetic instructions function with ASCII-coded numbers.
- These numbers range in value from 30H to 39H for the numbers 0-9.
- There are four instructions used with ASCII arithmetic operations:
• AAA (ASCII adjust after addition)
• AAD (ASCII adjust before division)
• AAM (ASCII adjust after multiplication)
• AAS (ASCII adjust after subtraction)
9. AAA - ASCII adjust after addition
- The AAA instruction can be used after addition to get the correct result in unpacked BCD
form.
- The AAA instruction works only on AL register. The AAA instruction converts the
resulting content of AL to unpacked BCD form.
- On execution,
- this instruction clears the upper nibble of AL, AH register should be cleared before
adding.
- If lower nibble of AL>9 or AF=1, then it add 6 to the AL register, add 1 to AH register &
set AF & CF = 1.
- In all other cases, the upper nibble of AL is cleared.
- This instruction does not give exact ASCII codes of the SUM, but they can be obtained
by adding 3030H to AX.
E.g. ADD AL,CL ; Before : AL=34H, ASCII 4
; CL=38H, ASCII 8
; After: AL=6CH
AAA ; AL = C + 6
; AL = 12
; AH=01
; AL=02
10. AAS: ASCII adjust after subtraction
- The AAS instruction can be used after subtraction to get the correct result in
unpacked BCD form.
- The AAS instruction works only on AL register. The AAS instruction converts
the resulting content of AL to unpacked BCD form.
- The adjustment is needed only if the result is negative.
Example: SUB AL, CL ; Before : AL=38H, ASCII 8; CL=32H, ASCII 2
; After: AL=06
AAS ; AL=06 (BCD )
; AX=0006
11. AAD: ASCII adjust before division
- The instruction AAD can be used to convert the two unpacked BCD digit in AH & AL register
to the equivalent binary number in the register AL. i.e. AAD instruction adjusts the number
in AX before dividing two unpacked decimal numbers.
- This instruction should be issued before the division (DIV) instruction.
- The division instruction will place the quotient in AL register & remainder in the AH
register. The upper nibble of the AH & AL are filled with zero.
- It works as follows: Multiply AH by 10 (0AH) & add it to AL & set AH to 0
Example: AAD ; Before: AH= 02H , AL=07H, CL=07H
; After: AX=001BH
DIV CL
12. AAM: ASCII adjust after multiplication
- The instruction AAM can be used to convert the result of multiplication of two
valid unpacked BCD number in AX.
- This instruction should be issued after multiplication instruction.
- It works as follows: AL is divided by 10, quotient is stored in AH & remainder in
AL
Example: MUL CL ; Before : AL=04H, CL=06H
; After : AX=0018H (24D)
AAM ; AX=02 04 (unpacked BCD form)
Hinweis der Redaktion
Decimal numbers can be represented in one of the two forms: BCD and ASCII
In BCD, each of the digit of the decimal number is represented by its binary form in 4 bits. In this code each decimal digit is represented by a 4-bit binary number. BCD is a way to express each of the decimal digits with a binary code. But in BCD code only first ten of these are used (0000 to 1001).The remaining six code combinations i.e. 1010 to 1111 are invalid in BCD.
BCD information is stored in either packed or unpacked form(lower 4 bits represent number others are 0
In unpacked BCD a byte is used to contain a number. i.e contains only one digit per byte
In packed BCD a byte has two BCD numbers i.e packs two decimal digits in a byte
This is a standard set of characters understood by all computers, Each character is assigned a unique 7-bit code. they are mainly used for representing characters, such as characters "a" to "z" and number "0" to "9"
To perform mathematical operations on BCD and ASCII. Operate with BCD data, used to correct the BCD addition/subtraction
Used after add or adc to adjust the result back in to packed bcd format. Daa instruction adjust the result to bcd
DAA performs the following operations. The daa instruction works as follows:
Used after sub or sbb to adjust the result back in to packed bcd format.
Converts the product available in AL in to unpacked BCD