我用汇编语言编写了这个语句,但sub
中有错误,如何从用户中减去两个数字?
statment2_:
mov num2,bh
mov num1,bl
ADD num1 ,30h
SUB num2 ,num1
答案 0 :(得分:1)
鉴于最新信息,我们在变量“num1”和“num2”中有两个来自用户的字符 - '2'和'1'。你可能想做的是......
mov bl, num1
mov bh, num2
sub bl, '0'
sub bh, '0'
; now we've got two numbers we can do arithmetic on
sub bh, bl
; now we need a character we can print
add bh, '0'
; and print it
mov al, bh
int 29h
; or other method of your choice
这仅适用于单位数字。对于多位数(或负数),需要更复杂的东西 - 查看右侧列出的示例......
你不能做的是减去两个内存操作数(变量)。至少有一个'必须是注册或即时价值。
答案 1 :(得分:1)
如果您已在寄存器中有数字,则无需将它们存储到内存中。 IDK为什么要使用num1
和num2
。
当您说“来自用户”时,似乎您的意思是ASCII数字。所以你实际上有bl = n1 + '0'
(其中'0'
是ASCII字符0
的ASCII码。)
减法取消此偏移量,因为(n2+'0') - (n1+'0') = n2 - n1
:
sub bl, bh ; bl = integer difference, -9 .. +9
如果要将该整数转换回数字的ASCII码,则(假设减法结果为正且在0..9范围内,因此可以用单个ASCII数字表示):
add bl, '0' ; convert a 0..9 integer to the ASCII code for that digit.