单片机基础之汇编语言入门学习(七) 七种寻址方式

  • Post author:
  • Post category:其他





七种寻址方式

寻址方式可以分为:
①立即数寻址方式
②寄存器寻址方式
③存储器寻址方式  (而存储器又可以分以下五种方式)
    直接寻址方式
    寄存器间接寻址方式
    寄存器相对寻址方式
    基址加变址寻址方式
    相对加基址变址寻址方式


1、立即数寻址


操作数为立即数,直接存放在指令的操作数字段中。

立即数寻址时,只允许源操作数为立即数,目标操作数必须是寄存器或存储器,其作用是给寄存器或存储单元赋值。

在汇编中,立即数不能作为指令中的第一操作数。

例如:

MOV AL,80H

MOV AX,1234H

在这里插入图片描述


2、寄存器寻址


操作数在指令所指示的

寄存器

之中。

表示格式:直接在指令中写出寄存器名称

例如:

INC BX

MOV AX,CX


3、存储器寻址


操作数在指令所指示的

寄存器

之中 (

内存、I/O口



表示格式:直接在指令中写出寄存器的名称

包括一下方式:

直接寻址方式
寄存器间接寻址方式
寄存器相对寻址方式
基址加变址寻址方式
相对加基址变址寻址方式


3.1、直接寻址


操作数存在内存中,操作数的

偏移地址

直接表示在指令中

表示格式:[偏移地址]


默认操作数

存放在内存的

数据段



例如:

MOV AL,[1046H]

在这里插入图片描述



段超越

操作数也允许存放在其他段中(ES,SS),
此时应该在指令指明段超越。
段超越;
    若操作书不在指令默认的段中,而是在其他某个段中,
    则需要在指令中加以表示,这种情况称为段超越。
 例如:
   直接寻址方式中操作数在附加段中,则应该表示为:
   MOV  AL,ES:[1064H]    


3.2、寄存器间接寻址方式


操作数存在存储器中,操作数的偏移地址在BX、SI、DI和BP的某个寄存器中。

若以BX,SI,DI作为间接寻址寄存器
   则默认操作数存放在数据段中,用DS寄存器中的内容作为地址
若以BP作为间接寻址寄存器
  则默认操作数存放在栈堆段中,用SS寄存器中的内容作为地址。

例如:

MOV AX,[SI];

MOV [BX],AL;

图解在这里就不给大家画出来了,

第一个

MOV AX,[SI]

,这个SI默认使用的是DS数据段寄存器中的值,例如2000H,则2000Hx10H=20000H,在加上SI本身中的偏移地址,得到一个实际地址,将这个地址中的值传给AX。

第二个 **MOV [BX],AL;**这个是用的BX即默认DS数据段寄存器中的值,2000H,则2000Hx10H=20000H,再加上BX本身的偏移地址,得到一个实际地址,再将AL中的数据传到这个地址当中。


3.3、寄存器相对寻址方式


操作数在存储器中,操作数的有效地址是一个

基址寄存器(BX、BP)



变址寄存器(SI、DI)

的内容加上指令中给定的8位或16位位移量之和。

如果SI、DI、或BX中的内容作为有效地址的一部分,
那么引用的段寄存器是DS;
如果BP中的内容作为有效地址的一部分,
那么引用的段寄存器是SS。

    下面指令中,源操作数采用寄存器相对寻址,
    引用的段寄存器是SS
    MOV   BX,[BP-4]
    下面指令中,目的操作数采用寄存器相对寻址,
    引用的段寄存器是ES
    MOV    ES:[BX+5],AL


3.4、基址加变址寻址方式


在基址加变址寻址方式中,通常把

BX和BP

看作是

基址寄存器

,把

SI和DI

看作

变址寄存器



可把两种方式组合起来形成一种新的寻址方式。

基址加变址的寻址方式是把一个基址寄存器BX或BP的内容,加上便知寄存器SI或DI的内容,并以一个段寄存器作为地址基准,作为操作数的地址,

例如:

MOV AH,[BP][SI];


3.5、相对基址加变址寻址方式


在相对基址变址寻址方式中,通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器。他是把一个基址寄存器BP或BX的内容加上变址寄存器SI或DI的内容;**再加上指令中给定的8位或16位位移量,**并以一个段寄存器作为地址基准,作为操作数的地址。

当基址寄存器为BX时,段寄存器使用DS;
当基址寄存器为BP时,段寄存器则用SS。

例如; MOV [BX+DI+1234H],AH



版权声明:本文为qq_51013944原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。