单片机中的AJMP LJMP SJMP JMP有什么区别?

最近在学习单片机,但是对以上几种跳转指令搞不明白。希望高手能够详尽解释一下,越通俗易懂越好,哪个时候该用哪个指令?还有ACALL和LCALL有什么区别?谢谢回答好的追加分... 最近在学习单片机,但是对以上几种跳转指令搞不明白。希望高手能够详尽解释一下,越通俗易懂越好,哪个时候该用哪个指令?还有ACALL和LCALL有什么区别?谢谢 回答好的追加分 展开
 我来答
金融清川老师
高粉答主

2019-11-21 · 专业投资人和你分享投资心得,解答疑惑。
金融清川老师
采纳数:262 获赞数:71341

向TA提问 私信TA
展开全部

1、字节不同

SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP。

AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP。

LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP。

ACALL是调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K。    

2、跳转的范围不一样。

AJMP 的范围是11位地址,也就是2K的空间内,占用存储空间2个字节,执行周期24个时钟周。

LJMP 的范围是16位地址,也就是64K的空间内,占用存储空间3个字节,执行周期24个时钟周期。

SJMP 的范围是8位地址,也就是256BIT的空间内,占用存储空间2个字节,执行周期24个时钟周期。

JMP一般配合DPTR使用,存储空间1个字节,执行周期24个时钟周期。一般用于多分枝选择的时候使用,比如按键处理。

ACALL,LCALL和以上说明类似,是调用指令,ACALL占用存储空间2个字节,执行周期24个时钟周期。LCALL占用存储空间3个字节,执行周期24个时钟周期。

扩展资料:

①短程转移(直接短转移)

指令格式:JMP SHORT OPRD

语法格式: JMP 地址标号 ;(IP)←(IP)+8位位移量

指令功能:OPRD为转移地址的标号,指令中的SHORT规定了OPRD为有符号的8位二进制数,OPRD为转移地址的偏移量。该指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址,从而实现程序的转移。

转移的目标地址OPRD在指令中可以直接使用标号地址,但要求转移的目标地址的范围只能在JMP指令所处地址的-128~+127字节范围之内,如超出该范围,汇编时出错。

② 近程转移(段内直接转移)

指令格式:JMP NEAR PTR OPRD

语法格式: JMP 地址标号 ;(IP)←(IP)+16位位移量

指令功能:与短程转移的功能和要求相同,不同之处是近程转移的OPRD为有符号的16位二进制数,指令将程序执行的顺序转移到由(IP)+OPRD形成的新的程序执行的目标地址。

转移的目标地址的范围只能在JMP指令所处地址的-32768~+32767字节范围之内,如超出该范围,汇编时出错。使用该指令时NEAR可省略

③段间直接转移(远程转移)

指令格式:JMP FAR PTR OPRD

语法格式: JMP 地址标号 ;(IP)←新的偏移地址, ;(CS)←新的代码段地址

指令功能:指令中用FAR PTR规定了该指令为段间的转移,OPRD为目的地址的标号,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容,将OPRD所在段的段地址送CS中,OPRD的段内偏移地址送IP中。

④ 段内间接转移

指令格式:JMP WORD PTR OPRD

语法格式:JMP reg16/mem ;(IP)←新的偏移地址

指令功能:与短程转移的功能和要求相同,不同之处是段内间接转移的OPRD 可以是除立即数外的任何寄存或存储器寻址方式,转移的目标地址由OPRD的内容确定。

⑤ 段间间接转移

指令格式:JMP DWORD PTR OPRD

语法格式:JMP mem32

指令功能:指令中用DWORD PTR规定了该指令为段间间接转移,OPRD只能是存储器寻址方式。执行该指令时将寻址到的内存单元的第一个字送入IP中,第二个字送入CS中。

参考资料来源:百度百科-JMP (软件)

参考资料来源:百度百科-SJMP

参考资料来源:百度百科-ljmp

参考资料来源:百度百科-AJMP

百度网友b76e2f8
2008-10-22 · TA获得超过1103个赞
知道小有建树答主
回答量:1271
采纳率:0%
帮助的人:1112万
展开全部
跳转的范围不一样,可以说是到达的远近距离不一样。存储空间占用不一样。
AJMP 的范围是11位地址,也就是2K的空间内,占用存储空间2个字节,执行周期24个时钟周期。
LJMP 的范围是16位地址,也就是64K的空间内,占用存储空间3个字节,执行周期24个时钟周期。
SJMP 的范围是8位地址,也就是256BIT的空间内,占用存储空间2个字节,执行周期24个时钟周期。
JMP一般配合DPTR使用,存储空间1个字节,执行周期24个时钟周期。一般用于多分枝选择的时候使用,比如按键处理。
ACALL,LCALL和以上说明类似,是调用指令,ACALL占用存储空间2个字节,执行周期24个时钟周期。LCALL占用存储空间3个字节,执行周期24个时钟周期。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ECU_MCU
推荐于2017-10-15 · TA获得超过456个赞
知道答主
回答量:69
采纳率:0%
帮助的人:53.7万
展开全部
个人觉得最好用的是LJMP,因为它是长转移,所以无论程序在何处,都可以跳到你要的地方,同样LCALL也是非常好用,它是长调用子程序,也是无论程序执行到何处,遇到它都可以调内存里任何一个位置子程序

所以我用最简单的一句话告诉你,在你需要跳转的时候就用LJMP,在你需要调程序的时候就用LCALL
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
嘘嘘暖人心9763
2008-10-20 · TA获得超过289个赞
知道答主
回答量:180
采纳率:0%
帮助的人:0
展开全部
SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP
AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP
LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,用LJMP

ACALL是你调用的子程序入口地址距离当前PC所指地址需介于0~2K,LCALL是0~64K。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaojun_xf
2008-10-20 · TA获得超过612个赞
知道小有建树答主
回答量:801
采纳率:0%
帮助的人:551万
展开全部
指示调用程序的范围不一样而已,acall - 2k内 lcall - 64k内
跳转指令也是一样的只是跳转的范围不一样而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式