• DJ12-1 8086系列指令系统-1


    目录

    零、什么是指令?

    一、8086 指令格式

    1. 指令的一般格式

    2. 操作数类型

    二、8086 寻址方式

    1. 立即寻址

    2. 直接寻址

    3. 寄存器寻址

    4. 寄存器间接寻址

    5. 寄存器相对寻址

    6. 基址变址寻址

    7. 基址-变址-相对寻址

    8. 隐含寻址


    零、什么是指令?

    指令:能够被计算机识别并执行的二进制代码。

    指令系统:所有指令的集合。

    指令按功能分类:数据传送类、算术运算类、逻辑运算和移位、串操作、控制转移类、处理器控制。

    一、8086 指令格式

    1. 指令的一般格式

    在《计组》里面,我们有对目的地址和目的操作数进行严格区分,但在《微机接口》里面我们统称为目的操作数。

    8086 指令的长度在 1~7 字节之间,操作码为 1~2 字节,指令的长度决定于操作数的个数以及所采用的寻址方式。(可见,8086 使用的是 CISC 复杂指令集。)

    按操作数数量分类:

    • 零操作数指令
    • 单操作数指令
    • 双操作数指令

    2. 操作数类型

    ① 立即数操作数

    (关键)立即数是运算数据本身,无地址含义,故无法作目的操作数。由于立即数无法作目的操作数,所以不能用于单操作数指令。

    ② 寄存器操作数

    ③ 存储器操作数

    存储器操作数的表现形式:[ 内存偏移地址 ]

    二、8086 寻址方式

    寻址方式:是指获得操作数所在的地址的方法。 

    寻址方式分类:

    • 寻找操作数的地址;
    • 寻找要执行的下一条指令的地址,即程序的地址。

    后者主要在程序转移或过程调用时用来寻找目标地址或入口地址,这将在调用指令(CALL)或程序转移指令(JMP)中介绍。

    1. 立即寻址

    仅适用于源操作数。

    例、MOV  AX,1200H

    2. 直接寻址

    与《计组》中不同,这里只指存储器直接寻址。

    指令中直接给出操作数的 偏移地址,默认在 DS 数据段。

    允许段重设,即可以通过增加段前缀以实现段超越。比如:ES:[1200H] 。

    例、MOV  AX,[1200H] 等价于 MOV  AX,DS:[1200H]

    3. 寄存器寻址

    参加操作的操作数在 CPU 的寄存器中。

    例、MOV  AX,BX

    4. 寄存器间接寻址

    特点:

    ① 寄存器的内容表示操作数的 偏移地址

    ② 允许的寄存器为 BX、BP、SI、DI,又称为 间址寄存器或地址指针

    (考点)判断指令的书写正误。

    ③ 操作数的段地址取决于间址寄存器,允许段重设。

    非串操作的情况下:

    • BX、SI、DI:默认为 DS 数据段;
    • BP:默认为 SS 堆栈段。

    ④ 因为寄存器的内容表示操作数的偏移地址,所以指令中的间址寄存器必须加上方括号。

    例、MOV  BX,1200H;MOV  AX,[BX]

    5. 寄存器相对寻址

    ① 操作数在内存中的偏移地址由 间址寄存器 的内容加上指令中给出的一个 8 位或 16 位的位移量组成,即 偏移地址 = 寄存器内容 + 位移量

    间址寄存器:BX、BP、SI、DI 。

    ② 操作数所在的段由所使用的间址寄存器决定。

    例、指令MOV  AX,Disp[BX]

            假设 DS=6000H,BX=1000H,Disp=08H

            则偏移地址为 BX+Disp=1008H

            操作数物理地址为 61008H

    ③ 可以使用的寄存器为:BX、BP、SI、DI 。

    (记忆)格式可以为:

    • MOV  AX,[BX+Disp]

    • MOV  AX,Disp[BX]

    • MOV  AX,[BX]+Disp

    • MOV  AX,Disp+[BX]

    在 CPU 执行指令之前,会需要编译器对指令进行编译。

    每一种寻址方式都对应有唯一的编码。

    虽然编译器不认识 [BX]+Disp 和 Disp+[BX] 这两种形式,但它会进行语法分析,将其与寄存器相对寻址方式匹配。随后转换为对应的二进制代码,交由 CPU 执行。

    6. 基址变址寻址

    ① 操作数的偏移地址 = 一个基址寄存器的内容 + 一个变址寄存器的内容

    基址寄存器:BX、BP,变址寄存器:SI、DI 。

    ② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

    • 若基址寄存器为 BX,则默认在 DS 数据段;
    • 若基址寄存器为 BP,则默认在 SS 堆栈段。

    MOV  AX,[BX][SI] (√)

    MOV  AX,[BP][SI] (√)

    MOV  AX,[BX]+[SI] (√)

    MOV  AX,[BX+SI] (√)

    MOV  AX,[BX][BP] (×)

    例、MOV  SI,1100H;MOV  BX,SI;MOV AX,[SI+BX]

    7. 基址-变址-相对寻址

    操作数的偏移地址 = 基址寄存器的内容 + 变址寄存器的内容 + 位移量。

    ② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

    (重点)指令中不能同时出现两个基址寄存器或两个变址寄存器。

    8. 隐含寻址

    有些指令的操作码不仅包含了操作的性质,同时还隐含规定了部分操作数。

    例、乘法操作(8位 × 8位 → 16位)

    这条指令隐含规定了被乘数在 AL 中,同时乘积的结果存放在 AX 中。

  • 相关阅读:
    制作U盘启动盘
    红黑树(RBT)
    vector与list的区别与应用?
    【navicat 密码查看】小技巧navicat 如何查看密码
    量化交易之One Piece篇 - MarketCTP.cc
    SpringBoot+Redis实现不重复消费的队列
    Tornado 可以使用 nginx 提供负载均衡
    手写Hystrix基本原理
    【Excel】Excel中将日期格式转换为文本格式,并按日期显示。
    【密评】商用密码应用安全性评估从业人员考核题库(十三)
  • 原文地址:https://blog.csdn.net/m0_64140451/article/details/127915572