关于转移地址的寻址方式
程序要实现转移,要知道转移的目的地的地址,寻找这种地址的方式,称为转移地址的寻址方式。
分为两种
- 段内转移
- 段间转移
段内转移
段内转移,只有IP值发生改变,CS没变。
寻址方式有两种:
- 直接寻址
- 间接寻址
直接寻址
指令中直接给出转移地址,转移地址可以用标号表示。
如
...
L1:mov AX,BX
...
JMP L1
JMP为无条件转移指令。L1表示的就是mov AX,BX这条指令的地址,所以她是在转移指令中直接给出,属于段内直接寻址。
段内转移地址是当前指令指针IP的值,加上相对位移量的值。所以也叫相对寻址。
直接寻址的概念来自指令语句的书写。相对寻址的概念来自转移的原理。
8086系统中,所有的条件转移指令,只能在段内转移,且转移范围为-128~+127之间。
所有条件转移指令都是段内直接寻址。只有JMP能做段内,也能做段间。条件转移指令想要做段间,只能利用JMP做桥接。
间接寻址
转移地址间接给出,例如
...
mov BX,OFFSET L2
JMP BX ;(BX)->IP
...
L2: ...
JMP BX,BX内容作为转移地址,是段内间接寻址。
也可以通过变量给出,例如
...
TABLE DW L2 ;数据段定义一个字节变量,存放L2的偏移地址
JMP TABLE ;(TABLE)->IP
...
L2: ...
JMP TABLE,从前面数据寻址方式看,是从TABLE这个存储器单元取一个字给IP,做转移地址,TABLE是数据的直接寻址,我们要做的是把存的内容做转移地址。从转移地址的寻址方式看,是段内间接寻址。具体讲就是:直接寻址方式的段内间接寻址。数据的寻址方式有5种,用任何一种都可以。