《程序是怎样跑起来的》读书笔记(一)CPU是什么

前言

想对计算机系统做些深入了解
故整了几本书翻翻
这里做个记录

从《程序是怎样跑起来的》开始
本节是第一章
CPU是什么

1、CPU内部结构

CPU(central processing unit)四个部分

  • 寄存器:暂存指令、数据等处理对象,一般有20-100个
  • 控制器:把内存上的指令、数据等读入寄存器
  • 运算器:运算从内存读入寄存器的数据
  • 时钟:发出CPU 开始计时的时钟信号

程序是指示计算机每一步动作的一组指令,在内存中运行
CPU负责程序的解释和运行:

  • 程序启动后,根据时钟信号,控制器会从内存中读取指令和数据
  • 通过对这些指令加以解释和运行,运算器就会对数据进行运算,控制器根据该运算结果来控制计算机

2、CPU是寄存器的集合

我们需要关注的是寄存器,因为程序是把寄存器作为对象来描述的

80386以上的CPU用的是汇编语言

寄存器的主要种类:

  • 累加寄存器(accumulator register):存储执行运算的数据和运算后的数据
  • 标志寄存器(flag register): 存储运算处理后的CPU 的状态
  • 程序计数器(program counter): 存储下一条指令所在内存的地址
  • 基址寄存器(base register) :存储数据内存的起始地址
  • 变址寄存器(index register) :存储基址寄存器的相对地址
  • 通用寄存器(general purpose register): 存储任意数据
  • 指令寄存器(instruction register):存储指令,CPU 内部使用,程序员无法通过程序对该寄存器进行读写操作
  • 栈寄存器(stack register): 存储栈区域的起始地址

《程序是怎样跑起来的》读书笔记(一)CPU是什么

3、程序计数器

将123 和456 两个数值相加,并将结果输出到显示器上的流程如下:

《程序是怎样跑起来的》读书笔记(一)CPU是什么

  • 地址0100 是程序运行的开始位置
  • 操作系统把程序从硬盘复制到内存后,会将程序计数器设定为0100
  • CPU 每执行一个指令,程序计数器的值就会自动加1
  • CPU 的控制器就会参照程序计数器的数值,从内存中读取命令并执行

4、条件分支和循环机制

程序流程

  • 顺序执行:按照地址内容的顺序执行指令
  • 条件分支:根据条件执行任意地址的指令
  • 循环:重复执行同一地址的指令。

条件分支和循环会将程序计数器的值设定为任意地址
以条件分支为例如下:
《程序是怎样跑起来的》读书笔记(一)CPU是什么

作比较的流程:

  • 比较累加寄存器中存储的XXX 值和通用寄存器中存储的YYY
  • 进行XXX-YYY 的减法运算
  • 运算的结果保存到标志寄存器中
  • 结果为正表示XXX 比YYY 大,零表示XXX 和YYY 相等,负表示XXX 比YYY 小

5、函数的调用机制

函数调用的例子如下图

  • 函数调用使用的是call 指令,而不是跳转指令
  • 在将函数的入口地址设定到程序计数器之前, call 指令会把调用函数后要执行的指令地址存储在名为栈的主存内
  • 函数处理完毕后,再通过函数的出口来执行return 命令
  • return 命令的功能是把保存在栈中的地址设定到程序计数器中
    《程序是怎样跑起来的》读书笔记(一)CPU是什么

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

实际地址 = 基址寄存器 + 变址寄存器

《程序是怎样跑起来的》读书笔记(一)CPU是什么

7、CPU的处理指令

机器语言指令类型

  • 数据转送指令:寄存器和内存、内存和内存、寄存器和外围设备之间的数据读写操作,如mov
  • 运算指令:用累加寄存器执行算术运算、逻辑运算、比较运算和移位运算,如add
  • 跳转指令:实现条件分支、循环、强制跳转等,如jmp
  • call/return 指令:函数的调用/ 返回调用前的地址

结语

简单清晰的了解了CPU的工作流程