程序集转换为int

时间:2013-04-30 14:35:50

标签: assembly calculator

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

与此同时,我发现了遗漏的东西。我忘了给al加30h。 就像在sub:

之前一样
...
ADD AL, 30h
SUB AL, 48d
...