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: