.dataで宣言された文字のバイト配列があります
chars db 'spipopd'
そして、この配列のベースインデックスを指すようにrdiを設定しました
mov rdi, chars
ある時点で、配列の文字を8ビットレジスタに入れたいと思います。void
以下の最初のステートメントは有効な値を生成しますが、2番目のステートメントはgdbコマンドを入力するとr9bに含まれますprint $r9b
。
mov al, [rdi] ; produces valid value in gdb
mov r9b, [rdi] ; r9b = void, according to gdb
レジスタr8bからr15bのいずれも同じ効果があります。私が理解しているように、とは両方ともal
8r9b
ビットですが、なぜ一方が機能し、もう一方が機能しないのですか?私の勘では、どちらも8ビットのサイズですが、微妙な違いがあり、私にはわかりません。
Intelのドキュメントには次のように記載されています。
「REXプレフィックスは、64ビットのオペランドサイズまたは参照レジスタR8〜R15を生成するために使用されます。」
これは私の問題に関連していますか?