2013-05-06 93 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