8086汇编——指令系统与寻址方式

一、汇编语言指令

汇编语言有三种指令形式,分别是汇编指令伪指令宏指令。汇编指令是从机器指令演化而来的。

指令格式为
操作码字段 操作数字段

操作数字段可以有一个,两个或三个,分别称为单操作数指令、双操作数指令、三操作数指令。由于指令执行时要指出操作数的地址,因此又分别称为一地址指令、二地址指令和三地址指令。如果只有操作码,没有操作数,则称为零地址指令。

在这里插入图片描述

指令属性

  • 指令长度 : 根据指令的功能不同,指令的长度也不一-样(以字节为单位),分为单字节、双字节、三字节、四字节和多字节指令等。指令的长度会影响存储空间。
  • 指令执行时间 :指令的执行时间(以CPU时钟周期为单位)也是-一个重要的属性。它会影响程序的执行速度,因此采用执行时间较少的指令可提高程序的运行速度。

二、指令的寻址方式

所谓寻址方式,即指令中提供操作数或操作数地址的方式。通俗地说就是寻找操作数地址的方法。寻址方式的数量代表了微机系统对存储器管理能力的强弱,合理地使用寻址方式可以扩大访存空间,缩短指令长度,满足各种程序设计需要。

在汇编语言中,操作数分为数据操作数和转移地址操作数两大类。按照操作数类型的不同,寻址方式也分为两大类:与数据有关的寻址方式和与转移地址有关的寻址方式。

在指令系统中,转移指令中操作数的值代表下一条要执行的指令的地址。

在本文中主要介绍7种与数据有关的寻址方式

- 立即寻址方式

MOV AH,80H

所要找的操作数直接写在指令中,这种操作数叫立即数。指令中有立即数的寻址方式叫立即寻址。在8086、80286 中立即数是8位或16位的,在80386以上可以是32位的立即数。立即寻址方式用来表示常数。
需要注意两个问题

  • 立即寻址只能用于源操作数字段
  • 立即数的类型必须与目的操作数的类型一致,目的操作数是字节,立即数也必须是字节,或者两者都是字。

这种选址方式非常快,是因为根本无需寻址。立即数是不占任何空间的,它存在于代码段,是指令的一部分。当这个指令执行完成之后内存被释放掉,之后在内存中找不到。

- 寄存器寻址方式

在寄存器寻址方式中,操作数在寄存器中,在指令中指定寄存器名即可。寄存器可以是8位或16位的。CPU在寄存器中得到操作数,不用访问内存。这种寻址方式指令短、速度快,但可用的资源少。

在这里插入图片描述
下面就是存储器的寻址方式,存储器寻址方式表明操作数存放在内存中,要想得到操作数,CPU必须经过系统总线访问存储器。在编写汇编程序时存储器的地址是以逻辑地址形式表示的,因此这一类寻址方式在指令中要表示出有效地址EA。需要注意的是,对于双操作数指令而言,两个操作数不允许同时用存储器寻址方式,即不允许两个操作数都是存储单元。

- 直接寻址方式

操作数存放在内存中。指令形式如下:

MOV AX,DS:[2000H]

操作数的有效地址EA直接写在指令中,用中括号里的数值作为操作数的偏移地址。操作数的段地址为数据段,由DS指出,即操作数本身存放在数据段中。CPU在取指令阶段可直接取得操作数的EA,因而称为直接寻址方式。

操作数的物理地址=(DS) x 10H +EA

对于直接寻址方式而言,必须用前缀“DS: ”指出该单元在数据段中。直接寻址方式适于处理单个变量。

在这里插入图片描述
在这里插入图片描述

直接寻址方式除了用数值作为有效地址之外,还可以用符号地址的形式。为存储单元定义个名字,该名字就是符号地址。如果把存储单元看成变量,该名字也是变量名。采用符号地址时,如果用数据定义伪指令DB、DW等定义的存储单元名字,其对应的段默认为数据段。但是若用EQU符号定义伪操作来定义符号地址,则需要加上前缀DS。

在这里插入图片描述

- 寄存器间接寻址方式

操作数存放在内存中。指令形式如下:

MOV AX, [BX]

操作数的EA在基址寄存器BX、BP或变址寄存器SI、DI中,而操作数的段地址在数据段DS或堆栈段SS中。如果有效地址由BX、SI、DI指出,则默认为对应于数据段,而用BP指出则对应于堆栈段。

在这里插入图片描述

由于EA(偏移地址)是间接从寄存器中得到的,所以称为寄存器间接寻址方式。8086 CPU只允许BX、BP、SI、DI这四个寄存器作为间址寄存器。

在这里插入图片描述

- 寄存器相对寻址方式

MOV AX, [BX +1234H]

在这里插入图片描述

有了之前两个的基础,这个就非常好理解了,在我看来就是间接寻址又加了一点偏移量。

由于有相对的位移量,所以称为寄存器相对寻址方式。此寻址方式常用于查表操作。可利用寄存器做首地址,用位移量做指针寻找表中特定的单元。或用位移量做表格的首地址,用寄存器做指针来连续查表。

- 基址变址寻址方式

MOV AX,[BX +SI]

操作数的EA为一个基址寄存器和一个变址寄存器的内容之和。该寻址方式可用于二维表的处理(如何处理我也不太清楚,以后学了再补出来)。

在这里插入图片描述

- 相对基址变址寻址方式

MOV AX,[BX +SI +1234H]

操作数的EA为一个基址寄存器加一个变址寄存器再加一个位移量,三者之和。该寻址方式可用于二维表查表和栈处理。

在这里插入图片描述在这里插入图片描述

参考书籍:《汇编语言》第二版 郑晓薇

由于我也只是个初学者,对此也没有十分精通,无法列举实例,但后续会添加,肯定能学好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值