NASM에서 코딩하는 동안 문제가 발생했습니다 (이 언어는 초보자입니다). 참조로 패스를 사용하고 있습니다. [ebp-2] (카운터 역할)의 값이 [ebp + 4] (사용자 번호)의 값과 같을 때 코드가 종료되어야합니다. 나는 'checked'가 5 번 인쇄되기를 기대하지만, 출력은 무한 루프이거나 n 번 인쇄 된 'checked'입니다. NASM 참조로 전달
이
문제가 일어나고있는 내 코드의 일부이다 :find_prime:
mov ebp, esp
sub esp, 2
mov ecx, [ebp+4] ;ecx contains address of ebp+4
mov word [ebp-2], 1 ;[ebp-2] as counter
while1_begin:
mov bx, [ebp-2]
cmp bx, [ecx] ;check if bx < [ecx]
je terminate ;if bx = [ecx] terminate
mov eax, 4
mov ebx, 1
mov ecx, pri ;pri contains 'checked'
mov edx, priLen
int 80h
inc word [ebp-2]
jmp while1_begin
while1_end:
jmp terminate
add esp, 2
ret 4
'mov ecx, [ebp + 4]'는 ebp + 4의 값을 ecx로 이동합니다. 주소를 원한다면'lea ecx, [ebp + 4]'를 의미합니까? 이것이 최소의 예가 아니기 때문에 알기가 어렵습니다. 그 행에 대한 귀하의 의견은 약간 모호합니다. –
당신은 이것이 지나가다고 말하지만 당신의 단어와 코드는 가치에 의한 것임을 나타냅니다. –
'add/sub esp, 2' ... 나는 적어도 단어 4에 그것을 덧붙일 것이다. (단어 [ebp-2]에 접근하는 것은 아마 [ebp-4]라는 단어만큼이나 좋을 것이다. 경계 정렬). 정렬되지 않은 스택을 사용하는'int 80h '와 함께 작동한다면 아마 괜찮을 것이다 (또는 성능 만 아프다). – Ped7g