diff --git a/1.9/ja/book/inline-assembly.md b/1.9/ja/book/inline-assembly.md index 2ac36231..01e65dae 100644 --- a/1.9/ja/book/inline-assembly.md +++ b/1.9/ja/book/inline-assembly.md @@ -3,11 +3,9 @@ - - + 極めて低レベルな技巧やパフォーマンス上の理由から、CPUを直接コントロールしたいと思う人もいるでしょう。 -Rustはそのような処理を行うためにインラインアセンブリを `asm!` マクロによってサポートしています。 -インラインアセンブリの構文はGCCやClangのものとおおまかに一致しています。 +Rustはそのような処理を行うために、インラインアセンブリを `asm!` マクロによってサポートしています。 ```ignore # // asm!(assembly template @@ -25,11 +23,11 @@ asm!(アセンブリのテンプレート -`asm` のいかなる利用もフィーチャーゲートの対象です(利用するには `#![feature(asm)]` がクレートに必要になります)、 +`asm` のいかなる利用もフィーチャーゲートの対象です(利用するには `#![feature(asm)]` がクレートに必要になります)。 そしてもちろん `unsafe` ブロックも必要です。 - - + + > **メモ**: ここでの例はx86/x86-64のアセンブリで示されますが、すべてのプラットフォームがサポートされています。 @@ -37,7 +35,7 @@ asm!(アセンブリのテンプレート -`アセンブリテンプレート` のみが要求されるパラメータであり、文字列リテラル (例: "") である必要があります。 +`アセンブリテンプレート` のみが要求されるパラメータであり、文字列リテラル (例: `""`) である必要があります。 ```rust #![feature(asm)] @@ -66,7 +64,7 @@ fn main() { -出力オペランド、入力オペランド、破壊されるデータ、オプションはすべて省略可能ですが、省略する場合は `:` を正しい数書く必要が有ります。 +出力オペランド、入力オペランド、破壊されるデータ、オプションはすべて省略可能ですが、省略する場合でも正しい数の `:` を書く必要があります。 ```rust # #![feature(asm)] @@ -126,8 +124,8 @@ fn main() { -もし本当のオペランドをここで利用したい場合、 波括弧 `{}` で利用したいレジスタの周りを囲む必要があり、また、オペランドの特有のサイズを置く必要があります。 -これは、どのレジスタを利用するかが重要になる低レベルなプログラミングで有用です。 +もし本当のオペランドをここで利用したい場合、波括弧 `{}` で利用したいレジスタの周りを囲む必要があり、また、オペランドの特有のサイズを書く必要があります。 +これは、どのレジスタを利用するかが重要となる、ごく低レベルのプログラミングで有用です。 ```rust # #![feature(asm)] @@ -146,9 +144,8 @@ result -幾つかのインストラクションは異なる値を持っている可能性のあるレジスタを変更する事があります、 -そのため、コンパイラがそれらのレジスタに格納された値が処理後にも有効であると思わないように、 -破壊されるデータのリストを利用します。 +いくつかのインストラクションは異なる値を持っている可能性のあるレジスタを変更する事があります。 +そのため、コンパイラがそれらのレジスタに格納された値が処理後にも有効であると思わないように、破壊されるデータのリストを利用します。 ```rust # #![feature(asm)] @@ -164,13 +161,13 @@ asm!("mov $$0x200, %eax" : /* 出力なし */ : /* 入力無し */ : "{eax}"); -入力と出力のレジスタは変更される可能性があることが制約によってすでに伝わっているためにリストに載せる必要はありません。 +入力と出力のレジスタは変更される可能性があることが制約によってすでに伝わっているために、リストに載せる必要はありません。 それ以外では、その他の暗黙的、明示的に利用されるレジスタをリストに載せる必要があります。 -もしアセンブリが条件コードを変更する場合レジスタ `cc` も破壊されるデータのリストに指定する必要があります。 +もしアセンブリが条件コードを変更する場合、レジスタ `cc` も破壊されるデータのリストに指定する必要があります。 同様に、もしアセンブリがメモリを変更する場合 `memory` もリストに指定する必要があります。 @@ -180,7 +177,7 @@ asm!("mov $$0x200, %eax" : /* 出力なし */ : /* 入力無し */ : "{eax}"); 最後のセクション、 `options` はRust特有のものです。 -`options` の形式は、コンマで区切られた文字列リテラルのリスト(例: `:"foo", "bar", "baz"`)です。 +`options` の形式は、コンマで区切られた文字列リテラルのリスト(例: `:"foo", "bar", "baz"`)です。 これはインラインアセンブリについての追加の情報を指定するために利用されます: @@ -193,7 +190,7 @@ asm!("mov $$0x200, %eax" : /* 出力なし */ : /* 入力無し */ : "{eax}"); 1. *volatile* - このオプションを指定することは、gcc/clangで `__asm__ __volatile__ (...)` を指定することと類似しています。 -2. *alignstack* - いくつかのインストラクションはスタックが決まった方式(例: SSE)でアラインされていることを期待しています、 +2. *alignstack* - いくつかのインストラクションはスタックが決まった方式(例: SSE)でアラインされていることを期待しています。 このオプションを指定することはコンパイラに通常のスタックをアラインメントするコードの挿入を指示します。 3. *intel* - デフォルトのAT&T構文の代わりにインテル構文を利用することを意味しています。 @@ -216,7 +213,7 @@ println!("eax is currently {}", result); -現在の `asm!` マクロの実装は [LLVMのインラインアセンブリ表現][llvm-docs] への直接的なバインディングです、 +現在の `asm!` マクロの実装は [LLVMのインラインアセンブリ表現][llvm-docs] への直接的なバインディングです。 そのため破壊されるデータのリストや、制約、その他の情報について [LLVMのドキュメント][llvm-docs] を確認してください。 [llvm-docs]: http://llvm.org/docs/LangRef.html#inline-assembler-expressions diff --git a/diff-1.6.0..1.9.0/src/doc/book/inline-assembly.md b/diff-1.6.0..1.9.0/src/doc/book/inline-assembly.md deleted file mode 100644 index f2f0a437..00000000 --- a/diff-1.6.0..1.9.0/src/doc/book/inline-assembly.md +++ /dev/null @@ -1,13 +0,0 @@ ---- a/src/doc/book/inline-assembly.md -+++ b/src/doc/book/inline-assembly.md -@@ -2,8 +2,7 @@ - - For extremely low-level manipulations and performance reasons, one - might wish to control the CPU directly. Rust supports using inline --assembly to do this via the `asm!` macro. The syntax roughly matches --that of GCC & Clang: -+assembly to do this via the `asm!` macro. - - ```ignore - asm!(assembly template -diff --git a/src/doc/book/iterators.md b/src/doc/book/iterators.md