《程序是怎样跑起来的》 第一篇
在读了《程序是怎样跑起来的》一书的第一章之后,让我对计算机cpu这一概念有了更深的了解。
在构成计算机的元件中,是负责程序的解释和运行的元件是cpu。CPU的内部是由部由寄存器、控制器、运算器和时钟四个部分构成的。四个部分的作用分别为寄存器,用来暂存指令,数据等处理对象。可当作内存的一种。一个CPU有20-100个寄存器。
控制器,把内存上的指令,数据读入寄存器,并根据指令结构控制整个计算机。运算器,运算从内存读入寄存器的数据;时钟,发出CPU开始计时的时钟信号;有些计算机的时钟也会存在于计算机的外部。内存是计算机的主储存器,主要负责存储指令和数据。
在程序员看来“CPU 是寄存器的集合体”。根据功能不同,寄存器可以分为八类。如图:
不同的寄存器都有不同的作用。
累加寄存器用于运算的数值的存储。表示内存地址的数值则放在基址寄存器和变址寄存器中存储,程序计数器是用来决定程序流程的……
存储指令和数据的内存,是通过地址来划分的。操作系统把程序从硬盘复制到内存后,会将程序计数器(CPU寄存器的一种)设定为0100,CPU每执行一个指令,程序计数器的值就会自动加1。
程序运行的流程分别有顺序执行、条件分支、与循环三种。顺序执行通过程序计数器值顺序增加而运行。在遇到跳转指令则出现了条件分支和循环的情况,跳转指令类似于直接修改程序计数器到要求的地址这一操作。
标志寄存器:标志寄存器用于保存累加寄存器的运算结果。条件分支在跳转指令前会进行比较运算。至于是否执行跳转指令,则由CPU在参考标志寄存器的数值后进行判断。运算结果的正、零、负三种状态由标志寄存器的三个位表示。
承接博客“《程序是怎样跑起来的》第一篇”。
*函数的调用
函数的调用是不能够直接通过修改程序计数器来实现,需要进行函数处理。因此需要调用call指令和return指令来实现。call指令把调用函数后要执行的指令地址存储在名为栈内。函数处理完毕后,再通过函数的出口来执行 return 命令。return 命令的功能是把保存在栈中的地址设定到程序计数器中。
*数组的实现
使用到了基址寄存器与变址寄存器。查看10000000地址1000FFFF地址时,如图可以将10000000存入基址寄存器,并使变址寄存器的值在000000000000FFFF变化。CPU则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。