我需要在有符号和无符号约定中执行以下操作:x * x-y + 2,其中x是字节,y是双字。
这是我到目前为止尝试使用无符号约定,但似乎我写错了,因为它抛出了一个错误。这是什么错误?
mov al, x
mov ah, 0
mul x
mov dx, 0
sub dword ptr ax, y
add ax, 2
答案 0 :(得分:1)
1)对于无符号选项:
首先,您需要将x加载到寄存器中以对其进行平方:
mov eax,0
mov al, x
mul al
这基本上是这样做的:AX = x * x,AX是字大小,因为EAX的上半部分全部为零,然后基本上是EAX = x * x,而EAX已经是双字大小。现在我们需要减去y并添加2:
mov ebx, y
sub eax, ebx
add eax, 2
你有它!答案在EAX内部。
2)对于签名选项:
我们基本上会这样做,但是这次我们将使用CWDE指令将AX内的值扩展到EAX,同时保持符号信息正确,所以:
mov al, x
imul ax
cwde
mov ebx, y
sub eax, ebx
add eax, 2