新しい X86_64 プロセッサ レジスタの名前は何ですか?
-
20-09-2019 - |
質問
このアーキテクチャでのアセンブリ用の新しいレジスタの名前はどこで確認できますか?
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
)「下位バイト」。
私はどちらかを好む傾向があります b
自分自身にサフィックスを付けます (現在の下位バイトレジスタは al
, bl
, 、など) d/w = double/word
名前と l
と誤解される可能性があります long
. 。あるいはさらに悪いことに、数字 1
, 、登録番号とは一体何なのかという疑問が生じます。 81
は :-)
古い 16 ビット レジスタの上位バイトは、多くの状況下で引き続きアクセスできます。 ah
, bh
, 、など(ただし、これは新しいものには当てはまらないようです) r8
を通して r15
レジスタ)。新しいものもいくつかあります 命令エンコーディング、 特に、 REX
プレフィックスを使用すると、元の上位バイトにアクセスできなくなりますが、他のユーザーは引き続きそれらを自由に使用できます。
さらに、いくつかの新しい SSE レジスタがあります。 xmm8
けれど xmm15
.
の eip
そして eflags
レジスタも拡張されています rip
そして rflags
(ただし、上位 32 ビットは rflags
今のところまだ未使用です)。
を参照してください。 ウィキペディアのページ そして MSDN 詳細については。
これらがサポートされているかどうか asm
特定の C コンパイラのキーワードについては、私には言えませんでした。私が行う小さなアセンブリ (年に 1 日程度になりつつあります) は、C ではなくアセンブリで行われます。
関連している:
他のヒント
のx64は、x64の8汎用を拡張 64ビットであることを登録し、新たに8を追加 64ビットレジスタ。 64ビットレジスタ 用して、「R」で始まる名前を持っています 例えばEAXの64ビット拡張され RAXと呼ばれます。新しいレジスタがあります R15を通じてR8名付けます。
下位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
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ベクトルレジスタが用意されても
あなたはウィキペディア/ X86-64 ので建築上のいくつかの基本的な情報を見つけることができますかIntelのWebサイトにアクセスしてください。
Intelのマニュアルを読んでみましょう
このアーキテクチャでのアセンブリ用の新しいレジスタの名前はどこで確認できますか。
プロセッサーのマニュアル『Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1』には次のように記載されています。基本アーキテクチャ」、例: バージョン 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 をエミュレートする「互換モード」です。
目次で「レジスタ」を検索し続けると、マニュアル内に散在する浮動小数点および 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プログラミングガイド-2.1.6システムレジスタ」にまとめられています。
良い経験的アプローチは、実行することです。 info all-registers
GDB 内: GDB でレジスタ値を出力するにはどうすればよいですか?