
JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出。
和调用指令类似,无条件转移指令也可有四种形式。下面是四种无条件转移指令的实例。
1、JMP 1000H
段内直接转移,转移地址的偏移量由指令给出。
2、JMP CX
段内间接转移,转移地址的偏移量由CX指出。
3、JMP 1000H:2000H
段间直接转移,段码和偏移量由指令给出。
4、JMP DWORD PTR [SI]
段间间接转移转移地址在SI所指地址开始的4个单元中。
扩展资料
JMP在SAS的基础上形成了自己的算法,特别强调以统计方法的实际应用为导向,交互性、可视化能力强,使用方便,尤其适合非统计专业背景的数据分析人员使用,在同类软件中有较大的优势。
类型:
①短程转移(直接短转移)
指令格式:JMP SHORT OPRD
语法格式: JMP 地址标号 ;(IP)←(IP)+8位位移量
② 近程转移(段内直接转移)
指令格式:JMP NEAR PTR OPRD
语法格式: JMP 地址标号 ;(IP)←(IP)+16位位移量
③段间直接转移(远程转移)
指令格式:JMP FAR PTR OPRD
语法格式: JMP 地址标号 ;(IP)←新的偏移地址, ;(CS)←新的代码段地址
如图所示,这个就是台达DVP系列PLC的跳转指令CJ指令的程序。当X0为ON,就跳转到P0处,X1这行就跳过去了,不会运行了,直接运行X2这行。当X0为OFF就不跳转,就是先执行X1这行,然后紧接着执行X2这行。
望采纳。。。。。。
简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。
详细点说:
call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于:
push CS (没有这种指令,有没有这一句还要看调用的类型:far/near)
push IP (没有这种指令)
jmp [word ptr/dword ptr]
这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于:
pop IP (没有这种指令)
pop CS (没有这种指令,有没有这一句也要看调用的类型)
来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。
而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。
当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。如:
mov bx,offset s
push bx
ret
这样就相当于:
jmp s
所以说不要只是记一个指令怎么用,而是要理解一个指令到底是什么原理。
跳转至标签(JMP)指令对程序中的指定标签(n)执行分支 *** 作。跳转接受时,堆栈顶值始终为逻辑1。标签(LBL)指令标记跳转目的地(n)的位置。您可以在主程序、子程序或中断例行程序中使用"跳转"指令。"跳转"及其对应的"标签"指令必须始终位于相同的代码段中(主程序、子程序或中断例行程序)。您不能从主程序跳转至子程序或中断例行程序中的标签,与此相似,您也不能从子程序或中断例行程序跳转至该子程序或中断例行程序之外的标签。您可以在SCR段中使用"跳转"指令,但对应的"标签"指令必须位于相同的SCR段内。
程序举例
STL
NETWORK 1
// 如果保留数据尚未丢失,跳转至LBL4
LDN SM02
JMP 4
NETWORK 2
LBL 4
以上就是关于PLC编程里的JMP指令全部的内容,包括:PLC编程里的JMP指令、台达plc跳转指令怎么使用、请问大家 汇编语言中 子程序调用指令和跳转指令有什么区别谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)