有没有一种方法可以获取寄存器的地址?

6

有没有一种方法可以获取寄存器的地址?例如,eax寄存器的地址(而不是它的内容)。


“寄存器地址”具体指什么? - Jens Björnhager
CPU的通用寄存器通常是内存映射的吗?(剧透:不是) - undefined
3个回答

8
寄存器是内部处理器存储。它们没有内存地址,因为它们不驻留在内存中。例如,您可以通过它们的名称(如EAX)来识别它们。
话虽如此,映射到内存的寄存器确实存在,但在任何现代处理器中,它们属于其他设备,而不是CPU。它们被分配“虚假”内存地址以方便使用。请参见memory-mapped I/O

我想补充一点,它们也没有映射到RAM。许多硬件设备都有具有“地址”的寄存器,因为存在映射关系。这里唯一的问题是x86不通过使它们可映射来公开这些寄存器。 - Mahmoud Al-Qudsi
@MahmoudAl-Qudsi:同样适用于64位版本的架构吗? - user2284570
它们确实驻留在内存中,但这种内存映射方式与 RAM 不同,而且 RAM 也没有映射到这些寄存器(因为这会使它们比两者都慢)。每个寄存器都有自己的标识符,对于 CPU 来说,它表示寄存器内存中的地址。可以将寄存器内存映射到主内存,就像可以将寄存器公开到网络上,并响应数据包使服务器在特定上下文中修改寄存器一样;只是很少有这样的必要。 - Dmytro
1
@Dmitry 当我们没有任何额外的澄清时说“内存”,我们指的是主要的RAM空间。当然,任何值存储的地方都是技术上的计算机内存,但这很少是预期的含义。映射到内存的寄存器存在,但它们属于其他设备,而不是任何现代处理器中的主CPU寄存器(尽管在历史上曾经有过这样的CPU)。至于将寄存器映射到网络上,这根本不是硬件功能。您需要一个复杂的操作系统才能实现类似的功能。我扩展了答案以澄清。 - salezica

7

曾经有一些架构使用低地址来指定CPU寄存器,比如Univac 1100系列计算机。

http://en.wikipedia.org/wiki/UNIVAC_1100/2200_series

当前的x86硬件不是这样工作的,所以你不能获取EAX寄存器的地址 - 它只是没有一个。


一些微控制器仍然具有内存映射寄存器,例如AVR(32个通用寄存器的8位RISC):http://www.avr-tutorials.com/general/avr-memory-map。 - Peter Cordes

4

寄存器是CPU电路内的物理电子元件,不在RAM中,因此没有地址。要访问其内容,您可以使用mov指令。


2
寄存器是CPU电路中的物理电子组件。对于SOC来说,ʀᴀᴍ也是如此。 - user2284570

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接