8086 匯編 jmp 指令
功能:修改CS、IP的指令、可以通過改變CS、IP中的內容,來控制CPU要執行的目標指令。
背景:一般情況下指令是順序地逐條執行的,而在實際中,常需要改變程序的執行流程。
轉移指令,
- 可以控制CPU執行內存中某處代碼的指令
- 可以修改IP,或同時修改CS和IP的指令
轉移方式
jmp指令要給出兩種信息:
- 轉移的目的地址
- 轉移的距離
- - 段間轉移(遠轉移): jmp 2000:1000
- - 段內短轉移: jmp short 標號 ; IP的修改范圍為 -128~127,8位的位移
- - 段內近轉移: jmp near ptr 標號 ; IP的修改范圍為 -32768~32767,16位的位移
遠轉移 far ptr
短轉移 short
短轉移:“jmp short 標號”
功能:(IP)=(IP)+8位位移
原理
(1)8位位移=“標號”處的地址-jmp指令后的第一個字節的地址;
(2)short指明此處的位移為8位位移;
(3)8位位移的范圍為-128~127,用補碼表示;
(4)8位位移由編譯程序在編譯時算出
近轉移 near ptr
近轉移:指令“jmp near ptr 標號”
功能: (IP)=(IP)+16位位移
原理
(1)16位位移=“標號”處的地址-jmp指令后的第一個字節的地址;
(2)near ptr指明此處的位移為16位位移,進行的是段內近轉移;
(3)16位位移的范圍為 -32769~32767,用補碼表示;
(4)16位位移由編譯程序在編譯時算出。
轉移內存單元地址
一、jmp word ptr
二、jmp dword ptr
案例
1、同時修改CS、IP的內容
; 功能:用指令中給出的段地址修改CS,偏移地址修改IP。 ; 格式:jmp 段地址:偏移地址 jmp 2AE3:3
2、僅修改IP的內容
; 功能:用寄存器中的值修改IP ; jmp 某一合法寄存器 jmp ax (類似於 mov IP, ax)
3、代碼中跳轉行
; jmp 直接跳過 add ax,1 行到 inc ax mov ax,0 jmp short s add ax, 1 s: inc ax