2015-12-21 29 views
-3

我写了这段代码来求解一个方程。它适用于加法和乘法,但是对于减法它没有给出正确的结果。程序集:减去有符号字

;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为byte y是字,mn也是话。问题是减法,我该如何解决?

+0

_not给予正确result_是一个糟糕的问题说明。告诉我们你提供了什么样的输入,你得到了什么输出以及你的期望。另外,学习使用调试器。 – Jester

+3

你在代码中提到的'x'和'y'和'n'在哪里?请明确说明您要添加的位数,**和**会导致。“CWD”将“AX”转换为32位(扩展为“DX”)。然而,在你发布另一个CWD指令之前,你从不使用'DX'。 –

+0

我想你错误理解了'CWD'。 –

回答

1

与您的第二个CWD指令,您甚至在使用它之前消除DX的值。看看CWD做什么。

你可能根本不应该使用CWD。如果你减去另外一个双字,字的两半加载首先进入AXDX,然后减去,使用SBBDX

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