`
talentluke
  • 浏览: 592371 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正确区分LJMP、AJMP、SJMP、JMP指令

 
阅读更多

无条件转移指令(共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中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移。

分享到:
评论

相关推荐

    51汇编转移指令AJMP SJMP LJMP JMP的区别

    关于51汇编转移指令AJMP SJMP LJMP JMP的区别 LJMP跟LCALL是在任何情况下都能用, 但是他们的指令长度不同,用a的可以节省一些空间 AJMP 占用2字节 运行周期2 SJMP 占用2字节 运行周期2 LJMP 占用3字节 运行周期2 ...

    jmp指令汇编源文件1

    声明代码段myprog4切换到代码段myprog5LJMP main在程序存储器0x0000的位置有一条跳转指令6使用第一组寄存器7ORG 100H定位到代码段

    MCS-51单片机的无条件转移指令用法介绍

    控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对...

    ljmp指令汇编源文件1

    声明代码段myprog4切换到代码段myprog5LJMP main在程序存储器0x0000的位置有一条跳转指令6使用第一组寄存器7ORG 1000H定位到代码

    8051架构以及汇编指令的翻译

    假设我们两条简单的指令JMP指令,看看到底怎么翻译的:CSEGAT00HLJMP 1204HAJMP 101HENDLOC OBJ LINE SOURCE----1 CSEG AT 00H0000 021204 2 LJMP 1204H0003 2101 3 AJMP 101H4 END首先看 LJMP 的二进制码 00000010 ...

    单片机课程设计代码——密码锁.txt

    LCALL DELY1 LCALL DELY JNB P0.2,X3 JMP Q3 X3:JB P0.2,S31 LJMP X3 S31:LJMP S3 Q4:JNB P0.3,A4 JMP Q5 A4:LCALL DELY1 LCALL DELY JNB P0.3,X4 JMP Q4 X4:JB P0.3,S41 LJMP X4 S41:LJMP S4 Q5:JNB P0.4,A5 JMP Q6...

    实例解读51单片机完全学习与应用

    AJMP、SJMP、JMP 8.10.2 条件跳转指令——JZ、JNZ 8.10.3 比较跳转指令——CJNE <dest-byte>, <src-byte>, rel 8.10.4 循环指令——DJNZ <byte>,<rel-addr> 8.10.5 无操作指令——NOP ...

    [详细完整版]18单片机.doc

    ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 0013H LJMP INT1 ORG 0030H MAIN:SETB EA SETB EX0 SETB EX1 SETB IT0 SETB IT1 MOV B,#00H HERE:SJMP HERE INT0:MOV A,B RL A INC A MOV B,A MOV P1,A RETI INT1:MOV...

    acall和lcall指令汇编源文件1

    声明代码段myprog4切换到代码段myprog5LJMP main在程序存储器0x0000的位置有一条跳转指令6使用第一组寄存器7ORG 100H定位到代码段

    单片机应用技术考试试题

    单片机应用技术考试试题(五) (本试题分笔试题和操作题两部分。共100分,考试时间120分钟。) 第一部分 笔试题 (本部分共有4大题,总分60分,考试时间60分钟,闭卷) ...9、指令语法,行逻辑正确 10、SBUF。

    [详细完整版]6程序设计.doc

    1、 ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV DPTR,#VAR MOVX A,@DPTR JZ ZERO JNB ACC.7,PULS MOV A,#0FFH AJMP OUT PULS: MOV A,#01H AJMP OUT ZERO: MOV A,#00H OUT: MOV DPTR,#FUNC MOVX @DPTR,A SJMP $ ...

    8051助记符/地址对照表

    AJMP - Absolute Jump ANL - Bitwise AND CJNE - Compare and Jump if Not Equal CLR - Clear Register CPL - Complement Register DA - Decimal Adjust DEC - Decrement Register DIV - Divide Accumulator by B ...

    8279可编程设置型键盘

    JMP @A+DPTR ; KJPADDR: LJMP LOOP0 LJMP LOOP1 LJMP LOOP2 KEYTAB: DB 0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH,0D1H,0D9H DB 0DAH,0C3H,0CBH,0D2H,0D3H,0DBH KEYTAB1:DB 0E3H,0E2H,0E1H CDATA: DB 0CH,9FH,...

    基于单片机的声光汽车防盗报警系统

    AJMP LOOP WJ: MOV A,#0FFH SETB P1.0 CLR TR1 LJMP MAIN D200: MOV R4,#41H D200B:MOV A,#0FFH D200A:DEC A JNZ D200A DEC R4 CJNE R4,#00H,d200B RET TAB: DB 0FEH,06H,01H, 0FEH,06H,01H, DB 0FCH,0CH...

    C51指令集 CJNE @Rn,#data,rel 3

    51汇编语言指令集 符号定义表 符号 含义 Rn R0~R7寄存器n=0~7 Direct 直接地址,内部数据区的地址RAM(00H~7FH) SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0 @Ri 间接...

    AT89c51时钟程序编写

    SJMP Start1 SETMM1: LJMP SETMM INTT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV A,#0B7H ;中断同步修正 ADD A,TL0 MOV TL0,A MOV A,#3CH ADD A,TH0 MOV TH0,A SETB TR0 DJNZ R4, OUTT0 ADDSS: MOV R4...

    单片机系统设计的可靠性.doc

    此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些 重要指令的执行。 2. 软件陷阱技术 当乱飞程序进入非程序区,冗余指令便无法起作用。...

    逻辑指令汇编源文件1

    声明代码段myprog4切换到代码段myprog5LJMP main在程序存储器0x0000的位置有一条跳转指令6使用第一组寄存器7ORG 100H定位到代码段

Global site tag (gtag.js) - Google Analytics