Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
  • 0
  • 0

微机原理及接口技术

Jacky
7 7 月, 2021
目录
  1. 基本架构
    1. 硬件系统
    2. 软件系统
    3. 微机工作过程
    4. 冯·诺依曼机
    5. 哈佛结构
  2. 8088/8086
    1. 特点
    2. 最小模式下的主要引脚信号
    3. 读取一条指令的控制过程
    4. 内部结构
    5. 实模式下的存储器寻址
    6. 系统总线
  3. 指令系统
    1. 指令与指令系统
    2. 指令格式
    3. 指令中的操作数
    4. 寻址方式
    5. 指令系统
    6. 程序控制指令
  4. 汇编语言程序设计
    1. 汇编语言源程序与汇编程序
    2. 设计与执行过程
  5. 半导体存储器
    1. 半导体存储器
    2. 微机中的存储器
    3. 存储单元的编址
    4. 存储器扩展技术
  6. 输入输出与中断技术
    1. IO接口的基本功能
    2. IO接口及其编址方式
    3. IO地址译码
    4. 简单接口芯片
    5. 输入输出方法
    6. 中断技术
  7. 可编程并行数字接口
    1. 可编程芯片
    2. 计数与定时
    3. 8253芯片特点
    4. 控制字
    5. 可编程并行接口8255

基本架构

硬件系统

  • 主机系统
    • CPU
      • 微处理器
        • 运算器
        • 控制器
        • 寄存器组
    • 存储器
      • 内存储器
        • 容量小速度快
        • 按单元组织
          • 每个单元对应一个唯一地址
          • 每个单元存1Byte数据,8位
          • 单元的个数称为内存容量
        • 工作方式
          • 随机存取存储器(RAM)
          • 只读存储器(ROM)
      • 外存储器
        • 联机外存
        • 脱机外存
    • 输入输出接口
      • 接口是CPU与外部设备间的桥梁
      • 数据缓存寄存
      • 信号电平或类型的转换
      • 实现主机与外设间的运行匹配
    • 总线
      • 是一组导线和相关的控制、驱动电路的集合
      • 是计算机系统各部件之间的传输地址、数据和控制信息的通道
      • 类型
        • 地址总线AB
        • 数据总线DB
        • 控制总线CB
  • 外部设备
    • 所有可以通过输入输出接口与计算机进行信息交换的电子设备
    • 不能与CPU直接进行信息交换的部件

软件系统

  • 软件
    • 为运行、管理和维护计算机系统或实现某一功能而编写的各种程序的总和及其相关资料
  • 系统软件
  • 应用软件

微机工作过程

  • 计算机的工作就是执行程序,程序是指令的序列
  • 逐条执行由指令构成的程序
  • 指令的执行过程
    • 指令
      • 由人向计算机发出、能够成为计算机所识别的命令
    • 取指令
      • 分析指令
        • 读操作数
          • 执行指令
            • 存放结果
    • 顺序执行
      • 一条指令执行完了再执行下一条指令
      • 执行时间
        • 取指令+分析指令+执行指令
    • 并行执行
      • 流水线工作方式
      • 同时执行多条指令
        • 总线利用率高
      • 执行时间
        • 第一条指令3∆t,其余每经过1∆t,就有一条指令结束执行

冯·诺依曼机

  • 存储程序工作原理
  • 运算器为核心
  • 读取一条指令的工作过程
    • 将指令所在地址赋给程序计数器PC
    • PC内容送到地址寄存器AR,PC自动加1
    • 将AR的内容通过地址总线送至内存储器,经地址译码器译码,选中响应单元 。
    • CPU的控制器发出读指令
    • 在读指令控制下,把所选中单元的内容(即指令操作码)经数据总线送到数据寄存器DR。
    • 指令译码
      • 数据寄存器DR将它送到指令寄存器IR,然后再送到指令译码器ID
  • 特点
    • 程序存储,共享数据,顺序执行
    • 顺序处理机,适合于确定的算法和数据的处理
  • 不足
    • 与存储器间有大量的数据交互,对总线要求很高
    • 执行顺序由程序决定,对大型复杂任务较困难
    • 以运算器为核心,处理效率低
    • 由PC控制执行顺序,难以进行真正的并行处理

哈佛结构

  • 以数据、存储器为核心
  • 指令和数据分别存放在两个独立的存储器模块中
  • CPU与存储器间指令和数据的传送分别采用两组独立的总线
  • 可以在一个机器周期内同时获得指令操作码和操作数

8088/8086

特点

  • 采用并行流水线
    • 设置指令预取队列
  • 内存空间分段管理
    • 将内存分为4个段并设置地址段寄存器,实现对1MB空间的寻址
    • 实模式存储器寻址
  • 支持协处理器
    • 工作模式
      • 最大模式
        • 多处理器,部分控制信号由外部总线控制器产生
        • 用于包含协处理器
      • 最小模式
        • 单处理器,所有控制信号由微处理器产生
      • 选择方式
      - 0 工作于最大模式
- 1 工作于最小模式

