计算机科学第二课:程序与CPU

一、课程要点

1.计算机科学讲的是什么?

2.CPU的构成

3.程序与CPU

4.寄存器们

二、正文

1.计算机科学

计算机科学这门课程没有任何代码,讲的是计算机的基础内容,程序是如何与计算机进行交互的。

2.CPU的构成

CPU由四大部分构成:寄存器、控制器、运算器、时钟。

(1)寄存器:暂存数据的地方。寄存器相当于CPU的内存。程序=指令+数据。这是软件开发工程师最常打交道的地方。寄存器不止一个。

(2)控制器:控制寄存器中数据的读写。

(3)运算器:是逻辑运算单元,辅助寄存器和控制器进行运算。

(4)时钟:计算机的运算频率。如i5内核,计算机的中心频率是1.7GHZ,即计算机1s内可以计算17亿次。

总结:计算机,顾名思义,是用于计算的,而计算的核心是数据,所以计算机是围绕对数据的操作构成的:寄存器:暂存数据;控制器:控制数据的读写;运算器:进行数据的运算;时钟:对数据的计算次数。好,具备了存储数据,对数据进行的能力之后,程序就扮演了一个指挥官的角色,程序通过指令完成对这些数据的操作。因此,有称,程序=指令+数据。

3.程序与CPU

程序->EXE->加载->CPU

说明:程序是一门高级语言,通过编译器,如VS2010、CodeBlock等集成环境中的编译器实现对高级语言的编译,将其生成EXE可执行文件,里面是二进制内容,即低端的机器语言。然后通过计算机加载到CPU中,CPU调用寄存器等组件接受指令,执行程序。

4.寄存器们

寄存器可以分为8大类:累加寄存器、标志寄存器、程序计数寄存器、基址寄存器、变址寄存器、通用寄存器、指令寄存器、栈存器。

(1)累加寄存器:存储运算之后的数据。计算机只会做加法。

(2)状态寄存器:记录CPU的状态,帮助做出逻辑判断,如改变状态,判断分支语句应该跳到哪句。

(3)程序计数寄存器:存放下一句指令的地址。因为程序结构可以分为3大类:顺序、分支、循环。当程序不是顺序结构时,如分支,则程序计数器存放的下一句指令的地址便起到了作用。

(4)基址寄存器:存放当前数据开始的位置。

(5)变址寄存器:存放现在数据与基址的相对偏移位置,如单片机汇编语言中的偏移地址。

(6)通用寄存器:什么都可以存放的寄存器,这是程序员使用的最多的寄存器。

(7)指令寄存器:CPU内部的寄存器,程序员无法触及和使用。

(8)栈存器:与基址寄存器类似,存储栈的地址。

总结:最重要的3个寄存器:累加寄存器+状态寄存器+程序计数寄存器,举例说明三者的关系。

如,当程序中有分支语句时,且判断的条件是:if(2==3),则累加寄存器中存储运算之后的数据(是判断之后的结果吗?0/1???),当条件判断结果为假(0)时,状态寄存器中的每一位标志位会发生改变。状态寄存器有32位,每一位代表不同的含义,如第1位:是否溢出?第2位:是否为0?........等等。条件判断之后的结果会促使状态寄存器进行置位操作,即将每一位变置为0或1,然后,根据状态寄存器32位的具体情况改变程序计数寄存器中的地址,也就是决定了程序的下一条指令的地址。

概括来说:条件if(2==3) -> 计算 -> 状态寄存器每一位置位 -> 判断状态寄存器整体含义 -> 改写程序计数寄存器中的值(下一条被执行的指令的地址)

ps:无论学习什么语言,计算机科学都是基础的学科。在我整理这些资料的同时,我也重新梳理了一下思路,感觉思路更加清晰了,知识也记得更为扎实了,我以前从没有考虑过分支结构在计算机内部是怎样实现的,在知道了计算机内部进行了如此“笨拙”的操作之后,反而感觉到计算机的可爱之处,哈哈!

嗯、、、、、今天是第二天,我不能保证每天都会发文章,但我不会搁置。热爱这个世界,热爱努力的自己。脚踏实地,仰望星空,明天是美好的,世界是澄净的。礼拜三,再见!

猜你喜欢

转载自blog.csdn.net/qq_38383011/article/details/83540276