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中之值为表的偏移量地址,机器通过变址寻址转移指令便可实现程序的分支转移
分享到:
相关推荐
### 51汇编转移指令AJMP SJMP LJMP JMP的区别 #### 一、概述 在MCS-51系列单片机的汇编语言编程中,转移指令是非常重要的组成部分,用于实现程序流程的控制。根据不同的转移需求,51单片机提供了多种类型的转移...
其中,JMP、SJMP、AJMP、LJMP 等指令都是常用的跳转指令,每个指令都有其特点和应用场景。 SJMP 指令是一个短转移指令,占用两个字节,执行周期为 24 个时钟周期。SJMP 指令的偏移量范围为当前地址的 -127 字节到 ...
JMP指令有多种格式,例如AJMP,LJMP,SJMP等。 AJMP指令 AJMP指令是一种绝对跳转指令,用于将程序的控制权转移到指定的绝对地址上。AJMP指令的格式为AJMP #0x1000等。 LJMP指令 LJMP指令是一种长跳转指令,用于...
控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对...
其中,ACALL和LCALL指令用于实现子程序调用,RET和RETI指令用于实现子程序返回,JMP、SJMP、AJMP和LJMP指令用于实现跳转操作,CJNE、DJNZ、JZ、JNZ、JC、JNC、JB、JNB和JBC指令用于实现条件跳转操作,NOP指令用于...
* AJMP 绝对转移指令 * SJMP 短转移指令 * JMP 间接转移指令 * JZ 条件转移指令(a=0) * JNZ 条件转移指令(a 不等于 0) 以上是 51 汇编指令的基本概念和分类,本文提供了一个完整的指令集,可以帮助学习者更好地...
在控制转移指令中,无条件转移指令AJMP、SJMP和LJMP分别用于短距离、相对距离和长距离的跳转,而JMP @A + DPTR则允许通过累加器A和数据指针DPTR的组合来指定跳转地址。条件转移指令如JZ(累加器A等于零时转移)、JNZ...
4. 控制转移指令:如JMP、CALL、RET、SJMP、AJMP、LCALL、LJMP,用于程序流程控制,实现条件跳转和子程序调用。 5. 增量/减量指令:如INC、DEC,快速对寄存器或存储单元进行加一或减一操作。 6. 位操作指令:如CPL、...
7. **控制转移指令**:如JMP、AJMP、LJMP、SJMP、RET等,控制程序流程,实现条件分支、无条件跳转和子程序调用。 8. **处理程序指令**:如ACALL、LCALL,用于调用子程序,而RET指令则用于返回到主程序。 9. **伪...
- `SJMP` 指令实现相对短距离的跳转,`JMP @A+DPTR` 和 `JMP @Ri` 则用于基于累加器或寄存器的间接跳转。 这些指令是C51汇编语言的基础,它们允许程序员直接控制硬件资源,进行高效的数据处理和流程控制。理解和...
- **控制转移类指令**:改变程序执行流程,如`JMP`, `SJMP`, `AJMP`, `LJMP`, `CALL`, `RET`等。 - **位操作类指令**:直接对位进行操作,如`SETB`, `CLR`, `JBC`, `JB`, `CJNE`等。 在编写MCS-51单片机程序时,...
分支程序设计涉及条件分支,如根据特定条件决定程序的执行路径,常用指令包括AJMP、LJMP、SJMP、JMP以及条件转移指令JZ、JNZ、CJNE、DJNZ等。循环程序设计使用循环结构,如示例中将ASCII字符转换为16进制数的过程。...
- `AJMP/LJMP/SJMP`:绝对/长/短跳转。 3. **位寻址指令**: - `CLR/SETB/CPL`:清除/置位/取反指定位。 - `ANL/ORL`:对特定位进行逻辑与/或操作。 这些指令构成了MCS51微控制器的核心功能,熟练掌握它们对于...
此外,51单片机还支持中断处理,通过`SJMP`、`AJMP`、`LJMP`等指令实现不同范围的跳转。 8086/8088和MCS-51汇编语言虽然都属于汇编语言,但它们的指令集和应用环境各有特点。8086/8088更适合于处理复杂任务和系统...
2. 分支程序设计:根据条件进行跳转,常用指令如AJMP、LJMP、SJMP、JMP以及条件跳转指令JZ、JNZ等。 3. 循环程序设计:利用循环结构反复执行某段代码,如累加器A的ASCII字符转换为16进制数。 4. 查表程序设计:通过...
- **绝对转移指令(AJMP addr11 / SJMP addr11 / LJMP addr16)** - 功能:实现程序流程的绝对转移。 - 字节数/执行周期:AJMP/SJMP为2字节/2周期,LJMP为3字节/3周期。 - 标志位影响:无影响。 - **散转指令...
AJMP 指令: * 功能:绝对转移 * 英文注释:Absolute Jump LJMP 指令: * 功能:长转移 * 英文注释:Long Jump CJNE 指令: * 功能:比较不相等则转移 * 英文注释:Compare and Jump if Not Equal DJNZ 指令:...
控制转移指令包括无条件跳转(`AJMP`、`SJMP`、`LJMP`)、散转(`JMP @A+DPTR`)和条件跳转(如`JZ`、`JNZ`、`JC`),用于根据程序执行过程中的条件改变程序流程。 总的来说,这些指令构成了8051单片机编程的基础,...