Assembly 如何使用div指令在x86汇编中查找余数?
有人能告诉我这段代码中的div-al指令有什么问题吗,所以当我调试我计算的每个bp数时,当我除以al时,它给我1作为余数,为什么会发生这种情况 其余部分应存储回ah寄存器 提前感谢 编辑代码: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
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