Programa 8086 para convertir un número decimal de 16 bits a hexadecimal

Problema: Nos dan un número decimal de 16 bits, tenemos que imprimir el número en formato hexadecimal.

Ejemplos:

Input: d1 = 999
Output: 3E7

Input: d1 = 123
Output: 7B 

Explicación:

  1. Cargue el valor almacenado en el registro
  2. Divide el valor por 16 para convertirlo a Hexadecimal
  3. Empuje el resto en la pila
  4. aumentar el conteo
  5. Repita los pasos hasta que el valor del registro sea mayor que 0
  6. Hasta que el conteo sea mayor que cero
  7. POP la pila
  8. Si el valor de la parte superior de la pila es mayor que 9
  9. Luego agregue 7 más al valor para que correspondan a los caracteres HEX A, B, C, D, E, F
  10. Agregue 48 al elemento superior para convertirlo en ASCII
  11. Imprime el carácter usando la interrupción
  12. Disminuye el conteo

Programa:

;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
  
;if
value 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

Producción:

3E7

Nota: el programa no se puede ejecutar en un editor en línea, use MASM para ejecutar el programa y use dos box para ejecutar MASM, puede usar cualquier emulador 8086 para ejecutar el programa

Publicación traducida automáticamente

Artículo escrito por andrew1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *