このアーキテクチャのアセンブリの新しいレジスタの名前はどこで見つけることができますか?
EAX、ESP、EBXなどのX86のレジスターを参照していますが、64ビットのレジスターが必要です。
私は、Cコードを逆アセンブルするときと同じではないと思います。eではなくrを取得します。
古い32ビットレジスタは64ビット、r
レジスタ(rax
、rbx
、rsp
など)に拡張されました。
さらに、r8
からr15
までアクセスできる特別な汎用レジスタがいくつかあります。たとえば、r8d
、r8w
、およびr8b
(下の32ビットのダブルワード、16ビットのワード、8ビットのバイト)。 b
接尾辞は元のAMDの命名法ですが、「低バイト」を表すl
(小文字のL
)と書かれていることもあります。
d/w = double/Word
と一致するため、自分でb
接尾辞を好む傾向があります(現在の下位バイトレジスタはal
、bl
などです)。名前とl
がlong
と間違われる可能性があります。または、さらに悪いことに、数字1
により、一体何のレジスタ番号81
が何であるかが疑問になります:-)
古い16ビットレジスタの上位バイトは、ah
、bh
などのように、多くの状況下で引き続きアクセス可能です(ただし、新しいr8
〜r15
レジスタ)。いくつかの新しい命令エンコーディングがあります。特にREX
プレフィックスを使用するもので、元の上位バイトにアクセスできませんが、他のものはまだですそれらを自由に使用します。
さらに、新しいSSEレジスタ、xmm8
〜xmm15
]が追加されました。
eip
およびeflags
レジスタもrip
およびrflags
に拡張されました(ただし、rflags
の上位32ビットは、現時点では、まだ使用されていません)。
wikipediaページ および [〜#〜] msdn [〜#〜] を参照してください。
これらが特定のCコンパイラのasm
キーワードでサポートされているかどうかは言えません。私が行う小さなアセンブリ(および年に約1日になる)は、Cではなくアセンブリで行われます。
関連:
MSDNドキュメント には、x64レジスタに関する情報が含まれています。
x64は、x64の8つの汎用レジスタを64ビットに拡張し、8つの新しい64ビットレジスタを追加します。 64ビットレジスタの名前は「r」で始まるため、たとえばeaxの64ビット拡張はraxと呼ばれます。新しいレジスタの名前はr8〜r15です。
各レジスタの下位32ビット、16ビット、および8ビットは、オペランドで直接アドレス指定できます。これには、esiなど、下位8ビットが以前はアドレス指定できなかったレジスタが含まれます。次の表は、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
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のマニュアルを読みましょう
このアーキテクチャのアセンブリ用の新しいレジスタの名前はどこにありますか。
プロセッサのマニュアル「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で: GDBでレジスタ値を印刷する方法