怎样跑程序

更深层的机制:加载到内存中的机器语言程序,由 CPU 进行解析和运行,进而计算机系统整体的控制和数据运算也开始运行。

什么是CPU

CPU指令是由电子晶体管直接实现的,不同的CPU对应不同指令集,CPU解释和运行转换为机器语言(指令)的程序。
一个指令的完成时间一般是完全确定的时钟周期数

CPU由寄存器、控制器、运算器和时钟四个部分构成

  • 寄存器可以暂存指令和数据,一个CPU会有很多寄存器;其中数据可以是用于运算的数值表示内存地址的数值
  • 控制器负责把内存的指令和数据读入到寄存器里面;【总线相关的处理呢?】
  • 运算器负责运算寄存器里的数据
  • 时钟负责每隔几个周期运行一条指令

寄存器

内存的位置通过地址来区分,寄存器的种类通过名字来区分
主要内存一般使用DRAM,CPU上的高速缓存一般使用SRAM

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

其中PC、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个

无论累加寄存器的运算结果是负数、零还是正数,标志寄存器都会将其保存(溢出和奇偶校验);数值会根据运算结果自动设定,寄存器的低3位表示运算结果是否为正数、零和负数【所有的CPU都这样吗?】

如果要比较累加寄存器和通用寄存器的值,CPU就会实际执行一个减法运算,并把结果存到标志寄存器中。

基址寄存器和变址寄存器,主要用于像数组一样来分割特定的内存区域来连续查看数据。

二进制表示

二进制补码

补码是用正数来表示负数,相加等于0;全部取反再加1可以得到补数

逻辑右移和算术右移