3.1 概述

3.1.0指令系统

复杂指令集(CISC),指令长度不一
指令由操作码和操作数组成
notion image
  • 42种助记符(供人类程序猿👨‍💻编程使用)
  • 这些助记符实现33种功能
  • 助记符和不同寻址方式结合,构造出111种指令
  • 编译器将这些指令编译成CPU能够理解的255种操作码
这种设计使得程序员只需记住少量助记符(42种)就能编写出使用全部255种操作码的程序,大大简化了编程过程。

3.1.1源操作数的寻址方式

寻址方式就是在指令中给出寻找操作数或操作数所在地址的方法。执行任何一条指令都需要操作数。
指令操作常伴有从右向左传送数据的内容,所以常把左边操作数称为目的操作数,而右边操作数称为源操作数。
一下寻址方式都针对源操作数,也就是右边的操作数

寄存器寻址

寄存器寻址是指在指令中将指定寄存器的内容作为操作数。因此,指定了寄存器就能得到操作数。
在寄存器寻址方式中,用符号名称来表示寄存器,例如:
notion image
notion image
上图完整的表示了寄存器寻址的示意图。包括通过PSW的RS1、RS2选择工作寄存器组等过程。寄存器寻址的一个优势在于代码紧凑,通常为一个字节
寄存器寻址的寻址范围包括:
  • 4个寄存器组共32个通用寄存器
    • 但在指令中只能使用当前寄存器组。因此,在使用前要通过指定PSW中的RS1、RSO,以选择使用的当前寄存器组。
  • 部分特殊功能寄存器,例如累加器A、AB寄存器对以及数据指针DPTR。

直接寻址

  • 在指令中直接给出操作数单元的地址
    其功能是把片内数据储存器中3AH单元内的数据传送给累加器A
    notion image
    • 直接寻址方式只能给出8位地址,因此只能访问有限的区域(片内数据存储器),也就是:
      • 低128位单元,在指令中直接以单元地址形式给出
      • 特殊功能寄存器
        • 这时除可以单元地址形式给出外,还可以寄存器符号形式给出。虽然特殊功能寄存器可以使用符号标志,但在指令代码中还是按地址进行编码的。
        • 直接寻址是访问特殊功能寄存器的唯一方法

    立即寻址

    • 在指令中直接给出操作数
    “#”后面的就是一个16位(H表示16进制,16进制下4位,二进制下16位)立即数,实际上就是直接对这个数操作,和“地址”没啥关系
    这个“立即数”是直接和代码一起储存在程序储存器里的,如下图所示

    寄存器间接寻址

    • 寄存器间接寻址是指在指令中给出的寄存器内容是操作数的地址从该地址中取出的才是操作数。
      • 可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址方式中,寄存器中存放的则是操作数的地址,也就是说,指令的操作数是通过寄存器间接得到的。因此,称为寄存器间接寻址。
        notion image
    • 寄存器间接寻址的寻址范围:
      • 片内数据存储器的低128单元只能采用R0、R1为间接寻址寄存器
        • 片外数据存储器的64 KB单元,使用DPTR作为间址寄存器,其形式为@DPTR,例如:MOVX A,@DPTR,其功能是把DPTR指定的片外数据存储器单元的内容送累加器A
        • 片外数据存储器低256单元
        • notion image
        • 堆栈区
        • notion image

      位寻址

      通常我们只能对一个字节(8个二进制位)整体操作,在特殊情况下可以对一个字节中具体的二进制位进行操作,这就是80C51的位处理功能
      • 位寻址的寻址范围和寻址方式
        • notion image

      相对寻址

      notion image
      • 相对转移指令
        • notion image
        • 基础款:
        • 进阶款(使用label(LOOP),编译时会自动算出所需的偏移量
       
      notion image
      notion image

      变址寻址

      notion image
      notion image
      变址寻址指令的特点:
      1. 只能对程序储存器进行寻址,或者说是专门针对程序存储器的寻址方式
      1. 变址寻址指令只有三条:
        1. 前两条是程序读指令,后两条是无条件转移指令
          notion image

      目的操作数的寻址

      上面所讲的各种方法都是针对源操作数的,而目的操作数也有寻址的问题
      notion image
      目的操作数的寻址方式只有4种方式:
      1. 寄存器寻址
      1. 直接寻址
      1. 寄存器间接寻址
      1. 位寻址

      3.1.2 指令格式

      一条指令通常由操作码操作数两部分构成
      • 操作码用来规定指令所完成的动作
      • 操作数表示具体的对象
        • 如3.1.1所述,操作数可能是一个具体的数据,也可能是指出取得数据的地址或符号
      单片微机中,指令都是不定长的变长指令

      单字节指令

      指令只有一个字节,操作码和操作数同在一个字节中。在80C51系列的指令系统中,共有49条单字节指令。
      notion image

      双字节指令

      双字节指令包括两个字节。其中一个字节为操作码,另一个字节是操作数。在80C51系列的指令系统中,共有45条双字节指令。
      notion image
      MOV A共用一个字节(操作码+目的操作数),立即数占一个字节(源操作数)

      三字节指令

      在三字节指令中,操作码占一个字节,操作数占两个字节。其中操作数既可能是数据,也可能是地址。在80C51系列的指令系统中,共有17条三字节指令。
      notion image

      指令执行时间

      notion image

      3.1.3 指令分类

      指令→操作码+操作数
      指令停留在编程的层面,而操作码是编译之后的机器语言的层面
      111种指令,却有255种操作码,是因为寻址方式不同
      可能在编程语言上完全相同的指令,但是在寻址方式不同导致它使用的是两个操作码
      notion image

      3.1.4 指令系统中的符号说明

      notion image
      notion image
      Loading...
      Z_cosy
      Z_cosy
      浙江大学电气工程学院本科生
      最新发布
      Dairy
      2025-4-21
      MATH
      2025-3-23
      English
      2025-3-21
      Courses
      2025-3-21
      公告
      🎉Welcome to Z-cosy🎉
      -- 食用指南 ---
      目前只有课程笔记以及电控学习笔记
      陆续会整理更多内容!