問題タブ [stack-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
720 参照

assembly - armv8 アーキテクチャでハーフワード値をスタック メモリに保存中にバス エラーが発生しましたか?

スタックに保存したい 2 つのレジスタ w1 と w2 があります。完全な単語 w1 と w2 の半分をスタックに格納したいと考えています。これが私の実装です:

コンパイル時に、最初の命令は正常に実行されますが、2 番目の命令はバス エラーをスローします。これは配置の問題であることはわかっていますが、なぜこれが起こっているのかを正しく理解できませんか?

ARMv8 (64 ビット) アーキテクチャ用にコンパイルしています。

0 投票する
1 に答える
421 参照

c - POSIX C スレッドでのコンテキスト切り替え前に格納されている現在のスタック ポインター レジスタの値はどこにありますか

POSIX 環境で pthreads を使用し、コンテキスト スイッチが発生しようとしている場合、レジスタの現在の値をどこかに保存する必要があるため、レジスタの値は次のようになるためesp、このスレッドにコンテキスト スイッチを戻すときにそれを取得できます。esp別のスレッドの保存された SP 値によって上書きされます。スレッドごとに別々のレジスターを持つことは不可能だと思いespます (間違っていたら訂正してください)。そうは言っても、コンテキスト切り替えがヒットする直前に、現在のスレッドの SP 値がどのデータ構造に格納されているか知りたいですか?

struct pthread*の値からキャストされた の値を調べてみましたpthread_tが、たとえば、特定の関数を呼び出してテスト中のスレッドの現在の SP を変更しても何も変化しませんでした (つまり、テスト関数を呼び出す前後を比較します)。

0 投票する
1 に答える
1993 参照

c - アセンブリにローカル変数用のスペースを作る

そのため、extern C 関数を呼び出すアセンブリ プログラムを作成する必要があります。そこで、単純なpow関数を作成し、この C コードでアセンブリ プログラムをコンパイルしました。すべてが機能します。-Sしかし、 のコマンドから見たようgccに、コンパイラはローカル変数用のスペースを作成します。私はそれが次のようになると思いました:

3 つのローカル変数があるため、コンパイラはsubl $12, %esp. しかし、それはうまくいきsubl $16, %espます。ここに数字を 1 つだけ残したとしても、 だけ減少し16ます。今、私は自分のコードを持っています:

main.s:

func.c:

期待どおりに動作し、./main出力され25ます。sublしかし今、私はから何もしません%esp。つまり、この行を追加できますが、何も変わりません。私はインターネットを検索しましたが、私のコードが偶然に機能する可能性があり、通常はデクリメントする必要があることがわかりました%esp。ここでの私の質問は次のとおり%espですmain。それはあるべきですか、12それとも多分16ですか?