我在NASM编码时遇到了问题(我是这种语言的初学者)。我正在使用传递参考。当[ebp-2](作为计数器)中的值等于[ebp + 4](来自用户的数字)中的值时,代码应终止。我期待'检查'要打印5次,但输出是无限循环或“检查”。打印n次。
这是我的代码中发生问题的一部分:
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
答案 0 :(得分:0)
并非这是一项要求,但保留EBP
是个好主意app/config/config.yml
注意:如果您知道传递的值总是大于零,或者至少非零,则此示例甚至可以按尺寸压缩。
否则,唯一真正的问题是没有在循环中保留ECX。