1 可以修改ip
,或者同時修改cs和
ip的指令統稱為轉移指令。
2 段內轉移:只修改
ip 段間轉移:同時修改cs和
ip 3 offset 取得標號的偏移位址
4 jmp為無條件轉移指令,可以只修改
ip,也可以同時修改cs和
ip a)依據位移進行轉移的
jmp指令
jmp short 標號 段內短轉移
由圖中可發現,jmp 0008
的機器碼為
eb03
,這個機器碼中不包含轉移的目的位址,
cpu在執行
jmp指令的時候並不需要轉移的目的位址,包含的是轉移的位置,這個位移是編譯器根據彙編指令中的「標號」計算出來的。
jmp short 標號的功能:
ip = ip+8
1) 8位位移
= 標號處的位址
- jmp
指令後的第乙個位元組的位址; 2)
short指明此處的位移為
8位位移; 3)
8位位移的範圍
-128~12
,用補碼表示; 4)
8位位移由編譯程式在編譯時算出。
jmp near ptr 標號
1) 16位位移
= 標號處的位址
- jmp
指令後的第乙個位元組的位址;
2) near ptr 指明此處的位移為
16位位移,進行段內近轉移;
3) 16位位移的範圍為
-32768~32767,
用補碼表示;
4) 16位位移由編譯程式在編譯時算出。
b) 轉移的目的位址在指令中的
jmp指令
jmp far ptr 標號 段間轉移
1) cs=標號所在的段的短位址
ip =
標號所在段的偏移位址
far ptr 指明了指令用標號的短位址和偏移位址修改cs和
ip c) 轉移位址在暫存器中的指令
jmp 16位
reg
d) 轉移位址在記憶體中的
jmp指令
jmp word ptr 記憶體單元位址(段內轉移)
功能:從記憶體單元位址處開始存放著乙個字,記憶體單元位址可用定址方式的任一格式給出。
jmp dword ptr 記憶體單元位址
(段間轉移
功能:從記憶體單元位址處開始存放著兩個字,高位址處的字是轉移目的位址的段位址,低位址處是轉移的目的位址的偏移位址。
cs = 記憶體單元位址+2
ip = 記憶體單元位址
5 jcxz
jcxz指令為有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。
jcxz 標號 如果
cx = 0
,則轉移到標號處執行;
8 位位移
= 標號處的位址
- jcxz
指令後的第乙個位元組的位址;
8位位移的範圍
-128~127
,用補碼表示;
6 loop指令
loop指令為迴圈指令,所有的迴圈指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的位址。
指令格式:loop 標號
1)cx = cx-1; 2) 如果
cx != 0 ip = ip + 8
位位移;
7 根據位移進行轉移的意義
jmp short 標號
jmp near ptr
標號 loop
標號
jcxz 標號
他們對ip
的修改是根據轉移目的位址和轉移起始位址之間的位移來進行的。在他們對應的機器碼中不包含轉移的目的位址,而包含的是到目的位址的位移。這種設計方便了程式段在記憶體中的浮動裝配。
《學習筆記》王爽組合語言 轉移指令原理
可以修改ip,或者可以同時修改cs和ip的指令統稱為轉移指令。8086cpu的轉移行為有以下幾類 只修改ip時,稱為段內轉移,比如 jmp ax 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 由於轉移指令對ip的修改範圍不同,段內轉移又分為 短轉移和近轉移 短轉移ip的修改範圍為 ...
組合語言學習筆記3(王爽)
乙個字 兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。ds暫存器通常用來存放cpu要訪問資料的段位址,eg 0 表示記憶體單元的偏移位址。mov...
組合語言 王爽 學習筆記
1 mov a,b a b不能同時為一記憶體位址!2 bx bp si di 在 中,這4個暫存器可以單個出現,或只能以4種組合出現 bx和si bx和di bp和si bp和di。如組合 bx si idata 就是合法的。另外,順便說明一點,si di不能分成兩個8位暫存器使用。3 div指令 ...