转移指令总结

转移指令:可以修改ip的指令。
 
无条件转移 jmp

(1) jmp short s  标号,短转移:用一个字节表示大小,范围为-128--127

(2) jmp near ptr s  标号,近转移:用两个字节表示大小,范围为-32768--32767
(3) jmp far ptr s 标号,远转移:用四个字节表示地址,低位为ip,高位为cs
(4) jmp ax 寄存器,地址,修改ip
(5) jmp word ptr ds:[idata] 内存,地址,修改ip
(6) jmp dword ptr ds:[idata] 内存,地址,低位为ip,高位为cs
 
条件转移 jcxz, ja, jna, je, jne, jb, jnb
jcxz s 标号 <==> if (cx == 0){jmp short s;}
je s 标号 <==> if (zf == 0){jmp short s;}
jne s 标号 <==> if (zf == 1){jmp short s;}
无符号数:
ja s 标号 <==> if (cf == 0 && zf == 0){jmp short s;}
jna s 标号 <==> if (cf == 1 || zf == 1){jmp short s;}
jb s 标号 <==> if (cf == 1){jmp short s;}
jnb s 标号 <==> if (cf == 0){jmp short s;}
有符号数:用of
ps:所有条件转移都是短转移
 
循环 loop
loop s 标号,短转移 <==> cx--; if (cx != 0){jmp short s;}
 
过程(与栈结合的无条件转移) ret, retf, call
ret <==> pop ip
retf <==> pop ip; pop cs
call将jmp的除(1)短转移外的所有形式,换个指令,功能一样,增加一个push ip,此ip为下一指令的首地址
(1) call s <==> push ip;jmp near ptr s
(2) call far ptr s <==> push ip;jmp far ptr s
(3) call ax <==> push ip;jmp ax
(4) call word ptr ds:[idata] <==> push ip;jmp word ptr ds:[idata]
(5) call dword ptr ds:[idata] <==> push ip;jmp dword ptr ds:[idata]
注:ip地址是在指令进入指令缓冲器后再增加,然后执行指令
 
中断 int, iret
int n 中断例程号码 <==> pushf; IF = 0, TF = 0; push cs, push ip; ip = (n*4), cs = (n*4 + 2);
iret <==> pop ip, pop cs; popf;

posted on 2012-12-13 14:54  人世间的金某人  阅读(277)  评论(0编辑  收藏  举报

导航