转移指令总结
轉移指令:可以修改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;轉載于:https://www.cnblogs.com/rz-jin/archive/2012/12/13/2816368.html
總結
- 上一篇: 用虚拟机把ubuntu安装到TF卡上
- 下一篇: 精锐万能票据打印专家