我们还将寄存器RAX,RBX等称为R1,R2等吗?

时间:2012-02-03 14:10:53

标签: x86 x86-64 cpu-registers microprocessors

我正在研究8086/8080微处理器。它们中使用的寄存器有名称,

  1. RAX
  2. RBX
  3. RCX
  4. RDX
  5. 直到R8,当寄存器命名为R8,R9 ...到R15时。我想知道

    我们还将寄存器RAX,RBX等称为R1,R2等吗?

2 个答案:

答案 0 :(得分:4)

标准做法是让前8个寄存器保留其历史名称。此约定用于英特尔和AMD以及大多数汇编程序的文档中。

话虽如此,你总是可以使用宏来将r0-r7定义为rax,rcx,rdx,rbx,rsp,rbp,rsi,rdi。例如,您可以使用

在nasm中获取这些定义
  

%使用altreg

同样,这是非标准的,会使代码更难以为其他人阅读。使用标准名称的另一个原因是它们用作寄存器功能的助记符。例如,rsp作为堆栈指针伸出; r4没那么多。

答案 1 :(得分:3)

首先,8086/80386 / x86-64和8080/8085是完全不同的架构。 8080是8位CPU,8086是16位CPU,8085扩展8080指令集,80386和x86-64是8086的32位和64位扩展ISA。不同的架构,它们 二进制兼容。如果您正在了解Rxx,那么它是64位而不是。 8086是具有指令集的CPU,而不是体系结构,尽管其指令集有时可能被称为8086.体系结构名称通常被称为x86,或偶尔为x86-64

对于这个问题, RBX不是R2 。真正的encoded order AX,CX,DX,BX 。寄存器通常(几乎总是)从零开始计数,因此 RBX应为R3 ,AX,CX,DX分别为R0,R1,R2。在nasm中,您还可以使用带有%use altreg

的编号寄存器
  

5.1 altreg:备用注册名称

     

altreg标准宏包提供备用寄存器名称。它为所有寄存器(不仅仅是R8-R15)提供数字寄存器名称,英特尔定义的别名R8L-R15L用于低字节寄存器(与NASM / AMD标准名称R8B-R15B相对),名称为R0H-对于AH,CH,DH和BH,R3H(类似于R0L-R3L)。

     

https://nasm.us/doc/nasmdoc5.html

仅供参考,寄存器的编码方式如下

000  0    B
001  1    C
010  2    D
011  3    E
100  4    H 
101  5    L
111  7    A

不按字母顺序

请参阅Why are first four x86 GPRs named in such unintuitive order?