Problema: Nos dan un número decimal de 16 bits, tenemos que imprimir el número en formato octal.
Ejemplos:
Input: d1 = 16 Output:20 Input: d1 = 123 Output: 173
Explicación:
- Cargue el valor almacenado en el registro
- Divide el valor por 8 para convertirlo a octal
- Empuje el resto en la pila
- aumentar el conteo
- Repita los pasos hasta que el valor del registro sea mayor que 0
- Hasta que el conteo sea mayor que cero
- POP la pila
- Agregue 48 al elemento superior para convertirlo en ASCII
- Imprime el carácter usando la interrupción
- Disminuye el conteo
Programa:
;8086 program to convert a 16 bit decimal number to octal .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 octal; 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 8 mov bx, 8 ;divide it by 8; to convert it to octal 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
Producción:
20
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