对程序员来说CPU是什么
问题
-
程序是什么?
指示计算机每一步动作的一组指令。
-
程序是由什么组成的?
指令和数据。
-
什么是机器语言?
CPU可以直接识别并使用的语言。
-
正在运行的程序存储在什么位置?
内存,硬盘和磁盘等媒介上保存的程序被复制到内存后才能运行。
-
什么是内存地址?
用来表示指令和数据存储位置的数值。
-
计算机的构成元件中,负责程序的解释和运行的是哪个?
CPU
CPU的组成
- 寄存器:用来暂存指令、数据等处理对象
- 控制器:负责把内存上的指令、数据等读入寄存器、并根据指令的执行结果来控制整个计算机
- 运算器:负责运算从内存读入寄存器的数据
- 时钟:负责发出CPU开始计时的时钟信号
内存指的是计算机的主存储器main memory,简称主存。主存通过控制芯片等与CPU相连,主要负责存储指令和数据。但主存中存储的指令和数据会随着计算机的关机而自动清除。
汇编语言assembly按采用助记符memonic来编写程序,汇编语言和机器语言基本上是一一对应的。通常我们将汇编语言转换为机器语言的过程称为汇编,反过来称为反汇编。
在程序员看来,CPU是寄存器的集合体
种类 | 功能 |
---|---|
累加寄存器(accumulator register) | 存储执行运算的数据和运算后的数据 |
标志寄存器(flagregister) | 存储运算处理后的CPU的状态 |
程序计数器(program counter) | 存储下一条指令所在内存的地址 |
基址寄存器(baseregister) | 存储数据内存的起始地址 |
变址寄存器(indexregister) | 存储基址寄存器的相对地址 |
通用寄存器(general purpose register) | 存储任意数据 |
指令寄存器(instructionregister) | 存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作 |
栈寄存器(stackregister) | 存储栈区域的起始地址 |
其中,程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个。
条件分支和循环机制
条件分支和循环中使用的跳转指令,会参照当前执行的运算结果来判断是否跳转。
而CPU在进行运算时,标志寄存器的数值会根据运算结果自动设定。
函数的调用机制
函数调用使用的是call指令,call指令会把调用函数后要执行的指令地址存储在名为栈的主存内;函数处理完毕后,再通过函数的出口来执行return指令,return命令的功能是把保存在栈中的地址设定到程序计数器中。
通过地址和索引实现数组
通过基址寄存器和变址寄存器,可以对主内存上特定的内存区域进行划分,从而实现类似于数组的操作。
CPU会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。变址寄存器的值就相当于高级编程语言程序中数组的索引功能。
机器语言指令的主要类型和功能
类型 | 功能 |
---|---|
数据转送指令 | 寄存器和内存、内存和内存、寄存器和外围设备之间的数据读写操作 |
运算指令 | 用累加寄存器执行算术运算、逻辑运算、比较运算和移位运算 |
跳转指令 | 实现条件分支、循环、强制跳转等 |
call/return指令 | 函数的调用/返回调用前的地址 |