私は次のプログラムコンパイルしよう:だから、無効な命令サフィックス
demo.s: Assembler messages:
demo.s:7: Error: invalid instruction suffix for `mov'
:私は、このエラーメッセージが表示されます
.globl _start
.section .text
_start: movw $-23, %ax
movl $-1, %ebx # -1 = $0xffffffff
movw %ax, %ebx
movl $1, %eax
movl $0, %ebx
int $0x80
を
movw %ax, %ebx
しかし、事は、私は私がやっているとは思わないということであることは完全に間違っているプラスそれは目に使用例を示しますproglemのルートはここにあります電子書籍私は現在読んでいます:Professional Assembly Language by Richard Blum (2005)
'movw%ax、%ebx'は意味がありません。それは「** 16ビット**レジスタAXを** 32ビット**レジスタEBXに移動する」です。あなたはどうしますか?ゼロ拡張( 'movzwl%ax、%ebx')?記号拡張( 'movswl%ax、%ebx')?作者が 'movw%ax、%bx'を意図していないと確信していますか?私はソースでの使用からはわかりません。 –
'movw%ax、%ebx' - それは本の中で示されている通りです。 –
その本のErrataセクションで判断すると、その中の情報源について少し慎重になるでしょう。説明された各事柄については、書籍なしで独自のソースを書くことができることを確かめてください。デバッガではまったく同じように動作します(すべてのレジスタ、メモリ、フラグの変更を監視してください)。基本的に、ASM開発者のための正式な書籍は1つだけです。手順リファレンスガイド。それ以外のものは自転車のヘルパーホイールのようなもので、あるレベル以上になるまで非常に役立ちます。それは負担です。次の有用なASMの本は、ターゲットプラットフォームの詳細なアーキテクチャーまたは数学理論のブックです。 – Ped7g