最小模式下的主要引脚信号

  • 完成一次访问内存或接口所需要的主要信号
    • 地址线和数据线
      • AD0-AD7
        • 低8位地址和低8位数据信号分时复用。在传输地址信号时为单向,传送数据信号时为双向。
      • A16-A19
        • 高4位地址信号,与状态信号分时复用
      • A8-A15
        • 8位地址信号
    • 主要控制信号
      • #WR
        • 写
      • #RD
        • 读
      • IO/#M
        • 0访问内存
        • 1访问接口
      • IO/M
        • 1访问内存
        • 0访问接口
      • #DEN
        • 低电平有效时,允许进行读/写操作
      • DT/#R
        • 数据接收器的传送方向控制
      • ALE
        • 地址锁存信号
      • RESET
        • 复位信号
  • 与外部同步控制信号
    • READY信号
  • 中断请求和响应信号
    • INTR
      • 可屏蔽中断请求输入端
    • NMI
      • 非可屏蔽请求输入端
    • #INTA
      • 中断响应输出端
  • 总线保持和响应信号
    • HOLD
      • 总线保持请求信号输入端。当CPU以外的其他设备要求占用总线时,通过该引脚向CPU发出请求。
    • HLDA
      • 总线保持响应信号输出端。CPU对HOLD信号的响应信号。

读取一条指令的控制过程

  • 读取数据所在的目标地址
    • 地址信号
    • 内存单元地址
    • IO接口地址
  • 发出读控制信号
    • 控制信号
  • 送出传输的数据
    • 数据信号

内部结构

  • 执行单元EU
    • 构成
      • 通用寄存器
        • 数据寄存器
          • AX
            • 累加器
              • 所有IO指令都通过AX与接口传送信息
              • 中间运算结果大多存AX
          • BX
            • 基址寄存器
              • 在间接寻址中用于存放基地址
                • 数据区
          • CX
            • 计数寄存器
              • 用于在循环或串操作指令中存放计数值
          • DX
            • 数据寄存器
              • 在间接寻址的IO指令中存放IO端口地址
              • 在32位乘除法运算时,存放高16位
        • 地址指针寄存器
          • SP
            • 堆栈指针寄存器
              • 栈顶偏移地址
          • BP
            • 基址指针寄存器,常用与在访问内存时存放内存单元的偏移地址。
              • 堆栈区
        • 变址寄存器
          • SI
            • 源变址寄存器
          • DI
            • 目标变址寄存器
      • ALU
      • FLAGS
        • 标志寄存器
          • 存放运算结果的特征
            • CF
              • 进位标志位
            • OF
              • 溢出标志位
            • ZF
              • 零标志位
            • SF
              • 最高位 1,SF=1
            • PF
              • 奇偶标志位
                • 低八位,1的个数为偶数,PF=1
            • AF
              • 辅助进位标志位
                • 低八位,Bit3向Bit4进位或借位,AF=1
          • 控制标志位
            • IF
              • 中断允许标志位
                • IF=1使CPU可以相应可屏蔽中断请求
            • TF
              • 陷阱标志位
                • 跟踪标志位
                  • 单步执行指令的工作方式
            • DF
              • 方向标志位
                • 在数据串操作时确定操作的方向
      • EU部分控制电路
    • 主要功能
      • 指令译码
      • 指令执行
      • 暂存中间运算结果
      • 保存运算结果特征
  • 总线接口单元BIU
    • 地址加法器
    • 段寄存器
      • CS
        • 代码段寄存器
          • 代码段的段基地址
            • 存放指令代码
      • DS
        • 数据段寄存器
          • 数据段的段基地址
            • 存放操作数据
      • ES
        • 附加段寄存器
          • 数据段的段基地址
            • 存放操作的数据
      • SS
        • 堆栈段寄存器
          • 堆栈段的段基地址
            • 存放暂时不用但需要的数据
      • IP
        • 控制寄存器
        • 指令指针寄存器
          • 下一条要取的指令的偏移地址
    • 指令预取队列
      • 并行流水线工作的基础
      • EU和BIU两个部分可以同时工作
    • 负责与内存或IO之间的数据传送
    • 在执行转移程序时,BLU使预取队列复位,从指定的新地址取指令,并立即传给执行单元执行。

实模式下的存储器寻址

  • 内存分段管理思想
    • 8088是16位体系结构的微处理器
    • 同时处理(产生)16位二进制码
      • 直接管理64K个内存单元
    • 8088需要管理管理1MB内存
  • 实模式下内存地址变换
    • 每个内存单元在整个内存空间中必须具备唯一物理地址
      • 20位
    • 内存单元的编址
      • 段基地址
        • 16位
        • 段的起始地址被称为段首
      • 段内地址(相对、偏移地址)
        • 16位
        • 段首偏移地址为0
    • 物理地址=段基地址x10H+偏移地址
  • 段寄存器的应用
    • 存放相应逻辑段的段基地址
    • 每类逻辑段的数量
      • 最多为64K个
  • 逻辑段与逻辑地址
    • 内存的分段是逻辑分段,不是物理段。
    • 同一程序模块装入主存,不同类型的段可以装入在相同/不同的物理空间
      • 两个逻辑段完全重合或部分重合
    • 两个不同程序模块装入主存时,同一类型的逻辑段也可以装入相同或不同的物理空间中。
  • 堆栈的概念
    • 内存中一个特殊区域,用于存放暂时不用或需要保护的数据
    • 常用于响应中断或子程序调用
    • 空栈
      • 栈顶=栈底
    • 满栈
      • 栈顶=栈首

