你可能会想,作为程序员,我们需要理解CPU吗?
是的,如果你想彻底理解操作系统的话。
在后面的课程中你会发现,仅仅依赖软件是无法完成某些特定的功能的,比如,我们在《程序员如何理解内存》这一节中提到的虚拟内存,这项功能的实现需要依赖CPU的配合才能完成。因此在这一节中,将重点讲解一下作为程序员应该知道哪些CPU相关的知识。
什么是机器指令
你肯定已经知道了,CPU是计算机的大脑,程序员写的代码最终都是CPU来执行的。但作为计算机的大脑,CPU并不认识C,C++、Python、Java等语言,这些语言是人类可以认识的,CPU真正能理解的是机器指令。我们写的C/C++程序(包括Java、Python等于语言的解释器)最终被编译器翻译成了机器指令后才被CPU执行的。
你可以把机器指令理解为CPU可以直接执行的代码。那这些CPU可以直接执行的机器指令是什么样子的呢?
我们来看一下C语言中经典的HelloWorld程序:
#include<stdio.h>
int main() {
printf("hello world.");
return 0;
}
以下就是HelloWorld程序在被编译器编译后生成的可执行程序。
40055d: 48 83 ec 08 sub $0x8,%rsp
400561: be 04 06 40 00 mov $0x400604,%esi
400566: bf 01 00 00 00 mov $0x1,%edi
40056b: