Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 第二次循环迭代中的NASM(装配)分段故障_Loops_Assembly_Segmentation Fault_Nasm_Cmp - Fatal编程技术网

Loops 第二次循环迭代中的NASM(装配)分段故障

Loops 第二次循环迭代中的NASM(装配)分段故障,loops,assembly,segmentation-fault,nasm,cmp,Loops,Assembly,Segmentation Fault,Nasm,Cmp,当我第二次通过循环并输入E(打算退出循环)时,我不断得到一个分段错误。如果我第一次进入E,它会很好地退出。希望我只是在这里装傻,有人可以建议一个简单的解决办法 谢谢你抽出时间 声明: segment .bss a resd 1 b resd 1 op resb 2 主要内容: 我马上就发现了几个问题/潜在问题: 1) “调用”子例程时,通常需要a)更新堆栈(在子例程中)和b)清除堆栈(返回后) 您没有向我们展示“read_int”或“read_c

当我第二次通过循环并输入E(打算退出循环)时,我不断得到一个分段错误。如果我第一次进入E,它会很好地退出。希望我只是在这里装傻,有人可以建议一个简单的解决办法

谢谢你抽出时间

声明:

segment .bss
        a resd 1
        b resd 1
        op resb 2
主要内容:


我马上就发现了几个问题/潜在问题:

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

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

2) 错误:
调用循环
。更好:
jmp循环


您可以在这里找到一些好的NASM示例:

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

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

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

2) 错误:
调用循环
。更好:
jmp循环


您可以在这里找到一些好的NASM示例:

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

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

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

2) 错误:
调用循环
。更好:
jmp循环


您可以在这里找到一些好的NASM示例:

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

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

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

2) 错误:
调用循环
。更好:
jmp循环


您可以在这里找到一些好的NASM示例:

您太棒了。我犯了一个多么愚蠢的错误。非常感谢你的帮助!只要我的新帐户允许,我会立即更新投票并进行核对。你太棒了。我犯了一个多么愚蠢的错误。非常感谢你的帮助!只要我的新帐户允许,我会立即更新投票并进行核对。你太棒了。我犯了一个多么愚蠢的错误。非常感谢你的帮助!只要我的新帐户允许,我会立即更新投票并进行核对。你太棒了。我犯了一个多么愚蠢的错误。非常感谢你的帮助!只要我的新账户允许,我会立即更新投票并核对。
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