如何在程序集中从用户中提取两个数字

时间:2014-04-14 19:52:17

标签: assembly x86

我用汇编语言编写了这个语句,但sub中有错误,如何从用户中减去两个数字?

statment2_:
  mov num2,bh
  mov num1,bl
  ADD num1 ,30h
  SUB num2 ,num1
  • num1和num2来自用户,
  • bh是1号,
  • bl是2号

2 个答案:

答案 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为什么要使用num1num2

当您说“来自用户”时,似乎您的意思是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.