问题:编写8086程序以打印16位十进制数。
例子:
Input: d1 = 655
Output: 655
Input: d1 = 234
Output:234
解释:
- 将存储的值加载到寄存器中
- 将该值除以10
- 将其余部分推入堆栈
- 增加数量
- 重复这些步骤,直到寄存器的值大于0
- 直到计数大于零
- 弹出堆栈
- 将48添加到顶部元素以将其转换为ASCII
- 使用中断打印字符
- 减少计数
程序:
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
;initilize count
mov cx,0
mov dx,0
label1:
; if ax is zero
cmp ax,0
je print1
;initilize 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
;interuppt to print a
;character
mov ah,02h
int 21h
;decrease the count
dec cx
jmp print1
exit:
ret
PRINT ENDP
END MAIN
输出:
655
注意:该程序无法在在线编辑器上运行,请使用MASM运行该程序,并使用dos框运行MASM,您可以使用任何8086仿真器运行该程序