我正在使用8086 TASM进行装配练习,我遇到了一个问题,我现在试图解决一段时间了。主程序,一个基本的计算器添加,并减去大数字。我达到了存储用户输入的点,并尝试从中减去48,为实数十进制数。问题是它写出了表情符号和扑克符号而不是实际数字。这是阅读和打印的代码:
READNUM PROC
PUSH SI
MOV CX, 0
READ:
MOV AH, 1h
INT 21h
CMP CX, 9
JE ENDREAD
CMP AL, 0dh
JE ENDREAD
SUB AL, 48d
MOV [SI], AL
INC CX
INC SI
JMP READ
ENDREAD:
MOV byte ptr [SI], 0
MOV AX, 0e0ah
INT 10h
POP SI
CALL PRINTER
RET
READNUM ENDP
PRINTER PROC
CYCLE:
LODSB
CMP AL, 0
JE OVER
MOV AH, 14
INT 10H
JMP CYCLE
VER:
RET
PRINTER ENDP
答案 0 :(得分:2)
当您减去48(例如'0'
- > 0
)时,您将数字从字符转换为值。当您想要将数字打印到屏幕时,您需要再次添加48将它们转换回字符。
答案 1 :(得分:0)
与此同时,我发现了遗漏的东西。我忘了给al加30h。 就像在sub:
之前一样...
ADD AL, 30h
SUB AL, 48d
...