web-dev-qa-db-ja.com

新しいX86_64プロセッサレジスタの名前は何ですか?

このアーキテクチャのアセンブリの新しいレジスタの名前はどこで見つけることができますか?

EAX、ESP、EBXなどのX86のレジスターを参照していますが、64ビットのレジスターが必要です。

私は、Cコードを逆アセンブルするときと同じではないと思います。eではなくrを取得します。

55
Recursion

古い32ビットレジスタは64ビット、rレジスタ(raxrbxrspなど)に拡張されました。

さらに、r8からr15までアクセスできる特別な汎用レジスタがいくつかあります。たとえば、r8dr8w、およびr8b(下の32ビットのダブルワード、16ビットのワード、8ビットのバイト)。 b接尾辞は元のAMDの命名法ですが、「低バイト」を表すl(小文字のL)と書かれていることもあります。

d/w = double/Wordと一致するため、自分でb接尾辞を好む傾向があります(現在の下位バイトレジスタはalblなどです)。名前とllongと間違われる可能性があります。または、さらに悪いことに、数字1により、一体何のレジスタ番号81が何であるかが疑問になります:-)

古い16ビットレジスタの上位バイトは、ahbhなどのように、多くの状況下で引き続きアクセス可能です(ただし、新しいr8r15レジスタ)。いくつかの新しい命令エンコーディングがあります。特にREXプレフィックスを使用するもので、元の上位バイトにアクセスできませんが、他のものはまだですそれらを自由に使用します。

さらに、新しいSSEレジスタ、xmm8xmm15]が追加されました。

eipおよびeflagsレジスタもripおよびrflagsに拡張されました(ただし、rflagsの上位32ビットは、現時点では、まだ使用されていません)。

wikipediaページ および [〜#〜] msdn [〜#〜] を参照してください。

これらが特定のCコンパイラのasmキーワードでサポートされているかどうかは言えません。私が行う小さなアセンブリ(および年に約1日になる)は、Cではなくアセンブリで行われます。


関連:

72
paxdiablo

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
94
RRUZ

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サイトにアクセスしてください。

9
brainiac

Intelのマニュアルを読みましょう

このアーキテクチャのアセンブリ用の新しいレジスタの名前はどこにありますか。

プロセッサのマニュアル「Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1:Basic Architecture」、例えば バージョン253665-053US

  • 「レジスタ」を検索
  • 最初の一致は、インデックス「3.4 BASIC PROGRAM EXECUTION REGISTER」です
  • 「3.4.1.1 64ビットモードの汎用レジスタ」の下の2つの項目

そのセクションで:

64ビットのオペランドサイズが指定されている場合:RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、R8-R15が使用可能です。 R8D-R 15D/R8-R15は、8つの新しい汎用レジスタを表します。

注意:64ビットモードは、x86-64の「通常」モードです。もう1つのメインモードは、IA32をエミュレートする「互換モード」です。

TOCで「レジスタ」を検索し続けると、マニュアルに散らばっている浮動小数点とSIMDの「数値クラッシュ」レジスタに関するセクションも見つかります。

  • 8.1.2-x87 FPUデータレジスタ(STx)
  • 9.9.2-MMXレジスタ
  • 10.2.2-XMMレジスタ
  • 14.1.1-256ビットワイドSIMDレジスタサポート(YMM)

さまざまな副作用があり、通常はそれらの効果が必要な場合(および多くの場合、 リング0が必要 )に書き込むことができない制御レジスタが多数あります。これらは、OS開発者向けの 『Volume 3 System Programming Guide-2.1.6 System Registers』にまとめられています。

経験的なアプローチとしては、info all-registers GDBで: GDBでレジスタ値を印刷する方法