0

2 回目にループを通過して 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
4

1 に答える 1

3

いくつかの問題/潜在的な問題がすぐにわかります。

1)サブルーチンを「呼び出す」ときは、通常、a)(サブルーチンで)スタックを更新し、b)(戻った後)スタックをクリアする必要があります。

「read_int」または「read_char」は表示されていませんが、おそらくそうであると思います。

2) 悪い: call loop. 良い: jmp loop.

NASM の良い例をいくつかここで見つけることができます: http://www.csee.umbc.edu/portal/help/nasm/sample.shtml

于 2015-03-30T02:05:39.153 に答える