English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

如下
我還是找不出明確原因
gcd PROC

mov edx,OFFSET Msn2; address of the prompt
call WriteString
call crlf

pushad
;/*迴圈do while*/*/
mov ecx,B


.WHILE B>0
mov eax,A ;/*eax=A被除數


cdq ;/*延伸除法

idiv B ;A/B ,eax=商數 ,edx=餘數

mov ebx,edx ;/*A%B*/ /*ebx=reminder*/

cmp ebx,0

mov ecx,B ;/*A=B*/
mov A,ecx

mov B,ebx ;/*B=reminder*/

mov gcd1,ebx
.ENDW

popad
謝謝

2006-05-31 00:04:12 · 2 個解答 · 發問者 小蘋 1 in 電腦與網際網路 程式設計

2 個解答

首先
上面WHILE回圈改成 DO WHILE 迴圈較好
實做就是
JA:
mov eax,A ;/*eax=A被除數


cdq ;/*延伸除法

idiv B ;A/B ,eax=商數 ,edx=餘數

mov ebx,edx ;/*A%B*/ /*ebx=reminder*/

cmp ebx,0 ;/如果餘數零就跳出回圈,重要,避免下一次除數為零

jle Lx
mov ecx,B ;/*A=B*/
mov A,ecx

mov B,ebx ;/*B=reminder*/

mov gcd1,ebx
cmp B,0
jle Lx ;//if B<=0,跳出回圈

popad
基本上
就是除法要注意溢位和除數為零的問題
另外
迴圈要很小心
通常無窮回圈編譯器是檢查不出來的

2006-05-31 00:25:00 · answer #1 · answered by 醬爆口水男 2 · 0 0

個人寫了一點 GCD 演算法的東東在下述文章的意見裡。
有興趣的可以去看一下。
http://tw.knowledge.yahoo.com/question/question?qid=1607052408879

2007-07-02 20:04:25 · answer #2 · answered by ? 7 · 0 0

fedest.com, questions and answers