繁体   English   中英

第二次循环迭代中的NASM(装配)分段错误

[英]NASM (assembly) segmentation fault on 2nd loop iteration

我第二次通过循环并输入E(打算退出循环)时,始终遇到分段错误。 如果我第一次输入E,它就可以退出了。 希望我只是在这里呆呆,有人可以提出一个简单的解决方案!

谢谢你的时间。

声明:

segment .bss
        a resd 1
        b resd 1
        op resb 2

主要:

loop:

    call read_int    ;read two integers, then a char
    mov [a], eax
    call read_int
    mov [b], eax
    call read_char
    call read_char   ;takes newline input

    cmp al, 'E'      ;if char is E, then exit
    je exit

    call loop        ;start over

exit:
    dump_regs 0      ;completes, but then seg faults if the loop has run more than once

我马上就看到了几个问题/潜在问题:

1)“调用”子例程时,通常需要a)更新堆栈(在子例程中)和b)清除堆栈(返回后)。

您尚未向我们显示“ read_int”或“ read_char”,但我怀疑可能是这种情况。

2)BAD: call loop 更好: jmp loop

您可以在此处找到一些不错的NASM示例: http : //www.csee.umbc.edu/portal/help/nasm/sample.shtml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM