Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何使用div指令在x86汇编中查找余数?_Assembly_X86_Division - Fatal编程技术网

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

Assembly 如何使用div指令在x86汇编中查找余数?,assembly,x86,division,Assembly,X86,Division,有人能告诉我这段代码中的div-al指令有什么问题吗,所以当我调试我计算的每个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 bp, bp mov al, 7 div al 不能使用al作为除数,因为命令div假定ax

有人能告诉我这段代码中的div-al指令有什么问题吗,所以当我调试我计算的每个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 bp, bp
mov al, 7
div al

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

这是将
bp
除以
7

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
这是8位除法,因此余数将存储在
ah
中。结果显示为
al

澄清一下:如果您向
al
写入,则部分覆盖了
ax

mov ax,bp // ax is the dividend
mov bl,7  // prepare divisor
div bl    // divide ax by bl
编辑代码:

|31..16|15-8|7-0|
        |AH.|AL.|
        |AX.....|
|EAX............|

@bluebk从哪里得到整数溢出?如果要将bp除以某个值,则不应向al写入任何内容,因为您将在已编辑的命令中覆盖ax(被除数)i get integer over flow at div bl指令code@bluebk那么这可能是因为你的结果不符合
al
。如果
bp
大于0x700,您将得到溢出的整数。例如,我的bp是9E8,那么我应该使用bx而不是bl吗?@blubk您不能将9b8除以7。结果大于0xff。
mov reg,0
最好写为
xor reg,reg
如何不需要
div
:GCC 4.8默认情况下不使用div,因为它速度较慢:
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