2013-05-06 47 views
3
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的每一个数字我计算的,当我被人把它给我1作为剩余部分,这是为什么这发生了吗?如何使用div指令查找x86汇编中的余数?

其余应存放回啊预先登记

感谢

编辑的代码:

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 
+0

'MOV REG,0'将得到更好的写作'XOR REG,reg' – 2013-10-22 02:31:03

+1

如何无需'div':http://stackoverflow.com/问题/ 8021772/assembly-language-how-to-do-modulo GCC 4.8默认不使用div,因为它很慢:http://stackoverflow.com/questions/4361979/how-does-the-gcc-implementation-模块工作和为什么不使用 – 2015-10-20 20:30:01

回答

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 
4

不能使用al作为除数,因为该命令div假设ax到成为股息。

这是用于将通过bp7

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............| 
+0

我之前做过,但得到了整数溢出错误 – bluebk 2013-05-06 17:53:18

+0

我也设置为零以及 – bluebk 2013-05-06 17:54:31

+0

@bluebk你在哪里得到整数溢出?你不应该写任何东西给AL,因为你会覆盖ax(被分配的) – typ1232 2013-05-06 17:56:28