为什么我收到垃圾值?

时间:2018-09-19 04:01:17

标签: assembly x86

我是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为什么收到垃圾值?

1 个答案:

答案 0 :(得分:1)

没有BX收到垃圾,AX收到了垃圾。您可以计算内存中的标称值,但忘记将其作为idiv的分红重新加载到DX:AX中。

请注意,DX的{​​{1}}和AX中都需要一个有效值:

IDIV
相关问题