可以修改ip,或者可以同時修改cs和ip的指令統稱為轉移指令。
8086cpu的轉移行為有以下幾類:
* 只修改ip時,稱為段內轉移,比如:jmp ax
* 同時修改cs和ip時,稱為段間轉移,比如:jmp 1000:0
由於轉移指令對ip的修改範圍不同,段內轉移又分為:短轉移和近轉移
* 短轉移ip的修改範圍為:-128~127
* 近轉移ip的修改範圍為:-32768~32767
8086cpu的轉移指令分為以下幾類
* 無條件轉移
* 條件轉移
* 迴圈指令
* 過程
* 中斷
1.操作符:offset
2.jmp指令assume cs:codesg
codesg segment
start: mov ax,offset start
s: mov ax,offset s
codesg ends
end start
jmp為無條件轉移指令,可以只修改ip,也可以同時修改cs和ip
3.依據位移進行轉移的jmp指令
jmp short標號**到標號處執行指令)
這種格式的jmp指令實現的是段內短轉移,他對ip的修改範圍為:-128~127。
比如以下程式:
assume cs:codesg
codesg segment
start: mov ax , 0
jmp short s
add ax , 1
codesg ends
end start
上面程式執行後,ax中的值為1,跳過了add ax , 1這條指令。
4.轉移目的的位址在指令中的jmp指令
jmp far ptr 實現的是段間的轉移,又稱為遠轉移,例如程式:
這段**中的 jmp far ptr s 被debug翻譯成 :jmp 0bbd:0000assume cs:codesg
codesg segment
start: mov ax , 0
mov bx , 0
jmp far ptr s
db 256 dup (0)
s: add ax , 1
inc ax
codesg ends
end start
5.轉移位址在暫存器中的jmp指令
指令格式:jmp 16位reg
6.轉移位址在記憶體中的jmp指令
有兩種格式:
(1)jmp word ptr 記憶體單元位址(段內轉移)
比如如下指令:
執行後:(ip)=0123hmov ax , 0123h
mov ds:[0] , ax
jmp word ptr ds:[0]
(2)jmp dword ptr
比如下面指令:
mov ax , 0123h
mov ds:[0] , ax
mov word ptr ds:[2] , 0
jmp dword ptr ds:[0]
執行後cs = 0 ,ip = 0123h
7.jcxz指令
jcxz指令為條件轉移指令,所有的條件轉移指令都是短轉移。
指令格式:jcxz標號(如果(cx) = 0,轉移到標號處執行)
8.loop指令
loop指令為迴圈指令,所有的迴圈指令都是短轉移。
指令格式:loop 標號((cx) = (cx) - 1,如果(cx) != 0 , 轉移到標號處執行)
組合語言 王爽 學習筆記
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指令 ...
組合語言 王爽 筆記
關於pop的知識 1.出棧後,ss sp指向新的棧頂,pop操作前的棧頂元素中的資料仍然存在,但是,它已不再棧中 2.ss和sp只記錄了棧頂的位址,依靠ss和sp可以保證在入棧和出棧時找到棧頂 3.當棧滿的時候再次使用push指令入棧,棧空的時候再次使用pop指令出棧,都將發生棧頂越界問題,它是非常...
組合語言 王爽 筆記
1.乙個組合語言程式從寫出到最終執行的簡要過程 編寫,編譯連線,執行 2.可執行檔案中包含兩部分內容 一是程式 從源程式中的彙編指令翻譯過來的機器碼 和資料 源程式中定義的資料 二是相關的描述資訊 eg 程式的大小,要佔的記憶體空間等 3.彙編指令是指有對應的機器碼的指令,可以被編譯為機器指令,最終...