系统总线

  • 总线时序
    • CPU工作时序
      • CPU各引脚信号在时间上的关系
    • 总线周期
      • CPU完成一次访问内存(或接口)操作所需要的时间
      • 一个总线周期至少包括4个时钟周期
  • 总线
    • 是一组导线和相关的控制、驱动电路的集合。是计算机系统各部件之间传输地址、数据和控制信息的通道。
    • 一般分类
      • 地址总线
      • 数据总线
      • 控制总线
    • 层次结构
      • CPU总线
      • 系统总线
      • 外部总线
  • 结构
    • 单总线结构
      • 系统效率低
      • CPU统一管理
    • 双总线
      • 面向CPU
      • 面向主存
    • 多总线
  • 基本功能
    • 数据传送
    • 仲裁控制
    • 出错控制
    • 总线驱动
  • 性能指标
    • 总线带宽(B/S)
      • 单位时间内总线上可传输的数据量
      • 总线位宽bit
        • 同时传送的数据位数
      • 总线的工作频率MHz
        • 总线带宽=(位宽/8)x(工作频率/每个存取周期的时钟数)

指令系统

指令与指令系统

  • 指令
    • 控制计算机完成某种操作的命令
  • 指令系统
    • 处理器所能识别的所有指令的集合
  • 指令的兼容性
    • 同一系列机的指令都是兼容的

指令格式

  • 操作码 [目标操作数], [源操作数]
  • 零操作数指令:操作码
  • 单操作数指令:操作码 操作数
  • 双操作数指令:操作码 操作数,操作数
  • 多操作数指令

指令中的操作数

  • 立即数
    • 参加操作的数据本身
      • 只能作为源操作数
      • 8位或16位
  • 寄存器
  • 存储器
  • 存储器操作数
    • 表现形式:[ ]

寻址方式

  • 指令直接给出的方式
    • 立即寻址
      • MOV AX,1200H
      • 仅适用于源操作数
  • 寄存器寻址
    • 参加计算的操作数在CPU的通用寄存器中
      • MOV SI,AX
  • 存放于寄存器中的寻址方式
    • 表现形式 [ 偏移地址 ]
    • 存储器操作数字长本身不确定,字长取决于寄存器操作数,或其他。
    • 直接寻址
      • 指令中直接给出操作数的偏移地址
        • MOV AX,[1200H]
          • 默认在数据段
        • MOV AX,ES:[1200H]
          • 段重设
    • 间接寻址
      • 操作数存放在内存中,数据在内存器中的偏移地址为方括号中寄存器中的内容。
      • [间址寄存器]
        • BX
        • SI
        • DI
        • BP
      • MOV BX,1200H
      • MOV AX,[BX]
    • 相对寻址
      • 操作数的偏移地址为寄存器的内容加上上一个偏移量
      • MOV AX,[BX+DATA]
        • MOV AX,[BX]DATA
      • 用于一维数组的操作
    • 基址、变址寻址
      • BX在数据段
      • BP在堆栈段
      • MOV SI,1100H
      • MOV BX,SI
      • MOV AX,[SI+BX]
      • 一维数组
    • 基址、变址、相对寻址
      • 基址寄存器内容+变址寄存器内容+位偏移
      • 二维表格
      • MOV DI,1100H
      • MOV BP,DI
      • MOV AL,BP5
        • 堆栈段
  • 隐含给出方式
    • 操作数在默认的地址中
    • MUL BL
      • AL x BL => AX

