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

正确区分LJMP、AJMP、SJMP、JMP指令()相关推荐

  1. 实现8086汇编编译器(三)——jmp指令的翻译

    文章目录 前言 jmp 汇编指令的格式 jmp 机器指令的格式 jmp 指令的翻译 jmp 操作数类型 解析操作数 checkJmp 的实现 encodeJmp 的实现 前言 直接看<汇编语言& ...

  2. JMP指令也可能是函数调用,二进制实时函数调用检测

    Now You See Me: Real-time Dynamic Function Call Detection Remarks Conference: ACSAC 2018 Full Paper: ...

  3. jmp指令对应的机器码

    od随便打开一个记事本,汇编几条jmp指令,可以看到如下 地址           HEX              反汇编 010073B4     - E9 7B9E8787      JMP 8 ...

  4. 转移地址在内存中的jmp指令 检测点9.1

    转移地址在内存中的jmp指令有两种格式: (1)jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址. mov ax,0123h mov d ...

  5. 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令

    机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...

  6. 操作符offset 和 jmp指令

    转移指令的原理 转移指令:可以修改IP或者同时修改CS和IP的指令(jmp.loop.call) 总的来说,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086的转移行为有一下几类: 只修改 ...

  7. JMP指令转换公式推导

    看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象 找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 ...

  8. 如何正确区分cssci和核心期刊

    如何正确区分cssci和核心期刊 现在的期刊分为好几种,比如省级期刊,国家级期刊,这些一般来说从名字就能辨别出来有什么区别.那么核心期刊和cssci有什么区别?在当前核心期刊与CSSCI期刊是期刊等级 ...

  9. 基于ABP落地领域驱动设计-06.正确区分领域逻辑和应用逻辑

    系列文章 基于ABP落地领域驱动设计-01.全景图 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则 基于ABP落地领域驱动设 ...

  10. 基于8086CPU微处理器的汇编学习之JMP指令

    JMP指令: 更改CS:IP寄存器的内容,以让CPU从新指定的内存地址开始继续执行指令. 格式: JMP  段地址:偏移地址 ------------------------------------- ...

最新文章

  1. Mysql元数据分析
  2. c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...
  3. 小功告成:ReadIE beta
  4. 2-4 zookeeper配置文件介绍,运行zk
  5. 以短带长进军网综,西瓜视频能否干过“优爱腾”?
  6. 计算机网络-基本概念(3)【网络层】-路由选择协议
  7. PAT 1079. Total Sales of Supply Chain
  8. 机器学习算法之集成学习
  9. 三校生计算机对口本科有哪些学校,宝山三校生五月对口高考报名
  10. 进入全屏 nodejs+express+mysql实现restful风格的增删改查示例
  11. 产品入门八——用户体验设计
  12. 看过无数 Java GC 文章,这 5 个问题你也未必知道!
  13. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_11、SpringBoot2.x目录文件结构讲解...
  14. Android 硬件传感器
  15. MySQL--必知必会补充知识
  16. 关于hibernate的generator标签中param name=sequencexxx/param用了还是默认的hibernate_sequence的问题
  17. Laravel框架-迁移文件
  18. python 打包exe_python pyinstaller打包exe报错的解决方法
  19. html中定义动画anima,css中animation怎么用
  20. 象与骑象人-幸福的假设

热门文章

  1. 数学实验基于matlab软件,数学实验:基于MATLAB软件
  2. vs201x下正则表达式过滤中文
  3. Vue.js菜鸟教程自学(一)
  4. 《未来世界的幸存者》后感
  5. 永恒之蓝(ms17010)漏洞利用
  6. Blake2b算法 php,Blake2b算法是什么?Blake2b算法币种盘点
  7. 如何优雅的在微信小程序使用 SVG 字体图标
  8. 概率图模型-原理与技术 第二章 基础知识 学习笔记
  9. 基于FPGA的VGA显示,简单的历程和注释(DE2-115)
  10. win10局域网加入工作组计算机,Win10专业版加入局域网工作组的技巧