8086 Program to unpack the packed BCD number
13:01
ØØ Explanation :
· A digit BCD number is available in register AL. We have to unpack this BCD number i.e. we have to separate the BCD digits. e.g : If the number = 92 H then in unpack form the two digits will 02 H and 09 H. i.e. we have to mask the lower nibble, first and rotate four times to the right to get the MSB digit. Then to get the LSB digit mask the upper nibble. Display the result. Masking lower nibble means ANDing the number with OF0 to get MSB.
ØØ Algorithm :
Step I : Initialize the data memory.
Step II : Load number into register AL.
Step III : Mask the lower nibble.
Step IV : Rotate 4 times left to make
; MSB digit = LSB.
; MSB digit = LSB.
Step V : Display the digit.
Step VI : Load number in AL.
Step VII : Mask upper nibble.
Step VIII : Display the result.
Step IX : Stop.
ØØ Flowchart : Refer flowchart 6.
ØØ Program :
.model small
.data
a db 92H
.code
mov ax, @data ; Initialize data section
mov ds, ax
mov al, a ; Load number1 in al
and al, 0f0h ; mask lower nibble
rcr al, 4 ; rotate it 4 times to right to make it 09h
mov bh, al ; store result in bh
call disp ; display the upper nibble
mov al, a ; Load number1 in al
and al, 0fh ; mask upper nibble
mov bh, al ; store result in bh
call disp ; display the lower nibble
mov ah, 4cH ; Terminate Program
int 21H
disp proc near
mov ch, 02h ; Count of digits to be displayed
mov cl, 04h ; Count to roll by 4 bits
l2: rol bh, cl ; roll bl so that msb comes to lsb
mov dl, bh ; load dl with data to be displayed
and l, 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, 02h
mov dl, ' '
int 21h
endp
ret
end
ØØ Result :
C:\programs>tasm unpack.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: unpack.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 437k
C:\programs>tlink unpack
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International
Warning: No stack
C:\programs>unpack
09 02
C:\programs>
0 comments: