我是Assembly的新手,经过大量调试后找不到该bug的来源。
我具有以下汇编功能。目的是计算x的值。所有输入变量的类型均为short并具有值:
a = 3
b = 1
c = 1
d = 1
e = -2
f = 5
函数是:
void calculate_x()
{
__asm
{
mov ax, c
imul e
mov numer, ax
mov ax, b
imul f
sub numer, ax
mov ax, a
imul e
mov denom, ax
mov ax, b
imul d
sub denom, ax
mov bx, numer
idiv bx
mov x, ax
}
}
我得到x = 0
的结果,但是应该是x = 1
。
设置断点时,问题似乎出在倒数第三行mov bx, numer
的最后。这导致bx
收到垃圾值,但应该收到-7
的值。
bx
为什么收到垃圾值?
答案 0 :(得分:1)
没有BX
收到垃圾,AX
收到了垃圾。您可以计算内存中的标称值,但忘记将其作为idiv
的分红重新加载到DX:AX中。
请注意,DX
的{{1}}和AX
中都需要一个有效值:
IDIV