【文件属性】:
文件名称:CPU工作原理-张孝祥java就业培训教程(带完整目录高清扫描版)
文件大小:1007KB
文件格式:PDF
更新时间:2021-06-08 00:17:43
单片机 操作系统
8.1 CPU工作原理
本节讨论 CPU执行指令的过程,通过这个过程来分析一个任务有哪些东西是它特有的,
即在任务切换时需要保存和恢复的内容有哪些。
【CPU 对指令的执行】
C 编译器把 C 语言源代码编译为一条条指令,这些指令也是以一个个数字代码的形式保
存的。不管它保存在什么地方(ROM 也好,RAM 也好),CPU 中总有一个寄存器 PC 指向下
一条要运行的指令。CPU 在每执行一条新指令时,会从 PC 指针所指的地方取出指令,然后
PC 指针会自动增加,指向下一条指令。
所以修改 PC 指针也就能够控制 CPU 执行代码的位置。C 编译器中的分支结构、循环结
构还有函数的调用,这些过程中的一个很重要的一点就是对 PC 指针的修改。比如调用一个
子函数实际上就是修改 PC 指针,使其指向子函数所在的代码空间,然后就会直接从子函数
处取指令执行;子函数返回时也是修改 PC 指针,使其指向父函数在调用子函数处的下一条
指令,使父函数能够接着运行。(注意在函数调用时除了修改 PC 指针还有其他事情要做,这
里暂不考虑)
C 编译器会安排好 PC 指针的修改,它会根据具体函数调用的情况让程序在各个代码空
间之间跳转,也就是在各个函数之间跳转。在同一个函数调用链里的函数都有可能得到执行,
但是函数调用链之外的函数却得不到执行。此时就要手动修改 PC 指针,让 CPU 从一个函数
调用链跳转到另一个函数调用链,也就是从一个进程跳转到另一个进程执行。
【全局变量】
在 C 中申请的全局变量将会始终占用一段内存,它们的地址在程序执行的过程中固定不
变,并且 C 编译器会保证这段地址不会再次分配给其他地方。
【堆栈和 SP 指针】
在一条函数调用链(一个进程)中还有一个重要概念——堆栈。堆栈的数据结构简单表
示如下(取自*):
堆栈在逻辑上有栈顶和栈底之分,栈底保存的是先入栈的元素,栈顶保存的是后入栈的
元素。有新数据存入时,会把数据保存在栈顶,要取出数据时也会从栈顶取出。所以它是一
种“先入后出”的方式。
此外,堆栈的使用需要一个栈顶指针(SP),它标识着栈顶的位置(但是不一定直接指
向栈顶的元素,参看后面堆栈的分类)。CPU 寄存器中有一个专门的 SP 指针。
36