0
아래 코드는 for 루프가 문자열 반복을 중지하지 않도록합니다. 그것은 영원히 계속됩니다. 그러나 사용자가 숫자를 입력하는 기간을 계속해야합니다.for 루프 어셈블리가 영원히 계속됩니다
segment .data
integer1: times 4 db 0
heeder: db "%d", 0
strin: db "Enter the number: ", 0
segment .bss
SECTION .text
global _main
extern _scanf
extern _printf
_main:
push integer1 ; address of integer1 (second parameter)
push heeder ; arguments are right to left (first parameter)
call _scanf
add esp, 8
mov eax, 0
mov eax, [integer1]
mov ecx, eax
loop:
cmp eax, ecx
jbe for
jmp end
for:
push strin
call _printf
add esp, 4
inc eax
jmp loop
end:
코드에 문제가 생길 수 있습니까?
일반적으로 어셈블리에서 호출하는 모든 함수의 호출 규칙에서 유지되는 레지스터를 알고 있어야합니다. cdecl 호출 규칙에서 ecx는 일반적으로 보존되지 않습니다. –