导航:首页 > 操作系统 > 单片机ljmp

单片机ljmp

发布时间:2022-07-28 17:58:52

单片机中sjmp和ljmp是啥意思啊

MCS-51的控制转移类指令,共17条,分为无条件转移指令、条件转移指令、子程序调用和返回指令、空操作指令等四类。

无条件转移指令(共4条)
LJMP addr16 ; PC〈—— addr16
AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11
SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel
JMP @A+DPTR ; PC〈—— A+DPTR

第一条指令称为长转移指令(Long Jump);
第二条指令叫作绝对转移指令(Absolute Jump);
第三条指令称作短转移指令(Short Jump);
第四条指令是变址寻址转移指令(散转指令)。

显然,每条指令均以改变程序计数器PC(Program Counter)中的内容为宗旨。

(1)长转移指令(64KB范围内转移指令)
长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。由于addr16是一个16位二进制地址(地址范围为0000H—FFFFH),因此长转移指令一条可以在64KB范围内转移的指令。为了使程序设计方便易编,addr16常采用标号地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上机执行前才被汇编(或代真)为16位二进制地址。
长转移指令为三字节,双周期指令。
上机试试吧!很直观的! For Example: LJMP F886H
注意:
在下载的这个8051DEBUG软件中,不支持标号,且程序状态字PSW(Program State Word)中的D0位,即奇偶标志位P,与正确的正好相反,这一点是错误的,用的时候留意一下。

只要记好:累加器ACC中1的个数为奇数,则P=1;否则P=0。

(2)绝对转移指令(2KB范围内的转移指令)
绝对转移指令是一条双字节双周期指令,11位地址addr11(a10—a0)在指令中的分布是:
a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作码。在程序设计中,11位地址也可以用符号表示,但在上机执行前必须按照上述指令格式加以代真。
绝对转移指令执行时分为两步:
第一步是取指令操作,程序计数器PC中内容被加1两次;
第二步是把PC加2后的高5为地址PC15—PC11和指令代码中低11位构成目标转移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0

其中,a10—a0的地址范围是全“0”——全“1”。因此,绝对转移指令可以在2KB范围内向前或向后跳转。
如果把单片机64KB寻址区分成32页(每页2KB),则PC15—PC11(00000B—11111B)称为页面地址(即:0页—31页),a10—a0称为页内地址,但应注意:AJMP指令的目标转移地址不是和AJMP指令地址在同一个2KB区域,而是应和AJMP指令取出后的PC地址(即:PC+2)在同一个2KB区域。例如:若AJMP指令地址为2FFEH,则PC+2=3000H,故目标转移地址必在3000H—37FFH这2KB区域中。
例如:MGH2001:AJMP addr11,
其中,MGH2001为AJMP addr11指令的标号地址,由该指令在程序存储器中的位置确定,addr11为11位地址,试分析该指令执行后的情况以及指令码的确定方法。
解:设MGH2001=3100H,addr11=10110100101B,则根据上述指令码格式可得绝对转移指令的格式码为:1 0 1| 0 0 0 0 1|1 0 1 0 0 1 0 1|(a10 a9 a8|操作码|a7—a0|)
即:A1A5H。该指令执行后:
PC15——PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
PC= 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 B =35A5H
即:程序转移到35A5H处执行。

(3)短转移指令(-126—+129范围内的转移指令)
短转移指令的功能是先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。因此,短转移指令是一条相对转移指令,是一条双字节双周期指令,指令码格式为:80H rel(操作码 地址偏移量),这里,80H是SJMP指令的操作码;rel是地址偏移量,在程序中也常采用符号地址,上机运行前才被代真成二进制形式。
遇到具体问题时,头脑中一定要清楚一个关系式:目标转移地址=源地址+2+rel

(4)变址寻址转移指令(只能在256个存储器单元内转移)
这是一条单字节双周期无条件转移指令。
在指令执行之前,用户应预先把目标转移地址的基地址送入DPTR,目标转移地址对基地址的偏移量放在累加器A中。在指令执行时,MCS-51单片机把DPTR中基地址和累加器A中地址偏移量相加,以形成目标转移地址送入程序计数器PC中。
通常,DPTR中基地址是一个确定的值,常常是一张转移指令表的起始地址,累加器A中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移跳转的范围不一样,可以说是到达的远近距离不一样。存储空间占用不一样。
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个时钟周期。

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

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

(2)单片机ljmp扩展阅读:

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

指令格式: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中。

③ 51单片机中,ljmp 2d什么意思

LJMP是长跳转,可以在程序的64K范围内跳转
2d就是跳转的去处,是个标号
我们常在程序的开头见 LJMP MAIN 也是这个意思

④ 51单片机汇编程序入口后加的跳转指令"LJMP"是因为什么 如:ORG 0 LJMP STAR ORG 0003H LJMP INT0S

