問題タブ [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 に挿入する方法はありますか?
古い borland DOS コンパイラを使用していた頃、次のようなことができたのを覚えています。
現在、これを行うためのセミプラットフォームに依存しない方法はありますか? BIOS 呼び出しを行う必要があるため、asm コードを使用せずにこれを行う方法があれば、それも同様に役立ちます。
assembly - GCC インライン アセンブラ、レジスタ サイズの混在 (x86)
次のアセンブラ警告を取り除く方法を知っている人はいますか?
コードは x86、32 ビットです。
コンパイルすると、次の(非常に有効な)警告が表示されます。
私が探しているのは、%0 の下位 16 ビット サブレジスタにアクセスしたいことをコンパイラ/アセンブラに伝える方法です。バイト サブレジスタ (この場合は AL と AH) へのアクセスについても知っておくとよいでしょう。
既に "q" 修飾子を選択しているため、コンパイラは EAX、EBX、ECX、または EDX を使用する必要があります。コンパイラーがサブレジスターを持つレジスターを選択する必要があることを確認しました。
特定のレジスター (およびそのサブレジスター) を使用するように asm コードに強制できることはわかっていますが、レジスター割り当てのジョブはコンパイラーに任せたいと考えています。
c - Turbo C の C コードにアセンブリ コードを含める方法は?
アセンブリ コード行を C プログラムに含める方法は?
ターボ c では、いくつかの .c ファイルのプロジェクトにアセンブリ コード ファイル (.asm) を追加する可能性はありますか?
iphone - IPhone でインライン アセンブリを行うにはどうすればよいですか?
それはどのように行われますか?どのような手順を踏む必要がありますか? また、考慮すべき落とし穴や落とし穴はありますか?
c - アロカの実装
D、C、C++ などの言語でインライン x86 アセンブラーを使用して alloca() を実装するにはどうすればよいですか? 少し変更したバージョンを作成したいのですが、まず、標準バージョンがどのように実装されているかを知る必要があります。コンパイラは非常に多くの最適化を実行するため、コンパイラから逆アセンブリを読み取ることは役に立ちません。正規の形式が必要なだけです。
編集:難しい部分は、これに通常の関数呼び出し構文を持たせたいことだと思います。つまり、ネイキッド関数または何かを使用して、通常の alloca() のように見せます。
編集 # 2: ああ、なんと、フレーム ポインターを省略していないと推測できます。
c - GCCインラインアセンブリ:ブロックの外側のラベルにジャンプ
MSVCでインラインアセンブリを使用する場合、このMSDNの記事で説明されているように、C /C++コードのラベルを参照することでアセンブリブロックの外にジャンプできます。
GCCでインラインアセンブリを使用する場合、そのようなことはできますか?
これが私が達成しようとしていることの例です:
ただし、コンパイラは「external_label」が定義されていないことについて文句を言います。
c - C の ASM で -std=c99 のエラーが発生する
私は今、プロジェクトをコンパイルしようとし-std=c99
ていますが、今のところ理解できないエラーに直面しています。この行:
C99 でのみ次のエラーが表示されます。
これが何を意味するのかを理解するのに役立つ手がかりは大歓迎です。私はこの行を書いていません。また、その目的が何であるかを理解することもできません。
gcc - 64 ビット整数の cmpxchg の例
次のように、32ビットの比較と交換のためにi686アーキテクチャでcmpxchg(比較と交換)を使用しています。
(編集者注: 元の 32 ビットの例にはバグがありましたが、問題はそれについてではありません。このバージョンは安全であり、おまけとして x86-64 でも正しくコンパイルされます。 また、インライン asm はそうではないことに注意してください。これには必要または推奨;または、 i486 および x86-64__atomic_compare_exchange_n
の古い__sync_bool_compare_and_swap
作業int32_t
int64_t
.しかし、この質問は、インライン asm でそれを行うことについてです.)
64ビットの比較とスワップのx86_64アーキテクチャに相当するものは何ですか?
c - コンパイラ検索レジスタを使用したCでのアセンブリの埋め込み
アセンブリコードをC/C ++プログラムに埋め込む場合、プッシュ命令でレジスタを保存することで(または、サポートされているコンパイラのclobberリストを指定して)レジスタのクロバリングを回避できます。
アセンブリをインラインに含めていて、クラバリングされたレジスタをプッシュおよびポップするオーバーヘッドを回避したい場合、gccにレジスタを選択させる方法はありますか(たとえば、有用な情報がないことがわかっているレジスタ)。