指令系统

  • 数据传送
    • 通用数据传送
      • 一般数据传送
        • MOV dest,src
        • 操作数字长必须相等
        • 两个操作数不允许同时为存储器操作数
        • 两个操作数不允许同时为段寄存器
        • 在源操作数是立即数时,目标寄存器不能是段寄存器
        • IP CS 不能作为目标操作数,FLAGES一般不会在指令中出现
      • 堆栈操作
        • 堆栈操作的原则
          • 先进后出
          • 以字为单位
        • 压栈 PUSH OPRD
        • 出栈 POP OPRD
      • 交换指令
        • XCHG REG,MEM/REG
          • 不可使用段寄存器
      • 查表转换
        • XLAT
          • 用BX的内容代表表格首地址,AL内容为表内偏移量,BX+AL得到要查找元素的偏移地址。
          • [BX+AL]=>AL
      • 字位扩展
        • 无符号数扩展规则在高位补0
        • 有符号数的符号位扩展到高位
        • CBW
          • AL扩展到AX
        • CWD
          • AX内容扩展到 DX AX
    • 地址传送
      • 取偏移地址指令LEA
        • 将变量的16位偏移地址写入目标寄存器
        • LEA REG,MEM
      • LDS
        • 32bit 的远地址指针写入目标寄存器
        • Load pointer usingDS
      • LES
        • Load pointer usingES
    • 标志传送
      • 影响标志位
      • LAHF
        • Load AH from Flags
      • SAHF
        • Store AH into FLags
      • PUSHF
        • Push flags onto stack
      • POPF
        • Pop flags off stack
    • 输入输出
      • 专门面向IO端口操作的指令
      • 端口地址在指令中的表示方式
        • 寻址方式
      • 指令功能
        • 从端口地址读入数据到累加器/将累加器的值输出到端口中
      • 指令格式
        • IN acc,PORT
          • AH/AL
        • OUT PORT,acc
          • AH/AL
      • 指令寻址方式
        • 根据端口地址码的长度,指令具有两种不同的端口地址表现形式。
        • 直接寻址
          • 端口地址为8位,指令中直接给出8位端口地址
          • 寻址256个端口
        • 间接寻址
          • 端口地址为16位时,指令中的端口地址必须由DX指定
          • 可寻址64K个端口
  • 算术运算
    • 加法运算
      • 普通加法指令
        • ADD OPRD1,OPRD2
          • OPRD1+OPRD2=>OPRD1
      • 带进位的加法指令
        • ADC OPRD1,OPRD2
          • OPRD1+OPRD2+CF=>OPRD1
        • 用于多字节数相加,使用前要将CF清零
      • 加1指令
        • INC OPRD
          • 不能是立即数或段寄存器
          • 常用于修改地址指针
          • OPRD+1=>OPRD
          • 不影响CF
    • 减法运算
      • 普通减法指令
        • SUB OPRD1,OPRD2
          • OPRD1-OPRD2=>OPRD1
      • 考虑借位的减法指令
        • SBB OPRD1,OPRD2
          • OPRD1-OPRD2-CF=>OPRD1
            • 多字节数的相减运算
      • 减一指令
        • DEC OPRD
          • OPRD-1=>OPRD
          • 不影响CF
      • 求补指令
        • NEG OPRD
          • 0-OPRD=>OPRD
          • 对一个负数取补码就相当于用零减去此数
          • 一般CF=1,除非操作数为0
          • 求负数的绝对值
      • 比较指令
        • CMP OPRD1,OPRD2
          • OPRD1-OPRD2
          • 执行结果不影响目标操作数,仅影响标志位
          • 无符号数的比较
            • CMP AX,BX
              • AX ≥ BX => CF = 0
              • AX < BX => CF = 1
              • AX = BX => CF=1, ZF=1
          • 有符号数的比较
            • OF==SF
              • AX ≥ BX
            • OF != SF
              • AX < BX
    • 乘法运算
      • 无符号的乘法指令
        • MUL OPRD
          • OPRD为字节数
            • AL x OPRD => AX
          • OPRD 为16位数
            • AX x OPRD => DX AX
          • OPRD不是立即数
      • 带符号的乘法指令IMUL
        • IMUL OPRD
        • 对两个操作数取补码(对负数按位取反+1,正数不变)
        • 做乘法运算
        • 对乘积取补码
      • 隐含寻址
        • 被乘数放AL或AX
        • 结果放AX或DX AX
      • 乘法指令执行结果为相乘数的双倍字长
    • 除法运算
      • 无符号除法指令
        • DIV OPRD
      • 有符号除法指令
        • IDIV OPRD
      • 若 OPRD 为字节数
        • AX/OPRD
          • AL=商
          • AH=余数
      • 若 OPRD 为双字节数
        • DXAX/OPRD
          • AX=商
          • DX=余数
      • 指令要求被除数是除数的双倍字长
  • 逻辑运算和位移
    • 逻辑运算
      • 特点
        • 操作数不是立即数
        • 除“非”运算指令,其余指令的执行都会影响除AF外的标志位
        • 无论执行结果如何,都会使标志位OF=CF=0
        • “非”运算指令的执行不影响标志位
      • 与
        • AND OPRD1,OPRD2
          • 实现两操作数按位相与的运算
            • AND BL,[SI]
          • 使目标操作数的某些位不变,某些位清零
            • AND AL,0FH
          • 在操作数不变的情况下使 CF 和 OF 清零
            • AND AX,AX
      • 或
        • OR OPRD1,OPRD2
          • 实现两操作数相“或”
            • OR AX,[DI]
          • 是某些位不变,某些位置 1
            • OR CL,0FH
          • 在不改变操作数的情况下 CF=OF=0
            • OR AX,AX
      • 非
        • NOT OPRD
          • 操作数按位取反再送回原地址
      • 异或
        • XOR OPRD1,OPRD2
          • 两操作数按位异或,结果送目标地址
          • 清零
            • XOR AX,AX
              • 性能高
          • XOR BL,80H
            • 相同为0不同为1
      • 测试
        • TEST OPRD1,OPRD2
          • 执行“与”,位运算的结果不送回目标地址
    • 移位操作
      • 非循环移位
        • 逻辑左移
          • SHL OPRD,1
          • SHL OPRD,CL
          • 最高位移入CF,最低位补0
        • 算术左移
          • SAL OPRD,1
          • SAL OPRD,CL
          • 最高位移入CF,最低位补0
        • 逻辑右移
          • SHR OPRD,1
          • SHR OPRD,CL
          • 最低位移入CF,最高位补0
        • 算术右移
          • SAR OPRD,1
          • SAR OPRD,CL
          • 最高位复制并右移,最低入移入CF
        • 左移乘法运算,右移除法运算
      • 循环移位
        • 不带进位
          • 左移ROL
          • 右移ROR
        • 带进位
          • 左移RCL
            • 最高位移入CF,再移入最低位
          • 右移RCR
            • 最低位移入CF,在移入最高位
        • 循环移位指令
          • 用于某些位状态的测试
          • 高位部分和低位部分的交换
          • 与非循环移位指令一起组成32位或更长字长的移位
      • 移位次数为1或存CL
  • 程序控制
  • 处理器控制
  • 串操作
    • 说明
      • 针对数据块或字符串的操作
      • 可以实现存储器到存储器的数据传送
      • 待操作的数据串成为源串,目标地址成为目标串
      • 明确串所在的区域、首地址、长度、操作方向
    • 要求
      • 源串一般在数据段,偏移地址由SI指定,允许段重设,不允许在代码段
      • 目标串必须在附加段,偏移地址有DI指定。
      • 串长度由CX指定
      • 方向由DF标志位决定,指令根据DF状态自动修改地址指针
        • DF=0
          • 增地址方向
        • DF=1
          • 减地址方向
    • 重复前缀
      • 无条件重复
        • REP
          • 当CX≠0 REP后的指令继续重复执行
          • 常用传送类指令前,未完成则继续传送
      • 条件重复
        • 相等(为零)重复:REPE(REPZ)
          • CX≠0 and ZF =1,则前缀后的指令将继续重复执行
        • 不相等(不为零)重复:REPNE(REPNZ)
          • CX≠0 and ZF=0,则前缀后的指令将继续重复执行
    • 串操作指令
      • 串传送
        • MOVS
          • 增地址,操作结束时
            • 指针指向串尾+1
          • 减地址,操作结束时
            • 指针指向串尾-1
          • 源数据串传送到目标地址
          • MOVS OPRD1,OPRD2
            • 用于段重设的情况
          • MOVSB
          • MOVSW
          • 串传送指令常与无条件重复前缀REP连用
      • 串比较
        • CMPS
          • 增地址,操作结束时
            • 指针指向结束位+1
          • 减地址,操作结束时
            • 指针指向结束位-1
          • 用于两个数据串的比较
          • 目标串-源串,结果不写回目标地址
          • 常与条件重复前缀连用
            • 前缀的操作对标志位不影响
          • CMPS OPRD1,OPRD2
          • CMPSB
          • CMPSW
      • 串扫描
        • SCAS
          • 常用于在指定存储区域中寻找某个关键字
          • SCAS OPRD
          • SCASB
          • SCASW
          • 源操作数是AX或AL
      • 串装入
        • LODS
          • LODS OPRD
            • 数据段
          • LODSB
          • LODSW
          • 操作
            • 对字节 AL <= [DS:SI]
            • 对字 AX <= [DS:SI]
          • 一般不加重复前缀
          • 用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口
      • 串存储
        • STOS OPRD
        • STOSB
        • STOSW
        • 操作
          • 对字节:AL=> [ES:DI]
          • 对字: AX => [ES:DI]
        • 应用
          • 常用于将内存中某个区域置为同样的值
          • 此时将传送的数据放入AL或AX
          • 确定操作方向和区域大小
          • 使用无条件重复前缀和串存储指令可以实现数据传送
      • 注意
        • 需要定义附加段
          • 目标操作数必须在附加段
        • 需要设置数据的操作方向
          • DF的状态
        • 源串和目标串指针分别放SI和DI
        • 串长度必须由CX指定
        • 传送类指令加无条件重复前缀
        • 串比较类指令加条件重复前缀,但前缀不影响ZF的状态

