我在哪裏可以找到在此架構上組裝的新寄存器的名稱?新的X86_64處理器寄存器的名稱是什麼?
我指的是X86中的寄存器,如EAX,ESP,EBX等,但我希望他們在64位。
我不認爲它們與拆解我的C代碼時相同,我得到r而不是e。
我在哪裏可以找到在此架構上組裝的新寄存器的名稱?新的X86_64處理器寄存器的名稱是什麼?
我指的是X86中的寄存器,如EAX,ESP,EBX等,但我希望他們在64位。
我不認爲它們與拆解我的C代碼時相同,我得到r而不是e。
舊的32位寄存器已擴展到64位,r
寄存器(rax
,rbx
,rsp
等)。
此外,有一些額外的通用寄存器r8
通過r15
,其也可以作爲(例如)r8d
,r8w
和r8b
(低32位雙字,16位字和8位字節訪問分別)。
舊的16位寄存器的高字節是仍然可以訪問,在很多情況下,爲ah
,bh
,等等,但是這似乎並不爲r8
通過r15
寄存器的情況。有一些新的指令編碼,特別是那些使用前綴REX
,無法訪問這些高字節,但其他人仍然可以自由使用它們。
另外,還有一些新的SSE寄存器,xmm8
雖然xmm15
。
的eip
和flags
寄存器也被擴展到rip
和rflags
。
查看wikipedia page和MSDN瞭解更多詳情。
對於特定的C編譯器,關於asm
關鍵字是否支持這些,我不能說。什麼小總成我(和它變得大約一天一年)在組裝,而不是C.做
什麼是「R」? – 2014-10-09 11:21:28
@ int80,不知道。也許'e'意味着擴展和'r'意思是_really_擴展:-) – paxdiablo 2014-10-09 11:43:26
我知道「e」代表擴展(從16位)。但r?但你的答案只是邏輯%) – 2014-10-09 13:40:02
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找到關於架構的一些基本信息,或者訪問英特爾網站。
MSDN documentation包含有關x64寄存器的信息。
64延伸64的8個通用寄存器 爲64位,並增加了8個新 64位寄存器。 64位寄存器 的名稱以「r」開頭,因此對於 示例,eax的64位擴展名爲 ,稱爲rax。新的寄存器是 ,命名爲r8到r15。
每個寄存器的低32位,16位和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
這很清楚,但是對於其他8個通用寄存器,低8位模式似乎對我的intel x86-64 cpu上的'r8'〜'r15'無效。 ''rax'''rdx'支持在'高'模式下訪問8位,意味着使用'ah'〜'dh'訪問16位模式中最重要的8位。 – 2016-06-01 04:28:26
@EricWang:你是否嘗試過使用'mov ah,r8b'或其他東西?您不能使用帶REX前綴的高8寄存器。 'REX mov ah,0'是'mov spl,0'等等(當AH有REX前綴時,AH/CH/DH/BH的編碼表示爲'spl/bpl/sil/dil'在機器代碼中) – 2017-11-23 11:50:20
我在哪裏可以找到新的寄存器的名字在此架構組件。
在處理器手冊「英特爾64和IA-32體系結構軟件開發人員手冊卷1:基本體系結構」,例如version 253665-053US:
在該節:
如果指定一個64位操作數大小是:RAX,RBX,RCX, RD X,RDI,RSI,RBP,RSP,R8-R15可供選擇。 R8D-R 15D/R8-R15代表8個新的通用寄存器。
提醒:64位模式是x86-64中的「正常」模式。另一個主要模式是模擬IA32的「兼容模式」。
如果你繼續尋找在TOC「註冊」,你還會發現浮點和SIMD分散手冊的有關章節「號粉碎」寄存器:
還有更多的控制寄存器會產生各種副作用,除非您想要這些效果(通常需要響鈴0),否則通常無法寫入。這些內容在「第3卷系統編程指南 - 2.1.6系統寄存器」中進行了概述,這些內容更多用於OS開發人員。
一個好的經驗方法是在GDB運行info all-registers
:How to print register values in gdb?
傢伙,我怎樣才能知道做一個系統調用時什麼寄存器關聯到的參數。我一直在閱讀和文檔,並沒有找到明確的答案。 – Recursion 2009-11-20 03:49:00
請注意,舊的高8位寄存器(ah,bh等)不再適用於所有操作碼。例如'inc ah'在x64中無效,因爲該操作碼已被重新用於新的64位寄存器之一。 – Johan 2013-09-26 22:55:19
@Johan:還要注意,用REX前綴,ah bh ch dh的寄存器代碼成爲新的字節寄存器sil dil bpl spl – 2013-10-03 07:43:02