45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:控制转移指令的步骤

控制转移指令的步骤

2016-09-06 10:17:39 来源:www.45fan.com 【

控制转移指令的步骤

JMP J** JCXZ LOOP CALL RET    

 

JMP ( JuMP ) 无条件转移指令

名称

格式

执行操作

段内直接短跳转 JMP SHORT OPR IP=IP+8位偏移量
段内直接近转移 JMP NEAR PTR OPR IP=IP+16位偏移量
段内间接转移 JMP WORD PTR OPR IP=(EA)
段间直接转移 JMP FAR PTR OPR IP=OPR偏移地址,CS=OPR段地址
段间间接转移 JMP DWORD PTR OPR IP=(EA),CS=(EA+2)

1.无条件转移到指定的地址去执行从该地址开始的指令.

2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容.

3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容.

 

 

条件转移指令根据上一条指令所设置的条件码(标志位)来判断测试条件.

根据五个标志位:ZFSFOF PF CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件.

Name Flag Flag == TRUE [1] Flag ==FALSE [ 0]
Zero Falg ZF JZ OPR //结果为零转移 JNZ OPR //结果不为零转移
Sign Falg SF JS OPR //结果为负转移 JNS OPR //结果为正转移
Overflow Flag OF JO OPR //溢出转移 JNO OPR //不溢出转移
Parity Flag PF JP OPR //结果为偶转移 JNP OPR //结果为奇转移
Carry Flag CF JC OPR //有进位转移 JNC OPR //无进位转移

 

 

两个数比较:

情况 无符号数 有符号数
指令 满足条件 指令 满足条件
A < B JC CF==1 JL SF^OF==1 && ZF==0
A B JNC CF==0 JNL SF^OF==0 || ZF==1
A B JNA CF==1 || ZF==1 JLG SF^OF==1 || ZF==1
A > B JA CF==0 && ZF==0 JG SF^OF==0 && ZF==0

 

测试CX转移指令

JCXZ OPR //CX==0时转移

 

 

LOOP(LOOP)循环指令

LOOP OPR 测试条件:CX 0 //OPR在程序中实际是个标号
LOOPZ OPR 测试条件:ZF == 1 && CX ≠ 0
LOOPNZ OPR 测试条件:ZF == 0 && CX ≠ 0

执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环.

 

 

过程调用及返回指令

CALL (CALL) 过程调用指令

CALL DST //DST在程序中实际是子程序标号

执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序.

调用方式 格式 断点保护入栈情况 过程入口地址
段内直接 CALL NEAR PTR PR1 (SP-1)(SP-2)IP , CS不进栈 CS值保持不变,IPDST
段内间接 CALL WORD PTR (EA) (SP-1)(SP-2)IP , CS不进栈 CS值保持不变,IP(EA)
段间直接 CALL FAR PTR PR1 (SP-1)(SP-2)CS , (SP-3)(SP-4)IP IP←DST偏移地址,CS←DST段地址
段间间接 CALL DWORD PTR (EA) (SP-1)(SP-2)CS , (SP-3)(SP-4)IP IP←(EA),CS←(EA+2)

注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明.

 

 

RET(RETurn)子程序返回指令

RET

RET EXP //带立即数返回

子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

 

本文地址:http://www.45fan.com/a/question/73060.html
Tags: 控制 转移 JMP
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部