汇编8086双字减法

时间:2018-02-03 22:34:54

标签: assembly subtraction emu8086

我需要在程序集8086中减去两个双字,并在屏幕上以十进制数打印结果。我需要得到这两个双字的每一个,如大小字的变量乘以大小字的变量。

我编写了这段代码,但我不确定我是否正确地使用双字和签名数字进行此操作。

两个内存位置无法减法,因此min_niz1乘以max_niz1的结果我放入了minmax1。乘法的第二个结果需要在AXDX中,我可以在此之后编写减法并在屏幕上打印,就像在我的代码中一样吗? 对于签名的单词,这也是正确的吗?

mov AX,min_niz1
mul max_niz1
push ax
push dx
pop minmax1

mov AX,min_niz2
mul max_niz2

sub DX:AX,minmax1

int 21h

1 个答案:

答案 0 :(得分:1)

  

因此将min_niz1与max_niz1相乘的结果我输入minmax1

mov AX,min_niz1
mul max_niz1
push ax
push dx
pop minmax1

字大小乘法的结果是放在堆栈中的DX:AX中的双字。好的,但单pop minmax1只会将产品的高位字放在变量 minmax1 中!

考虑将代码更改为:

mov ax, min_niz1
mul max_niz1
mov minmax1_low, ax
mov minmax1_high, dx
  

之后我可以写减法并在屏幕上打印,就像我的代码一样吗?

sub DX:AX,minmax1

此减法不是合法指示。

上,您需要一系列减法指令来计算32位数字的差异:

sub ax, minmax1_low
sbb dx, minmax1_high
  

对于签名的单词,这也是正确的吗?

处理签名字时,您可以将mul指令更改为imul指令。这将生成签名的双字,您可以如上所示减去。