历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2020年08月24日 | 正确区分LJMP、AJMP、SJMP、JMP单片机跳转指令

2020-08-24 来源:51hei


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


推荐阅读

史海拾趣

BESTECH公司的发展小趣事

由于“BESTECH”并非一个我所熟知的特定电子行业公司,因此我无法提供关于该公司具体发展故事的详细信息。此外,每个公司的发展都涉及到许多复杂的事件和因素,包括市场变化、技术革新、竞争态势、管理决策等,因此,撰写五个关于该公司发展的故事将需要详尽的研究和深入了解。

不过,我可以为您提供一个电子行业公司可能经历的一般性发展故事的框架,您可以根据这个框架来进一步了解或研究“BESTECH”或其他电子行业公司的发展历程。

电子行业公司一般性发展故事框架

  1. 创业初期与技术创新
    • 描述公司创始人的背景和对电子行业的热情。
    • 讲述公司如何从一个创业想法开始,通过技术创新解决某个行业痛点或满足市场需求。
    • 强调早期产品的独特性和市场接受度。
  2. 市场扩张与品牌建设
    • 描述公司如何逐渐扩大市场份额,可能包括进入新的地域市场或拓展产品线。
    • 讲述公司在品牌建设方面的努力和成果,如参加行业展会、获得奖项等。
    • 分析公司在市场竞争中的优势和策略。
  3. 技术升级与研发投入
    • 强调公司如何紧跟行业技术发展趋势,不断升级产品和技术。
    • 描述公司在研发方面的投入和取得的成果,如专利申请、新产品发布等。
    • 分析技术升级对公司市场竞争力的影响。
  4. 合作与战略联盟
    • 讲述公司如何与其他企业、研究机构或高校建立合作关系,共同推进技术创新和市场拓展。
    • 分析这些合作对公司发展的战略意义和价值。
    • 描述合作带来的具体成果和效益。
  5. 企业文化与社会责任
    • 强调公司在企业文化建设方面的努力和特色,如员工培训、激励机制等。
    • 讲述公司如何履行社会责任,如环保措施、公益活动等。
    • 分析企业文化和社会责任对公司长远发展的重要性。

请注意,这只是一个框架性的描述,具体的故事内容需要根据“BESTECH”或其他电子行业公司的实际情况来填充。如果您对“BESTECH”有特定的了解或需求,建议您查阅相关资料、公司年报或行业报告,以获取更准确和详细的信息。

意华(CZT)公司的发展小趣事

为了进一步扩大规模和提升竞争力,意华先后成立了多家子公司,包括苏州意华电工有限公司、东莞意兆电子科技有限公司等。这些子公司的成立,不仅实现了公司在不同地域的资源整合和优势互补,也加速了公司的集团化发展进程。通过集团化管理,意华能够更好地协调各子公司之间的业务和资源,提高整体运营效率。

GSN Electronics公司的发展小趣事

为了进一步扩大规模和提升竞争力,意华先后成立了多家子公司,包括苏州意华电工有限公司、东莞意兆电子科技有限公司等。这些子公司的成立,不仅实现了公司在不同地域的资源整合和优势互补,也加速了公司的集团化发展进程。通过集团化管理,意华能够更好地协调各子公司之间的业务和资源,提高整体运营效率。

Eutech公司的发展小趣事

EUtech Scientific Engineering公司起初以测量技术为核心,专注于为能源和电力系统提供高精度测量设备。随着技术的不断发展和市场需求的变化,公司意识到控制技术在电力系统中的重要性。于是,公司投入大量研发资源,成功将测量与控制技术相结合,开发出具有自主知识产权的控制系统,实现了从测量到控制的跨越。

Flambeau公司的发展小趣事

随着电子行业的快速发展,Flambeau公司不断加大研发投入,致力于技术创新和产品多样化。公司研发团队通过改进生产工艺、优化材料配方、引入先进的设计软件等措施,不断提升产品的性能和质量。同时,Flambeau还积极拓展产品线,从最初的塑料储存产品扩展到更广泛的电子包装解决方案,包括防静电包装、抗震包装等,以满足电子行业日益增长的多样化需求。

Dalian Dlicap Corporation公司的发展小趣事

2023年12月29日,大连达利凯普科技股份公司在深圳证券交易所创业板正式挂牌上市,股票代码为301566。这一里程碑式的事件标志着公司进入了一个新的发展阶段。上市融资将为达利凯普提供更多的资金支持和发展机遇,公司将继续加大研发投入和市场拓展力度,不断推动技术创新和产业升级。同时,达利凯普也将积极履行社会责任和义务,为电子行业的发展做出更大的贡献。

请注意,这些故事概要基于现有信息整理而成,具体细节可能因时间、环境等因素而有所不同。

问答坊 | AI 解惑

系统测试的基本方法

计算机软件是基于计算机系统的一个重要组成部分,软件开发完毕后应与系统中其它成分集成在一起,此时需要进行一系列系统集成和确认测试。对这些测试的详细讨论已超出软件工程的范围,这些测试也不可能仅由软件开发人员完成。在系统测试之前,软件工 ...…

查看全部问答>

F题有做出来的么?(期待大牛的xyt)

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 RT,不包括功放也好 崩溃了有点。。。 [ 本帖最后由 plich 于 2009-9-5 10:53 编辑 ]  …

查看全部问答>

运放电压跟随器到底应怎样接?

看到一些书上介绍运放做成电压跟随器,将输出接到反相,还有的接到同相,有关原理介绍都是较少一带而过,请教诸位到底是哪一种接法呢?…

查看全部问答>

传感器产业市场分析

传感器产业市场分析 …

查看全部问答>

2440串口移植的问题

2440 5.0 串口移植到 6.0。 加载串口驱动后,启动出现INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (0). 然后系统就死了。 也就是这一段 CReg2440Uart::CReg2440Uart()中     if (!KernelIoC ...…

查看全部问答>

哪个有SDHC协议

SD卡的协议比较好找. 但SDHC的协议就好难找了. 我找了两天也没找到. 哪个有SDHC协议? 能否传份给我? 谢谢! cokeliu@ev-sparkle.com…

查看全部问答>

xp系统下的U盘过滤驱动安装问题

用driverstudio,建了一个过滤驱动程序,想装在系统上做U盘的过滤驱动(功能驱动依然用系统的),结果发现运行后重启就是蓝屏。 安装的时候向注册表添加了这个: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentCont ...…

查看全部问答>

请教麻宝华老师Snooper

我用麻宝华老师的Snooper 是否要用你们专用的读卡器呢?我有SIM卡读卡器 但软件连不上 我想查看 执行 STK菜单所发出去的短信内容 要怎么操作呢 谢谢 比如STK彩单 “移动梦网”下的“天气预报” 就会发送出去一条短信 我怎么能知道这条短信的 ...…

查看全部问答>

关于wince下 KernelIoControl

想问下,下面这个KernelIoControl调用什么意思啊,查了下pb下的解释看不怎么明白啊 #define IOCTL_POCKETSTOREII_CMD        CTL_CODE(FILE_DEVICE_HAL, 4080, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef struct {   ...…

查看全部问答>

wince所需記憶體?

請問target board跑wince,所需要的記憶體是多少 32mb夠嗎 thx…

查看全部问答>