2017-01-21 6 views
3

次のように命令を符号化することが可能である場合、私は思っていた:RAXを追加x86-64では64ビットのダイレクトメモリオペランドが可能ですか?

<アドレスが> 64ビットを指し、完全な64ビットアドレスである[住所]

、値。 NASMは単純にアドレスを切り捨て、それを32ビットアドレスとしてエンコードしているようです。動作するように思われる64ビット(直接アドレスに)アドレッシングの唯一の形態である:

のMOV RAX、[QWORDアドレス]を用いNASMによってコードさ

REX.W = 1直接アドレッシングを使用したMOVの特殊なオペコードなどがあります。 add命令でREX.Wを使用すると、ターゲットアドレスが64ビット値を含むものとして解釈されますが、64ビットアドレスの指定は許可されません。しかし、別の方法があれば私は好奇心が強いです。

(ちなみに、この問題のため、私は現在、RIP相対アドレッシングを使用しています)。

ダイレクト64ビットアドレッシング形式が不可能であることを誰でも確認できますか?

+0

命令セットの参照は、インターネットからの見知らぬ人ではないことを確認できます;) – Jester

+0

Jester、私は命令セットリファレンスを見てきました。しかし、私はそれを読むのに慣れていないので、特に方法があるかもしれないことを除外することは幾分難しいです。命令セットのリファレンスには、 "[REX.W + 03/r] ADD r64、r/m64"というオプションが一覧表示されていますが、実験とアンワ(MOD R/Mバイトに関する表)に基づいて、 32ビットの指定されたメモリアドレスに格納されています(アドレスを64ビットに拡張する可能性はありません)。 – Morty

+0

@Morty通常のアドレス指定モードには、64ビットの配置または絶対値を持つモードは含まれません。このようなアドレッシングモードを提供する特別な命令のみがあります。 – fuz

答えて

3

amd64アーキテクチャでは、特殊な場合を除いて64ビットの配置でアドレッシングモードはありません。代わりに、rip相対アドレス指定を使用してください。バイナリが2 GB未満の場合は問題ありません。

+0

OPが正しく**そこにあると言われます** ** mov rax、moffs64ですので、回避策は必要ありません。あなたのポイントを説明するために別のレジスタを使用する必要があります;) – Jester

+0

@Jesterああ、確かに。 – fuz

+0

ダイレクト64ビットアドレスを使用して_addition_(移動だけでなく)を行うことができないことを確認してうれしいです。 – Morty

関連する問題