💡 理解

寄存器的含义,本身也是计算机学院毕业的同学,这个词也常常出现在专业课上,但一直没弄懂它具体是什么,可以用来做什么。

唯一知道的是,它是 CPU 的重要组成部分。这周开始看经典的 CSAPP 课程,突然就理解了。

课程从英特尔的发展历史讲起,如今已发展到了第 15 代 CPU。我自己的电脑也从第八代升级到了第 13 代,性能提升显而易见,这也进一步激起了我的兴趣。之前选购 CPU 时也搜到过很多概念,比如 AMD 的大三级缓存,借此机会终于明白了高速缓存的具体实现。

然后讲到指令集架构:

  • Intel 系列

    • x86:泛指英特尔架构
    • IA32:32 位版本
    • Itanium:失败的架构(已停用)
    • x86-64:当前主流的 64 位架构
  • ARM: 几乎所有手机都使用的架构,功耗低、效率高。 当前苹果的 M 系列芯片采用 ARM 架构,之前的 Intel 芯片则是 x86-64 架构。

  • RISC-V: 一个新兴的开源指令集架构,适合教育、研究和实验。

寄存器只是一个通用的名字(registers),它存储的是内存地址,类似于 C 语言中的指针。在 CPU 中有多个寄存器,它们有不同的名字与功能。

例如:

寄存器 %rax,原意是 Accumulator(累加器);寄存器 %rbx 的英文来源是 Base(基址寄存器),可以自由使用。

那么寄存器的具体作用是什么呢?结合指令理解:

假设 %rbx 寄存器存放的地址是 0x1000,内存中对应的数据是:“内存[0x1000] = 42”,当执行如下指令时,将 %rbx 中存放地址的数据拷贝到 %rax 中,那么 %rax 的值就变成了 42:

movq (%rbx), %rax   →  rax = 42

类比到 C 语言就更直观:

int rbx = 42;
rax = rbx; 
return rax;

这样一来,就很容易理解 C 语言源代码的编译过程:

C(源代码)→ 汇编程序(文本)→ 可重定位目标程序(二进制 .o 文件)→ 最终通过链接器(linker)生成一个可执行文件。

至此终于明白了寄存器的含义和作用。

🎧 所听

E195 对话半佛仙人:世上无难事,只要肯放弃(地球online🎮非典型通关秘籍)

卷不过所以放弃,不是不努力,而是你的努力没有任何意义。

🧠 所想

观察一个人,不看他说什么,而要看他做了什么。以前半佛在 B 站更新的频率特别高,说明他至少曾经是个卷王。如今可能财富自由了,便可以松弛地谈谈对人生的看法。当然,也不必太过较真,他提供的是一种解脱的思路,或许能让那些深陷焦虑和自我怀疑的人稍微跳出来喘口气,给自己多一些可能性。