我在NASM中編碼時遇到了問題(我是這種語言的初學者)。我正在使用通過引用。當[ebp-2](用作計數器)中的值等於[ebp + 4](用戶的編號)中的值時,代碼應該終止。我期待'檢查'打印5次,但輸出是無限循環或打印n次'檢查'。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]一樣好,我會保留'esp' 4個字節邊界對齊)。雖然如果現在使用未對齊堆棧的「int 80h」,那麼它可能是好的(或者它只會影響性能)。 – Ped7g