计算机CPU中的寄存器 [英] Registers in the CPU of a computer

查看:12
本文介绍了计算机CPU中的寄存器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是想验证CPU本身是否支持"寄存器"名称。我是说阿格0阿格特2..。ETC在"名字"的末尾。CPU也支持名字吗?!我不是问寄存器本身,我是问CPU是否支持它可以操作的寄存器的名称?

推荐答案

名字是一种神奇的东西,而不是物理上的

这就是重点。名字纯粹是我们人类阅读的。CPU完全没有名称的概念。它们唯一处理的是数字。字符是数字,地址是数字,指令是数字……寄存器也是如此,它们也只是指令本身中以某种方式编码的数字

汇编后,指令流中只有数字。甚至跳转标签、函数。不存在于可执行二进制文件中。它们相对地被描述为之后的第14条指令、前48个字节的指令...或绝对作为地址0xFACECAFE;的函数。名称(如果有)放在单独的部分中以描述地址代表什么,否则没有人知道变量0x65DAB3CF或0xFACECAFE处的函数是什么。这些名称用于调试器打印变量以供人们阅读,或者用于链接器、加载器...以找到正确的位置来替换地址。CPU完全忽略它们

例如在MIPS$ra is the register number 31, $t9 is 25, $a3 is 7...中,这些值将在指令中编码为它们的二进制值。ADD $s2, $t5, $a3将编码为

000000(R型指令操作码)-01101($13/$t5)-00111($7/$a3)-10010($18/s2)-00000(移位量)-100000(32-添加函数),即0x01A79020

X86中的寄存器RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8-R15 are mapped to 0-15 respectively也是如此。xor ecx, esi编码为31 f1 = 00110001 11110001,最后6位存储2个参数。更复杂的指令需要更复杂的规则,例如ADD r9, [rax + 4*r13 + 20]编码为4e 03 4c a8 14

因为CPU只关心数字,所以实际上可以构造一个编码,将寄存器名称的字符串映射到寄存器本身例如,R20将在指令中编码为72 32 30(这是字符串的ASCII值),但为什么要在指令中浪费这么多宝贵的空间?从R20到20(0x14)的映射足够简单和清晰

另见Are registers real? Do they exist in CPU physically?

这篇关于计算机CPU中的寄存器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