汇编:减去签名的单词

时间:2015-12-21 16:30:50

标签: assembly x86

我写了这段代码来解决方程。它适用于加法和乘法,但对于减法,它没有给出正确的结果。

;to subtract 
mov ax,00
mov bx,00 
mov dx,00
mov cx,00
mov si,offset mulx
mov di,offset sumy
mov bx,offset subr 
mov ax,word ptr [si]
cwd
sub ax,word ptr[di]
mov word ptr[bx],ax  
add si,2
add di,2
add bx,2 
mov dx,word ptr [si]
cwd
sub dx,word ptr[di]
mov word ptr[bx],dx

HLT

等式为:sum(X)*m - sum(y) / n 所有都是带符号的数字,x是字节,y是字,mn也是字。问题是减法,我该如何解决?

1 个答案:

答案 0 :(得分:1)

使用第二条CWD指令,您甚至在使用它之前就会消除DX的值。查看CWD的内容。

你可能根本不应该使用CWD。如果您要从另一个双字减去一个双字,请先将该字的两半加载到AXDX,然后使用SBB DX减去<{1}}:

  mov ax, word [si]
  mov dx, word [si+2]
  sub ax, word [di]
  sbb dx, word [di+2]
  mov word [bx], ax  
  mov word [bx+2], dx