第二次循环并输入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
答案 0 :(得分:3)
我发现了一些问题/潜在的问题:
1)当你“调用”子程序时,通常需要a)更新堆栈(在子程序中)和b)清除堆栈(返回后)。
你没有向我们展示“read_int”或“read_char”,但我怀疑情况可能就是这样。
2)坏:call loop
。更好:jmp loop
。
您可以在此处找到一些优秀的NASM示例:http://www.csee.umbc.edu/portal/help/nasm/sample.shtml