Problema: escriba un programa 8086 para imprimir un número decimal de 16 bits.
Ejemplos:
Input: d1 = 655 Output: 655 Input: d1 = 234 Output:234
Explicación:
- cargar el valor almacenado en el registro
- dividir el valor por 10
- empujar 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
- revienta la pila
- agregue 48 al elemento superior para convertirlo en ASCII
- imprimir el carácter usando interrupción
- disminuye el conteo
Programa:
ALP
;8086 program to print a 16 bit decimal number .MODEL SMALL .STACK 100H .DATA d1 dw 655 .CODE MAIN PROC FAR MOV AX,@DATA MOV DS,AX ;load the value stored ; in variable d1 mov ax,d1 ;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 10 mov bx,10 ; extract the last digit 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:
655
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