《程序是怎样跑起来的》第一章——对程序原来说CPU是什么?

在读这本书之前,我大致看了目录,从硬件到软件,将程序如何运行,但更多是偏向软件和操作系统的,这本书对于基础不好的人来说是一本用来夯实基础很好的读物。

第一章的内容主要分讲的是CPU,CPU内部结构、CPU如何运行程序。

在中职是我们只知道CPU是运算器和控制器的集合体,而这本书中告诉我们CPU中还有寄存器和时钟,寄存器是一种高速存储设备,用于临时存储和快速访问CPU内部的数据和指令。寄存器分为多种,例如,通用寄存器、程序计数器、栈指针寄存器、状态寄存器等等多种。CPU各部件相通:时钟发出信号开始计时,控制器控制全局运行,并将内存中的指令读入寄存器,寄存器暂存指令数据的等处理对象。由此来完成指令,如下图

关于CPU结构,第一章主要讲解寄存器,其他不必太关注,因为 程序是把寄存器作为对象来描述的。这句话是什么意思?我们知道有机器语言,汇编语言,高级语言,而计算机只能理解像二进制这样的机器语言,我们人不可能去理解机器语言,所以汇编语言用助记符来编写程序,每一个原是电气信号的机器语言都会有一个相应的助记符,汇编语言和机器语言是一一对应的,我们把汇编语言编写的程序转化为机器语言的过程称为汇编,反之称为反汇编,而机器语言级别的程序是通过寄存器来处理的,也就是说在程序员看来“CPU是寄存器的集合体”,而其他部件,只需知道其存在就好了。也就是说我们用高级语言编写的程序在编译后会转化为机器语言,然后有寄存器去处理。 不同的CPU有不同的功能,内部的寄存器类型和数量也不同,但主要分为这八类:

了解了寄存器,第一章中还有一个重点(1.4),我们都知道计算机中有计数器来决定程序流程,而我们编写的程序的执行流程有顺序执行、条件分支和循环三种,CPU在执行我们编写的程序时的执行流程是一样的,比如条件分支和循环,在CPU中通过累加寄存器和标志寄存器来达到分支和循环的目的,CPU在运算时标志寄存器的数值会根据运算结果自动设定,条件分支在执行跳转前会进行比较运算,而CPU是否执行跳转,有标志寄存器内部的正、零、负三个状态来决定。所以前面才说寄存器是最要了解的(机器语言级别的程序是通过寄存器来处理的)。

(1.5):函数在我们编程过程中常常使用,函数的调用是通过八程序计数器的值设定为函数的存储地址来实现的,而与条件分支和循环不同的是,单单跳转是没法实现函数的调用的,书中讲解函数的调用需再完成函数内部处理后,处理流程再返回函数调用点,因此如果只是调用就无法返回了。

所以机器语言通过call指令和return指令来解决这个问题。在函数调用时使用的是call指令而不是跳转指令,call指令会把调用函数后的要执行的指令地址存储在栈中,执行完成之后,在由return指令将栈中地址设定到程序计数器中。由此一来便解决了函数跳转的问题。

第一章主要学习了这些内容,还有通过基址寄存器和变址寄存器来实现类似数组的操作 ,列出了机器语言指令的主要类型和功能等。

 

posted @ 2024-01-25 18:13  琦q  阅读(27)  评论(0编辑  收藏  举报