DJ12-1 8086 系列指令系统(第一节课)

目录

零、什么是指令?

一、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 中。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值