X86 我们是否也将寄存器RAX、RBX等称为R1、R2等?
我在学习8086/8080微处理器。其中使用的寄存器有名称X86 我们是否也将寄存器RAX、RBX等称为R1、R2等?,x86,x86-64,cpu-registers,microprocessors,8086,x86-16,intel-8080,X86,X86 64,Cpu Registers,Microprocessors,8086,X86 16,Intel 8080,我在学习8086/8080微处理器。其中使用的寄存器有名称 雷克斯 RBX RCX 黑索今 直到R8寄存器被命名为R8,R9。。。到R15。我想知道 我们是否也将寄存器RAX、RBX等称为R1、R2等?标准做法是前8个寄存器保留其历史名称。英特尔和AMD的文档以及大多数汇编程序都使用了这种约定 这样做的原因是,这些名称对于寄存器的功能是助记的。例如,rsp突出显示为堆栈指针r4不太多。相比之下,新的寄存器没有任何特定的功能 也就是说,您可以始终使用宏将r0-r7定义为rax、rcx、rdx、rb
我们是否也将寄存器RAX、RBX等称为R1、R2等?标准做法是前8个寄存器保留其历史名称。英特尔和AMD的文档以及大多数汇编程序都使用了这种约定 这样做的原因是,这些名称对于寄存器的功能是助记的。例如,
rsp
突出显示为堆栈指针<代码>r4不太多。相比之下,新的寄存器没有任何特定的功能
也就是说,您可以始终使用宏将r0-r7
定义为rax、rcx、rdx、rbx、rsp、rbp、rsi、rdi
。例如,您可以在nasm中使用
%使用altreg
同样,这是非标准的,会使您和其他人都难以阅读代码。首先,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。实际值是AX、CX、DX、BX(请参阅)。寄存器几乎总是从零开始计数,所以RBX应该是R3,AX、CX、DX应该分别是R0、R1、R2。如预期的那样,一些通过CPU和R0-R4的接口也直接映射到EAX/ECX/EDX/EBX 在nasm中,您还可以使用带有
%use altreg
5.1 altreg:备用寄存器名称
altreg
标准宏包提供备用寄存器名称。它为所有寄存器(不仅仅是R8–R15)提供数字寄存器名,为低字节寄存器提供英特尔定义的别名R8L–R15L(与NASM/AMD标准名称R8B–R15B相反),为AH、CH、DH和BH提供名称R0H–R3H(与R0L–R3L类似)
但是,不建议使用这些编号的寄存器,因为这会使其他人更难理解代码,并且会丢失名称()的名称。它还要求您再次学习ABI,知道要保存哪些寄存器并传递参数
仅供参考,寄存器中的代码如下所示
000 0 B
001 1 C
010 2 D
011 3 E
100 4 H
101 5 L
111 7 A
也不是按字母顺序排列的我认为这是一种“如果你愿意,你可以”的情况。例如,对于返回的值,我可能总是将RAX称为RAX。然而,当我在做一个更复杂的算法时,我可能会把它叫做R1,只是为了让事情对我来说更简单。