汇编微机中的主要寻址方式

寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。

在汇编语言中,主要用到的有7种寻址方式:

立即寻址:所提供的操作数直接包含在指令中,紧跟在操作码之后,它作为指令的一部分。

立即数可以是位的,也可以是16位的,也可以是带单引号的字符
eg:
MOV BL,80H
MOV AX,1000H
MOV AL,‘A’
立即数寻址方式指令执行情况

寄存器寻址:寄存器寻址方式的操作数存放在指令规定的寄存器中,寄存器的名字在指令中指出。
对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP。
对于位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH或DL。
寄存器寻址不需要访问存储器来取得存储数,所以有较高的运行速度。
eg:
MOV CL,DL
MOV AX,BX

存储器寻址:存储器寻址方式的操作数存放在存储单元中。

● 位移量(Displacement):它是存放在指令中的一个8位或16位的数,但它不是立即数,而是一个地址。
● 基址(Base Address):它是存放在基址寄存器BX或BP中的内容。
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内容。

1. 直接寻址:参与操作的数据的偏移地址写在指令中,而操作数在内存中,EA=位移量
eg:
MOV AX,[1234H]
MOV AX,TABLE (TABLE是变量)
MOV AX,[TABLE]
这三条指令都是直接寻址,后两条都是把TABLE指示的地址单元的值送入AX中

2. 寄存器间接寻址:把参与操作数的数据的偏移地址写在寄存器中,而操作数在内存中。
偏移地址通过操作数间接给出,可用的寄存器只能为BX、BP、SI、DI
eg:
MOV AX,[SI]
MOV [BX],AL
如果(DS)]=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H,则上述两条指令的执行情况如图所示。执行结果为:(AX)=4050H,(31000H)=64H。

在这里插入图片描述
3. 寄存器相对寻址把参与操作数的偏移地址写在寄存器和一个相对位移量中,而操作数在内存中。
允许段超越(选择一个地址需要用段地址加偏移量来选择,如果偏移量超过了这个段,到了别的段里了,这时就叫段超越。)
eg:
MOV AL,TABLE[SI]
MOV [SI+10H],AX
MOV CX,[BX+COUNT]
如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H,则后两条指令执行情况如图所示。执行结果为:(32010H)=4050H,(CX)=4030H
在这里插入图片描述

4. 基址变址寻址:用一个基址寄存器(BX和BP)和一个变址寄存器(DI和SI)的值相加,计算结果作为操作数的偏移地址。
允许段超越。
[BX+BP]和[DI+SI]是非法搭配。
根据基址寄存器确定段寄存器,BP对应SS,BX 对应DS。
eg:
MOV [BX+DI],AX
MOV AH,[BP][SI]
设当前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=1200H,则指令的执行情况如所示。执行结果为:(32100H)=0050H,(AH)=56H
在这里插入图片描述
5.相对基址变址寻址:用一个基址寄存器(BX和BP)和一个变址寄存器(DI和SI)的值相加,再加一个相对量,将计算结果作为操作数的偏移地址。
允许段超越
[BX+BP]和[SI+DI]是非法搭配
BP对应SS,BX对应DS
eg:
MOV AH,[BX+DI+1234H]
MOV [BP+SI+DATA],CX
若(DS)=4000H,(SS)=5000H,(BX)=1000H,(DI)=1500H,(BP)=2000H,(SI)=1050H,(CX)=2050H,DATA=10H,则指令执行情况如图4.8所示。执行结果为:(AH)=64H,(53060H)=2050H
在这里插入图片描述
基址变址相对寻址方式也可以表示成下列几种方式:
MOV AX,[BX+SI+COUNT]
MOV AX,[BX][SI +COUNT]
MOV AX,[BX+SI]COUNT
MOV AX,[BX][SI]COUNT
MOV AX,COUNT[BX][SI]

但是在8086/8088指令系统中的寻址方式中,除上述外,还包括:
I/O端口寻址方式:
(1) 端口直接寻址方式:对这种寻址方式,端口地址用8位立即数(0~255)表示。
eg:
IN AL,11H
(2)端口间接寻址方式:当I/O端口地址大于FFH时,必须事先将端口地址存放在DX寄存器中。
eg:
MOV DX,120H
OUT  DX,AX
地址寻址方式:就是找出程序转移的地址。
(1)段内直接寻址方式:(相对寻址方式)
转移的地址=(IP)+位移量(8或16)。
这种寻址方式适用于无条件或条件转移类指令。
条件转移指令只能使用段内直接寻址的8位位移量
格式:
JMP NEAR PTR PROGIA
JMP SHORT QUEST

在这里插入图片描述
(2)段内间接寻址方式
格式:
JMP CX
JMP WORD PTR [BP+TABLE]
其中WORD PTR为操作符,用以指出其后的寻址方式所取得的目标地址是一个字的有效地址。

在这里插入图片描述
(3)段间直接寻址方式
这种寻址方式是在指令中直接给出16位的段地址和16位的偏移地址用来更新当前的CS和IP的内容。
格式:
JMP LABEL_NAME`

其中,LABEL_NAME是一个在另外的代码段内已定义的远标号。指令的操作是用标号的偏移地址取代指令指针寄存器IP的内容,同时用标号所在段的段地址取代当前代码段寄存器CS的内容,结果使程序转移到另一代码段内指定的标号处。
在这里插入图片描述
(4)段间间接寻址方式
由指令中给出的存储器寻址方式求出存放转移地址的四个连续存储单元的地址。指令的操作是将存储器的前两个单元的内容送给IP,后两个单元的内容送给CS,以实现到另一个段的转移。
eg:
JMP VAR_DOUBLEWORD
JMP DWORD PTR[BP][DI]
上面第一条指令中,VAR_DOUBLEWORD应是一个已定义为32位的存储器变量;
第二条指令中,利用运算符PTR将存储器操作数的类型定义为DWORD(双字)。
在这里插入图片描述

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值