0

書く代わりに

ifndef X64
  mov eax, dest
else
  mov rax, dest
endif

マシンのターゲットに応じて正しいレジスタを自動的に使用する 1 行のコードでそれを記述する方法はありますか?

4

2 に答える 2

1

どのアセンブラと環境を使用していますか? ターゲットに応じて eax と rax に展開されるマクロを定義できるかもしれません。

私の知る限り、ほとんどのx86-64ツールチェーンのデフォルトモードは、実行可能ファイルが常にアドレス空間の下位4GBに配置されることです。(ただし、共有ライブラリはより高いアドレスに配置できます。) この仮定はほとんど常に当てはまり、コード サイズの削減に役立ちます。また、 に書き込むと、eaxの上位 32 ビットが暗黙的にクリアされますrax。したがって、(おそらく) eax32 ビットと 64 ビットの両方で安全に書き込むことができます...

于 2012-10-31T12:15:42.917 に答える
0

それを行うためにたくさんのマクロを書くことができると思いますが、すべての操作が64ビットと32ビットのレジスタ間で互換性があるわけではないため、それがどれほど効果的かはわかりません...実際には人々が行うことではありません...

于 2012-10-31T12:09:46.770 に答える