第二章 汇编语言
1 CPU简介
中央处理器(Central Processing Unit),结构密集、科技密集、经济密集
CPU的基本组成部件
时钟
- 时钟是整个计算机运转的节拍器,机器指令的最小执行时间就是一个时钟周期
- 模拟信号向数字信号的转换过程,就是在始终指导下的一个采样过程(Sampling),时钟的偏移将使数字信号失准
- CPU的主频即为时钟频率,对CPU的整体性能具有直接影响。
- CPU的位数也是影响CPU性能的主要因素之一
算术逻辑单元
- ALU,执行各种算术运算和逻辑运算
- 随着各类运算任务的增加,出现了专用计算单元如浮点计算单元
控制单元
- CU是控制单元,是CPU的指挥中心,协调、控制各个指令执行的顺序,主要由下列部件构成
- 指令寄存器(Instruction Register)
- 指令译码器(Instruction Decoder)
- 指令控制器(Operation Controller)
- 指令指针寄存器(Extended Instruction Pointer)
存储单元
- 存储单元是CPU种暂时存放数据的地方,包括等待处理数据或数据处理结果等
- 片上缓存或片内缓存,即On-Chip Cache,访问速度和存储容量均介于内存和存储器之间的告诉存储器件
- 寄存器组,即Registers,最接近ALU的存储器件,访问速度最快,由于芯片面积和集成度限制,存储容量最小
- 由于寄存器在芯片中的特殊地位,几乎所有汇编指令的执行均需要寄存器的协助,可以说寄存器是汇编语言的一部分
SEQ处理器结构
- 取指令(Fetch)
- 指令解码(Decode)
- 指令执行(Execute)
- 内存访问(Memory)
- 结果回写(Write back)
- 指令指针寄存器更新(PC update)
现代处理器为了提高执行效率,通常采用流水线结构执行指令(Pipelined implementation)
总线
- 总线在物理上是若干根用于连接其他芯片的导线
- 在逻辑上分为地址总线、数据总线、控制总线
- 地址总线:
- CPU要将内存中的指令和数据取出,就必须访问内存中的地址,当CPU访问内存中的某个地址时,地址线上就会保持着那个地址值
- 地址总线能表示多少个不同的数值,这个CPU就能访问多少内存地址
- 宽度为N的地址总线,它能够寻址的空间为0~2^N-1
- 数据总线
- 在CUP和内存中传输指令和数据
- 控制总线
- 控制总线是不同控制线的集合,是一个总称
- 有多少条控制总线,就意味着CPU能够对外界提供多少种控制
- 控制总线的宽度决定了CPU控制外界设备的能力
- 地址总线:
原理图
2 寄存器
什么是寄存器
- 寄存器(Register)是中央处理器(CPU)内部的组成部分
- 寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和地址
- 寄存器是计算机系统结构下存储结构下存储层次的最顶端,也是系统中操作数据的最快速路径
段的概念
物理地址=基础地址(段地址x16)+偏移地址
编程时,将若干地址连续的内存单元看作一个段,一个段的起始地址一定是16的倍数
偏移地址位16位,16位地址的寻址能力是64KB,所以一个段的长度最大为64KB
寄存器分类
IA-32架构提供了16个基本程序执行寄存器,用户系统和应用程序编程
16个寄存器被分为四类
通用寄存器(General-purpose registers)
32位CPU通用寄存器共有8个,可以用于传送和暂存以下数据
- 逻辑和算术运算的操作数
- 用于地址计算的操作数
- 内存指针
通用寄存器分类
- EAX:累加寄存器,是操作数和结果数据的累加器
- EBX:基址寄存器,指向DS段(数据段)中数据的指针
- ECX:计数寄存器,是字符串和循环操作的计数器
- EDX:数据寄存器,IO指针
以上4个寄存器主要用于算术运算(ADD/SUB/XOR/OR等)指令中,常用来保存常量与变量的值
- ESI:字符串操作源指针,源变址寄存器
- EDI:字符串操作目的指针,目的变址寄存器
ESI和EDI与特定的串操作指令(MOVS/LODS/STOS)一起使用,在字符串操作的时候用的比较多
存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为通过多种方式访问存储单元提供便利
- ESP:栈顶指针寄存器,用于存放当前堆栈的栈顶地址,专门用作堆栈指针,不可做为一般通用寄存器使用
- EBP:栈底指针寄存器(基址指针寄存器),表示栈区域的基地址,永远指向当前函数栈底位置,不可作为一般通用存储器使用