Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the names of the new X86_64 processors registers?

Where can I find the names of the new registers for assembly on this architecture?

I am referring to registers in X86 like EAX, ESP, EBX, etc. But I'd like them in 64bit.

I don't think they are the same as when I disassemble my C code, I get r's instead of e's.

like image 863
Recursion Avatar asked Nov 18 '09 04:11

Recursion


People also ask

How many registers are there in 64-bit processor?

The x64 processor also provides several sets of floating-point registers: Eight 80-bit x87 registers. Eight 64-bit MMX registers.

What are x86 registers?

The main tools to write programs in x86 assembly are the processor registers. The registers are like variables built in the processor. Using registers instead of memory to store values makes the process faster and cleaner.


2 Answers

The MSDN documentation includes information about the x64 registers.

x64 extends x64's 8 general-purpose registers to be 64-bit, and adds 8 new 64-bit registers. The 64-bit registers have names beginning with "r", so for example the 64-bit extension of eax is called rax. The new registers are named r8 through r15.

The lower 32 bits, 16 bits, and 8 bits of each register are directly addressable in operands. This includes registers, like esi, whose lower 8 bits were not previously addressable. The following table specifies the assembly-language names for the lower portions of 64-bit registers.

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 
like image 61
RRUZ Avatar answered Sep 23 '22 08:09

RRUZ


The old 32-bit registers have been extended to 64 bits, the r registers (rax, rbx, rsp and so on).

In addition, there's some extra general purpose registers r8 through r15 which can also be accessed as (for example) r8d, r8w and r8b (the lower 32-bit double-word, 16-bit word and 8-bit byte respectively). The b suffix is the original AMD nomenclature but you'll sometimes see it written as l (lower case L) for "low byte".

I tend to prefer the b suffix myself (even though the current low-byte registers are al, bl, and so on) since it matches the d/w = double/word names and l could potentially be mistaken for long. Or, worse, the digit 1, leading you to question what the heck register number 81 is :-)

The high bytes of the old 16-bit registers are still accessible, under many circumstances, as ah, bh, and so on (though this appears to not be the case for the new r8 through r15 registers). There are some new instruction encodings, specifically those using the REX prefix, that can not access those original high bytes, but others are still free to use them.

In addition, there's some new SSE registers, xmm8 though xmm15.

The eip and eflags registers have also been extended to rip and rflags(though the high 32 bits of rflags are, for now, still unused).

See the wikipedia page and MSDN for more details.

Whether these are supported in the asm keyword for a particular C compiler, I couldn't say. What little assembly I do (and it's becoming about one day a year) is done in assembly rather than C.


Related:

  • Why did they use numbers for register names in x86-64?
  • What do the E and R prefixes stand for in the names of Intel 32-bit and 64-bit registers?
  • What does X mean in EAX,EBX,ECX ... in assembly?
  • Why are first four x86 GPRs named in such unintuitive order?
like image 20
paxdiablo Avatar answered Sep 21 '22 08:09

paxdiablo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!