blu*_*ebk 5 x86 assembly 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
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这段代码中的 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 ax, bp
mov bl, 7
div bl
mov al, 0
Run Code Online (Sandbox Code Playgroud)
您不能用作al
除数,因为该命令div
假定ax
为被除数。
bp
这是除以的示例7
mov ax,bp // ax is the dividend
mov bl,7 // prepare divisor
div bl // divide ax by bl
Run Code Online (Sandbox Code Playgroud)
这是 8 位除法,所以余数将存储在ah
. 结果在al
.
澄清一下:如果你写信给al
你,你会部分覆盖ax
!
|31..16|15-8|7-0|
|AH.|AL.|
|AX.....|
|EAX............|
Run Code Online (Sandbox Code Playgroud)
编辑后的代码:
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
Run Code Online (Sandbox Code Playgroud)