問題タブ [inline-assembly]
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.
c - Cでのインラインアセンブリ:INTコマンドとC変数
C変数を使用してCコードでアセンブリを使用しようとしています。私のコードは次のようになります。
ここで、「interruptValue」はユーザーから取得した変数です(例:15または15h)。コンパイルしようとすると、次のようになります。
アセンブラエラー:'無効な命令オペランド'
割り込み値の正しいタイプがわかりません。long \ int \ short \ char \ char *を試しましたが、どれも機能しませんでした。
c - インラインアセンブリと関数の上書きにより、セグメンテーション違反が発生する
SOの誰かが、関数を「隠す」方法を尋ねる質問を投稿しました。これが私の答えでした:
しかし、問題があります:
私の最初の質問は、なぜインラインアセンブリが失敗するのかということです...それを行う正しい方法は何でしょうか?他のこと-「ret」または「retn」のコードは0x00です、そうです...それがリターンに達するまで私のコードxorのもの...それでなぜそれはSEGFAULTingなのですか?
c - インライン アセンブリを変換して x64 をサポートする
C コードで記述された小さなインライン アセンブリ コードがあります。asm は配列を通過し、必要に応じて値を別の配列からレジスタに移動します。最後に、割り込みが呼び出されます。コードは次のようになります。
これはすべて x86 で機能しますが、マイクロソフトによると、x64 はインライン アセンブリをサポートしていません。すべてを x64 をサポートするように変換するにはどうすればよいですか? 必要なものを実行するためのコンパイラ組み込みプロシージャが見つからず、外部 asm ファイルにパラメータを渡す方法がわかりません。
c - インラインアセンブリに含まれています
クラスの課題として、おもちゃのオペレーティングシステムに取り組んでいます。カーネルパニック関数の記述に問題があります。
すべてのレジスタを保存し、printfのような関数を呼び出してから、保存したレジスタを印刷してCPUを停止する必要があります。現在、マクロとして定義されています。
_panic_context
スレッドの保存されたレジスタとその他のものを含むグローバル変数です。問題はにありSAVE_REGISTERS
ます。アセンブラヘッダーファイルのどこかに定義されているマクロですが、インクルードする方法がわかりません。ファイル内の単純な#includeは明らかに機能しません。私はグーグルで面白くて絶望的なもの(アセンブラー文字列の#includeなど)を書いてみましたが、何も役に立ちませんでした。これを解決する方法はありますか?
GCCを使用しており、MIPS用にコンパイルしています(シミュレーターで実行中:-))
編集:
...SAVE_REGISTERS
で定義され.macro SAVE_REGISTERS
ます。他のアセンブリモジュールで使用されているため、Cマクロに含めることはできません。パニックは可変個引数でなければならないため、それを使用して.Sファイルを作成することはできません。または、少なくとも私はそれを行う他の方法を思い付くことができませんでした。
gcc - GCC:インラインアセンブリ-に適していますか?
それで、GCCがインラインアセンブリを実行できることを知り、2つのことを考えていました。
インラインアセンブリができることの利点は何ですか?
GCCをアセンブリコンパイラ/アセンブラとして使用してアセンブリを学習することは可能ですか?
私はいくつかの記事を見つけましたが、それらはすべて古いもので、2000年と2001年であり、それらの関連性についてはよくわかりません。
ありがとう
c - インラインアセンブラ:どのスクラッチレジスタを使用できますか?
インラインアセンブラをCのような言語の関数に挿入する場合、スクラッチに使用できるレジスタについての規則は何ですか?asm
ブロックに入る前に保存する必要のあるすべてのレジスタの値を保存するのはコンパイラの責任ですか?これらのレジスタの値をどこかに格納し、asm
ブロックを終了する前にそれらを復元するのはプログラマーの責任ですか?典型的な規則はありますか、それともこれは非常に実装固有ですか?
c - C インライン アセンブリ メモリ コピー
インライン アセンブリを C に書き込もうとしています。入力として 2 つの配列があります。必要なのは、array1 の 1 つの要素を array2 にコピーすることです。現時点では次のようになります。
セグメンテーション違反が発生するのはなぜですか?
pascal - gnu pascalでインラインアセンブリを作成するにはどうすればよいですか?
公式のリファレンスがないため、チュートリアルgpcasm.zipは1つしかありませんでし たが、tutをたどって、debianでインラインアセンブリの例を試してみると、gpcはそれに満足していませんでした。
これがコードです
別の質問ですが、gnu pascalでのインラインアセンブリに関する他の参考資料、チュートリアル、例はありますか。
ありがとう。
assembly - gcc インライン アセンブリの ljmp 構文
コードセグメント(CS)レジスタを設定するためにファージャンプを使用することを考えていました。なぜ私がこれを行っているのか、なぜセグメンテーションを扱っているのかを理解するにはしばらく時間がかかるので、それは学問的な課題と考えてください。構文を正しく理解できないようです。
Error: suffix or operands invalid for 'ljmp'
cs
別のレジスタに入れるのはばかげていることはわかっていますが、使用が機能し%0
ていなかったので試してみることにしました(ax
レジスタも機能しません)。
正常にコンパイルされるコードを見ていますが、同じだと思っていたので、これは私を夢中にさせていljmp
ます:__asm volatile ( "lcall $0x8, $far_call" );
もちろん、CS レジスタに影響を与える他のハッキーな方法を歓迎します。