微机原理知识汇总

计算机组成

冯诺依曼计算机架构

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

微型计算机的工作过程

  • 取一条指令的工作过程
    取一条指令的工作过程
  1. 指令所在地址赋给程序计数器PC并送到地址寄存器AR
  2. PC自动地址加1,AR的内容不变
  3. 将地址寄存器AR的内容放在地址总线上,并送至内存储器,经地址译码器译码,选中相应单元
  4. CPU控制器发出读指令
  5. 在读指令的控制下,把选中内存单元的内容读到数据总线DB
  6. 将读出的内容经过数据总线送到数据寄存器DR
  7. 指令译码,DR将指令送到指令寄存器IR,然后再送到指令译码器ID

微处理器

指令的执行过程

执行一条指令需要执行的步骤

  1. 从存储器中取出指令
  2. 指令译码
  3. 读操作数(如果需要)
  4. 执行指令
  5. 写结果(如果需要)

指令的执行过程

微处理器组成

  • 运算器
    • 组成
      • 算术逻辑单元
      • 通用或专用寄存器组(可单独看成一个组成部分)
      • 内部总线
    • 功能
      • 实现数据的算术运算及逻辑运算
  • 控制器
    • 组成
      • 程序计数器
      • 指令寄存器
      • 指令译码器
      • 时序控制部件
      • 微操作控制部件
    • 功能
      • 指令控制
      • 时序控制
      • 操作控制

8086/8088

  • 16位CPU
  • 20位地址线,可寻址1M空间
  • 8086总线宽度16位,8088总线宽度8
  • 采用+5V电源,频率位5MHz
  • 采用并行流水线工作方式,通过设置指令预取队列实现(相当于有指令缓冲区)
  • 对内存空间实行分段管理
  • 支持多处理器系统
  • 内部结构框图
    8086/8088内部结构框图

8086/8088管脚及功能

  • 管脚示意图

8088管脚示意图

  1. : 地址、状态复用的引脚,三态输出
  2. : 中8位地址信号,三态输出
  3. $AD_0-AD_7$: 地址、数据分时复用的双向信号线,三态
  4. $IO/\overline{M}$: 输入输出/存储器控制信号,三态。低电平访问存储器,高电平访问$I/O$端口
  5. $\overline{WR}$: 写信号输出,三态。低电平为写操作
  6. $DT/\overline{R}$: 数据传送方向控制信号,三态。高电平CPU发送数据,低电平CPU接受数据
  7. $\overline{DEN}$: 数据允许输出,三态。低电平表示DB的数据有效
  8. $ALE$: 地址锁存信号,三态输出。高电平有效
  9. $\overline{RD}$: 读选通信号,三态输出,低电平有效
  10. $READY$: 外部同步控制输入信号,高电平有效
  11. $INTR$: 可屏蔽中断请求输出信号,高电平有效
  12. $NMI$: 非屏蔽中断请求输入信号,上升沿触发
  13. $\overline{INTA}$: 中断响应信号输出,低电平有效
  14. $HOLD$: 总线保持请求信号输入,高电平有效
  15. $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] or MOV 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指令的下一条指令的CSIP压栈
    • 由中断类型码乘4获得中断向量存放的地址
    • 将中断向量(中断服务程序入口地址)放入CSIP
    • 转入中断服务程序运行
  • IRET: 中断程序返回,恢复原程序的CSIPFLAGS

汇编


:D 一言句子获取中...