0

私は GreatCommonDivisor を書き、 have declare ret down を使用しますがrepeat....until、それでも に入り、repeat ..... untilゼロ除算エラーが発生することがわかりました。

ret呼び出し元の次の行のアドレスをポップすると思いますが、なぜにジャンプするのrepeat...untilですか?

ps:eax is dividend and ebx is divisor.

事前にThx。

INCLUDE Irvine32.inc

.data

.code
main PROC
mov eax, 75
mov ebx, 18
call gcd
main ENDP


gcd PROC 

or eax,eax;set SF
.IF Sign?
    Neg eax
.Else 
.EndIf

or ebx,ebx;set SF
.IF Sign?
    Neg ebx
.Else 
.EndIf

.Repeat 
mov edx, 0
div ebx

mov eax, ebx
mov ebx, edx    
.Until ebx <= 0

call WriteInt
ret
gcd ENDP

END main
4

1 に答える 1

2

mainを作った理由がわからないPROC。また、コードの順序が原因でgcd、最後に到達した後に再度実行を続行する可能性もありますmain(これを確認するために、このマシンに MASM が手元にありません)。

プログラムを次のように構成します。

INCLUDE Irvine32.inc

.data
.code

gcd PROC 
; gcd implementation omitted for brevity..
ret
gcd ENDP

main:
mov eax, 75
mov ebx, 18
call gcd

END main
于 2013-04-24T15:01:13.337 に答える