書く代わりに
ifndef X64
mov eax, dest
else
mov rax, dest
endif
マシンのターゲットに応じて正しいレジスタを自動的に使用する 1 行のコードでそれを記述する方法はありますか?
書く代わりに
ifndef X64
mov eax, dest
else
mov rax, dest
endif
マシンのターゲットに応じて正しいレジスタを自動的に使用する 1 行のコードでそれを記述する方法はありますか?
どのアセンブラと環境を使用していますか? ターゲットに応じて eax と rax に展開されるマクロを定義できるかもしれません。
私の知る限り、ほとんどのx86-64ツールチェーンのデフォルトモードは、実行可能ファイルが常にアドレス空間の下位4GBに配置されることです。(ただし、共有ライブラリはより高いアドレスに配置できます。) この仮定はほとんど常に当てはまり、コード サイズの削減に役立ちます。また、 に書き込むと、eax
の上位 32 ビットが暗黙的にクリアされますrax
。したがって、(おそらく) eax
32 ビットと 64 ビットの両方で安全に書き込むことができます...
それを行うためにたくさんのマクロを書くことができると思いますが、すべての操作が64ビットと32ビットのレジスタ間で互換性があるわけではないため、それがどれほど効果的かはわかりません...実際には人々が行うことではありません...