要弄明白这个问题,你要对51单片机的中断有一个初步的了解,我可以给你介绍一下。
比方说你希望不管程序运行到哪里,只要你一按某个按键,就执行一段你预先写好的程序,然后再回到原来的地方继续。你按按键的动作可以视为单片机的一个I/O管脚电平由高到低(如果你把按键接在I/O和地之间)。在51单片机中,有两个I/O可以实现这样的功能(这就是外中断,ORG
0003H
LJMP
INT0S
中的INT0S就是外中断0,具体你可以查51单片机中断系统的资料)。
那它到底是怎样实现的呢?比方说,某一时刻,你的按键按下了,处理器会知道满足了外中断的触发条件,那它会执行哪一段程序呢?设计师人为地给它规定了一个固定的地址,如外中断0被触发时就是跳到地址为0003H的单元开始执行,别的中断(定时器等)同理,都有一个固定的地址,一旦被触发就会自动跳到那个地址,这就是中断向量。
那为什么是0003H而不是程序存储器的末尾呢?这是因为不同51单片机的存储器大小是不同的,如果中断向量也因此而不同的话,单片机开发的麻烦就太多了。所以设计师干脆就把中断向量放在开头。单片机复位后是从0000H开始执行的,总不能让它一开始就无缘无故中断,所以要转移到一个和中断向量不相干的地方执行主程序。ORG
0
LJMP
STAR(其实应该是START)就是这样一个转移指令,转到标记为START的主程序处开始执行。一条LJMP指令的长度为3,这也就是第一个中断向量为0003H的原因了(不浪费一丝空间,不得不佩服Intel设计师的高明)。
ORG
0003H
LJMP
INT0S
为什么中断向量处还要跳转呢?这是因为中断向量间的空间也很有限,只能完成一些最简单的任务,稍微长一点的程序就需要放在更大的空间里,从中断向量处跳转到该处执行真正的中断服务程序。
有关中断系统的具体内容,建议你还是看看相关资料,我只是把它的基本原理和你讲了一下,真正使用还是请你自己探索。

⑤ 为什么 MCS-51单片机的中断入口地址处通常放LJMP指令。可以不用子程序调用指

转移指令。
LJMP就是这样一个转移指令,转到标记为START的主程序处开始执行。一条LJMP指令的长度为3,这也就是第一个中断向量为0003H的原因了。因为中断向量间的空间也很有限,只能完成一些最简单的任务,稍微长一点的程序就需要放在更大的空间里,从中断向量处跳转到该处执行真正的中断服务程序。建议你还是看看相关资料。

⑥ 单片机中,能否使用LJMP指令从主程序转入子程序或从子程序跳转回主程序,为什么

这个当然是能使用LJMP指令重主程序跳转到子程序,或从子程序跳回主程序,但一般是不允许这样使用LJMP指令的,很容易造成程序运行混乱。因为调用子程序保护现场要将当前的地址压入堆栈,子程序返回时,会弹出该地址赋值给PC指针。如果使用,必须满足以下条件:
1、跳出跳入成对出现,也就是说,从主程序用LJMP跳转到子程序,那么在子程序中的RET前,必须是用LJMP指令跳回。
2、不成对出现,但是如果子程序是LJMP跳转来的控制,那么在RET前,需要压入返回位置的地址。比如:
主程序:
.....
LJMPSUB01
........
CON: ;返回地址
......
SUB: ;子程序
....
SUB01: ;跳转到的地址
....
MOV DPTR,#CON ;返回前处理。
PUSH DPH
PUSH DPL
RET

⑦ 单片机汇编时,子程序的LJMP问题

在单片机汇编程序中,如果LJMP到子程序(如果不是调用且用RET返回的话就不能叫子程序了,)那么必须再用LJMP跳回来才行,如果是LCALL调用,但LJMP跳回,那么将破还堆栈结构,程序就会出现混乱了。有如下关系:
LCALL
.......
RET
这必须成对出现。

⑧ 单片机中LJMP和SJMP有啥区别啊,这两个程序中的LJMP和SJMP可以互换么

LJMP是长转移,范围是在64K地址范围内。SJMP是短转移,转移地址范围在-128~127之间。程序中因为转移范围较小,两个指令都可以。

⑨ 哪位单片机高手帮我解释一下下面程序中的LJMP什么意思

ljmp是长跳转。
因为30H之前有中断入口地址,所以不能随便占用,需要跳过去,
我个人都是跳转到0100H,根据个人爱好,呵呵

⑩ 单片机AJMP指令和LJMP指令有何区别

区别如下:

1、定义不同。

AJMP是无条件跳转指令之一,叫做绝对跳转。而LJMP则是长转移指令。如果一个程序代码在2KB以内(是指编译后的BIN代码),可以用AJMP指令。如果一个程序代码超过了2KB,就要用LJMP指令了。

2、范围不同。

AJMP 跳转的范围是2KB之内的,就是AJMP指令和跳转的目的地址在ROM中的同一个2KB范围内。

LJMP 跳转的范围是64KB全部的ROM存储区。

3、使用功能不同。

AJMP主要是用来改变程序执行的路线,到需要的指令或程序去执行。ljmp长转移指令的功能是:把指令码中的目标地址addr16装入程序计数器PC,使机器执行下一条指令时无条件转移到addr16处执行程序,不影响任何标志。

阅读全文

与单片机ljmp相关的资料

热点内容
c语言常用算法pdf 浏览:960
编程如何让画面动起来 浏览:865
大龄女程序员未来发展 浏览:976
数学书籍pdf 浏览:506
加密门禁卡写入成功无法开门 浏览:464
齿轮传动pdf 浏览:52
alpinelinux 浏览:150
手机端app的扫码功能在哪里 浏览:227
少儿编程中小班英语教案 浏览:452
锁屏密码加密手机怎么解除 浏览:205
linuxlostfound 浏览:134
征途服务器ip地址 浏览:330
git提交代码命令行 浏览:165
什么叫浏览器服务器结构 浏览:157
于谦聊天哪个app 浏览:449
小鹏汽车nlp算法工程师薪资 浏览:881
代码加密与隐藏 浏览:649
fordfulkerson算法 浏览:352
京东热app在哪里可以下载 浏览:877
彩报图书app哪个好 浏览:303