作者tna612 (wcc)
看板ASM
标题[讨论] 关於除法DIV的一些问题
时间Sun Jan 9 00:39:14 2011
小弟是新手,最近在写一个小程式,但是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
1F:→ buganini:被除数是EDX:EAX 你是不是写成EBX:EAX了? 01/09 02:25
2F:→ buganini:或着是EDX没清掉? 01/09 02:26
3F:→ buganini:应该是EDX没清.. 01/09 02:34
4F:→ tna612:感谢楼上的解答>< 我在DIV之前加了一个"MOV EDX,0"之後 01/09 13:42
5F:→ tna612:程式就能顺利执行了^ ^ 谢谢~ 01/09 13:43