このアーキテクチャでのアセンブリ用の新しいレジスタの名前はどこにありますか?
EAX、ESP、EBX などの X86 のレジスタについて言及していますが、64 ビットで使用したいと考えています。
Cコードを逆アセンブルしたときと同じではないと思います.eの代わりにrを取得します.
このアーキテクチャでのアセンブリ用の新しいレジスタの名前はどこにありますか?
EAX、ESP、EBX などの X86 のレジスタについて言及していますが、64 ビットで使用したいと考えています。
Cコードを逆アセンブルしたときと同じではないと思います.eの代わりにrを取得します.
MSDN ドキュメントには、x64 レジスタに関する情報が含まれています。
x64 は、x64 の 8 つの汎用レジスタを 64 ビットに拡張し、8 つの新しい 64 ビット レジスタを追加します。64 ビット レジスタの名前は "r" で始まります。たとえば、eax の 64 ビット拡張は rax と呼ばれます。新しいレジスタには、r8 から r15 までの名前が付けられます。
各レジスタの下位 32 ビット、16 ビット、および 8 ビットは、オペランドで直接アドレス指定できます。これには、以前は下位 8 ビットがアドレス指定できなかった esi などのレジスタが含まれます。次の表に、64 ビット レジスタの下位部分のアセンブリ言語名を示します。
64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax | eax | ax | al
rbx | ebx | bx | bl
rcx | ecx | cx | cl
rdx | edx | dx | dl
rsi | esi | si | sil
rdi | edi | di | dil
rbp | ebp | bp | bpl
rsp | esp | sp | spl
r8 | r8d | r8w | r8b
r9 | r9d | r9w | r9b
r10 | r10d | r10w | r10b
r11 | r11d | r11w | r11b
r12 | r12d | r12w | r12b
r13 | r13d | r13w | r13b
r14 | r14d | r14w | r14b
r15 | r15d | r15w | r15b
古い 32 ビット レジスタは 64 ビットに拡張され、r
レジスタ ( rax
、rbx
などrsp
) が続きます。
さらに、いくつかの追加の汎用レジスタr8
があり、r15
(たとえば)および(それぞれ下位 32 ビット ダブルワード、16 ビット ワード、および 8 ビット バイト) としてアクセスすることもできます。接尾辞はオリジナルのAMD 命名法ですが、「下位バイト」を表す(小文字の) と書かれている場合があります。r8d
r8w
r8b
b
l
L
名前と一致し、. b
_ または、さらに悪いことに、数字、一体レジスタ番号が何であるかを疑問視するようになります:-)al
bl
d/w = double/word
l
long
1
81
古い 16 ビット レジスタの上位バイトにはah
、bh
、 などのように、多くの状況で引き続きアクセスできます (ただし、これは新しいr8
スルーr15
レジスタには当てはまらないようです)。いくつかの新しい命令エンコーディング、特にREX
プレフィックスを使用するものがありますが、それらは元の上位バイトにアクセスできませんが、他のものはまだそれらを自由に使用できます。
さらに、新しい SSE レジスタもいくつかxmm8
ありますxmm15
。
eip
andeflags
レジスタも and に拡張されましたrip
(ただしrflags
、 の上位 32 ビットはrflags
今のところまだ使用されていません)。
詳細については、ウィキペディアのページとMSDNを参照してください。
これらが特定の C コンパイラのキーワードでサポートされているかどうかはasm
わかりません。私が行っている小さなアセンブリ (そして年に 1 日程度になっています) は、C ではなくアセンブリで行われます。
関連している:
X64 は、32 ビットの汎用レジスタを次のように拡張します。
EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP
X64 では、次の 64 ビット汎用レジスタも追加されます。
R8, R9, R10, R11, R12, R13, R14, R15
さらに、SSE は X64 仕様の一部であるため、xmm0-xmm15 ベクトル レジスタも使用できます。
Wikipedia/X86-64でアーキテクチャに関する基本的な情報を見つけるか、Intel の Web サイトにアクセスしてください。
インテルのマニュアルを読んでみよう
このアーキテクチャでのアセンブリ用の新しいレジスタの名前はどこにありますか?
プロセッサのマニュアル「Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture」(バージョン 253665-053US など) :
そのセクションで:
64 ビットのオペランド サイズが指定されている場合: RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、R8-R15 が使用可能です。R8D-R 15D/R8-R15 は、8 つの新しい汎用レジスタを表します。
注意: 64 ビット モードは x86-64 の「通常」モードです。もう1つのメインモードは、IA32をエミュレートする「互換モード」です。
TOC で「レジスタ」を検索し続けると、浮動小数点および SIMD 用の「数値破砕」レジスタに関するセクションがマニュアルに散らばっています。
さまざまな副作用があり、それらの効果が必要でない限り(そしてしばしばリング 0 が必要な場合)、通常は書き込むことができない制御レジスタがさらに多くあります。これらは、OS 開発者向けの「Volume 3 System Programming Guide - 2.1.6 System Registers」にまとめられています。
良い経験的アプローチはinfo all-registers
、GDB で実行することです: How to print register values in GDB?