版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用二. 汇编语言和汇编程序指令的寻址方式1常用指令2伪指令3指令的时序4第二章 汇编语言和汇编程序常用符号Rn:工作寄存器中的寄存器R0、R1R7之一;Ri:工作寄存器中的寄存器R0或R1;#data:8位立即数;#data16:16位立即数;direct:片内RAM或SFR的地址(8位);:寄存器间接寻址;Bit:片内RAM或SFR的位地址;addr11:11位目的地址;addr16:16位目的地址;rel: 8位地址偏移量,偏移范围为-128127;/:该位求反后参与操作,不影响该位;(X):地址单元中的内容:箭头左边的内容送入箭头右边的单元内第二章 汇编语言和汇编程序符号指
2、令的构成操作助记符 目的操作数 源操作数 操作助记符,也称指令助记符。它以符合形式给出该指令进行什么操作。 如:数据传送MOV,加ADD,逻辑与ANL。操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。有0,1,2个操作数多种情况一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为寻址方式。第二章 汇编语言和汇编程序2.1 指令的寻址方式立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址第二章 汇编语言和汇编程序2.1.1 立即寻址指令中直接给出操作数的寻址方式,在操作码之后,称为立即数,用#表示。如:MOV A, #80HMOV R7, #0F5HMOV
3、DPTR,#1245H操作数存在程序存储器中第二章 汇编语言和汇编程序2.1.2 直接寻址直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。操作数在SFR、内部RAM(即操作数据在内部数据存储器或特殊功能寄存器中)空间。如: MOV A,00H MOV A,0F0H MOV PSW,#08H第二章 汇编语言和汇编程序2.1.3 寄存器寻址对选定的工作寄存器R0R7、累加器A、通用寄存器B、进位位C、地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。第二章 汇编语言和汇编程序2.1.3 寄存器寻址问题:我们知道,工作寄存器就是内存单
4、元的一部分,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H 和 MOV A,R0不就没什么区别了吗?的确,这两条指令执行的结果是完全相同的,都是将00H单元中的内容送到A中去,但是执行的过程不同,执行第一条指令需要2个机器周期,而第二条则只需要1个机器周期,第一条指令变成最终的目标码要两个字节(E5H 00H),而第二条则只要一个字节(E8H)就可以了。第二章 汇编语言和汇编程序2.1.4 寄存器间接寻址把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。 R0,R18位地址,片内RAM或片外DPTR16位,片外64KB如:M
5、OV A, R0MOVX A, R0MOVX A, DPTR操作数在片内RAM中操作数在片外RAM中操作数在片外RAM中第二章 汇编语言和汇编程序2.1.5 变址寻址以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两者内容相加,结果作为操作数的地址。常用于查表操作。MOVC A,A+DPTR ;(A+DPTR)A MOVC A,A+PC;PC+1PC,(A+PC)A第二章 汇编语言和汇编程序2.1.6 相对寻址将PC中的当前内容与指令第二字节给出的数相加,结果作为跳转指令的转移地址(转移目的地址)。PC中的当前内容称为基地址(本指令后的字节地址)指令第二字节给出的数据称为偏移量,1字节带
6、符号数。 常用于跳转指令。如: JC REL 若C=0,不跳转; C=1,跳转.第二章 汇编语言和汇编程序2.1.6 相对寻址4023304745 10001001100210251026如:指令JC REL设REL=23H指令代码程序存储器当前PC第二章 汇编语言和汇编程序2.1.7 位寻址对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。如:SETB 3DH; 将27H.5位置1CLR C ; Cy位清0第二章 汇编语言和汇编程序2.1.8 小节寻址方式寻址空间(操作数存放空间)立即寻址程序存储器直接寻址片内RAM、SFR寄存器寻址工作寄存器R0R7,A,B,DP
7、TR,C寄存器间接寻址片内RAM:R0,R1,SP片外RAM:R0 ,R1,DPTR变址寻址程序存储器:A+PC,A+DPTR相对寻址程序存储器256字节范围内:PC+偏移量位寻址片内RAM的位寻址区(20H2FH字节地址)某些可位寻址的SFR第二章 汇编语言和汇编程序二. 汇编语言和汇编程序指令的寻址方式1常用指令2伪指令3指令的时序4第二章 汇编语言和汇编程序2.2 常用指令数据传输与交换类指令算数运算类指令逻辑运算与移位类指令位操作类指令控制转移类指令第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令助记符:MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP
8、 源操作数寻址方式(5种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。目的操作数寻址方式(3种): 直接寻址、寄存器寻址、寄存器间接寻址除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。第二章 MSC51单片机指令系统2.2.1 数据传送与交换类指令十六位数的传递指令(1条) MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令例: MOV DPTR,#1234H执行完了之后DPH
9、中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。如下面两条指令: MOV DPH,#12H MOV DPL,#34H。则就相当于执行了 MOV DPTR,#1234H。第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令八位数的传递指令(15条) MOV A, #data MOV A, direct MOV Rn, #data MOV Rn, A MOV direct, #data MOV A, Rn MOV Ri, #data MOV Ri, A MOV direct, direct MOV A, Ri MOV direct, Rn MOV dir
10、ect, Ri MOV Rn, direct MOV Ri, direct MOV direct, A第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令累加器A与片外RAM之间的数据传递类指令(4条) MOVX A, Ri MOVX Ri, A MOVX A, DPTR MOVX DPTR,A说明: 1. 在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为010
11、0H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令2. 要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。3. 使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。MOV DPTR,#0100HMOVX A,DPTRMOV DPTR
12、,#0200HMOVX DPTR,A第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令 读程序存储器指令(2条) MOVC A,A+DPTR MOVC A,A+PC 本组指令是将ROM中的数送入A中。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格说明:查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令例:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100HDB 0,1,4,
13、9,16,25第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令堆栈操作(2条) PUSH direct ;SPSP+1,(SP)(direct) POP direct ; (direct) (SP), SPSP-1 第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中。例:MOV SP,#5FHMOV A,#100MOV B,#20PUSH ACCPUSH B第二章 汇编语言和汇编程序2.2.1 数据传送与交换类指令数据交换指令(5条) 1. 字节交换指令XCHXCH A, RnXCH A, directXCH A, Ri
14、2. 半字节交换指令XCHXCHD A, RiSWAP A 第二章 汇编语言和汇编程序2.2.2 算数运算类指令助记符:ADD、ADDC、INC SUBB、DEC、DA 源操作数寻址方式(4种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址。目的操作数寻址方式(1种): 寄存器(A)寻址影响PSW有关标志位。第二章 MSC51单片机指令系统2.2.2 算数运算类指令加法类指令 1. 不带进位位的加法指令ADD 2. 带进位位的加法指令ADDC 3. 增量指令INC第二章 汇编语言和汇编程序2.2.2 算数运算类指令不带进位位的加法指令ADDADD A, #data ; AdataAADD
15、 A, direct ; A(direct )AADD A, Rn ; ARnAADD A, Ri ; A(Ri)A用途:将A中的值与源操作数所指内容相加,最终结果 存在A中。第二章 汇编语言和汇编程序2.2.2 算数运算类指令带进位位的加法指令ADDCADDC A, Rn; ARnCYAADDC A, direct; A(direct )CYAADDC A, Ri; A(Ri)CYAADDC A, #data; AdataCYA用途:将A中的值和其后面的值以及进位位C中的值相加,最终结果存在A,常用于多字节数运算中。说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围
16、只有0FFH,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位(两字节)的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到0FFFFH。第二章 汇编语言和汇编程序2.2.2 算数运算类指令例如:计算:1067H+30A0H1067H 0001 0000 0110 0111 30A0H 0011 0000 1010 0000 4107H 0100 0001 0000 0111 先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。换言之,CY就相当于是100H。然后再做10H + 30H + CY
17、,结果是41H,所以最终的结果是4107H。第二章 汇编语言和汇编程序2.2.2 算数运算类指令代码:设:1067H存在R1R0中,30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。MOV A, R0ADD A, R2 ;R0+R2A和CYMOV R4, AMOV A, R1ADDC A, R3 ;R1+R3+CYA和CYMOV R5, A第二章 汇编语言和汇编程序2.2.2 算数运算类指令例如:计算:1067H+3020H1067H 0001 0000 0110 0111 3020H 0011 0000 0010 0000 4087H 0100 0000 1000 011
18、1 先做67H+20H=87H,而87H没有超过0FFH,因此最终保存在A中的是87H,PSW中的CY=0。然后再做10H + 30H + CY,结果是40H,所以最终的结果是4087H。第二章 汇编语言和汇编程序2.2.2 算数运算类指令增量指令INCINC A; A+1AINC Rn; Rn+1RnINC direct; direct+1directINC Ri; (Ri)+1(Ri)INC DPTR;DPTR+1DPTR用途:将操作数加1后再送回操作数。说明:除了操作数为A的指令影响奇偶标志P外,一般不影响标志位。第二章 汇编语言和汇编程序2.2.2 算数运算类指令减法类指令 1. 带借
19、位的减法指令SUBB 2. 减量指令DEC第二章 汇编语言和汇编程序2.2.2 算数运算类指令带借位的减法指令SUBBSUBB A, Rn; A-Rn-CYASUBB A, direct; A-(direct)-CYASUBB A, Ri; A-(Ri)-CYASUBB A, #data; A-data-CYA用途:将A中的值减去源操作数所指内容以及进位位C中的值,最终结果存在A中。说明:1. 没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。2. 对带符号数,要注意OV标志。OV=1,溢出。第二章 汇编语言和汇编程序2.2.2 算数运算类指令减量指令
20、DECDEC A; A-1ADEC Rn; Rn-1RnDEC direct; direct-1directDEC Ri; (Ri)-1(Ri)用途:将操作数减1后再送回操作数。说明:1. 除了操作数为A的指令影响奇偶标志P外,一般不影响标志位。2. DPTR不能作为减量指令的操作数第二章 汇编语言和汇编程序2.2.2 算数运算类指令十进制调整指令DA 在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。 例:A=0001 0101BCD(代表十进制数15) ADD A,#8; A=1DH,按二进制规律加DA A ; A=23
21、BCD,按十进制规律加第二章 汇编语言和汇编程序2.2.2 算数运算类指令BCD数(十进制)加法调整指令DA A调整要完成的任务是:当累加器A中的低4位数出现了非BCD码(10101111)或低4位产生进位( AC=1) ,则应在低4位加6调整,以产生低4位正确的BCD结果。 当累加器A中的高4位数出现了非BCD码( 10101111)或高4位产生进位( CY=1) ,则应在高4位加6调整,以产生高4位正确的BCD结果。 十进制调整指令执行后,PSW中的CY表示结果的百位值。注意:调整指令应紧跟在BCD数作为加数的加法指令之后。所谓“紧跟”是指在调整指令与加法指令之间不得有改变CY和AC标志位
22、的指令。第二章 汇编语言和汇编程序2.2.2 算数运算类指令例如:若(A)=0101 0110B,表示的BCD码为56,(R3)=0110 0111B,表示的BCD码为67,(CY)=0。执行以下指令:ADDA,R3DAA由于(A)=0010 0011B,且(CY)=1,即结果为BCD数123。注意:DA指令不能对减法进行十进制调整。A0101 0110 R30110 0111 1011 1101调整0110 0110结果 10010 0011第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令助记符:ANL、ORL、XRL、CPL RR、RL、RRC、RLC主要用于对2个操作数按位进行
23、逻辑操作或对A进行循环移位操作,将结果送到A或直接寻址单元。主要操作与、或、异或、移位、取反、清零等。对标志位的影响除了目的操作数为A的指令影响奇偶标志P,CY外,一般不影响标志位。第二章 MSC51单片机指令系统2.2.3 逻辑运算及移位类指令逻辑运算类指令 1. 逻辑或运算指令 2. 逻辑与运算指令 3. 逻辑异或运算指令 4. 取反指令第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令逻辑或指令ORL A, Rn ;ARnAORL A, direct ;A(direct)AORL A, Ri ;A(Ri)AORL A, #data;AdataAORL direct, A;(dir
24、ect)A(direct)ORL direct, #data ;(direct)data(direct)用途:除了操作数为A的指令影响奇偶标志P外,一般不影响标志位。说明:后两条指令,若直接地址为I/O端口,则为“读-改-写”操作。第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令逻辑与指令ANL A, Rn ;ARnAANL A, direct ;A(direct)AANL A, Ri ;A(Ri)AANL A, #data ;AdataAANL direct, A ;(direct)A(direct)ANL direct, #data ;(direct)data(direct)用途
25、:除了操作数为A的指令影响奇偶标志P外,一般不影响标志位。说明:后两条指令,若直接地址为I/O端口,则为“读-改-写”操作。第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令逻辑异或指令XRL A, Rn ;ARnAXRL A, direct ;A(direct)AXRL A, Ri ;A(Ri)AXRL A, #data ;AdataAXRL direct, A ;(direct)A(direct)XRL direct, #data ;(direct)data(direct)用途:除了操作数为A的指令影响奇偶标志P外,一般不影响标志位。说明:后两条指令,若直接地址为I/O端口,则为“
26、读-改-写”操作。第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令清零与取反指令CPL A ;AACLR A ;0A说明:清零指令影响奇偶标志P,取反指令不影响任何标志位。第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令循环移位类指令 1. 循环右移指令RR 2. 循环左移指令RL 3. 带进位循环右移指令RRC 4. 带进位循环左移指令RLC第二章 汇编语言和汇编程序CY2.2.3 逻辑运算及移位类指令A.7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.
27、3A.2A.1A.0CYRR ARL ARRC ARLC A说明:后两条指令,影响P标志和CY。第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令例如:若A=5CH,CY=1,执行RLC A后,结果:A=B9H,CY=0,P=1对RLC、RRC指令,在CY=0时 RLC相当于乘以2 RRC相当于除以2010111001第二章 汇编语言和汇编程序2.2.3 逻辑运算及移位类指令例如:利用移位实现乘2、除2运算例:将R7中的无符号数乘以2送入R6和R7的程序段如下:ADD A,#0 ; 清CYMOV R6,#0 ; 清R6MOV A,R7 ; R7乘以2RLC A ;MOV R7,A MO
28、V A,R6 ; R6乘以2RLC A ; 注意:带“进位”操作实现了乘以2的溢出情况MOV R6,A ;第二章 汇编语言和汇编程序2.2.4 位操作指令MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,包括位变量传送、逻辑运算、控制程序转移等。在MCS-51 中,有一部份RAM和一部份SFR是具有位寻址功能的。 位操作区:内部RAM的20H-2FH这16个字节单元,即128个位单元(位地址空间位007FH); 可以位寻址的特殊功能寄存器:8031中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除, 如A累加器,B寄存器、PS
29、W、IP(中断优先级控制寄存器)、 IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。 在进行位处理时, CY用作“位累加器” 。第二章 MSC51单片机指令系统2.2.4 位操作指令位地址表达方式 以PSW中位4(RS1)为例。直接(位)地址方式:如 D4H;点操作符号方式:如 PSW.4,D0H.4;位名称方式:如 RS1;用户定义名方式:如用伪指令 bit。例如:SUB.REG bit RS1定义后,可用SUB.REG代替RS1第二章 MSC51单片机指令系统2.2.4 位操作指令位操作指令位传送指令位清0和置
30、位位逻辑运算指令第二章 MSC51单片机指令系统2.2.4 位操作指令位传送指令MOV C, bit; bit CMOV bit, C; C bit用途:这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。例:MOV C,P1.0;将P1.0的状态送给C。 MOV P1.0,C ;将C中的状态送到P1.0 ;引脚上去。第二章 汇编语言和汇编程序2.2.4 位操作指令位清0和置位CLR C ; 使CY=0CLR bit ; 使指令的位地址等于0。SETB C ; 使CY=1SETB bit ; 使指定的位地址等于1。用途:这组指令的功能是实现位累加器(CY)和其它位地址置位或者复位操
31、作。例:CLR P1.0 ;使P1.0变为0 SETB P1.0 ;使P.0变为1第二章 汇编语言和汇编程序2.2.4 位操作指令位逻辑运算指令ANL C, bit ;CY与指定位的值相与,结果送CYANL C, /bit ;先将位地址bit中的值取出后取反,再和 ;CY相与,结果送回CY。ORL C, bit ;CY与指定位的值相与,结果送CYORL C, /bit ;先将位地址bit中的值取出后取反,再和 ;CY相与,结果送回CY。CPL C ;使CY值取反。CPL bit ;使位地址bit中的值取反。用途:这组指令的功能是实现位地址数据位逻辑运算。第二章 汇编语言和汇编程序2.2.5 控
32、制转移指令MCS -51 提供了较丰富的控制转移指令, 因此在编程上相当灵活方便。包括以下类型:无条件转移和条件转移相对转移和绝对转移长转移和短转移调用与返回指令助记符:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ第二章 MSC51单片机指令系统2.2.5 控制转移指令1. 无条件转移类指令 短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel 间接转移指令:JMP A+DPTR无条件转移是指不规定条件的程序转移。第二章 MSC51单片机指令系统2.2.5 控制转移指令1. 无条件转移类指令
33、(1) 前三条指令,区别何在? 跳转的范围不同 短转移类指令:AJMP addr11 长转移类指令:LJMP addr16 相对转移指令:SJMP rel转移范围:2KB64KB-128+127 指令的构成不同AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。 指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代第二章 MSC51单片机指令系统2.2.5 控制转移指令1. 无条件转移类指令(2) 第四条指令与前三条指令相比,有何不同?这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。转移地址由A+DPTR形成,并直接送入PC。指令对A、D
34、PTR和标志位均无影响。本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。第二章 MSC51单片机指令系统2.2.5 控制转移指令例: MOV DPTR,#TAB ;将TAB代表的地址送入DPTR JMP A+DPTR ;跳转TAB: AJMP ROUT0 ;跳转ROUT0开始的程序段AJMP ROUT1 ;跳转ROUT1开始的程序段AJMP ROUT2 ;跳转ROUT2开始的程序段AJMP ROUT3 ;跳转ROUT3开始的程序段 .ROUT0: .ROUT1: .ROUT2: .ROUT3: .程序将根据A中的内容转移到不同的程序段去执行散转。A=0,转ROUT0A=
35、2,转ROUT1A=4,转ROUT2A=6,转ROUT3第二章 MSC51单片机指令系统2.2.5 控制转移指令2. 条件转移类指令 累加器A状态转移指令 比较不等转移指令 减1不为零转移指令条件转移指令是指在满足一定条件时进行相对转移,否则程序继续执行本指令的下一条指令。第二章 MSC51单片机指令系统2.2.5 控制转移指令累加器状态转移指令转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量relJZ rel ; 如果A=0,则转移,否则顺序执行。JNZ rel ; 如果A0,就转移。在编写汇编语言源程序时,可以直接写成: JZ 标号 ; 即转移到标号处。第二章
36、MSC51单片机指令系统2.2.5 控制转移指令 在执行上面这段程序前:如果R0=0,结果R1=0FFH。而如果R00,则结果是R1=00H。 把上面的那个例子中的JZ改成JNZ,看看程序执行的结果是什么?如果R0=0,结果R1=00H。如果R0 0,结果是R1中的值为0FFH。 MOV A,R0 JZ L1 MOV R1,#00H AJMP L2L1: MOV R1,#0FFHL2: SJMP L2 END例:第二章 MSC51单片机指令系统2.2.5 控制转移指令比较不等转移指令转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量relCJNE A, #data,
37、rel CJNE A, direct, relCJNE Rn, #data, relCJNE Ri, #data, rel此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。同样,在编写汇编语言源程序时,可以直接写成: CJNE A,#data,标号 ;即转移到标号处。第二章 MSC51单片机指令系统2.2.5 控制转移指令比较不等转移指令利用这些指令,可以判断两数是否相等。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能:如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。如果前面的数大,则CY=0,否则CY=1。因此在程序转移
38、后再次利用CY就可判断出哪个数大,哪个数小了。第二章 MSC51单片机指令系统2.2.5 控制转移指令因此最终结果是:如果R0=10H,则R1=00H;如果R010H,则R1=0AAH;如果R010H,则R1=0FFH。 MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 AJMP L3L1:JC L2 MOV R1,#0AAH AJMP L3L2:MOV R1,#0FFHL3:SJMP L3例:第二章 MSC51单片机指令系统2.2.5 控制转移指令减1不等于零转移指令转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量relDJNZ Rn,relDJ
39、NZ direct,rel同样,在编写汇编语言源程序时,可以直接写成: DJNZ Rn,标号 ;即转移到标号处。这两条指令把源操作数减 1, 结果回送到源操作数中去, 如果结果不为 0 则转移。第二章 MSC51单片机指令系统2.2.5 控制转移指令将23H单元中的数连续相加,存至A中,每加一次, 23H单元中的数值减1,直至减到0,共加(23H)次。例:本例中的23H中的数是10,实际就是求:1+2+10=? MOV 23H,#0AH CLR ALOOP: ADD A,23H DJNZ 23H,LOOP SJMP $第二章 MSC51单片机指令系统2.2.5 控制转移指令3. 调用与返回指令
40、长调用指令: LCALL addr16短调用指令: ACALL addr11子程序返回指令:RET中断子程序返回指令:RETI在程序设计中, 通常把具有一定功能的公用程序段编制成子程序, 当主程序需要使用子程序时用调用指令, 而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。第二章 MSC51单片机指令系统2.2.5 控制转移指令4. 空操作指令NOP空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。第二章 MSC51单片机指令系统二. 汇编语言和汇编程序指令的寻址方式1常用指令2伪指令3指令的时序4第二章 汇编语言和汇编程序2.3 伪指令 伪指令:对汇
41、编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。 不同汇编程序允许的伪指令并不完全相同,但是一些基本的伪指令在大部分汇编程序中都能使用。51中常用的伪指令分为5大类: 程序计数与结束伪指令:ORG,END; 符号定义伪指令:EQU,DB,DW,DS,BIT,SET等; 附加文件指令:INCLUDE; 程序清单格式化伪指令:TITLE,PAGE; 一般控制伪指令:LIST,NOLIST,NOCODE。第二章 汇编语言和汇编程序2.3 伪指令ORG 功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。表达式缺省为0。 格式:ORG 16位地址 例如:ORG 2000H74 40START: MOV A,#40H74402000H第二章 汇编语言和汇编程序2.3 伪指令END 功能:汇编语言源程序结束的标志,在END以后的所有指令,汇编程序不再处理。一个源程序只有一个END指令,放在所有指令的最后,若没有END指令,编译将报错。 格式:END 例如:ENDORG 2000H74 40ST
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川巴中市2026-2027学年高三上学期零诊考试生物试卷
- 银川市总工会姚永伟1
- 《系统安装与维护》课件
- 信息管理概论课件第6章
- 管理学概论之第一章 导论
- 园林工程公司出纳员述职报告
- 新版2026年教科版一年级科学上册【全册】教学设计(附目录)合集
- 温馨九月-感谢恩师-桃李满天下-九月谢恩师主题班会
- 2026年食品加工操作工高级工技能鉴定试题及答案
- 【学习课件】第四章、可持续发展的基本内涵
- 《高二开学第一课》主题班会课件
- 2020风电场设备事故现场处置方案
- 自考《兽医法规14239》考试复习题库(必备版)
- 《中华民族大团结》(初中)第1课-爱我中华教学课件
- 2021废(污)水处理用复合碳源
- 化学(基础模块)中职PPT完整全套教学课件
- 架空导地线-液压压接(郭学闻)
- 技师培训交直流调速
- 输变电工程项目安全管理台账
- 《高级计量经济学》-厦门大学经济学院
- GB/T 9239.1-2006机械振动恒态(刚性)转子平衡品质要求第1部分:规范与平衡允差的检验
评论
0/150
提交评论