[討論] 關於除法DIV的一些問題

看板ASM (組合語言)作者 (wcc)時間14年前 (2011/01/09 00:39), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/3 (看更多)
小弟是新手,最近在寫一個小程式,但是compile過之後都因為有錯誤而中斷 (已經在執行了),問題是出在除法這一行(DIV),程式執行到這行之後就過不去了~~ 目前對DIV的觀念是 得到的商數存在EAX,而餘數則是在EDX, 這個想法是對的嗎?? 還麻煩各位大大解惑,感激不盡 > < .data V1 DWORD ? V2 DWORD ? TMP DWORD ? Str1 Byte "Input the first value",0 Str2 Byte "Input the second value",0 Str3 Byte " ",0 .code main PROC MOV EDX,OFFSET str1 CALL WriteString CALL ReadDec MOV V1,eax MOV EDX,OFFSET str2 CALL WriteString CALL ReadDec MOV V2,EAX PUSH V1 PUSH V2 CALL gcdrecurcive CALL WriteDec EXIT main ENDP gcdrecurcive PROC PUSH EBP MOV EBP,ESP SUB ESP,4 MOV EBX,[EBP+8] MOV EAX,[EBP+12] DIV EBX // <--------------這行之後就無法執行了 MOV EAX,EBX MOV EBX,EDX CMP EBX,0 JE L2 JMP L1 L1:PUSH EAX PUSH EBX CALL gcdrecurcive L2:MOV ESP,EBP POP EBP RET 8 gcdrecurcive ENDP END main P.S.程式目的是取最大公因數,而我的做法則是取餘數來找。 副程式是用stack frame的做法。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.218.13

01/09 02:25, , 1F
被除數是EDX:EAX 你是不是寫成EBX:EAX了?
01/09 02:25, 1F

01/09 02:26, , 2F
或著是EDX沒清掉?
01/09 02:26, 2F

01/09 02:34, , 3F
應該是EDX沒清..
01/09 02:34, 3F

01/09 13:42, , 4F
感謝樓上的解答>< 我在DIV之前加了一個"MOV EDX,0"之後
01/09 13:42, 4F

01/09 13:43, , 5F
程式就能順利執行了^ ^ 謝謝~
01/09 13:43, 5F
文章代碼(AID): #1DA9Cr87 (ASM)
文章代碼(AID): #1DA9Cr87 (ASM)