これは 16 ビット マシン用の .com ファイルに記述されたアセンブリ コードです。これは gcd 計算用のコードであり、2 つの関数があります: calc_gcd が clac_mod を呼び出します。calc_mod は正常に動作し、calc_gcd も同様に想定していますが、calc_gcd で印刷すると、数字 2 (正解 BTW) が無限に画面に表示されます。何故ですか?
org 100h
mov ax,0006
mov bx,0002
call calc_gcd
mov ah,4Ch
int 21h
msg dw ' ','$'
calc_mod:
start_mod:
cmp ax, bx
jbe end_mod
sub ax,bx
jmp start_mod
end_mod:
ret
calc_gcd:
cmp bx,0000h
je end_gcd
call calc_mod
xor ax, bx
xor bx, ax
xor ax, bx
add ax, '0'
mov [msg], ax
mov dx,msg
mov ah,9
int 21h
call calc_gcd
end_gcd:
ret