x86汇编两数相加异常:输出字符而非预期数字求助
x86汇编两数相加输出字符而非数字的问题排查与解决
问题根源
你看到输出b的核心原因是直接对数字的ASCII字符值进行了运算:
- 输入的数字字符
'1'对应的ASCII码值是49,两个'1'相加得到49+49=98; - ASCII码98对应的字符正是小写字母
b,这和你看到的输出完全匹配; - 你代码里的
sub eax, 0没有任何实际作用,既没完成字符到数值的转换,也不影响运算结果。
修复方案
要实现正确的数字计算并输出数字字符,需要完成两步转换:
- 字符转数值:将输入的数字字符减去
'0'(ASCII码48),得到对应的十进制数值; - 数值转字符:计算完成后,将结果加上
'0',转回对应的数字字符,再执行输出操作。
修正后的代码片段
.plus: mov eax, [num1] sub eax, '0' ; 把字符转成十进制数值 mov ebx, [num2] sub ebx, '0' ; 同上 add eax, ebx ; 数值相加 add eax, '0' ; 把结果转回数字字符 mov [num3], eax jmp .result
内容的提问来源于stack exchange,提问作者Me88_88
相关产品推荐
相关产品推荐

