安全生产技术安全生产事故案例分析.ppt_第1页
安全生产技术安全生产事故案例分析.ppt_第2页
安全生产技术安全生产事故案例分析.ppt_第3页
安全生产技术安全生产事故案例分析.ppt_第4页
安全生产技术安全生产事故案例分析.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 3章 单 片 机 的指令系统,本章内容,单片机的指令格式,单片机指令格式符号的意义,单片机指令介绍,单片机的寻址方式,第一节 指令系统概述 指令是供给用户使用单片机的软件资源,它是CPU控制计算机进行某种操作的命令。全部指令的集合是指令系统。 指令常用它的英文名称或缩写形式作为助记符,以助记符表示的指令称为计算机的汇编语言,用指令编写的程序称为汇编语言程序。,一、指令的概念 1、机器码指令与汇编语言指令 MCS-51单片机的指令有两种表达方式:即机器码指令和汇编语言指令。 机器码指令 定义:用二进制代码(或十六进制数)表示的指令 特点:能够直接被计算机硬件识别和执行,但不易阅读和记忆。 例如 指令INC A执行累加器A加1操作,其二进制代码为“00000100B”,用十六进制数表示的机器码指令为“04H“。,汇编语言指令 定义:用助记符来表示的指令。 例如 用“MOV”表示数据的传送。 特点:不能被计算机硬件直接识别和执行,必须通过某种手段(汇编)把它变成机器码指令才能被机器执行。编写的程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序。,2、汇编语言的语句格式 MCS- 51汇编语言的语句格式: 标号:操作码操作数;注释 即一条汇编语句是由标号、操作码、操作数和注释4个部分所组成,其中方括号括起来的是可选择部分,可有可无,视需要而定。,汇编语言的语句格式,1)标号 标号是语句地址的标志符号,有了标号,程序中的其它语句才能访问该语句。有关标号的规定如下: 标号是由1-8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。 不能使用本汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。 同一标号在一个程序中只能定义一次,不能重复定义。 标号的有无取决于本程序中的其它语句是否需要访问这条语句。,2)操作码 操作码用于规定语句执行的操作内容,操作码是以指令助记符或伪指令助记符表示的,操作码是汇编指令格式中唯一不能空缺的部分。,汇编语言的语句格式,3)操作数 操作数用于给指令的操作提供数据或地址。 4)注释 注释不属于语句的功能部分,它只是对语句的解释说明。 5)分界符(分隔符) 分界符用于把语句格式中的各部分隔开,以便于区分,包括空格、冒号、分号或逗号等多种符号。 冒号(:)用于标号之后 空格( )用于操作码和操作数之间 逗号(,)用于操作数之间 分号(;)用于注释之前,汇编语言的语句格式,3、指令的长度 在MCS-51指令系统中,有一字节、二字节和三字节等不同长度的指令。 1)一字节指令 一字节指令只有一个字节,操作码和操作数信息同在其中。 2)二字节指令 二字节指令包括二个字节,其中第一个字节为操作码,第二个字节是操作数。 3)三字节指令 三字节指令中,操作码占一个字节,操作数占两个字节。,二、MCS-51单片机的寻址方式 寻址:如何指定操作数的所在单元。 根据指定方法的不同,MCS- 51单片机共有7种寻址方式。,汇编语言的语句格式,1、寄存器寻址方式 定义:操作数在寄存器中。在寄存器寻址方式的指令中以符号名称来表示寄存器。例如指令: MOV A,R0 ;把寄存器R0的内容传送到累加器A中 寻址范围: 通用寄存器,共有4组共32个通用寄存器。 部分专用寄存器。例如累加器A、B寄存器及数据指针DPTR等。 2、直接寻址方式 定义:指令中操作数直接以单元地址的形式给出。例如指令: MOV A,3AH ;把内部RAM 3AH单元中的数据传送给累加器A 寻址范围: 低128单元。在指令中直接以单元地址形式给出。 专用寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。,寻址方式,3、寄存器间接寻址方式 定义:寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的。 注意:在寄存器间接寻址方式中,应在寄存器的名称前面加前缓标志“”。 例如:假定R0寄存器的内容是3AH,则指令: MOV A,Ro ;以R0寄存器内容3AH为地址,把该地址单元的内容送累加器A,寻址方式,寻址范围: 内部RAM低128单元 只能使用R0或R1作间址寄存器(地址指针),其通用形式为Ri(i=0或1)。 外部RAM 64 KB 只能使用DPTR作间址寄存器,其形式为DPTR。 外部RAM的低256单元 间址寄存器为DPTR、R0、R1,例如 MOVX A,R0 ; 即把R0指定的外部RAM单元的内容送累加器A 堆找操作指令(PUSH和POP) 即以堆找指针(SP)作间址寄存器的间接寻址方式。,寻址方式,4、立即寻址方式 定义:操作数在指令中直接给出。 例如:MOV A,3AH MOV DPTR,3000H,寻址方式,5、变址寻址方式 定义:以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址作为操作数地址,以达到访问数据表格的目的。(A中的数为无符号数)。 例如: MOVC A,A+DPTR ;把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A。,寻址方式,寻址方式,说明: * 变址寻址方式只能对程序存储器进行寻址,寻址范围可达64 KB. * 变址寻址的指令只有3条: MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR * 尽管变址寻址方式较为复杂,但变址寻址的指令却都是一字节指令。,6、位寻址方式 例如:MOV C,3AH ;把3AH位的状态送进位位C 寻址范围: 内部RAM中的位寻址区,单元地址为20H2FH,共16个单元128位,位地址是00H7FH。两种表示方法:一种是位地址;另一种是单元地址加位。 专用寄存器的可寻址位 四种表示方法: 直接使用位地址。例如PSW寄存器位5地址为0D5H。 位名称表示方法。例如PSW寄存器位5是F0标志位,则可使用F0表示该位。 单元地址加位数的表示方法。例如PSW寄存器位5,表示为0DOH.5。 专用寄存器符号加位数的表示方法。例如PSW寄存器的位5,表示为PSW.5。,寻址方式,7、相对寻址方式 为解决程序转移而专门设置的,为转移指令所采用。 目的地址=转移指令地址转移指令字节数+ rel,寻址方式,第二节 MCS-51单片机指令分类介绍 MCS- 51单片机指令系统共有指令111条,分为5大类: 数据传送类指令(29条) 算术运算类指令(24条) 逻辑运算及移位类指令(24条) 控制转移类指令(17条) 位操作类指令(17条),Rn当前寄存器组的8个通用寄存器R0R7,n=07。 Ri可用作间接寻址的寄存器,只能是R0、R1两个寄存器,i=0、1。 direct8位直接地址,在指令中表示直接寻址方式,寻址范围256个单元。包括内部RAM低128单元地址和专用寄存器的单元地址或符号。 data8位立即数。 datal616位立即数。 addr1616位目的地址,只限于在LCALL、LJMP指令中使用。,一、指令格式中符号意义说明,addr1111位目的地址,只限于在ACALL和AJMP指令中使用。 rel相对转移指令中的偏移量,为8位带符号补码数。 DPTR数据指针。 bit内部RAM(包括专用寄存器)中的直接寻址位。 A累加器。ACC直接寻址方式的累加器。 B寄存器B。 C进位标志位,它是布尔处理机的累加器,也称之为累加位。 间址寄存器的前级标志。 加在位地址的前面,表示对该位状态取反。 (X)某寄存器或某单元的内容。 (X)由X间接寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所取代。,指令格式中符号意义,1.内部RAM数据传送指令组 数据传送指令的特点为: 1)操作把源操作数传送到目的操作数,指令执行后,源操 作数不改变,目的操作数修改为源操作数。若要求在进行数据传送 时,不丢失目的操作数,则可以用交换型的传送指令。 2)数据传送指令不影响标志C、AC和OV,不包括奇偶标志P。 通用格式为: MOV 目的操作数,源操作数 传送指令中有从右向左传送数据的约定,即指令的右边操作数为 源操作数,表达的是数据的来源;而左边操作数为目的操作数,表 达的则是数据的去向。,二、数据传送类指令,1)以累加器为目的操作数的指令 MOV A,Rn;A (Rn),(n=07) MOV A,direct;A (direct) MOV A,Ri;A (Ri), (i=0、1) MOV A,data;A data 例: MOV A,R7;将工作寄存器R7中的值送入A,R7中的值保持不变 MOV A,3FH;将内存3FH单元中的值送入A,3FH单元中的值保持不变 MOV R1,35H MOV A,R1;R1值35H作为数据地址,并将35H单元中的值送A中 MOV A,35H;将立即数35H送入A中,(A)=35H,2)以寄存器Rn为目的操作的指令 MOV Rn,A ;Rn (A),(n=07) MOV Rn,direct ;Rn (direct),(n=07) MOV Rn,data ;Rn data,(n=07) 例: MOV A , #0FFH MOV R7, A 结果: (A)=0FFH (R7)=0FFH,3)以直接地址为目的操作数的指令 MOV direct,A ;direct (A) MOV direct,Rn ;direct (Rn),n=07 MOV direct1,direct2 ;direct 1 (direct2) MOV direct,Ri ;direct (Ri),i=0、1 MOV direct,data ;direct data 例: MOV 2FH,A ;将A的内容送片内RAM的2FH单元 MOV 2FH,R1 ;将R1的内容送片内RAM的2FH单元 MOV 2FH,30H;将片内R.AM30H单元的内容送片内RAM的2FH;单元 MOV R1,35H MOV 2FH,R1;R1值35H作为数据地址,并将35H单元中的值送入2FH单元 MOV 2FH,35H;将立即数35H送入片内RAM的2FH单元中,4)以间接地址为目的操作数的指令 MOV Ri,A;(Ri) (A) MOV Ri,direct;(Ri) (direct) MOV Ri,data;(Ri) data 例:设(R0)=2FH MOV R0,A ;将A中的内容送入以R0中的内容2FH为地址的单元中 MOV R0,20H ;将20H单元的内容送入以R0中的内容2FH为地址的单元中 MOV R0,34H;将立即数34H送入以R0中的内容2FH为地址的单元中,5)十六位数的传递指令 MOV DPTR,data16 功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例 MOV DPTR,2050H;则执行完了之后DPH中的值为20H,DPL中的值为50H。 等同于 MOV DPH,20H MOV DPL,50H,要点分析: 所谓内部存储器在指令中的行为,就是指单片机芯片内存储器在指令中的作用与工作情况。 例 将片内RAM的15H单元的内容0A7H送55H单元。 解法1 MOV 55H,15H 解法2 MOV R6,15H MOV 55H,R6 解法3 MOV R1,15H MOV 55H,R1 解法4 MOV A,15H MOV 55H,A 例 理解表2-8所列指令的执行结果。,2、外部RAM数据传送指令 MOVX A,Ri;A (Ri) MOVX Ri,A;(R0) (A) MOVX A,DPTR;A (DPTR) MOVX DPTR,A;(DPTR) (A) 例如: 1)MOV R1,0F5H MOVX A,R1 ;A (片外0F5H) 2)MOV R0,00H MOVX R0,A ;(片外00H) A 3) MOV DPTR,20F5H; MOVX A,DPTR;A (片外20F5H) 4) MOV DPTR,2000H MOVX DPTR,A;(片外2000H) A,要点分析: 1)助记符为 “ MOVX ”; 2)在MCS-51中,片外RAM数据传送必须通过累加器A进行; 3)使用外部RAM数据传送指令时,应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。,访问片外数据存储器时单片机引脚信号情况: (1) MOVX A,Ri 指令执行时,在P3.7引脚上出现/RD有效信号,作为外部数据存储器的读选通信号。P0口先输出由Ri指定的8位地址信息然后输入该单元的内容,P0口作分时复用的总线。,(2) MOVX Ri,A 指令执行时,在P3.6引脚上出现/WR有效信,用作外部数据存储器的写选通信号。P0口分时输出由Ri指定的8位地址信息及输出到该单元的数据。以上两条与可以访问外部数据存储器低256字节的存储空间。 (3) MOVX DPTR,A 指令执行时,P3.6引脚上输出/WR有效信号,用作外部数据存储器的写选通信号。DPTR所包含的16位地址信息由P0(低8位)和P2(高8位)输出,累加器的内容由P0输出到该单元。P0口作分时复用的总线。 (4) MOVX A,DPTR 指令执行时,P3.7引脚上输出/RD有效信号,用作外部数据存储器的读选通信号。DPTR所包含的16位地址信息由P0(低8位)和P2(高8位)输出,选中单元的数据由P0输人到累加器。以上两条可以访问外部数据存储器间64KB的存储空间。,例 将外部RAM中0010H单元中的内容送入外部RAM中2000H单元中。程序如下: MOV R0,10H MOVX A,R0 MOV DPTR,2000H MOVX DPTR,A,3、程序存储器数据传送指令 远程查表指令 MOVC A,ADPTR;A (A)十(DPTR) 近程查表指令 MOVC A,A+ PC;A (A)+(PC),要点分析: (1)这两条指令是一字节指令,其寻址范围为64KB,指令首先执行16位无符号数的加法操作,获得基址与变址之和,“和”作为程序存储器的地址,该地址中的内容送入A中。 (2)第二条指令与第一条指令相比,由于PC的内容不能通过数据传送指令来改变,而且随该指令在程序中的位置变化而变化,因此在使用时需对变址寄存器A进行修正。 访问片外程序存储器时单片机引脚信号情况: (1) MOVC A,A+DPTR 指令执行时,/PSEN引脚上输出有效信号,用作片外程序存储器的读选通信号。(DPTR)+(A)所包含的16位地址信息由P0(低8位)和P2(高8位)输出,选中单元的数据由P0输入到累加器。,例5 在片内20H单元有一个BCD数,用查表法获得相应的ASCII码,并将其送入21H单元。其子程序为:设(20H)=07H时,(2) MOVC A,A+PC指令执行时,/PSEN引脚上输出有效信号,用作片外程序存储器的读选通信号。(PC当前值)+(A)所包含的16位地址信息由P0(低8位)和P2(高8位)输出,选中单元的数据经P0口输入到累加器A。 以上两条MOVC是64KB存储空间内的查表指令,实现程序存储器到累加器的常数传送,每次传送一个字节。,ORG 1000H; 指明程序在ROM中存放始地址 1000H BCD_ASCl:MOV A,20H ; A (20H),(A)07H 1002H ADD A,3 ;累加器(A)=(A)+3,修正偏移量 1004H MOVC A,A+PC; PC当前值1005H 1005H MOV 21H,A ;(A)+(PC)=0AH+1005H=100FH 1007H RET ;(A)=37H,A (100FH) 1008H TAB:DB 30H 1009H DB 31H 100AH DB 32H 100BH DB 33H 100CH DB 34H 100DH DB 35H 100EH DB 36H 100FH DB 37H 1010H DB 38H 1011H DB 39H,一般在采用PC作基址寄存器时,常数表与MOVC指令放在一起,称为近 程查表。当采用DPTR作基址寄存器时,程序如例6所示,TAB可以放在 64KB程序存储器空间的任何地址上,称为远程查表,不用考虑查表指令与表格之间的距离。 例5 在片内20H单元有一个BCD数,用查表法获得相应的ASCII码,并将其送入21H单元。其子程序为:设(20H)=07H时 用远程查表指令如下: ORG 1000H BCD_ASC2:MOV A,20H MOV DPTR,TAB;TAB首址送DPTR MOVC A,A+DPTR;查表 MOV 21H,A RET TAB:DB 30H, 31H, 32H,33H, 34H, 35H, 36H DB 37H, 38H, 39H,4、堆栈操作指令 压入 PUSH direct;(SP) (SP)+1,(SP) (direct) 弹出 POP direct;direct (SP),(SP) (SP)1 例如 执行中断服务子程序时,把数据指针DPTR、工作寄存器R2、程序状态字PSW和累加器A压入堆栈,进行现场保护,如图所示。返回时将其弹出,恢复现场。 压入: MOV SP,50H PUSH DPL PUSH DPH PUSH 02H PUSH PSW PUSH ACC 弹出: POP ACC POP PSW POP 02H POP DPH POP DPL,要点分析: 1)堆栈常用来保护现场. 2)堆栈操作的特点是“先进后出”,在使用时应注意指令顺序。 例 分析以下程序的运行结果 MOV R2,05H MOV A,01H PUSH ACC PUSH 02H POP ACC POP 02H,结果是(R2)=01H,而(A)=05H。也就是两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的顺序和出栈的顺序必须相反,才能保证数据被送回原位,即恢复现场,否则就要出错。,5、数据交换指令 (1)字节交换指令 XCH A,Rn;(A) (Rn) XCH A,Ri;(A) (Ri) XCH A,direct;(A) (direct) (2)半字节交换指令 XCHD A,Ri;(A)0-3 (Ri)0-3 (3)累加器A高低半字节交换指令 SWAP A;(A)0-3 (A)4-7 数据交换主要是在内部RAM单元与累加器A之间进行。 例 将片内RAM 60H单元与61H单元的数据交换 不能用:XCH 60H,61H 应该写成:MOV A,60H XCH A,61H MOV 60H,A,1、加法指令组 共在4条加法运算指令: ADD A,Rn;A (A) + (Rn) ADD A,direct;A (A) + (direct) ADD A,Ri;A (A) + (Ri) ADD A,data;A (A) + data 2、带进位加法指令 ADDC A,Rn;A (A)+(Rn) + (CY) ADDC A,direct;A (A) + (direct) + (CY) ADDC A,R;A (A) + (Ri) + (CY) ADDC A,data;A (A) + data + (CY),三、算术运算类指令,3、带借位减法指令组 SUBB A,Rn;A (A)(Rn)(CY) SUBB A,direct;A (A)(direct)(CY) SUBB A,Ri;A (A)(Ri)(CY) SUBB A,#data;A (A)data(CY) 4、加1指令组 INC A;A (A) + 1 INC Rn;Rn (Rn) + 1 INC direct;direct (direct) + 1 INC Ri;(Ri) (Ri) + 1 INC DPTR;DPTR (DPTR) + 1,5、减1指令 DEC A;A (A)1 DEC direct;direct (direct)1 DEC Ri;(Ri) (Ri)1 DEC Rn;Rn (Rn)1 6、乘法、除法指令 MUL AB ;AB=BA DIV AB ;A/B= A. . . B,要点分析: 1) MUL指令实现8位无符号数的乘法操作,两个乘数分别放在累加器A和寄存器B中,乘积为16位,低8位放在A中,高8位放在B中; DIV指令实现8位无符号数除法,被除数放在A中,除数放在B中,指令执行后,商放在A中而余数放在B中。 2)乘法、除法指令是整个指令系统中执行时间最长的两条指令,它们需要四个机器周期(48个振荡器周期)完成一次操作,对于12MHz晶振的系统,执行一次乘法操作的时间为4us。,7、十进制调整指令 DA A 要点分析: 1)这条指令必须紧跟在ADD或ADDC指令之后,且这里的ADD或ADDC的操作是对压缩的BCD数进行运算。 2)DA指令不影响溢出标志。 3)不能用DA指令对十进制减法操作的结果进行调整。 4)借助进位标志可实现多位BCD数加1和减1。,例 设(A)56H,(R7)78H,执行指令: ADD A,R7 DA A 结果:(A)34H,(CY)1,例 设计将两个4位压缩BCD码数相加程序。其中一个数存放在30H(存放十位,个位)、31H(存放千位,百位)存储器单元,另一个加数存放在32H(存放低位)、33H(存放高位)存储单元,和数存到30H, 31H单元。,程序如下: MOV R0,30H ;地址指针指向一个加数的个位、十位 MOV R1,32H ;另一个地址指针指向第二个加数的个位、十位 MOV A,R0 ;一个加数送累加器A ADD A,R1 ;两个加数的个位、十位相加 DA A ;调整为BCD码数 MOV R0,A ;和数的个位、十位送30H单元 INC R0 ;两个地址指针分别指向两个加数的百位、千位 INC R1 MOV A,R0 ;一个加数的百位、千位送累加器 ADDC A,R1 ;两个加数的百位、千位和进位相加 DA A ;调整为BCD码数 MOV R0,A ;和数的百位、千位送31H单元,1、逻辑与运算指令组 运算规则为:00=0 01=0 10=0 11=1 ANL A,Rn;A (A)(Rn) ANL A,direct;A (A)(direct) ANL A,Ri;A (A)(Ri) ANL A,data;A (A)data ANL direct,A;direct (direct)(A) ANL direct,#data;direct (direct)data 例 设(A)=27H,(R0)=0FDH,执行指令: ANL A,R0 (A)0 0 1 0 0 1 1 1 (R0)1 1 1 1 1 1 0 1 (A)0 0 1 0 0 1 0 1 结果:(A)25H,(P)1。,四、逻辑与运算指令组,2、逻辑或运算指令组 运算规则为:0+0=0 0+1=1 1+0=1 1+1=1 ORL A,Rn;A (A)(Rn) ORL A,direct;A (A)(direct) ORL A,Ri;A (A)(Ri) ORL A,data;A (A)data ORL direct,A;direct (direct)(A) ORL direct,#data;direct (direct)data 例 设(P1)25H,(A)33H,执行指令: ORL P1,A (P1)0 0 1 0 0 1 0 1 (A)0 0 1 1 0 0 1 1 (P1)0 0 1 1 0 1 1 1 结果:(P1)37H,3、逻辑异或运算指令组 运算规则为:00=0,11=0,01=1,10=1 XRL A,Rn;A (A)(Rn) XRL A,direct;A (A)(direct) XRL A,Ri;A (A)(Ri) XRL A,data;A (A)data XRL direct,A;direct (direct)(A) XRL direct,#data;direct (direct)data 例 设(A)94H,(R3)53H,执行指令: XRL A,P3 (A) 1 0 0 1 0 1 0 0 (R3)0 1 0 1 0 0 1 1 (A)1 1 0 0 0 1 1 1 结果:(A)0C7H,(P)1。 例 试分析下列程序执行结果 MOV A,0FFH ;(A)0FFH ANL P1,00H ;SFR中P1口清零 ORL P1,55H ;P1口内容为55H XRL P1,A ;P1口内容为0AAH,4、累加器清“0”和取反指令组 累加器清“0”指令一条: CLR A;A 0 累加器按位取反指令一条: CPL A,A (A) 要点分析: 1)逻辑运算是按位进行的,累加器的按位取反实际上是逻择非运算。 2)当需要只改变字节数据的某几位,而其余位不变时,不能使用直接传送方法,只能通过逻样运算完成。,例 将累加器A的低4位传送到P1口的低4位,但P1口的高4位需保持不变。对此可由以下程序段实现: MOV R0,A ;A内容暂存R0 ANL A,0FH ;屏蔽A的高4位(低4位不变) ANL P1,0F0H ;屏蔽P1口的低4位(高4位不变) ORL P1,A ;实现低4位传送 MOV A,R0 ;恢复A的内容,5、移位指令 (1)累加器内容循环左移 RL A ;An+1 An n06,A0 A7,(2)累加器带进位标志循环左移 RLC A;An+1 An n06,A0 C C A7,(3)累加器内容循环右移 RR A;An An+1 n06,A7 A0,(4)累加器带进位标志循环右移 RRC A;An An+1 n06,A7 C C A0,例 试用三种方法将累加器A中无符号数乘2。 答:方法1: CLR C RLC A 方法2: CLR C MOV R0,A ADD A,R0 方法3: MOV B,2 MUL AB,1、无条件转移指令组 不规定条件的程序转移称之为无条件转移。MCS- 51共有4条无条件转移指令: ( 1)、长转移指令 LJMP addr16;PC addrl6 转移范围64KB,因此称之为“长转移”。 长转移指令是三字节指令,依次是操作码,高8位地址,低8位地址。 ( 2)、绝对转移指令 AJMP addr11;PC (PC)2;PC010 addr1l 转移范围2KB 绝对转移指令是二字节指令,五、控制转移指令组,( 3)短转移指令 SJMP rel rel为相对偏移量。 计算目的地址,并按计算得到的目的地址实现程序的相对转移。计算公式为: 目的地址= (PC) + 2+rel (4)变址寻址转移指令 JMP A+DPTR ;PC (A)(DPTR) 一字节转移指令。指令以DPTR内容为基址,而以A的内容作变址,转移的目的地址由A的内容和DPTR内容之和来确定,即目的地址=(A)(DPTR),例 ORG 1000H MOV DPTR,TAB;将TAB所代表的地址送入数据指针DPTR MOV A,R1;从R1中取数 MOV B,2 MUL AB ;A乘以2,AJMP语句占2个字节,且是连续存放的 JMP A+DPTR;跳转 TAB:AJMP S0;跳转表格 AJMP S1 AJMP S2 S0:S0子程序段 S1:S1子程序段 S2:S2子程序段 END,2、条件转移指令组 所谓条件转移就是程序转移是有条件的。执行条件转移指令时,如指令中规定的条件满足,则进行程序转移,否则程序顺序执行。条件转移有如下指令: 1)累加器判零转移指令 JZ rel;若(A)0,则 PC (PC)+2+rel 转移 若(A)0,则PC (PC)+2 顺序执行 JNZ rel;若(A)0,则PC (PC)2rel 转移 若(A)0,则PC (PC)2 顺序执行,例 将外部RAM的一个数据块(首址为DATAl)传送到内部RAM(首址为DATA2),遇到传送的数据为零时停止。 START:MOV R0,DATA2 ;置内部RAM数据指针 MOV DPTR,DATA l;置外部RAM数据指针 LOOPl:MOVX A,DPTR ;外部RAM单元内容送A JZ LOOP2 ;判传送数据是否为零,A为零则转移 MOV R0,A ;传送数据不为零,送内部RAM INC R0 ;修改地址指针 INC DPTR SJMP LOOP1 ;继续传送 LOOP2:RET ;结束传送,返回主程序,2)数值比较转移指令 数值比较转移指令把两个操作数进行比较,比较结果作为条件来控制程序转移。 共有四条指令: CJNE A, # data, rel CJNE A, direct, rel CJNE Rn, # data, rel CJNE R, # data, rel 指令的转移可按以下3种情况说明: 若左操作数右操作数,则:程序顺序执行PC (PC)十3 进位标志位清“0”(CY)=0 若左操作数右操作数,则:程序转移 PC (PC)+3+rel 进位标志位清“0”(CY)=0 若左操作数右操作数,则:程序转移PC (PC)+3+rel 进位标志位置“1”(CY)=1,3)减1条件转移指令 把减1与条件转移两种功能结合在一起的指令。共两条: 寄存器减1条件转移指令 DJNZ Rn,rel 两字节指令,其功能为:寄存器内容减1,如所得结果为0,则程序顺序执行,如没有减到0,则程序转移。具体表示如下: Rn (Rn)1 若(Rn)0,则PC (PC)+2+rel 若(Rn)0,则PC (PC)十2 直接寻址单元减1条件转移指令 DJNZ direct,rel 三字节指令,其功能为:直接寻址单元内容减1,如所得结果为0,则程序顺序执行;如没有减到0,则程序转移。具体表示如下: direct (direct)1若(direct)0,则PC (PC)+3+rel 若(direct)0,则PC (PC)3,要点分析: 这两条指令主要用于控制程序循环。如预先把寄存器或内部RAM单元赋值循环次数,则利用减1条件转移指令,以减1后是否为0作为转移条件,即可实现按次数控制循环。,例: 把2000H开始的外部RAM单元中的数据送到3000H开始的外部RAM单元中,数据个数已在内部RAM35H单元中。 MOV DPTR,2000H ;源数据区首址 PUSH DPL ;源首址暂存堆栈 PUSH DPH MOV DPTR,#3000H ;目的数据区首址 MOV R2,DPL ;目的首址暂存寄存器 MOV R3,DPH,LOOP: POP DPH ;取回源地址 POP DPL MOVX A,DPTR ;取出数据 INC DPTR ;源地址增量 PUSH DPL ;源地址暂存堆找 PUSH DPH MOV DPL,R2 ;取回目的地址 MOV DPH,R3 MOVX DPTR,A ;数据送目的区 INC DPTR ;目的地址增量 MOV R2,DPL ;目的地址暂存寄存器 MOV R3,DPH DJNZ 35H,LOOP ;没完,继续循环 RET ;返回主程序,3、子程序调用与返回指令组 子程序结构,即把重复的程序段编写为一个子程序,通过主程序调用而使用它。减少了编程工作量,缩短了程序的长度。 调用指令在主程序中使用,而返回指令则应该是子程序的最后一条指令。执行完这条指令之后,程序返回主程序断点处继续执行。如图所示。,1)、绝对调用指令 ACALL addr11 二字节指令,子程序调用范围是2KB,其功能: 断点保护 断点保护是通过自动方式的堆找操作实现的,即把加2以后的PC值自动送堆找保存起来,待子程序返回时再送回PC。 构造目

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论