跳转至

计算机的基本结构

8086的寄存器组

  • 寄存器在CPU内部,访问速度快,但是容量小
  • 一个16位的寄存器可以分成两份,分别存储高位信息和低位信息

指针寄存器SP/BP

  • 指针寄存器用于寻址内存堆栈中的数据
    • SP(Stack Pointer) 为堆栈指针寄存器,表示栈顶的偏移地址
      • SP不能用于其他目的
    • BP(Base Pointer) 为基址指针寄存器,表示数据在堆栈段中的基地址
  • SP和BP寄存器与SS段寄存器联合使用以确定堆栈中的存储单元地址

段寄存器CS/DS/SS/ES

  • 四个段寄存器
    • 代码段寄存器CS(Code Segment)
    • 数据段寄存器DS(Data Segment)
    • 堆栈段寄存器SS(Stack Segment)
    • 附加数据段寄存器ES(Extra Segment)
  • 段寄存器用来确定该段在内存中的起始地址

IP(Instruction Pointer)

  • 指令指针寄存器IP
    • 用于指示代码段中指令的偏移地址
  • 与代码段寄存器CS一同使用,用来确定下一条指令的物理地址
  • 计算机通过CS:IP寄存器来控制指令序列的执行流程
  • 程序不可以直接控制IP寄存器

标志寄存器

  • 用来记录或存放状态标志和控制信息
    • 状态标志位:用来记录当前运算结果的状态信息
      • CF进位标志
        • 进行加减运算时,最高有效位存在进借位时,CF=1
      • OF溢出标志
        • 运算结果[[溢出]]时,OF=1
      • ZF零标志
        • 运算结果为0时,ZF=1
      • SF符号标志
        • 运算结果的符号
      • PF奇偶标志
        • 运算结果低8字节中1的个数为偶数个时,PF=1
      • AF辅助标志
        • 低半字节有进位或借位时,AF=1
    • 控制标志位:用来存放控制CPU工作方式的标志信息
      • DF方向标志
      • IF中断标志
      • TF陷阱标志
  • 标志寄存器的设置:
    • 状态标志位是由CPU自动根据运算的结果设置
      • 状态标志位信息一般用作转移指令的控制条件
    • 控制标志位由程序设置
      • 控制CPU的工作方式

方向标志DF

  • 用于在串操作指令中,控制地址的变化方向
    • 0:自动增加
    • 1:自动减少

中断允许标志IF

  • 用于控制外部可屏蔽中断是否可以被处理器相应
    • 1:允许
    • 0:禁止

陷阱标志

  • 用于控制处理器是否进入单步操作方式
    • 0:正常工作
    • 1:单步执行指令

      单步执行指令:处理器在没条指令执行结束时,产生一个编号为1的内部中断 利用单步中断可以对程序进行逐条指令的调试,即单步调试模式

8086的存储器组织

  • 内存是存放指令和数据的部件,由多个内存单元组成
  • 8086的内存以字节编址:
    • 每一个内存单元都有唯一的地址(编号)
    • 每一个内存单元代表一个字节(内容)
  • 1word=2bytes
    • 低字节在低地址单元
    • 低位在低地址(小端法)

地址的组织方式

  • 物理地址:
    • 20位,代表一个唯一地址
  • 逻辑地址:
    • 程序指令中引用和操作的地址
    • 由段地址和偏移地址组成
    • 表示方式:段地址:偏移地址
  • 物理地址与逻辑地址的关系\(物理地址=10H\times段地址+偏移地址\)

分段管理

  • 将存储器分成若干个逻辑段
  • 段首地址必须为****0H,其有效地址****H 存放在段寄存器中
  • 段中某一个单元相对于段首的距离称为偏移地址
    • 偏移地址存放在偏移地址寄存器

CPU形成物理地址的过程

  • 过程:
    1. 在程序开始时确定段地址
    2. 在程序中给出16位偏移地址
  • 典型的操作:
    • 取指令:\(指令单元地址=(CS)\times 10H + IP\)
    • 堆栈操作:\(堆栈数据地址=(SS)\times 10H + 偏移地址\)
    • 内存数据:\(内存数据地址=(DS)\times 10H + 偏移地址\)

寻址方式

指令格式

- 操作数的形式: - 立即操作数 - 只能为源操作数 - 寄存器操作数 - 在指令中使用寄存器名 - 内存操作数 - 指令中给出内存地址,通常为有效地址EA,段地址在某个段寄存器中

[[内存操作数寻址方式]]