【Xiaojiaで学ぶRustプログラミング】 24. インラインアセンブリ(インラインアセンブリ)

シリーズ記事ディレクトリ

[XiaojiaでRustプログラミングを学ぶ] 1. Rustプログラミングの基礎
[XiaojiaでRustプログラミングを学ぶ] 2. Rustパッケージ管理ツールの使用
[XiaojiaでRustプログラミングを学ぶ] 3. Rustの基本的なプログラム概念
[XiaojiaでRustプログラミングを学ぶ] 】4. Rustの所有権の概念を理解する
【XiaojiaからRustプログラミングを学ぶ】5. 構造体を使用して構造化データを関連付ける
【XiaojiaからRustプログラミングを学ぶ】6. 列挙とパターンマッチング
【XiaojiaからRustプログラミングを学ぶ】7. パッケージを使用する(プロジェクトを管理するためのパッケージ)、ユニットパッケージ (Crate)、およびモジュール (Module)
[Xiaojia で Rust プログラミングを学ぶ] 8. 共通コレクション
[Xiaojia で Rust プログラミングを学ぶ] 9. エラー処理 (Error Handling)
[Xiao Jia が Rust プログラミングを学ぶをフォローする] 11. 自動テストを作成する
[Xiao Jia と Rust プログラミングを学ぶ] 12. コマンド ライン プログラムを構築する
[Xiao Jia と Rust プログラミングを学ぶ] 13. 関数型言語の機能: イテレータとクロージャ
[Xiao Jia から Rust プログラミングを学ぶ] 14. 貨物と箱について.io
[Xiaojia から Rust プログラミングを学ぶ] 15. Smart Pointer (Smart Point)
[Xiaojia から Rust プログラミングを学ぶ] 16. Fearless Concurrency
[Xiaojia から Rust プログラミングを学ぶ] 17. オブジェクト指向言語機能
[Xiaojia から Rust プログラミングを学ぶ] 18 . パターンマッチング (Patterns and Matching)
[Xiaojia で Rust プログラミングを学ぶ] 19. 高度な機能
[Xiaojia で Rust プログラミングを学ぶ] Rust プログラミングを学ぶ] 20、高度な拡張機能
【Xiaojiaで学ぶRustプログラミング】 21. ネットワークプログラミング
【Xiaojiaで学ぶRustプログラミング】 23. Cargoユーザーガイド
【Xiaojiaで学ぶRustプログラミング】 24. インラインアセンブリ(インラインアセンブリ)

序文

Rust はバージョン 1.59 でインライン アセンブリ サポートを導入しました。これは、低レベルの実行の制御、特定のマシン命令へのアクセスなど、低レベルの制御を必要とするアプリケーションに非常に役立ちます。

主な教材については「The Rust Programming Language」をご覧ください
主な教材については「Rust For Rustaceans」をご覧ください主な教材については「
The Rustonomicon 」をご覧ください


1. インラインアセンブリ(インラインアセンブリ)

1.1、アズム!

asm!global_asm!マクロを使用すると、インラインアセンブリで使用されるアセンブリ言語と命令は、対応するマシンプラットフォームに依存します。これまでのところ、Rustは次のプラットフォームのインラインアセンブリをサポートしています

  • x86 および x86-64
  • AArch64
  • RISC-V
  • ロングアーチ

サポートされていない場合、asm! マクロはエラーをトリガーします。

use std::arch::asm;

// Multiply x by 6 using shifts and adds
let mut x: u64 = 4;
unsafe {
    
    
    asm!(
        "mov {tmp}, {x}",
        "shl {tmp}, 1",
        "shl {x}, 2",
        "add {x}, {tmp}",
        x = inout(reg) x,
        tmp = out(reg) _,
    );
}
assert_eq!(x, 4 * 6);

1.2. asmマクロのパラメータ

これらのパラメータは、コンパイラがレジスタを割り当てるのに役立ちます。

  • in: 変数値がレジスタに渡されることを示します
  • out : レジスタの値が変数に書き込まれることを示します
  • inout: インスタント入力も出力されます。この方法により、同じレジスタがタスクを完了することが保証されます。
  • lateout: すべての入力が消費された後にのみ書き込まれる出力
  • inlateout: すべてのレジスタが読み取られるまで出力値は変更されません。
  • sym: asm は、スレッドローカルデータから読み取るためにシンボルの再配置を集約できます。

具体的な内容については、現時点では連載の中心ではないRust組み込み解説の部分に載せる予定です。

要約する

上記の内容はRustのインラインアセンブリについて解説したものです

おすすめ

転載: blog.csdn.net/fj_Author/article/details/132614268