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

2024-11-16 02:42:33
推荐回答(5个)
回答(1):

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

回答(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个时钟周期。

回答(3):

个人觉得最好用的是LJMP,因为它是长转移,所以无论程序在桐山何处,都可以跳到你要的地方,同样LCALL也是非常好用,它是长调用子程序,也是无论程序执行到何处,遇到它都可以调内存里任何一个位置子程序

所以我用最简单的友尘一句话告诉你,在你需要跳转的好轮禅时候就用LJMP,在你需要调程序的时候就用LCALL

回答(4):

SJMP 如果跳转到的标号地址距离当前PC所指的地址小于256字节,用SJMP
AJMP 如果跳转到的标号地址距离当前PC所指的地址小于2K字节,用AJMP
LJMP 如果跳转到的标号地址距离当前PC所指的地址小于64K字节,判正用LJMP

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

回答(5):

指示调用程序的范围不一样而已,acall - 2k内 lcall - 64k内
跳转指令也是一毁态睁样的只是跳转的范围不一样而纤岁已。闭则