汇编语言中LCALL和JMP有什么区别啊?
我在写程序的时候觉得这两个都可以用,但是什么情况下用什么不是很清楚,望大虾请教,一个是调用子程序,一个是转移,我觉得在用的时候转移到子程序和调用子程序仅有的去呗就是一个是...
我在写程序的时候觉得这两个都可以用,但是什么情况下用什么不是很清楚,望大虾请教,一个是调用子程序,一个是转移,我觉得在用的时候转移到子程序和调用子程序仅有的去呗就是一个是返回,一个是跳转返回的,是不是这样呢,如果真是这样那么写程序的时候就可以使用哪个都可以了。。
展开
展开全部
一、程序执行顺序不同
1、LCALL:LCALL是调用子程序,当子程序执行完后就返回到LCALL指令下一条指令继续执行程序
2、JMP:JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。
二、程序处理方式不同
1、LCALL:指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。
2、JMP:进行执行流程的跳转,不会保存返回地址。
三、程序执行过程不同
1、LCALL:执行LCALL命令时,将当前的 IP 或 CS和IP 压入栈中,之后转移到紧跟的标号行地址执行程序。
2、JMP:JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。
展开全部
LCALL是调用子程序,当子程序执行完后就返回到LCALL指令下一条指令继续执行程序,而子程序是可以多次调用,也可以在任何位置调用。这是从哪里走的,还要返回哪里的。
而JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。
而JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
区别还是很大的,LCALL是子程序调用指令,虽然入口好象和转移指令没什么区别,但子程序调用指令影响堆栈,所以一般在子程序中用RET实现返回,否则易造成栈的不平衡。而影响程序的正常运行。
而JMP多用于多分支程序设计,格式为JMP @A+DPTR或JMP @A+PC跳转后不影响堆栈。
而JMP多用于多分支程序设计,格式为JMP @A+DPTR或JMP @A+PC跳转后不影响堆栈。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用的时候都能用,使用LCALL子程序的话,程序的可读性和可移植性更好
追问
恩我觉得就是call用ret返回,而jmp想要返回原地方还要用jmp到原来的地方,区别吗还是有的,就是用的时候都能用,我就是在写的时候突然不知道用哪个了,是这么回事吧,是的话就用就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询