程序控制指令

  • 转移指令
    • 无条件转移指令
      • JMP OPRD
        • 目标地址
          • 段内转移
            • 段内直接转移
              • 给出目标地址
                • JMP LABEL
                  • 近地址
            • 段内间接转移
              • 由指令中的寄存器或存储器操作数给出目标地址
                • JMP BX
                • JMP WORD PTR[BX]
          • 段间转移
            • 转移的目标地址不在当前代码段内
            • 目标地址为32位,包括段地址和偏移地址
              • 指令中直接给出目标地址
                • 段间直接转移
                  • JMP FAR Label
              • 由指令中32位存储器操作数指出目标地址
                • 段间间接转移
                  • JMP DWORD PTR[BX]
                • 四个内存单元表示
    • 条件转移指令
      • 看状态标志位
        • 满足一定条件则转移到目标地址继续执行
        • 条件转移为段内短转移,即转移范围-128~+127
      • 基于1个标志位状态实现转移的指令
        • JC/JNC
          • 判断CF,用于比较无符号数的大小
        • JZ/JNZ
          • 判断ZF,用于循环体的结束判断
        • JO/JNO
          • 判断OF
            • 常用有符号数溢出的判断
        • JP/JPE
          • 判断PF
            • 判断低8位中1的个数是否为偶数
        • JS/JNS
          • 判断SF
            • 判断数的性质
      • 基于2、3个标志位实现状态转义的指令
        • JA/JAE/JB/JBE
          • 判断CF或CF+ZF状态,常用于比无符号数
        • JG/JGE/JL/JLE
          • 判断SF+OF或SF+OF+ZF状态,比较有符号数
      • 基于CX内容跳转的指令
        • JCXZ
          • 当CX=0时跳转
  • 循环控制指令
    • 循环范围
      • 以当前IP为中心的-128~+127范围内循环
    • 循环次数由CX寄存器指定
    • 循环指令
      • LOOP LABEl
        • 无条件循环指令
          • CX≠0
            • DEC CX
            • JNZ LABEL
      • LOOPZ LABEL
        • 先使CX-1,再根据CX中的值以及ZF值来决定是否继续循环
          • CX≠0,且ZF=1
      • LOOPNZ LABEL
        • CX ≠ 0,且ZF=0
  • 过程调用指令
    • 调用一个子过程
    • 保护返回地址
    • 调用指令的执行过程
      • 保护断点
        • 将调用指令的下一条指令的地址(断点)压入堆栈
      • 获取子程序的入口地址
        • 子程序第1条指令的地址
      • 执行子过程
        • 功能实现,参数的保存及恢复
      • 恢复断点,返回原程序
        • 将断点偏移地址由堆栈弹出
    • 过程调用
      • 段内调用
        • 段内直接调用
          • 直接给出子程序的入口地址
            • CALL TIMER
        • 段内间接调用
          • 由内存获得子程序的入口地址
            • CALL WORD PTR[SI]
              • 子程序的入口地址在内存中,数据段
        • 被调用程序与调用程序在同一代码段中
      • 段间调用
        • 段间直接调用
          • CALL FAR TIMER
            • 直接调用
        • 段间间接调用
          • CALL FAR DWORD PTR[SI]
            • 间接调用
              • 数据段
                • 低地址IP,高地址CS
        • 子程序与原调用程序在不同代码段中
          • 调用前需保护断点的段基地址和偏移地址
            • 先压入断点的CS,再压入IP
    • 返回指令
      • RET
        • 子程序最后一条指令必须是RET
  • 中断指令
    • 某种异常或随机事件使处理器暂时停止正在运行的程序,转去执行一段特殊处理程序,并在处理结束后返回原程序被中断处继续执行的过程。
      • 异常、随机事件
      • 保护断点地址,FLAGS内容
    • 引起CPU产生一次中断的指令
    • INT n
      • 终端类型码
    • n*4
      • 存放中断服务子程序入口地址的单元的偏移地址
        • 终端向量表
          • 0~003FFH
            • 数据段
          • 1K个字节单元
      • +0,+1入口偏移地址
        • IP
      • +2,+3入口段地址
        • CS
    • 执行过程
      • 将FLAGS压入堆栈
      • 将INT指令的下一条指令的CS IP压栈
      • 由 n x 4 得到存放中断向量的地址
      • 将中断向量(中断服务程序入口地址)送CS IP
      • 转入中断服务程序
    • 中断返回指令
      • IRET
        • 恢复断点
        • 恢复标志寄存器内容
  • 处理器控制指令
    • 这类指令用来CPU进行控制,修改标志寄存器,使CPU暂存,使CPU与外部设备同步等
    • 处理器控制指令的控制对象是CPU
    • 均为零操作数格式指令
    • 与外部设备的同步
    • 对标志位的操作
      • 置标志位状态
        • CLC
          • 清进位标志位
        • STC
          • 进位标志位置1
        • CMC
          • 进位标志位取反
        • CLD
          • 清方向标志位,串操作地址从低地址到高地址
        • STD
          • 方向标志位置1,串操作从高地址到低地址
        • CLI
          • 清中断标志位,关中断
        • STI
          • 中断标志位置1,开中断

