微机原理知识汇总
计算机组成
冯诺依曼计算机架构
- 以运算器为核心、以存储程序原理为基础
- 组成
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
- 采用二进制进行运算,数据与程序均以二进制形式存放在存储器中
- 将计算任务分解为若干步骤,每个步骤用指令实现,指令序列即为程序
- 在CPU的控制下自动进行运算
- 特点
- 程序存储,共享数据,顺序执行
- 属于顺序处理机,适合确定的算法和数值数据的处理
- 不足
- 与存储器间大量数据交互,对总线要求高
- 执行顺序由程序决定,对大型复杂任务较困难
- 以运算器为核心,处理效率较低
- 由PC(
Program Count)控制执行顺序,难以实现真正的并行处理
微型计算机的工作过程
- 取一条指令的工作过程

- 指令所在地址赋给程序计数器PC并送到地址寄存器AR
- PC自动地址加1,AR的内容不变
- 将地址寄存器AR的内容放在地址总线上,并送至内存储器,经地址译码器译码,选中相应单元
- CPU控制器发出读指令
- 在读指令的控制下,把选中内存单元的内容读到数据总线DB
- 将读出的内容经过数据总线送到数据寄存器DR
- 指令译码,DR将指令送到指令寄存器IR,然后再送到指令译码器ID
微处理器
指令的执行过程
执行一条指令需要执行的步骤
- 从存储器中取出指令
- 指令译码
- 读操作数(如果需要)
- 执行指令
- 写结果(如果需要)

微处理器组成
- 运算器
- 组成
- 算术逻辑单元
- 通用或专用寄存器组(可单独看成一个组成部分)
- 内部总线
- 功能
- 实现数据的算术运算及逻辑运算
- 组成
- 控制器
- 组成
- 程序计数器
- 指令寄存器
- 指令译码器
- 时序控制部件
- 微操作控制部件
- 功能
- 指令控制
- 时序控制
- 操作控制
- 组成
8086/8088
- 16位CPU
- 20位地址线,可寻址1M空间
- 8086总线宽度
16位,8088总线宽度8位 - 采用+5V电源,频率位5MHz
- 采用并行流水线工作方式,通过设置指令预取队列实现(相当于有指令缓冲区)
- 对内存空间实行分段管理
- 支持多处理器系统
- 内部结构框图

8086/8088管脚及功能
- 管脚示意图

- : 地址、状态复用的引脚,三态输出
- : 中8位地址信号,三态输出
- $AD_0-AD_7$: 地址、数据分时复用的双向信号线,三态
- $IO/\overline{M}$: 输入输出/存储器控制信号,三态。低电平访问存储器,高电平访问$I/O$端口
- $\overline{WR}$: 写信号输出,三态。低电平为写操作
- $DT/\overline{R}$: 数据传送方向控制信号,三态。高电平CPU发送数据,低电平CPU接受数据
- $\overline{DEN}$: 数据允许输出,三态。低电平表示DB的数据有效
- $ALE$: 地址锁存信号,三态输出。高电平有效
- $\overline{RD}$: 读选通信号,三态输出,低电平有效
- $READY$: 外部同步控制输入信号,高电平有效
- $INTR$: 可屏蔽中断请求输出信号,高电平有效
- $NMI$: 非屏蔽中断请求输入信号,上升沿触发
- $\overline{INTA}$: 中断响应信号输出,低电平有效
- $HOLD$: 总线保持请求信号输入,高电平有效
- $HLDA$: 总线保持响应信号输入,高电平有效
- 工作模式
- 最小模式
系统中只有8086/8088一个处理器,所有的控制信号都由8086/8088CPU产生 - 最大模式
系统可包含一个以上的处理器
- 最小模式
当$MN/\overline{MX}$加上低电平时,CPU工作在最大模式,反之则在最小模式下
8086/8088寄存器
数据寄存器
为避免累赘,例如AL,AH类8位寄存器不列举
AX(Accumulator): 累加器,通常用作数据传输媒介BX(Base): 基址寄存器,通常用作存放内存的基地址,常与DS配合使用CX(Count): 计数寄存器,在循环和串操作指令中做计数器DX(Data): 数据寄存器,在寄存器间接寻址的I/O指令中存放I/O端口地址
地址指针寄存器
SP(Stack Pointer): 堆栈指针寄存器,它指向栈顶BP(Bace Pointer): 基址指针寄存器,常用来存放内存的基地址,常配合SS来使用
变址寄存器
SI(Source Index): 源变址寄存器,用作索引指针DI(Destination Index): 目的变址寄存器,用作索引指针
段寄存器
存放相应段的段地址
CS(Code Segment): 代码段寄存器SS(Stack Segment): 堆栈段寄存器DS(Data Segment): 数据段寄存器ES(Extra Segment): 附加段寄存器
控制寄存器
IP(Instructions Pointer): 指令指针寄存器FLAGS: 标志寄存器

