【问题标题】:NASM (assembly) segmentation fault on 2nd loop iteration第 2 次循环迭代中的 NASM(装配)分段错误
【发布时间】:2015-03-30 01:56:44
【问题描述】:

当我第二次通过循环并输入 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

【问题讨论】:

    标签: loops assembly segmentation-fault nasm cmp


    【解决方案1】:

    我看到了一些问题/潜在的问题:

    1) 当你“调用”一个子程序时,你通常需要 a) 更新堆栈(在你的子程序中)和 b) 清除堆栈(在你返回之后)。

    您没有向我们展示“read_int”或“read_char”,但我怀疑可能是这种情况。

    2) 不好:call loop。更好:jmp loop

    您可以在这里找到一些好的 NASM 示例:http://www.csee.umbc.edu/portal/help/nasm/sample.shtml

    【讨论】:

    • 你太棒了。对我来说这是多么愚蠢的错误。真的很感谢帮助!只要我的新帐户允许,我就会投票并核对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多