私は、コードのこの部分を持っている:のx86アセンブラ、追加の奇妙な行動とサブ
openFileToRead:
sub sp,4
add sp,4
ret
その後、私は自分のコード
call openFileToRead
で持っているそして今、我々は問題があります。この追加する前に、サブあり、すべての作品を、私はここのように追加してサブを変更する場合:
openFileToRead:
add sp,4
sub sp,4
ret
すべての地獄の休憩緩いです。レットでは、彼はいくつかの奇妙な場所と記憶に飛び乗る。これらの2つのラベルには違いはありませんが、そこにはあります。何故ですか?
Intel CPUを搭載したWindows XPでmasmを使用してコンパイルすると、16ビットのリンカが使用されます。
あなたがそれに追加するときに 'sp'はオーバーフローしていませんか? –
デバッガを使ってプログラムを実行し、 'sp'の値を確認してください。それが最高の価値を持っているなら、4を追加するとオーバーフローします。 – AusCBloke
いいえ、これは私の小さなスタックではできません。わずか200ワードです。私はデバッグ中の動作を見ていました。spの動きは期待通りです。スタック上の値に問題があります。追加し、次にサブです。 – Andna