0

我正在使用 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  
4

2 回答 2

2

当您减去 48(例如'0'-> 0)时,您会将数字从字符转换为值。当您想将数字打印到屏幕上时,您需要通过再次添加 48 将它们转换回字符。

于 2013-04-30T14:45:28.253 回答
0

与此同时,我找到了丢失的东西。我忘了给 al 加上 30h。就像 sub 之前这样:

...
ADD AL, 30h
SUB AL, 48d
...
于 2013-04-30T14:44:44.767 回答