汇编语言程序设计

汇编语言源程序与汇编程序

  • 汇编语言源程序
    • 用助记符编写
  • 汇编程序
    • 源程序的编译程序

设计与执行过程

  • 输入汇编语言源程序EDIT

半导体存储器

半导体存储器

  • 能表示二进制 0,1
  • 具有记忆功能的半导体
  • 能放一位二进制的半导体器件为一个存储元
  • 每个存储器单元由8个存储元构成
  • 分类
    • 内存储器
      • 随机存取存储器RAM
        • 静态存储器SRAM
          • 双稳态电路
            • 稳定 速度快 贵
              • SRAM6264
                • 8K x 8b = 8KB
                • A0-A12
                • D0-D7
                • #OE
                  • 读
                • #WE
                  • 写
                • 片选:#CS1,CS2
                • 与系统的连接
                  • 0-8191
                  • 译码电路的设计
                    • 全地址译码
                      • 用全部的高位地址信号作为译码信号,使得存储器芯片的每一个单元都占据一个唯一的内存地址
                    • 部分地址译码
                      • 用部分高位地址信号作为译码信号,使得被选中存储器芯片占有几组不同的地址范围
                      • 浪费地址
                      • 地址多空间少的时候采用
        • 动态存储器DRAM
          • 电容
            • 不稳定
            • 定时刷新
              • 对存储元重新读或写(充电、放电)
        • 可以随机读写
        • 掉电后内容丢失
      • 只读存储器ROM
        • 掩模ROM
        • 一次性可写ROM
        • EPROM
          • 特点
            • 可多次编程写入
            • 掉电后内容不丢失
            • 内容的擦除需用紫外线擦除器
              • FF
            • 稳定性高,使用时常用做程序存储器,存放响应的控制程序
          • EPROM 2764
            • 8K x 8bit
            • A0-A12
            • D0-D7
            • #OE
              • 读出
            • #CE
            • 编程脉冲输入#PGM
              • 编程写入
            • 引脚与6264完全兼容
            • 擦除
              • 紫外光照射
        • EEPROM
          • 可在线编程写入
          • 掉电内容不丢失
          • 可电擦除
          • 工作方式
            • 数据读入
            • 编程写入
              • 字节写入
              • 自动页写入32Byte
            • 擦除
              • 字节擦除
              • 片擦除
          • 98C64A
            • 8K x 8bit
            • A0-A12
            • D0-D7
            • #OE
              • 输出允许
            • #WE
              • 写允许信号
            • #CE
              • 片选信号
            • READY/#BUSY
              • 状态输出
          • 应用
            • 可通过程序对程序读写
            • 当READY时才能写
              • 根据参数定时写入
              • 轮询
              • 中断控制
        • Flash
          • 通过向内部控制寄存器写入命令的方式来控制芯片的工作方式
          • 通过读状态寄存器的值,获取工作状态
          • 写入和擦除需要12V编程电压
          • 工作方式
            • 数据读出
              • 读单元内容
              • 读内部状态寄存器
              • 读芯片厂家及器件标记
            • 编程写入
              • 数据写如,写软件保护
            • 擦除
              • 字节擦除、块擦除、片擦除
              • 擦除挂起
  • 技术指标
    • 存储容量
      • 存储单元个数 x 每个单元的二进制数位数
    • 存取时间
      • 实现一次读写所需要的时间
    • 存取周期
      • 连续启动两次独立的存储器操作所需间隔的最小时间
    • 可靠性,功耗

