可以修改IP或同時修改IP和CS的指令統稱爲轉移指令
1 只修改IP 段內跳轉
2 同時修改 CS和IP 段間跳轉
段內轉移:1短轉移(-128——127) 2近轉移 (-32768——32767)
8086cpu轉移指令分爲一下幾種
1 無條件轉移
2 條件轉移
3循環指令
4 過程
5 中斷
實際上 “jmp short 標號” 的功能爲 (IP) = (IP) + 8位位移
jmp near ptr 標號 的功能爲 (IP) = (IP) + 16位位移
1 16位位移=標號處的地址-jmp指令後的第一個字節的地址
2 near ptr 指明此處的位移爲16位位移,進行的段內近轉移
3 16位位移範圍爲 -32768——32767 用補碼錶示
4 16位位移由編譯程序在編譯時給出
jcxz指令爲有條件轉移指令,所有的有條件轉移指令都是短轉移,在對應的機器碼中包含轉移的位移,而不是目的地址,對IP的修改的範圍都爲 : -127——128
指令格式 jcxz 標號 (如果(CX)=0,轉移到標號處執行,否則,什麼也不做,程序向下執行)
call和ret指令都是轉移指令
ret指令用棧中的數據修改IP的內容,從而實現近轉移
retf指令用棧中的數據修改CS和IP的內容,從而實現遠轉移
CPU執行ret指令時,進行下面兩步操作:
1 (IP) = ((SS)×16+(SP))
2 (SP)=(SP)+2
相當與 pop IP
CPU執行retf指令時,進行下面四步操作:
1 (IP) = ((SS)×16+(SP))
2 (SP)=(SP)+2
3 (CS)=((SS)×16+(SP))
4 (SP)=(SP)+2
相當於 POP IP POP CS
CPU執行call指令時,進行兩步操作:
1 將當前的IP或CS和IP壓入棧中
2轉移
call指令不能實現短轉移,除此之外,call指令實現轉移的方法和jmp指令的原理相同
cal 標號 (將當前的IP壓棧後,轉到標號處執行指令)
CPU執行call指令時,
1 (SP) = (SP)-2
((SS)×16 +(SP))= (IP)
2 (IP) = (IP) + 16位位移
相當於 push ip jmp near ptr 標號
call far ptr 標號 實現是段間轉移
CPU執行此格式的call指令時,
1 (SP) = (SP)-2
((SS)×16 +(SP))= (CS)
(SP) = (SP)-2
((SS)×16 +(SP))= (IP)
2 (CS)=標號所在的段的段地址
(IP)=標號在段中的偏移地址
相當於
push CS
push IP
JMP far ptr 標號
MUL指令
1 相乘的兩個數 要麼都是8位,默認放在AL中,另一個放在8位reg或者內存單元中。如果都是16位,一個默認放在ax中,另一個放在16位reg或者內存中