轉移指令:
可以修改ip或同時修改cs和ip的指令。
概括講,就是可以控制cpu執行記憶體中某處**的指令。
8086cpu轉移行為:
根據轉移指令對ip的修改範圍不同,段內轉移分為:
短轉移,ip修改範圍為-128~127
近轉移,ip修改範圍為-32768~32767
8086cpu轉移指令分為以下幾類:
1.1 操作符 offset
offset功能為取得標號的偏移位址。
assume cs:codesg
codesg segment
start:mov ax,offset start //相當於 mov ax,0 (start 表家軍第一條指令位址,偏移為0)
s:mov ax,offset s //相當於 mov ax,3 (s標記第二條指令位址,第一條指令位址長度為3個位元組)
codesg ends
end start
1.2 jmp指令
jmp為無條件轉移指令,可以只修改ip,也可以同時修改cs和ip.
jmp指令要給出兩種資訊:
1.2.1 依據 位移 進行轉移的jmp指令
jmp short 標號實現段內短轉移
功能: (ip)=(ip)+8位位移
8位位移 = 標號處的位址 - jmp指令後的第乙個位元組的位址;
short 指明此處的位移為8位位移;
8位位移的範圍為-128~127,用補碼表示。
8位位移由編譯程式在編譯是確定。
jmp near ptr 標號 實現段內近轉移,功能為 (ip)=(ip)+16位位移
在jmp short 標號 指令所對應的機器碼中,並不包含轉移的目的位址,而包含的是轉移的位移。
1.2.2 轉移的目的位址在指令中的jmp指令
jmpfarptr 標號
實現段間轉移, 又稱遠轉移。
(cs)=標號所在段的段位址;(ip)=標號所在段中的偏移位址。
1.2.3 轉移位址在暫存器中的jmp指令
轉移格式:jmp 16位reg
功能:(ip)=(16位reg)
1.2.4 轉移位址在記憶體中的jmp指令
jmp word ptr 記憶體單元位址 (段內轉移)
舉例:
mov ax,0123h
mov ds:[0],ax
jmp word ptr ds:[0]
執行後(ip)=0123h
jmp dword ptr 記憶體單元位址 (段間轉移)(cs)=(記憶體單元位址+2)
(ip)=(記憶體單元位址)
舉例:
執行後,(cs)=0,(ip)=0123h
1.3 jcxz指令
jcxz指令為有條件轉移指令,所有的有條件轉移指令都是 短轉移,對ip的修改範圍為-128~127
指令格式:
jcxz 標號 //如果cx == 0,則轉移到標號處執行;
操作:當(cx)=0時,(ip)=(ip)+8 位位移
1.4 loop指令
loop指令為迴圈指令,所有的迴圈指令為 短轉移,對ip的修改範圍為-128~127
指令格式:
loop 標號 //(cx)=(cx)-1,如果(cx)!=0,轉移到標號處執行。
操作:(cx)=(cx)-1
如果(cx) !=0, (ip)=(ip)+8 位位移
1.5 根據位移進行轉移的意義
jmp short 標號
jmp near ptr 標號
jcxz 標號
loop 標號
上述幾種彙編,他們對ip的修改是根據轉移的目的位址和轉移起始位址 之間的位移來進行的。
在他們的機器碼中不包含轉移的目的位址,而包含轉移的目的位址的偏移。
原因:方便了程式段在記憶體中的 浮動裝配。
彙編09 轉移指令的原理
可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。轉移行為有很多種不同的分類方法 根據只修改ip和同時修改cs和ip,可以分為段內轉移 jmp ax 和段間轉移 jmp 1000 0 根據指令對ip的修改範圍不同,段內轉移又分為短轉移 ip的修改範圍為 128 127 和近轉移 ip的修改範圍...
9 轉移指令的原理
1 可以修改ip,或同時修改cs和ip的指令統稱為轉移指令。概括的講,轉移指令就是可以控制cpu執行記憶體中某處 的指令,8086cpu的轉移行為有兩種 1 只修改ip時,稱為段內轉移,比如 jmp ax 2 同時修改cs和ip時,稱為段間轉移,比如 jmp 1000 0 段內轉移又分為 1 短轉移...
9 轉移指令的原理
1.可以修改ip,或同時修改cs和ip的指令統稱轉移指令。概括地講,轉移指令就是可以控制cpu執行記憶體中某處 的指令。2.8086cpu的轉移行為有以下幾種 1 只修改ip時,稱為段內轉移。例如 jmp ax 2 同時修改cs和ip時,成為 段間轉移。例如 jmp 1000 0 3.由於轉移指令對...