如何使用div指令在x86汇编中查找余数?

时间:2013-05-06 17:27:21

标签: assembly x86 division

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 al指令有什么问题,所以我正在调试我计算的每个bp数,当我除以al时它给我1作为余数,为什么会发生这种情况?

剩下的应该存回啊寄存器

提前谢谢

编辑代码:

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

2 个答案:

答案 0 :(得分: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............|

答案 1 :(得分: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