При добавлении вызовов WriteDec и CRLF в рамках рекурсивной процедуры он входит в бесконечный цикл.
- Моя мотивация заключается в том, чтобы печатать каждый раз значения eax и crlf сразу после сдвига вправо.
- При достижении 0 кажется, что есть бесконечные рекурсивные вызовы, потому что он продолжает печатать 0.
- У меня сложилось впечатление, что это не должно быть так, поскольку ZF = 1 в первый раз, eax = 0, и поэтому он переходит к пропуску метки, которая завершает рекурсию.
Следующий код вызывает бесконечный цикл, когда EAX register = 0
.code
MAIN PROC
mov ecx, 10
L1:
push 10
call f1
call exitProcess
main ENDP
f1 PROC
push ebp
mov ebp, esp
sub esp, 4
mov eax, [ebp+8]
shr eax, 1
call WriteDec
call CRLF
mov [ebp-4], eax
jz skip
call f1
skip:
mov eax, [ebp+8]
call WriteDec
call CRLF
; ** comment out ** mov ebp, [ebp]
mov esp, ebp
pop ebp
ret 4
f1 ENDP
END MAIN
Ожидаемый результат:
5
2
1
0
1
2
5
10