当你试着把两个数字相加时,它会显示一个字母或一个符号。
.plus:
mov eax, [num1]
sub eax, 0
mov ebx, [num2]
sub ebx, 0
add eax, ebx
sub eax, 0
mov [num3], eax
jmp .result
字符串
我本来想在1 + 1处写2,但上面写的是b。
1条答案
按热度按时间6qftjkof1#
当你输入1时,你的程序接收到49,这是属于字符“1”的ASCII码。不知何故,你已经知道你必须把这个字符代码转换成十进制数字的值。减去48(49和1之间的差异)是有序的,但遗憾的是,您编写了
sub eax, 0
,而不是所需的sub eax, 48
,我们更喜欢使用单引号将其写成sub eax, '0'
。由于上述原因,
add eax, ebx
的总和计算为49 + 49,产生98,这恰好是小写字母字符'b'的ASCII。从ASCII到数字[0,9]的转换需要减去48,而从数字[0,9]到字符的转换需要加上48。您也错误地使用了减法!
字符串
最后的
add eax, '0'
转换只有在加法产生范围[0,9]内的和时才是正确的。显然,如果和大于9,则必须处理范围[10,18]内的2位数结果。