物理地址与逻辑地址的转换(存储器分段)
物理地址 = 段基址 * 16 + 段内偏移地址
如段地址为1000H,偏移地址为1234H,则
物理地址 = $1000H * 16 + 1234H = 10000H + 1234H = 11234H$
堆栈操作
- 每次压栈(PUSH)和退栈操作(POP)均以字(双字节)为单位
- 栈的增长方向是从高地址到低地址
如将82F0H压栈,[SP] = F0H,[SP+1] = 82H,如下图所示

内存中的数据特点
- 数据再内存中从低地址到高地址顺序存放
- 数据位大于8位时,高字节放在高地址,低字节放在低地址
- 数据的地址指它的最低字节所在内存单元的地址
系统总线
- 按传输数据类型分类
- 数据总线
- 地址总线
- 控制总线
- 按相对CPU位置分类
- 片内总线
- 片外总线
按层次结构分
- CPU总线
- 系统总线
- 外部总线
总线结构
- 单总线结构:简单,但竞争严重
- 多总线结构:性能高,但组成复杂
性能指标
- 带宽
- 位宽
- 工作频率
$总线带宽 = (位宽/8)*(工作频率/每个存取周期的时钟数)$
8086/8088指令系统
寻址方式
- 立即寻址
eg.MOV AX, 1200H - 直接寻址
eg.MOV AX, [8000H] - 寄存器寻址
eg.MOV AX, BX - 寄存器间接寻址
eg.MOV AX, [BX] - 寄存器相对寻址
eg.MOV AX, [BX + 1] - 基址-变址寻址
指令中不允许同时出现两个基址寄存器或者两个变址寄存器
eg.MOV AX, [BX][SI]orMOV AX, [BX + SI] - 基址-变址-相对寻址
eg.MOV AX, [BX][SI]5
数据传送指令
MOV: 一般传输指令(源操作数和目标操作数不能同时为存储器操作数)PUSH/POP: 堆栈操作指令PUSHF/POPF: 将标志寄存器压栈或者从堆栈弹出XCHG: 交换指令IN/OUT: 输入输出指令LEA: 取偏移地址指令
算术运算指令
加法指令
ADD: 不考虑进位的加法指令ADC: 带进位的加法指令INC: 加一指令
减法指令
SUB: 不考虑借位减法指令SBB: 带借位的减法指令DEC: 减一指令NEG: 求补指令CMP: 比较指令
乘法指令
MUL: 乘法指令
除法指令
DIV: 除法指令
逻辑运算与移位指令
逻辑指令
AND: 逻辑‘与’指令OR: 逻辑‘或’指令NOT: 逻辑‘非’指令XOR: 逻辑‘异或’指令TEST: 测试指令
移位指令
SAL: 算术左移指令SAR: 算术右移指令SHL: 逻辑左移指令SHR: 逻辑右移指令ROL: 不带进位的循环左移指令ROR: 不带进位的循环右移指令RCL: 带进位的循环左移指令RCR: 带进位的循环右移指令
串操作指令
要预先设置源串指针(DS:[SI]),目标串指针(ES:[DI]),重复次数(CX),操作方向(DF),使用CLD or STD
重复前缀
共同特点,使用前要设置CX,每重复一次CX自减1,为0时停止
REP: 无条件重复REPE(Repeat if Equal): 相等重复REPZ(Repeat if Zero): 为0重复REPNE(Repeat if Not Equal): 不相等重复REPNZ(Repeat if Not Zero): 不为0重复
串操作指令
每次循环会使SI和DI自增一个字或者字节(取决于指令)
MOVS, MOVSB, MOVSW: 串传送CMPS, CMPSB, CMPSW: 串比较SCAS, SCASB, SCASW: 串扫描LODS, LODSB, LODSW: 串装入STOS, STOSB, STOSB: 串送存
每种串操作有三种格式,第一种格式是需要手动设置操作数的,第二种是默认使用预先设置的源串指针(DS:[SI]),目标串指针(ES:[DI])来按字节操作,第三种则是按字操作
程序控制指令
转移指令
JMP: 无条件转移指令(加修饰符FAR可段间调用)JC/JNC: 判断CF的状态,常用于比大小JZ/JNZ: 判断ZF的状态,常用于循环体的结束判断JO/JNO: 判断OF的状态,常用于有符号数的溢出判断JP/JPE: 判断PF的状态,用于判断运算结果低八位1的个数是否为偶数JA/JAE/JB/JBE: 判断CF或CF+ZF的状态,常用于无符号数的比较
更多指令查看下表
循环指令
循环次数由预先设置的CX决定
LOOP: 无条件循环指令
过程调用和返回
调用时将IP压入堆栈,如果是段间调用(FAR)还要先将CS压入堆栈
CALL: 调用子程序(加修饰符FAR可实现段间调用)RET: 从堆栈中弹出IP,返回到原程序
中断指令
INT: 中断程序调用,后跟中断类型码执行过程
- 将FLAGS压入堆栈
- 将INT指令的下一条指令的
CS、IP压栈 - 由中断类型码乘4获得中断向量存放的地址
- 将中断向量(中断服务程序入口地址)放入
CS、IP - 转入中断服务程序运行
IRET: 中断程序返回,恢复原程序的CS、IP、FLAGS
汇编
- 本文标题:微机原理知识汇总
- 本文作者:Shikang Xu
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!