正确区分LJMP、AJMP、SJMP、JMP指令
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个时钟周期。 

汇编----正确区分LJMP、AJMP、SJMP、JMP跳转指令相关推荐

  1. 【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )

    文章目录 一.call 子函数调用指令 二.jmp 跳转指令 三.lea 加载指令 四.mov 数据传送指令 总结 一.call 子函数调用指令 call 指令是 子函数调用指令 , 调用的指令的下一 ...

  2. 【汇编】JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转

    指令长度=操作码的长度+操作数地址的长度 1.段内跳转 JMP指令占1个字节. 操作数的地址长度 = (目标地址-指令当前地址)//若能用1个字节表示,则占用1个字节,那么整体指令长度为2个字节;若需 ...

  3. JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转

    原文链接:https://blog.csdn.net/liuchuo/article/details/51990669 指令长度=操作码的长度+操作数地址的长度 1.段内跳转 JMP指令占1个字节. ...

  4. 汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类: ...

  5. 【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    汇编跳转指令: JMP.JECXZ.JA.JB.JG.JL.JE.JZ.JS.JC.JO.JP 等 2017年11月12日 15:01:09 zmmycsdn 阅读数 19334 转自:http:// ...

  6. 汇编jnl_汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    http://pan.baidu.com/s/1gVTSi 跳转指令分三类: 一.无条件跳转: JMP ;无条件跳转 二.根据CX.ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ ...

  7. ARM汇编:汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  8. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  9. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  10. arm64汇编b带条件跳转指令和bl跳转带返回ret指令

    文章目录 ret返回指令 B 跳转指令 BL 带返回的跳转指令 B指令可以接上后缀,用来和cmp比较后待条件的跳转 ret返回指令 cpu遇到ret之后,会把lr赋值给pc,这样cpu执行了pc里的地 ...

最新文章

  1. Linux上chown命令的高级用法
  2. windows和liunx下换行符问题
  3. 使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc
  4. Acwing第 15 场周赛【未完结】
  5. boost::mpi::wait_all相关用法的测试程序
  6. 使用Unity引擎打造赛博朋克之城!CIGA Game Jam 2019 48小时独立游戏开发挑战
  7. socket 编程入门教程(一)TCP server 端:1、建模
  8. 近期可能会研究和讨论的个人动向
  9. 亚马逊 速卖通 Lazada 敦煌网测评自养号技巧知识
  10. Python调用有道智云文本翻译API接口实现“智能”伪原创
  11. 第3章第11节:如何将众多图片制作成照片墙并作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
  12. windows和linux共用蓝牙鼠标,Linux 与 Windows 双系统共享蓝牙鼠标
  13. 东鹏饮料如何站稳千亿市值?
  14. [大赛推荐]短视频开发大赛,万元现金大奖等你来拿
  15. 芝麻信用免押金成趋势 报告称租赁经济有望突破10万亿元
  16. eval 是做什么的?
  17. 面试自动化测试的必问题
  18. Android N Preview Notification API (通知)
  19. Web端访问微信小程序云数据库
  20. 【Web技术】1397- 深入浅出富文本编辑器

热门文章

  1. start request repeated too quickly for docker.service
  2. (Web前端)十分优秀的后台管理框架收集
  3. python绝对值、加法
  4. 松花江等三流域禁渔效果不理想 跨界水域成管理盲区
  5. 一些代码美化的实用网站
  6. nmap输出xml转换htm方法
  7. 生产制造MES系统源码 采购管理模块解析
  8. 【程序35】 ArrayChange.java 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
  9. win10专业版与家庭版有什么不一样
  10. 火狐浏览器Firefox Firefox中的xpi文件是什么