微机中的存储器

  • 内存储器
    • 主内存
    • 高速缓冲存储器
  • 外存储器
    • 联机外存
      • 硬盘
        • 低速,廉价
    • 脱机外存
      • 光盘
  • 存储器系统
    • 使整个系统的存储速度接近最快的那个存储器,容量接近最大的存储器,价格接近最便宜的存储器
    • Cache 存储器系统
      • 高速缓冲存储器和主内存构成,由硬件系统管理
        • 对程序员透明
        • 提高CPU访问内存的存取速度
      • CPU–Cache–主内存
        • 命中
          • 命中率足够高时
        • 不命中
        • 系统存取时间
          • 命中率 x Cache存取时间 + 不命中率 x 主存存取时间
    • 虚拟存储器系统
      • 主内存
      • 硬磁盘
      • 操作系统管理
      • 对应用程序员是透明的
      • 主要设计目标:扩大存储容量
  • 片内存储部件
    • 通用寄存器
    • 指令数据缓冲栈

存储单元的编址

  • 8088总线信号
    • A19-A0
    • #RD
    • #WR
    • IO/#M
    • #MEMR
    • #MEMW
    • #IOR
    • #IOW
    • A15-A0
  • 高位地址
    • 片选地址
      • #CS低电平有效表示选中该芯片
      • 译码电路
        • 将输入的一组高位地址信号通过变换,产生一个有效的输出信号,用于选中某一个存储器芯片,从而确定了该存储器芯片在内存中的地址范围
  • 低位地址

存储器扩展技术

  • 单元数 x 每单元的位数
  • 用多片存储器芯片构成一个需要的内存空间
  • 各存储器芯片在整个内存中占据不同的地址范围
    • 任一时刻只有一片或一组芯片被选中
  • 扩展方法
    • 位扩展
      • 每单元字长的扩展
        • DRAM 2164A
          • 64K x 1bit
          • 矩阵地址信号
          • 8片构成64KB的存储体
          • 地址信号并联
    • 字扩展
      • 确保芯片具有完全不同的地址范围
      • 片选信号
    • 字位扩展
      • 先位扩展再字扩展

输入输出与中断技术

IO接口的基本功能

  • 速度匹配
    • 数据的缓存与暂存
  • 信号驱动能力
  • 信号形式与电平的匹配
    • 信号类型转换
  • 信息格式转换
  • 时序匹配
  • 总线隔离
    • 三态门

IO接口及其编址方式

  • 接口电路中用于缓存数据及控制信息的部件
    • 数据端口
    • 状态端口
    • 控制端口
  • 先找到端口所在的接口电路芯片、片选
  • 再在该芯片上找具体访问的端口、片内寻址
  • 端口地址=片选地址(高位地址)+片内地址
  • 8088/8086可寻址64K个端口
    • 独立编制
    • IO/#M
      • A15-A0
      • 0-FFFFH

IO地址译码

  • 目的
    • 确定端口的地址
  • #IOR、#IOW
  • IO/#M=1
  • #RD=0
  • #WR=0
  • 指令
    • OUT
      • #IOW
    • IN
      • #IOR

简单接口芯片

  • 简单接口电路
    • 接口的分类
      • 按传输信息的方向
        • 输入
        • 输出
      • 按传输的信息类型
        • 数字
        • 模拟
      • 按传输信息的方式
        • 并行
        • 串行
    • 特点
      • 输入接口
        • 要求对数据具有控制能力
        • 三态门
      • 输出接口
        • 要求对数据有锁存能力
        • 锁存器

输入输出方法

  • 无条件传送
    • 要求外设总是处于准备好状态
    • 优点
      • 软件及接口硬件简单
    • 缺点
      • 只适用于简单外设 LED 等
  • 查询工作方式
    • 轮询
    • 仅当条件满足时才能进行数据传送
    • 每满足一次条件只能进行一次数据传送
    • 适用场合
      • 对外设并不总是准备好
      • 对传输速率和效率要求不高
    • 工作条件
      • 外设应提供设备状态信息
      • 接口应具备状态接口
    • 优点
      • 软硬件比较简单
    • 缺点
      • CPU效率低,数据传送的实时性差,速度慢
  • 中断控制方式
    • 外设在需要时向CPU提出请求,CPU再为它服务,服务结束后在外设不需要时,CPU可以执行自己的程序。
    • 优点
      • CPU效率高,实时性好,速度快
    • 缺点
      • 程序编制相对复杂
  • DMA控制方式
    • 外设之季节与存储器进行数据交换,CPU不再担当数据传输的中介
    • 总线有DMA控制器DMAC进行控制
    • CPU放弃总线控制权
    • 内存外设的地址和读写控制信号均由DMAC提供
    • 工作过程
      • 外设向DMAC发出DMA控制请求DRQ
      • DMAC收到请求后,向CPU发出总线请求HOLD
      • CPU完成当前总线周期后会立即发出HLDA,对HOLD进行响应
      • DMAC收到HLDA后就开始控制总线,并向外设发出DMA响应信号DACK
    • 工作方式
      • 周期窃取
        • 每个DMA周期只传送一个字节或一个字就立即释放总线
      • 数据块传送
        • DMAC在申请到总线后,将一块数据传送完后才释放总线,而不管中间DREQ是否有效
      • 直接存取方式
        • DMA的数据传送请求直接发到主存储器,得到相应后,整个工作过程在DMA控制器中由硬件完成

