对程序员来说CPU是什么?

对程序员来说CPU是什么?

前言

本文参照《程序是怎样跑起来》 这本书,不断更新我的博文,一是用于填补我的计算机基础“空白”,二是通过对该书提到的知识进行总结和凝练以加深理解,同时希望能够将我的总结所得通过博文分享给各位博友。

一、本章热身问题

1.  程序是什么?
2.  程序是由什么组成的?
3.  什么是机器语言?
4.  正在运行的程序存储在什么位置?
5.  什么是内存地址?
6.  计算机的构成元件中,负责程序的解释和运行的是哪个?

二、热身问题答案

  1. 程序是指示计算机每一步动作的的一组指令
  2. 程序是由指令和数据组成(eg. C 语言“printf (" 你好 ");” 这个简单的程序中, printf 是指令, " 你好 " 是数据)
  3. 机器语言是CPU可以直接识别并使用的语言
  4. 正在运行的程序存储在内存中(硬盘和磁盘等媒介上保存的程序被复制到内存后才能运行)
  5. 内存地址是用来表示命令和数据存储位置的数值
  6. 计算机的构成元件中,负责程序的解释和运行的是CPU(大家熟知的奔腾( Pentium) 就是 CPU 的一种)

三、CPU 的内部结构解析

1、什么是CPU?

CPU 是英文 Central Processing Unit(中央处理器)的缩写,相当于计算机的大脑,它的内部由数百万至数亿个晶体管构成。CPU 所负责的是解释和运行最终转换成机器语言的程序内容。

2、程序运行流程是什么?

程序员用C语言等高级语言编写程序—>经编译器转换为机器语言文件—>程序运行时在内存中生成机器语言文件的副本—>CPU解释并执行程序内容。

3、CPU的内部结构组成

CPU的内部由寄存器、 控制器、 运算器和时钟四个部分构成, 各部分之间
由电流信号相互连通。
寄存器可用来暂存指令、 数据等处理对象, 可以将其看作是内存的一种。根据种类的不同, 一个 CPU 内部会有20~100 个寄存器
控制器负责把内存上的指令、 数据等读入寄存器,并根据指令的执行结果来控制整个计算机。
运算器负责运算寄存器中的数据。
时钟负责发出 CPU 开始计时的时钟信号。
在这里插入图片描述

4、寄存器的主要种类和功能

在这里插入图片描述
那么,对程序员来说, CPU 是什么呢?
答:对程序员来说,CPU 是具有各种功能的寄存器的集合体。 其中, 程序计数器、 累加寄存器、 标志寄存器、 指令寄存器和栈寄存器都只有一个, 其他的寄存器一般有多个

5、程序计数器

程序计数器决定着程序的流程。
如,下图程序实现将 123 和 456 两个数值相加, 并将结果输出到显示器上。
在这里插入图片描述
地址 0100 是程序运行的开始位置。 Windows 等操作系统把程序从硬盘复制到内存后, 会将程序计数器( CPU 寄存器的一种) 设定为0100, 然后程序便开始运行。 CPU 每执行一个指令, 程序计数器的值就会自动加 1。 例如, CPU 执行 0100 地址的指令后, 程序计数器的值就变成了 0101( 当执行的指令占据多个内存地址时, 增加与指令长度相应的数值)。 然后, CPU 的控制器就会参照程序计数器的数值, 从内存中读取命令并执行

6、通过跳转指令设置程序计数器的值,实现条件分支和循环

在这里插入图片描述
上图条件分支程序解释:把内存中存储的数值( 示例中是 123) 的绝对值输出到显示器的程序的内存状态。

程序运行的开始位置是 0100 地址。 随着程序计数器数值的增加, 当到达 0102 地址时, 如果累加寄存器的值是正数(无论当前累加寄存器的运算结果是负数、 零还是正数, 标志寄存器都会将其保存), 则执行跳转指令( jump 指令) 跳转到 0104 地址。 此时, 由于累加寄存器的值是 123, 为正数, 因此 0103 地址的指令被跳过, 程序的流程直接跳转到了 0104 地址。 也就是说,“跳转到 0104 地址” 这个指令间接执行了“将程序计数器设定成 0104 地址” 这个操作。

6、通过call 指令与return指令设置程序计数器的值,实现函数的调用

函数调用处理也是通过把程序计数器的值设定成函数的存储地址来实现的。 不过, 这和条件分支、 循环的机制有所不同, 因为单纯的跳转指令无法实现函数的调用。 函数的调用需要在完成函数内部的处理后, 处理流程再返回到函数调用点(函数调用指令的下一个地址)。 因此, 如果只是跳转到函数的入口地址, 处理流程就不知道应该返回至哪里了。
因此,函数调用使用的是 call 指令, 而不是跳转指令。在将函数的入口地址设定到程序计数器之前,call 指令会把调用函数后要执行的指令地址存储在名为栈的主存内。函数处理完毕后, 再通过函数的出口来执行 return 命令。return 命令的功能是把保存在栈中的地址设定到程序计数器中。
在这里插入图片描述
在这里插入图片描述

7、通过地址和索引实现数组

CPU 会把基址寄存器+ 变址寄存器的值解释为实际查看的内存地址。 变址寄存器的值就相当于高级编程语言程序中数组的索引功能。
在这里插入图片描述

扫描二维码关注公众号,回复: 12924595 查看本文章

8、机器语言指令的主要类型和功能

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34720818/article/details/107730966