我正在研究8086/8080微处理器。它们中使用的寄存器有名称,
直到R8,当寄存器命名为R8,R9 ...到R15时。我想知道
我们还将寄存器RAX,RBX等称为R1,R2等吗?
答案 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位x86-64而不是8086。 8086是具有x86-16指令集的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)。
仅供参考,intel-8080寄存器的编码方式如下
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?