R代表RAX,RBX,RCX,RDX,RSI,RDI,RBP,RSP?

Wus*_*uhn 20 x86 assembly x86-64 cpu-architecture cpu-registers

x86汇编语言不得不改变,因为x86处理器架构已经从8位变为16位变为32位,现在变为64位.

我知道在32位汇编程序寄存器名称(EAX,EBX等)中,每个名称的E前缀代表扩展意味着32位形式的寄存器而不是16位形式(AX,BX等).

这些寄存器名称的R前缀在64位中代表什么?

Pau*_*l R 20

我认为它只是R表示"寄存器",因为在x86-64上有额外的寄存器R8-R15,而R是许多CPU架构上的公共前缀,其中寄存器被编号.

  • 根据我的阅读,对"R"系列寄存器的32位访问导致高32位被自动清零. (2认同)

Ric*_*ers 7

最初的Intel x86处理器,即8080处理器,是8位处理器,专为各种应用而设计,例如专用,小型计算机(例如收银机)或设备控制器而非通用计算机(竞争对手包括Motorola 6800).以下8086处理器系列(8086和成本降低8088)是16位微处理器,延续了英特尔8080架构,同时扩展了16位增加,着眼于处理器的更多通用用途.

英特尔8080和英特尔8086处理器的寄存器数量有限,其中大多数都有特殊用途,因此它们的汇编语言中有特定的名称,如A,B或AX,BX(摩托罗拉6800等竞争对手有类似的惯例) .诸如IBM 360/370系列或DEC VAX之类的通用计算机为寄存器等组件(例如R0,R1等)使用了更多通用名称,因为寄存器是通用的(许多高端工作站使用的Motorola 68000 32位处理器)在20世纪80年代类似于8个数据寄存器,名为D0到D7).

自20世纪70年代以来,英特尔不断发展x86处理器,即使x86的目标应用已经从专用的微控制器应用扩展到通用计算机,它也试图保持向后兼容性.在此演变期间,寄存器的数量已经扩展,并且许多最初的专用寄存器已经发展为通用用途,因为英特尔还通过80286引入了处理器芯片操作模式的概念,以帮助实现向后兼容性.

对于64位处理器,英特尔需要一些方法来识别64位传输而不是32位或汇编语言中的其他传输.与此同时,英特尔正在推出额外的通用寄存器.对于通用寄存器使用通用的行业命名约定,字母R后跟一个数字是一个简单的决定.

但是,英特尔还面临着必须保持旧寄存器的向后兼容性.因此字母R被用作16位寄存器名称的前缀,就像32位处理器一样,字母E被用作16位寄存器名称的前缀.与此同时,64位寄存器操作的设计与前几代32位寄存器操作的设计略有不同.

随着从8位处理器到16位处理器的更改,寄存器从8位扩展到16位,因此名称在寄存器名称后面有字母X,如AX,BX等.这些寄存器可以视为两个8位寄存器(16位AX寄存器由8位AH和8位AL组成,其中H表示AX寄存器的高或最高有效位,L表示AX寄存器的低或最低有效位).

随着从16位到32位处理器的改变,寄存器从16位扩展到32位,因此名称具有字母E作为前缀,例如EAX,EBX等.这些寄存器可被视为具有两个单独的16位组件(使用16位名称访问的最低有效16位,如EAX - > AX,EBX - > BX等)或4个8位寄存器(最低有效16位作为两个8位寄存器访问,如EAX - > AH和AL,EBX - > BH和BL等)当寄存器移位和按位操作用于在32位寄存器(如EAX,EBX等)的高16位和低16位之间移动16位值时. ,在某种程度上,已经完成了从8位到16位的更改但是直接访问32位寄存器的高16位的方式不可用直接访问16位寄存器的高8位的方式已经提供了8086/8080.

第1卷第3.7.2.1节:英特尔64和IA-32架构的基本架构软件开发人员手册,其中有关64位模式的说明.

Register operands in 64-bit mode can be any of the following:
• 64-bit general-purpose registers (RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, or R8-R15)
• 32-bit general-purpose registers (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, or R8D-R15D)
• 16-bit general-purpose registers (AX, BX, CX, DX, SI, DI, SP, BP, or R8W-R15W)
• 8-bit general-purpose registers: AL, BL, CL, DL, SIL, DIL, SPL, BPL, and R8L-R15L are available using REX
prefixes; AL, BL, CL, DL, AH, BH, CH, DH are available without using REX prefixes.
• Segment registers (CS, DS, SS, ES, FS, and GS)
• RFLAGS register
• x87 FPU registers (ST0 through ST7, status word, control word, tag word, data operand pointer, and instruction
pointer)
• MMX registers (MM0 through MM7)
• XMM registers (XMM0 through XMM15) and the MXCSR register
• Control registers (CR0, CR2, CR3, CR4, and CR8) and system table pointer registers (GDTR, LDTR, IDTR, and
task register)
• Debug registers (DR0, DR1, DR2, DR3, DR6, and DR7)
• MSR registers
• RDX:RAX register pair representing a 128-bit operand
Run Code Online (Sandbox Code Playgroud)

请参阅x86_64寄存器的问题和答案rax/eax/ax/al覆盖完整寄存器内容以及为什么大多数x64指令将32位寄存器的上半部分归零,这提供了有关64位寄存器操作如何与32位寄存器操作.

  • AMD设计了AMD64,而英特尔则致力于IA-64(安腾).直到x86-64才被发现(部分归功于AMD首款AMD64微架构K8的高性能),英特尔将其添加到P4,然后是P6(在Core2中),称其为"IA-32e". (2认同)
  • IA-64是一个完全独立的架构,根本不是x86.P4是奔腾4,["netburst"微体系结构](https://en.wikipedia.org/wiki/NetBurst_(microarchitecture)),针对高时钟速度而不是高性能进行了优化,因为那时CPU仍然在市场上销售按时钟速度.[P6是从Pentium Pro/Pentium II开始的微架构系列](https://en.wikipedia.org/wiki/P6_(microarchitecture)),并在Nehalem达到高潮.([Sandybridge是一个新的微架构系列](http://www.realworldtech.com/sandy-bridge/).) (2认同)