8086 program to convert a 16 bit decimal number to Hexadecimal - GeeksforGeeks

26 Jun, 2019
Problem: We are given a 16 bit decimal number we have to print the number in Hexadecimal format.
Examples:
Input: d1 = 999
Output: 3E7

Input: d1 = 123
Output: 7B 
Explanation:
Load the value stored into registerDivide the value by 16 to convert it to HexadecimalPush the remainder into the stackIncrease the countRepeat the steps until the value of the register is greater than 0Until the count is greater than zeroPOP the stackIf the value of top of stack is greater than 9Then add 7 more to the value so that they correspond to HEX characters A, B, C, D, E, FAdd 48 to the top element to convert it into ASCIIPrint the character using interruptDecrements the count
Load the value stored into register
Divide the value by 16 to convert it to Hexadecimal
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
If the value of top of stack is greater than 9
Then add 7 more to the value so that they correspond to HEX characters A, B, C, D, E, F
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 Hexadecimal    .MODEL SMALL    .STACK 100H    .DATA        d1 dw 999    .CODE        MAIN PROC FAR            MOV AX,    @DATA        MOV DS,    AX  ;load the value stored;in variable d1    mov ax,    d1  ;convert the value to Hexadecimal;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 16 mov bx, 16  ;divide it by 16;to convert it to Hexadecimal    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  ;compare the value;with 9 cmp dx, 9 jle continue  ;ifvalue is greater than 9;then add 7 so that after;adding 48 it represents A;for example 10 + 7 + 48 = 65;which is ASCII value of A    add dx,    7      continue:  ;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:
3E7
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
Computer Organization and Architecture
microprocessor
system-programming
Computer Organization & Architecture
microprocessor
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Architecture of 8086
Logical and Physical Address in Operating System
Computer Organization and Architecture | Pipelining | Set 1 (Execution, Stages and Throughput)
Addressing modes in 8085 microprocessor
8085 program to add two 8 bit numbers
Computer Organization | RISC and CISC
Architecture of 8085 microprocessor
Interrupts
Memory Hierarchy Design and its Characteristics
Computer Organization | Instruction Formats (Zero, One, Two and Three Address Instruction)