NASM通过引用传递

时间:2016-10-21 04:23:50

标签: assembly x86 nasm

我在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

1 个答案:

答案 0 :(得分:0)

  1. 您的代码甚至无法汇编,因为终止
  2. 的位置
  3. 您的算法过于复杂,因为它可以像这样结构化。
  4. 并非这是一项要求,但保留EBP

    是个好主意
    app/config/config.yml
  5. 注意:如果您知道传递的值总是大于零,或者至少非零,则此示例甚至可以按尺寸压缩。

    否则,唯一真正的问题是没有在循环中保留ECX。