5
mov eax, 0
mov ebx, 0
mov edx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov eax, 0
mov ebx, 0
mov bp, bp
mov al, 7
div al

谁能告诉我这段代码中的 div 指令有什么问题,所以当我调试我计算的每个 bp 数时,当我除以 al 时,它给我 1 作为余数,为什么会发生这种情况?

其余的应该存储回 ah 寄存器

预先感谢

编辑代码:

mov eax, 0
mov ebx, 0
mov edx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov eax, 0
mov ebx, 0
mov ax, bp
mov bl, 7
div bl
mov al, 0
4

2 回答 2

4

您不能al用作除数,因为该命令div假定ax为被除数。

这是除以的bp示例7

mov ax,bp // ax is the dividend
mov bl,7  // prepare divisor
div bl    // divide ax by bl

这是 8 位除法,所以是的,余数将存储在ah. 结果在al.

澄清:如果你写信给al你部分覆盖ax

|31..16|15-8|7-0|
        |AH.|AL.|
        |AX.....|
|EAX............|
于 2013-05-06T17:49:18.690 回答
1

编辑代码:

mov eax, 0
mov ebx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov eax, 0
mov ebx, 0
mov edx, 0
mov ax, bp
mov bx, 7
div bx
mov esi, edx 
mov eax, 0
于 2013-05-06T18:20:52.240 回答