相对基址加变址寻址方式
该数在存储器中运算,其有效地址是基址寄存器(BX,BP)的值、变址寄存器(SI,DI)的值和指令中的8位/16位偏移量之和。
在不使用段覆盖前缀的情况下,规定如果有效地址包含BP,其默认段寄存器为SS;否则,它的默认段寄存器是DS。
指令中给出的8位/16位偏移用补码表示。计算有效地址时,如果偏移量为8位,则符号扩展到16位。当得到的有效地址超过0FFFFH时,取其模数64K。
例3.5假设指令:MOV AX,[BX+SI+200H],执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,存储单元12310H的内容为1234H。指令执行后AX的值是多少?
解:根据相对基址加索引寻址方式规则,执行本例指令时,源操作数的有效地址EA为:
EA=(BX)+(国际单位制)+200小时= 2100小时+0010小时+200小时= 2310小时
该操作数的物理地址应由DS和EA的值构成,即:
PA =(DS)* 16+EA = 1000h * 16+2310h = 12310h
所以这条指令的执行效果就是把物理地址12310H的一个字的值传到AX。
从相对基址加索引的寻址方式来看,由于它的可变因素很多,所以看起来比较复杂,但由于它的可变因素很多,所以灵活性很高。例如:
D1[i]用于访问一维数组D1的第I个元素,其寻址有一个自由度。D2[i][j]用于访问二维数组D2的第I行第j列的元素,其寻址有两个自由度。可变数量增加了其寻址模式的灵活性。
相对于基址加索引地址有很多等价的写法。以下书写格式都是正确的,称呼意义也是一样的。
MOV AX,[BX+SI+1000H] MOV AX,1000H[BX+SI]
MOV AX,1000H[BX][SI] MOV AX,1000H[SI][BX]
但是写格式BX [1000+SI]和SI[1000H+BX]是错误的,即使用的寄存器不能在“[”、“]”之外,这个限制在寄存器相对寻址方式的写中也起了作用。
相对基址加索引地址是上述七种寻址方式中最复杂的一种,它可以转化为其他类型的内存寻址方式。表3.1列出了这种寻址方式与其他寻址方式之间的变形关系。
源操作数指令的变体;源操作数的寻址方式
仅偏移MOV AX,[100H]直接寻址模式
只有一个寄存器是MOV AX、[BX]或MOV AX、[SI]寄存器间接寻址模式
有一种寄存器和偏移MOV AX、[BX+100H]或MOV AX、[SI+100H]寄存器相对寻址方式。
有两个寄存器MOV AX,[BX+SI]基址加索引地址。
有两个寄存器和偏移MOV AX,[BX+SI+100H]相对基址加索引地址。
位律师回复
0条评论