8086 program to Subtract 8 bit BCD numbers
03:20
ØØ Explanation :
·
Consider that a byte of data is present in the
AL register and a second byte of data is present in the BL register. We have to
subtract byte in BL with byte in AL. Using SUB instruction, we will subtract
the contents. The result is stored in the AL register. Using DAS instruction we
will make sure that the result is valid BCD.
eg. :
|
AL = 32 BCD
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
||||
BL = 17 BCD
|
–
|
||||||||||||
0
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
||||||
0
|
0
|
0
|
1
|
1
|
0
|
1
|
1
|
® invalid BCD, so
subtract 6.
|
|||||
–
|
|||||||||||||
DAS
|
0
|
1
|
1
|
0
|
|||||||||
0
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
= 15 BCD
|
·
Invalid BCD, means if digit is greater than 9.
If digit is invalid we subtract 6 to make it valid. DAS instruction (decimal
adjust after subtraction), automatically adjusts to valid BCD result.
ØØ Algorithm :
Step I : Initialize the data memory.
Step II : Get the first BCD number in AL.
Step III : Get the second BCD number in BL.
Step IV : Subtract the two BCD numbers.
Step V : Adjust result to valid BCD number.
Step VI : Display the result.
Step VII : Stop.
ØØ Flowchart : Refer
flowchart 14.
ØØ Program :
.model small
.data
a db 32H
b db 17H
.code
mov
ax, @data ; Initialize data section
mov
ds, ax
mov
al, a ;
Load number1 in al
mov
bl, b ;
Load number2 in bl
sub
al, bl ; subtract numbers and result in al
das ; adjust
result to valid BCD number
mov
ch, 02h ; Count of digits to be displayed
mov
cl, 04h ; Count to roll by 4 bits
mov
bh, al ;
Result in reg bh
l2: rol
bh, cl ; roll bl so that msb comes to lsb
mov
dl, bh ;
load dl with data to be displayed
and
dl, 0fH ; get only lsb
cmp
dl, 09 ;
check if digit is 0-9 or letter A-F
jbe
l4
add
dl, 07 ; if letter add 37H else only add 30H
l4: add
dl, 30H
mov
ah, 02 ;
Function 2 under INT 21H (Display character)
int
21H
dec
ch ;
Decrement Count
jnz
l2
mov
ah, 4cH ; Terminate Program
int
21H
end
ØØ Result :
C:\programs>tasm
sub-bcd8.asm
Turbo
Assembler Version 3.0 Copyright (c) 1988, 1991 Borland
International
Assembling
file: sub-bcd8.asm
Error
messages: None
Warning
messages: None
Passes: 1
Remaining
memory: 438k
C:\programs>tlink
sub-bcd8
Turbo
Link Version 3.0 Copyright (c) 1987,
1990 Borland International
Warning: No
stack
C:\programs>sub-bcd8
15
C:\programs>
0 comments: