版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.3.4 控制程序转移类指令,包括以下类型: 无条件转移和条件转移 相对转移和绝对转移 长转移和短转移 调用与返回指令,重点、难点:“JMP、CJNE、DJNZ”指令。,3.3.4 控制程序转移类指令,1.无条件转移指令 短转移类指令: AJMP addr11 ;先(PC)+2PC,后addr11 PC100,( PC1511 )不变 程序转移范围:2KB的程序存储器地址空间。 2字节指令,例:1030H:AJMP 0010000 0000B 问:转移的地址是多少?,解: addr = 001 00 00 0000 B 先(PC)+2=1030H+2=1032H= 0001 0 000 00
2、11 0010 B 后: ( PC1511 )不变,PC100= 0001 0 001 00 00 0000 B=1100H 即执行该指令后,将转至地址为:1100H处。,3.3.4 控制程序转移类指令,长转移指令 LJMP addr16 ;addr16PC。 3字节指令 指令中:第二字节装入PC的高8位,第三字节装入PC的低8位。 程序转移范围:64KB的程序存储器地址空间。,例: 1023H: LJMP 212AH (PCH)=21H,(PCL)=2AH。 机器码为:02 21 2AH。,3.3.4 控制程序转移类指令,相对转移指令 SJMP rel ;先(PC)+2PC,后(PC)+re
3、l PC ;2字节指令 程序转移范围:256B.,手工编程时,需计算偏移量rel: rel机器码的相对偏移量,为8位补码。 转移范围:-128+127字节。,即:rel为正数时,范围为:0+127 (00H7FH)。 rel为负数时,范围为:-128-1(80HFFH)。,相对转移指令“SJMP rel”,例如: 0100H:SJMP rel 设转移的地址为0157H,则: rel=0157H-0100H-2=55H。故该指令可写成: 0100H:SJMP 55H 其机器码为: 80H 55H,正向跳转时: rel目的地址源地址-2 =地址差-2。,0157H,反向跳转时: rel目的地址源地
4、址-2补 = -2补-|地址差| =FEH-|地址差|,例如: 0100H:SJMP rel 设程序转移的地址为:00F8H, 则地址偏移量rel为: rel=FEH - | 0100H-00F8H| =FEH-0008H =F6H。 故该指令可写成: 0100H:SJMP F6H 其机器码为: 80H F6H,00F8H,编程时,可用标号代替转移目的地址, rel 交给编译程序计算。 例如: SJMP NEXT NEXT: ,原地踏步指令的指令: HERE: SJMP HERE 常写成: SJMP $,总结 短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移
5、指令:SJMP rel 这三条指令,可理解成:PC值改变,即跳转到一个标号处。 它们的区别: 跳转的范围不同(2KB;64KB ;-128+127 )。 指令构成不同。 AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。 指令长度不同(2字节;3字节;2字节)。 原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代。,均可用标号表示,3.3.4 控制程序转移类指令,间接转移指令(散转指令) JMP A+DPTR ;(A)+(DPTR)PC。 1字节指令 使用该指令前,应先给DPTR赋值,A中的内容为无符号数。 转移范围:256B. 该指令多用于多分支程序结构中。,P75
6、.例3-11根据累加器A中命令键的键值,设计命令健操作程序入口跳转表。,例如:当(A)=2时,程序跳转到标号为“XX2”的程序中。,3.3.4 控制程序转移类指令,2. 空操作 NOP ;(PC)+1PC。 1字节指令,3. 条件转移类指令 条件转移指令是指在满足一定条件时进行相对转移,否则程序 继续执行本指令的下一条指令。,3.3.4 控制程序转移类指令,判A内容是否为0转移指令 JZ rel ;(PC)+2PC。若A=0,则转移到(PC)=(PC)+rel; ; 否则顺序执行。 JNZ rel ;(PC)+2PC。若A0,则转移到(PC)=(PC)+rel ; ;否则顺序执行。 在编写汇编
7、语言源程序时,可以直接写成: JZ 标号 ;即转移到标号处。例如: JZ LOOP,以上两条指令均为:2字节指令,判A内容是否为0转移指令,例: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 问:如果执行程序前(R0)=0,执行上述程序后,(R1)=?;若执行程序前(R0)0,则(R1)=?。,解:如果(R0)=0,结果(R1)=0FFH; 而若(R0)0,则结果是(R1)=00H。,3.3.4 控制程序转移类指令,比较(不相等)转移指令 CJNE (目的字节),(源字节),rel ;3字节指令 CJNE
8、 A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,同样地,使用时,可以将rel理解成标号,即: CJNE A,#data, 标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE Ri,#data,标号,比较(不相等)转移指令, CJNE A,#data,rel ;先(PC)+3PC 若(A)#data,则(PC)+relPC,且0CY; 若(A)#data,则(PC)+relPC,且1CY; 若(A)=#data,则顺序执行,且0CY。, CJNE A,direct,rel ;先(
9、PC)+3PC 若(A)(direct),则(PC)+relPC,且0CY; 若(A)(direct),则(PC)+relPC,且1CY; 若(A)= (direct),则顺序执行,且0CY。, CJNE Rn,#data,rel ;先(PC)+3PC 若(Rn) #data,则(PC)+relPC,且0CY; 若(Rn) #data,则(PC)+relPC,且1CY; 若(Rn)= #data,则顺序执行,且0CY。,比较(不相等)转移指令, CJNE Ri ,#data,rel ;先(PC)+3PC 若(Ri) #data,则(PC)+relPC,且0CY; 若(Ri) #data,则(P
10、C)+relPC,且1CY; 若(Ri)= #data,则顺序执行,且0CY。,比较(不相等)转移指令,利用这些指令,可以判断两数是否相等。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也 具有这样的功能: 如果两数不相等,则CPU还会用CY(进位位)来反映哪个数 大,哪个数小。如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小 了。,循环转移指令(减1不为0转移指令),DJNZ Rn,rel ;先(PC)+2PC,(Rn)-1Rn, 若(Rn) 0,则(PC)+relPC, 若(Rn)=0,则结束循环,程序往下执行。 DJNZ dire
11、ct,rel ;先(PC)+3PC,(direct)-1 direct ; 若(direct) 0,则(PC)+relPC; 若(direct)=0,则结束循环,程序往下执行。,例: MOV 23H,#0AH CLR A LOOP: ADD A,23H DJNZ 23H,LOOP SJMP $ 问:上述程序段的执行过程是怎样的?,执行过程是: 将23H单元中的数连续相加,保存至A中,每加一次,23H单元中的数值减1,直至减到0,共加0AH次。,调用和返回指令,主程序,A,第1次调用,RET,子程序ADM1,B,返回1,第2次调用,返回2,C,D,主程序调用子程序返回过程示意图,断点,断点,调用
12、和返回指令,短调用指令 ACALL addr11 ; 2字节指令 操作: 先:(PC)+2PC,(SP)+1 SP 后:(PC70) (SP) (SP)+1 SP (PC158) (SP) addr 100 (PC100) (PC1511)不变,断点值压入堆栈,编程时,可用标号代替转移目的地址,addr11,addr16交给编译程序计算。,长调用指令 LCALL addr16 ;3字节指令 操作: 先:(PC)+3PC,(SP)+1 SP 后:(PC70) (SP) (SP)+1 SP (PC158) (SP) addr 150 (PC),断点值压入堆栈,目的地址,目的地址,进栈: 先压入低8
13、位地址, 后压入高8位地址。,调用和返回指令,子程序返回指令 RET ;1字节指令 操作: 先: (SP) PC158 ,弹出断点的高8位。 后: (SP)-1 SP (SP) PC70 ,弹出断点的低8位。 (SP)-1 SP。,出栈: 先弹出高8位地址, 后弹出低8位地址。,中断返回指令 RETI ;1字节指令 操作: 先: (SP) PC158 ,弹出断点的高8位。 后: (SP)-1 SP (SP) PC70 ,弹出断点的低8位。 (SP)-1 SP。,RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。,例3-12,设(SP)=40H,符号地址“SU
14、BRTN”指向ROM的5678H,执行指令: 0123H: LCALL SUBRTNS 执行完指令后(PC)+3=0123H+3=0126H。将该PC的内容压入堆栈: 向(SP)+1=40H+1=41H中压入26H,向(SP)+1=41H+1=42H压入01H, 此时(SP)=42H。而地址SUBRTN=5678H送入PC,程序转去执行以 5678H为首地址的子程序。,3.3.5 位操作(布尔处理)类指令,MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等指令。 在进行位处理时, CY用作“位累加器”。 在MC
15、S-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。 位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH); 可以位寻址的特殊功能寄存器:89C51中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除, 如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、 IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0P3(I/O端口锁存器)。,位地址表达方式,以PSW中位4( RS1 )为例。 直接(位)地址方式:如 D4H; 点操作符号方式:如 PSW.4,D0H.4;
16、 位名称方式:如 RS1; 用户定义名方式:如用伪指令 bit SUB.REG bit RS1 定义后,可用SUB.REG代替RS1。,1. 位传送指令,MOV C,bit;(bit) C。 2字节指令 MOV bit,C;(C) bit。 2字节指令,例:MOV C,P1.0;将P1.0的状态送给C。 MOV P2.0,C ;将C中的状态送到P2.0,引脚上去。,2. 位修正指令,位清0指令 CLR C ;使CY=0。 1字节指令 CLR bit ;0bit。 2字节指令,例:CLR P1.0 ;即使P1.0变为0,位置1指令 SETB C ; 1 CY。 1字节指令 SETB bit ;1
17、bit 。 2字节指令,2. 位修正指令,位取反指令 CPL C ;(C)C, 1字节指令 CPL bit ;(bit) bit。 2字节指令,3. 位逻辑运算指令 位逻辑“与”指令 ANL C, bit ;(C) (bit)C。 2字节指令 ANL C, /bit ;(C) (bit) C。 2字节指令,注意:指定的位地址中的值本身并不发生变化。,例:ANL C,/P1.0,3. 位逻辑运算指令,位逻辑“或”指令 ORL C, bit ;(C) (bit)C。 2字节指令 ORL C, /bit ;(C) (bit)C。 2字节指令,4.位条件转移类指令 判Cy转移指令 JC rel ;先(
18、PC)+2PC;后:若(CY)=1,则转移。否则顺序执行 JNC rel ;先(PC)+2PC;后:若(CY)=0,则转移。否则顺序执行,(PC)+relPC,(PC)+relPC,上面两条指令均为:2字节指令。,4.位条件转移类指令,判位变量转移指令 JB bit,rel ;(PC)+3PC; 若(bit)=1,则(PC)+rel PC;否则顺序执行。 JNB bit,rel ; (PC)+3PC; 若(bit)=0,则(PC)+rel PC;否则顺序执行。 JBC bit,rel ; (PC)+3PC; 若(bit)=1,则(PC)+rel PC,且0bit; 否则顺序执行。,上面三条指令均为:3字节指令。,例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 AJMP L3 L1: JC L2 MOV R1,#0AAH AJMP L3 L2: MOV R1,#0FFH L3: SJMP L3 问:本程序执行前,如果R0的内容分别为:=10H,10H,10H,则执行上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理学基础知识框架
- 护理查房中的沟通与协作
- 护理操作标准与技巧
- 护理查房课件:促进护理服务国际化
- 护理在康复医学中的功能训练与支持
- 2025年康养旅游产品宣传文案创作指南
- 活动影像拍摄合同范本二篇
- 莫桑比克通讯行业发展潜力评估规划分析报告
- 中国营养调和油行业市场发展分析及竞争格局与投资策略研究报告
- (2026年)护理人文关怀课件
- 国开《电气传动与调速系统》专题报告
- 输尿管癌根治术手术配合
- 车间划线及安全标识管理标准
- 三年级上册语文《17 古诗三首 望天门山》课件
- AED急救知识课件
- (正式版)JBT 3300-2024 平衡重式叉车 整机试验方法
- 《零碳-近零碳园区评价规范》
- HGT 20714-2023 管道及仪表流程图(P ID)安全审查规范 (正式版)
- 医院食堂专项审计方案
- DB21-T 1876-2022 君子兰栽培技术规程
- 内蒙古自治区锡林郭勒盟锡林浩特市2022-2023学年三年级下学期期末数学试题
评论
0/150
提交评论