Problem: We are given a 16 bit decimal number we have to print the number in binary format
Examples:
Input: d1 = 16
Output: 10000
Input: d1 = 7
Output: 111
Explanation:
- Load the value stored into register
- Divide the value by 2 to convert it to binary
- Push the remainder into the stack
- Increase the count
- Repeat the steps until the value of the register is greater than 0
- Until the count is greater than zero
- POP the stack
- Add 48 to the top element to convert it into ASCII
- Print the character using interrupt
- Decrements the count
Program:
;8086 program to convert a 16 bit decimal number to binary
.MODEL SMALL
.STACK 100H
.DATA
d1 dw 16
.CODE
MAIN PROC FAR
MOV AX,
@DATA
MOV DS,
AX
;load the value stored;
in variable d1
mov ax,
d1
;convert the value to binary;
print the value
CALL PRINT
;interrupt to exit
MOV AH,
4CH INT 21H
MAIN ENDP
PRINT PROC
;initialize count
mov cx,
0 mov dx, 0 label1:;
if
ax is zero
cmp ax,
0 je print1
;initialize bx to 2 mov bx, 2
;divide it by 2
;to convert it to binary
div bx
;push it in the stack
push dx
;increment the count
inc cx
;set dx to 0
xor dx,
dx
jmp label1
print1:
;check if count
;is greater than zero
cmp cx,
0 je exit
;pop the top of stack
pop dx
;add 48 so that it
;represents the ASCII
;value of digits
add dx,
48
;interrupt to print a
;character
mov ah,
02h int 21h
;decrease the count
dec cx
jmp print1
exit : ret
PRINT ENDP
END MAIN
|
Output:
10000
Note: The program cannot be run on an online editor, please use MASM to run the program and use dos box to run MASM, you might use any 8086 emulator to run the program