寻址方式
数据寻址方式
1.立即寻址
定义
指令中直接给出操作数,操作数紧跟在操作码之后
立即寻址方式常用来寄存器赋初始值并且只能用于源操作数,不能用于目的操作数
评价
立即寻址不需要额外的存储器访问,因为访问速度快,但是需要占用较多的字节
实例
MOV AL,34H
执行指令后,立即数34H送入AL寄存器中
MOV AX ,8726H
![直接寻址](/home/gs/文档/笔记图片/直接寻址.jpeg)
2.寄存器寻址
定义
将操作数存放在CPU内部的寄存器中,由指令指定寄存器号,可用于该寻址方式的寄存器可以是通用寄存器和段寄存器,但是代码段寄存器CS不能做为目的操作数
评价
因为寄存器数目远少于存诸器单元的数目,所以减少了字节数,有因为指令的操作都在CPU内部进行,不需要访问存储器,因此执行速度很快
实例
MOV AX,BX
若指令执行前AX=1234H,BX=5678H
则执行指令后,AX=5678H,BX=5678H
3直接寻址
定义
指令中直接给出操作数的有效地址,操作数一般会放在数据段(DS)中,但也可以放在其他段中,具体要放在哪一段,应通过段跨越前缀决定
评价
搜索范围广
实例
若数据放在数据段中
MOV AX,DS:[3000H]
指令中给出了操作数的有效地址3000H,对应的段寄存器是DS。如DS=2000H,则源操作数在数据段中的物理地址为2000H*16+3000=23000H
假设23000H单元的值为10H,23001H单元的值为20H
执行指令后 AX=2010H,AH=20H,AL=10H
4.寄存器间接寻址
定义
操作数的有效地址放在基址寄存器(BX,BP)或者变址寄存器(SI,DI)或者通用寄存器
如果将有效地址放在BP或者SP中,则默认段寄存器是SS
其他为DS
评价
方便处理一维数组或者表格的问题,通过执行指令访问一个单元之后,只需要修改用于间接寻址的寄存器就可以访问后续的内容了
实例
MOV AX,[BX]
若DS=3000H,BX=1000H,则源操作数的地址为3000H*16+1000H=31000H
5.寄存器相对寻址
定义
操作数的有效地址是一个基址寄存器(BX,BP)或者变址寄存器(SI,DI)或者通用寄存器和指令中指定的一个偏移量(Displacement)之和
实例
MOV AX,[SI+Disp]
若DS=1000H,SI=2000H,Disp=3000H
所以物理地址为1000H*16+2000H+3000H=15000H
6.基址变址寻址
定义
该寻址方式的有效地址是一个基础寄存器(BX,BP)和一个变址寄存器(SI,DI)
变址部分也可使用通用寄存器(除SP)
默认段寄存器的选择由所选用的基础寄存器所决定,如果是BP或SP,则选用SS,剩下的为DS
实例
MOV AX,[BX+SI]
若DS=2000H,BX=1000,SI=200H
则有效地址EA=1000H+200H=1200H
物理地址为2000H*16+1200H=21200H
7.相对基址变址寻址
定义
操作数的有效地址是一个基址寄存器(BP,BX)和一个变址寄存器(SI,DI)的内容和一个偏移量之和
评价
可以访问二维数组
实例
MOV AX,[BX+SI+Disp]
转移地址的寻址方式
1.段内直接寻址
定义
转移地址是代码段寄存器CS加上指令指针IP加上Disp
JMP DISP ;设CS=2000H,IP=1000H
若Disp为50
所以转移地址为2000H*16+IP+Disp=21050H
2.段内间接寻址
JMP BX;程序转移的目的地址为BX中的内容
JMP VAR1;程序转移的目的地址为字型变量VAR1的内容
JMP VAR1[SI];程序转移的目的地址在存储器,其有效地址为(SI)+OFFSET VAR1
3.段间直接寻址
JMP LABEL;程序转移到LABEL处执行(LABEL不在本段中),CS,IP同时改变
4.段间间接寻址
JMP VAR3;程序转移的目的地址为双字型变量VAR3中的内容,其中,第一个字是目的地址的偏移地址,第二个字是目的地址的段地址
JMP VAR3[SI];目的地址保存在存储器中,其有效地址为(SI)+OFFSET VAR3