關於轉移地址的尋址方式
關於轉移地址的尋址方式
程序要實現轉移,要知道轉移的目的地的地址,尋找這種地址的方式,稱為轉移地址的尋址方式。
分為兩種
- 段內轉移
- 段間轉移
段內轉移
段內轉移,只有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種,用任何一種都可以。