シリーズ記事ディレクトリ
[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のインラインアセンブリについて解説したものです