中断技术

  • 基本概念
    • CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序,以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。
      • 事件
        • 中断源
      • 中断服务(处理)子程序
    • 引入中断
      • 提高对外设响应的实时性
      • 提高CPU的利用率
        • 避免CPU不断检测外设状态的过程
  • 中断类型
    • 内部中断
      • 异常中断
        • 异常事件引起
      • 软件中断
        • 中断指令引起
    • 外部中断
      • 可屏蔽中断
        • INTR
          • 一般过程
            • 中断请求
              • INTR应该保持到中断被处理为止
              • CPU响应中断后,中断请求信号应及时撤销
            • 中断源识别
              • 软件查询法
              • 中断矢量法
                • 由中断源提供中断类型号,CPU根据类型确定中断源
            • 中断判优
              • 优先级原则
                • 低优先级的中断程序允许被高优先级的中断源锁中断
              • 排队原则
                • 先来先响应
              • 中断控制器判优
            • 中断响应
              • #INTA
                • 向中断源发出#INTA中断响应信号
                • 关中断
                  • 不允许响应其他中断
                • 保护硬件现场
                  • 将FLAGS压入堆栈
                • 保护断点
                  • 将CS、IP压入堆栈
                • 获得中断服务程序入口地址
            • 中断处理(服务)
              • 保护软件现场(参数)
              • 开中断STI
              • 中断处理
              • 关中断CLI
              • 恢复现场
            • 中断返回
              • 执行IRET指令
                • 使IP CS 和 FLAGS 从堆栈弹出
      • 非可屏蔽中断
        • NMI
          • 先#INTA周期
          • 中断类型码固定或指令输出
  • 中断向量表
    • 存放各类中断的终端服务程序的入口地址
    • 位于内存00000H~003FFFH
      • 1KB
      • 256个
    • 每个入口占用4Bytes,低字段为段内偏移,高字段为段基址

可编程并行数字接口

可编程芯片

  • 可以通过软件命令,控制芯片的工作方式
  • 数据传输方向
  • 输入输出方式

计数与定时

  • CLK
  • 计数脉冲周期恒定
    • 定时

8253芯片特点

  • 可编程的逻辑器件
  • 非通道型的接口,具有特定功能
  • 可实现计数和定时
  • 工作方式
    • 减法计数
    • 计数值减为0时输出相应控制信号
    • 输出控制信号的形式可通过软件设置
  • 外部引线及内部接口
    • D0-D7
    • #CS
    • #RD
    • #WR
    • A0 – A1
    • CLK
      • 时钟脉冲输入
    • GATE
      • 门控信号输入
    • OUT
      • 定时输出
    • 有三组完全独立的、相同的减法计数器和定时器
      • 16位初值寄存器
      • 16位计数寄存器
    • 控制寄存器
      • 存放控制命令字
  • 工作方式
    • 方式0
      • 软件启动、不自动重复计数
      • 计数结束输出高电平
    • 方式1
      • 硬件启动、不自动重复计数
      • 计数开始输出低电平,结束后又变高
    • 方式2
      • 软硬件启动,自动重复计数
      • 计数到最后一个脉冲时输出低电平
    • 方式3
      • 软硬件启动,自动重复计数
      • 输出对称方波
    • 方式4
      • 软件启动,不重复计数
      • 计数结束输出一个CLK宽度的低电平
    • 方式5
      • 硬件启动,不重复计数
      • 计数结束输出一个CLK宽度的低电平
    • 两次写操作
      • 先写控制字
      • 再写计数初值
  • 与系统的连接
  • 计数启动方式
    • 由GATE端信号的形式决定
      • 软件启动
        • GATE
      • 硬件启动
        • GATE有一个上升沿

控制字

  • 用于设定各计数器的工作方式

可编程并行接口8255

  • 通道型接口
    • 用于数据的输入或输出
  • 2个8位接口PAPB
  • 一个可拆分为两个4位端口PC
  • 各端口均具有数据的控制和锁存能力
  • 通过编程,设置各端口工作在某一确定状态
  • 工作方式
    • 基本输入输出方式0
      • 相当于三个独立的8位简单接口
      • 各端口既可设置为输入也可以作为输出,但不能同时输入输出
      • C端口可以是一个8位简单接口,也可以拆分为两个独立的4位端口
      • 常用于连接简单外设,适用于无条件或查询方式
    • 选通工作方式1
      • 利用一组选通控制信号控制A、B的数据输入输出
      • A B 作为输入或输出口,C口的部分位置选通控制信号
      • A B 作为输入或输出时选通信号不同
    • 双向传送方式2
      • 可以作为输入又可以作为输出
      • 只有A端口可工作在方式2下
  • 方式控制字
    • 用于确定3个端口的工作方式及数据传送方向
  • 位控制字
    • 仅用于C
    • 可设置C某位的初始状态
    • 当其工作于方式0下且作为输出口时,一般需要对作为输出的位设置初始状态(即初始化)
0
本文系作者 @Jacky 原创发布在 Jacky's Blog。未经许可,禁止转载。
数据结构与算法
上一篇
我的 zsh
下一篇

评论 (0)

再想想
暂无评论

近期评论

  • Jacky 发表在《留言板》
  • 菜鸟 发表在《留言板》
  • merlin 发表在《留言板》
  • orz 发表在《Xcode 中使用 Clang-format》
  • Jacky 发表在《关于》
Copyright © 2016-2025 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习

搜索

  • Mac
  • Apple
  • OS X
  • iOS
  • macOS
  • Linux
  • 阿里云
  • WordPress
  • 运维
  • macOS Sierra

Jacky

Go Python C C++ | 弱冠之年 | 物联网工程
183
文章
192
评论
267
喜欢