第3章80C51的汇编语言与程序设计_第1页
第3章80C51的汇编语言与程序设计_第2页
第3章80C51的汇编语言与程序设计_第3页
第3章80C51的汇编语言与程序设计_第4页
第3章80C51的汇编语言与程序设计_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-4-161第第3 3章章 80C5180C51的指令系统的指令系统汇编语言概述汇编语言概述3.180C51的的指令系统指令系统3.2数据传送数据传送指令指令 (29条)条)算数运算算数运算指令指令 (24条)条)逻辑运算逻辑运算与与循环循环类指令(类指令(24条)条)控制转移控制转移类指令类指令 (17条)条)位操作位操作类指令类指令 (17条)条)伪操作类指令伪操作类指令80C51汇编语言的编程方法汇编语言的编程方法3.32022-4-1623.1 汇编语言概述汇编语言概述3.1.1 3.1.1 机器指令的字节编码形式机器指令的字节编码形式 单字节指令(单字节指令(4949条)条)

2、机器指令机器指令:计算机能直接识别和执行的指令。由操作码和操:计算机能直接识别和执行的指令。由操作码和操作数组成。操作码规定指令执行的操作功能,操作数是指参作数组成。操作码规定指令执行的操作功能,操作数是指参与操作的数据。与操作的数据。 机器指令的字节编码形式就是指机器指令以什么样的二进机器指令的字节编码形式就是指机器指令以什么样的二进制码形式存储在制码形式存储在ROMROM中。中。 双字节指令(双字节指令(4545条)条) 三字节指令(三字节指令(1717条)条)2022-4-163 8 8位编码仅为操作码位编码仅为操作码 单字节指令(单字节指令(4949条)条)位号位号7 6 5 4 3

3、2 1 0字节字节opcode如:如:INC A INC A 编码为:编码为:0 0 0 0 0 1 0 0即:即:04H04H 8 8位编码含操作码和寄存器编码位编码含操作码和寄存器编码位号位号7 6 5 4 3 2 1 0 字节字节opcoder r r如:如:MOV AMOV A,R0 R0 编码为编码为:1 1 1 0 1 0 0 0即:即:E8HE8H2022-4-164 双字节指令(双字节指令(4545条)条)位号位号7 6 5 4 3 2 1 0字节字节opcodedata或或direct 三字节指令(三字节指令(1717条)条)位号位号7 6 5 4 3 2 1 0字节字节op

4、codedata或或directdata或或direct如:如:MOV AMOV A,#50H #50H 编码为编码为:0 1 1 1 0 1 0 00 1 0 1 0 0 0 0即:即:74H74H 50H 50H如:如:MOV 20HMOV 20H,#50H #50H 编码为编码为:0 1 1 1 0 1 0 10 0 1 0 0 0 0 00 1 0 1 0 0 0 0即:即:75H75H 20H 20H 50H 50H2022-4-165注意:注意:操作码不能缺少,表示指令码的功能操作码不能缺少,表示指令码的功能操作数个数可为:操作数个数可为:1 1、2 2、3 3个个2 2个操作数的

5、指令,目的操作数在左边个操作数的指令,目的操作数在左边格式中的标点符号都是英文符号格式中的标点符号都是英文符号一般格式一般格式3.1.2 3.1.2 符号指令的书写格式符号指令的书写格式标号: 操作码操作码 操作数1, 操作数2, 操作数3, ;注释2022-4-166非数字字符开头,后跟字母、数字、非数字字符开头,后跟字母、数字、“- -”、“?”等等不能用已定义的保留字(指令助记符、伪指令等)不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号后跟英文冒号“: :” 标号(即符号地址)标号(即符号地址)数据:二进制(数据:二进制(B B) 十进制(十进制(D D或省略或省略D D) 十

6、六进制(十六进制(H H),注意),注意A AFF开头时要加开头时要加“ “0 0” ” ASCII ASCII码,如码,如 A A,12451245 操作数操作数 注释注释英文分号英文分号“; ;”开头开头2022-4-167 指令中出现的描述符号的含义指令中出现的描述符号的含义RnRn(n=0n=07 7)- -当前工作寄存器组中的寄存器当前工作寄存器组中的寄存器R0R0R7R7之一之一v RiRi(i=0,1i=0,1)- -当前工作寄存器组中的寄存器当前工作寄存器组中的寄存器R0R0或或R1R1v - -间址寄存器前缀,表示后面寄存器中数据为地址间址寄存器前缀,表示后面寄存器中数据为地

7、址v #data -8#data -8位立即数位立即数v #data16-16#data16-16位立即数位立即数v direct-direct-片内低片内低128128个个RAMRAM单元地址及单元地址及SFRSFR名称名称v addr11-addr11-表示表示2KB2KB范围内范围内1111位目的地址位目的地址v addr16-addr16-表示表示64KB64KB范围内范围内1616位目的地址位目的地址v rel-8rel-8位地址偏移量,范围:位地址偏移量,范围:128128127127v bit-bit-片内片内RAMRAM位地址、位地址、SFRSFR的位地址或名称的位地址或名称v

8、 $ -$ -当前指令的首地址当前指令的首地址v ()-表示表示 地址单元或寄存器中的内容地址单元或寄存器中的内容v / -/ -位操作数的取反操作前缀位操作数的取反操作前缀2022-4-16880C5180C51单片机有单片机有7 7种种寻址方式寻址方式寻址方式:寻找寻址方式:寻找操作数操作数操作所在的位置(地址),把操作操作所在的位置(地址),把操作数取出来的方法。数取出来的方法。1、寄存器寻址、寄存器寻址2、直接寻址、直接寻址3、寄存器间接寻址、寄存器间接寻址4、立即寻址、立即寻址5、相对寻址、相对寻址 6、变址寻址、变址寻址7、位寻址、位寻址3.1.2 80C513.1.2 80C51

9、的寻址方式的寻址方式2022-4-1691 1 寄存器寻址寄存器寻址操作数存放在工作寄存器中,指令中直接给出工操作数存放在工作寄存器中,指令中直接给出工作寄存器名称的寻址方式。作寄存器名称的寻址方式。操作数表示符号操作数表示符号 R0R0、R1R1、R7R7【例例】若(若(R0)=30H, 执行MOV A,R0后,(A)=?2022-4-16102 2 直接寻址直接寻址在这种寻址方式中,操作数项给出的是参加运算在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。的操作数的地址。操作数表示符号操作数表示符号 directdirect【例例】若(若(50H50H)=3AH =3AH , 执行

10、MOV A,50H后,(A)=?2022-4-16113 3 立即寻址立即寻址指令码中直接给出操作数的寻址方式。指令码中直接给出操作数的寻址方式。立即数前必须加立即数前必须加“# #”标记。指令中的立即数有标记。指令中的立即数有8 8位立即数和位立即数和1616位立即数。位立即数。注意区别这个指令:MOV A, 50H通用符号通用符号: :#data (8位),位),#data16( (16位)位)【例例】执行指令执行指令 MOV AMOV A,#50H#50H和和MOV DPTRMOV DPTR,#3050H #3050H ,A A值值分别是多少?分别是多少? 小结:立即数与地址的区别是什么

11、?2022-4-16124 4 寄存器间接寻址寄存器间接寻址在这种寻址方式中,操作数项中的工作寄存器中存放的不是真正在这种寻址方式中,操作数项中的工作寄存器中存放的不是真正的数据,而是的数据,而是操作数的地址操作数的地址。间接寻址要在工作寄存器前加。间接寻址要在工作寄存器前加 表示间表示间址操作。址操作。符号符号 R0和和R1【例例】若(若(R0)=30H,(30H)=5AH 执行MOV A,R0后,(A)=? 【例例】若(若(R1)=4CH,(A)=26H 执行MOV R1,A后,(R1)=?,(4CH)=?2022-4-16135 5 变址寻址变址寻址(基址寄存器变址寄存器的间接寻址)【例

12、例】(A A)= 05H= 05H;(DPTRDPTR)= 2400H= 2400H 执行执行MOVC A,A+DPTRMOVC A,A+DPTR后后结果:(结果:(A A)= =? 以某个基址寄存器的内容为基础,在这个基础上再加上地址偏移量,形成真正的操作数地址。基址寄存器只能是DPTR或PC,变址寄存器只能是累加器A。采用变址寻址的指令有两条:MOVC A, A+DPTR (最常用) MOVC A, A+PC2022-4-16146 6 相对寻址相对寻址相对寻址主要针对将程序转移到相对地址的跳转指令。相对寻址主要针对将程序转移到相对地址的跳转指令。以以当前当前PCPC值值作为基址,以作为基

13、址,以relrel作为变址,两者之作为变址,两者之和作为新的地址。和作为新的地址。【例例】若若SJMP 75HSJMP 75H存放在存放在1000H1000H地址中,执行指令地址中,执行指令SJMP 75HSJMP 75H后,后,PCPC值是多少?值是多少? 通过查询指令表,指令通过查询指令表,指令SJMP 75HSJMP 75H的二进制码为的二进制码为80H,75H80H,75H,为两字节指令,因此新的为两字节指令,因此新的PCPC值为值为1000H+2H+75H=1077H1000H+2H+75H=1077H2022-4-16157 7 位寻址位寻址【例例】位地址位地址00H00H内容为内

14、容为1 1,MOV CMOV C,00H 00H 执行后,位地址执行后,位地址PSW.7PSW.7的内容为的内容为1 1。 对位地址中的内容进行位操作的寻址方式。注意:与MOV A,00H的区别。2022-4-1616分类分类数据传送类指令数据传送类指令 29数学运算类指令数学运算类指令 24逻辑运算类指令逻辑运算类指令 24控制转移类指令控制转移类指令 1717位操作指令位操作指令 1717共有共有111111条汇编指令条汇编指令3.2 8051单片机指令系统单片机指令系统2022-4-1617数据传送类指令数据传送类指令 2929条条2022-4-1618数学运算类指令数学运算类指令 24

15、24条条2022-4-1619逻辑运算类指令逻辑运算类指令 2424条条2022-4-1620控制转移类指令控制转移类指令 1717条条2022-4-1621位操作指令位操作指令 1717条条2022-4-1622经常使用的指令经常使用的指令 2525条条2022-4-1623主要指令精讲主要指令精讲 传送类指令有两大类传送类指令有两大类 一般传送一般传送 MOV MOV (最重要的指令)(最重要的指令) 特殊传送,如:特殊传送,如: MOVC MOVC (较为重要的指令)(较为重要的指令) MOVX MOVX PUSH PUSH、POPPOP XCH XCH、XCHDXCHD SWAP SW

16、AP 3.2.1 3.2.1 数据传送类指令(数据传送类指令(2929条)条)2022-4-1624数据传送类指令数据传送类指令 2929条条2022-4-1625一般传送指令通用格式: MOV 目的操作数,源操作数含义:将 源操作数 传送到 目的操作数 中。类似于C语言的赋值语句。AARnRnMOV directdirectRiRi#data,MOV DPTR,#data16; DPTR data16一般传送指令一般传送指令注意:工作寄存器不能同时出现在源操作数和目的操作数中1616位传送指令位传送指令2022-4-1626【例3-13】执行指令 MOV DPTR,#1234H 后 (DPT

17、R)=?,(DPH)=?,(DPL)=?【例例3-103-10】若若(R1)= 20H,(20H)= 55H。执行指令 MOV A,R1 后,(A)= ?。【例3-9】执行指令 MOV R6,#50H 后,(R6)= ?【例3-11】若(R1)=50H,(50H)=18H,执行指令 MOV 40H,R1 后,(40H)=?【例3-12】若(R1)=30H,(A)=20H,执行指令 MOV R1,A 后,(30H)=? 思考:将R5中数送到R4中,如何处理?2022-4-16273.3.2 3.3.2 特殊传送指令特殊传送指令 以以DPTRDPTR内容为基址内容为基址(较重要)(较重要)读读RO

18、MROM中数据,必须使用指令中数据,必须使用指令MOVCMOVCMOVC AMOVC A,A+DPTRA+DPTR;A A (A A)+ +(DPTRDPTR) 以以PCPC内容为基址内容为基址MOVC AMOVC A,A+PC A+PC ;A A (A A)+ +(PCPC)由于由于ROMROM只能读不能写,因此只能读不能写,因此ROMROM中的数据传送都是单向的。中的数据传送都是单向的。 【例例3-143-14】若若(DPTR)= 3000H,(A)= 20H;ROM中的(3020H)=78H, (3021H)=26H,执行指令 MOVC A,A+DPTR 后,(A)= ?。【例例3-15

19、3-15】若若(DPTR)= 3016H,(A)= 25H;ROM中的(303BH)=22H, (3041H)=35H,执行指令 MOVC A,A+DPTR 后,(A)= ?。2022-4-1628 读读片外片外RAMRAM读写片外读写片外RAMRAM数据的指令数据的指令MOVXMOVX片外片外RAMRAM中数据传送都是通过中数据传送都是通过间接寻址间接寻址的方式来实现的的方式来实现的MOVX AMOVX A,DPTR DPTR ;A A (DPTRDPTR)MOVX AMOVX A,Ri Ri ;A A (RiRi) 写写片外片外RAMRAMMOVX DPTRMOVX DPTR,A A ;(

20、;(DPTRDPTR)A AMOVX RiMOVX Ri,A A ;(;(RiRi)A A2022-4-1629注意:注意:(1 1)地址寄存器只能使用)地址寄存器只能使用DPTRDPTR和和RiRi,其中,其中DPTRDPTR是是16 16 位,而位,而RiRi是是8 8位的;位的;(2 2)与片外)与片外RAMRAM传送数据只能通过累加器传送数据只能通过累加器A A来实现;来实现;(3 3)与片外)与片外RAMRAM传送数据只能使用传送数据只能使用MOVXMOVX指令。指令。【例例3-153-15】若若(DPTR)= 3000H,(3000H)= 20H;执行指令MOVX A,DPTR 后

21、,(A)= ?。思考:MOV、MOVC、MOVX指令的区别?2022-4-1630 入入栈指令栈指令PUSHPUSH堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP堆栈堆栈是一片存储区,遵循是一片存储区,遵循“后进先出后进先出”原则,栈顶由原则,栈顶由SPSP指指示。主要用于系统发生中断时保存中断现场信息。示。主要用于系统发生中断时保存中断现场信息。PUSH direct PUSH direct ;SPSP(SPSP)1 1,(,(SPSP)(directdirect) 出出栈指令栈指令POPPOPPOP direct POP direct ;(;(directdirect)(SPSP

22、),),SP SP (SPSP)1 1 2022-4-1631(40H)=23H,(50H)=45H MOV SP,#6FHPUSH 40HPUSH 50HPOP 40HPOP 50H;(SP)=6FH;(SP)=70H,(70H)=(40H)= 23H结论:地址40H和50H中数据交换,这种情况一般不允许。;(SP)=71H,(71H)=(50H)= 45H;(40H)=(71H)=45H,(SP)= 70H;(50H)=(70H)=23H,(SP)= 6FH2022-4-1632(40H)=23H,(50H)=45H MOV SP,#6FHPUSH 40HPUSH 50HPOP 50HPO

23、P 40H;(SP)=6FH;(SP)=70H,(70H)=(40H)= 23H结论:地址40H和50H中数据入栈前和出栈后数据保持 一致,遵循“先进后出”的原则。这是正常使用。;(SP)=71H,(71H)=(50H)= 45H;(40H)=(70H)=23H,(SP)= 6FH;(50H)=(71H)=45H,(SP)= 70H2022-4-1633 字节字节交换指令交换指令XCHXCH数据交换指令数据交换指令XCHXCH、XCHDXCHD和和SWAPSWAP数据交换属于同时进行的双向传送数据交换属于同时进行的双向传送 )(;)(;)(;,RiA RidirectA direct RnA

24、Rn A XCH【例例3-203-20】若(若(R0)=80H,(A)=20H。执行指令 XCH A,R0 后,(A)=?,(R0)=?。 2022-4-1634 半字节半字节交换指令交换指令XCHDXCHD【例例3-213-21】若(若(R0R0)=30H=30H,(,(30H30H)=67H=67H, (A A)=20H=20H。执。执行指令行指令XCHD AXCHD A,R0 R0 指令后,(指令后,(A A)=?=?,(,(30H30H)=?=? )();()()();(,ACC.0ACC.3ACC.4ACC.7 A SWAPACC.0ACC.30 .Ri3 .Ri Ri A XCHD

25、XCHDXCHD是间址操作数的低半字节与是间址操作数的低半字节与A A的低半字节互换。的低半字节互换。SWAPSWAP是累加器的高低是累加器的高低4 4位互换位互换【例例3-223-22】若(若(A A)30H30H,执行指令,执行指令SWAP ASWAP A后,(后,(A A)=?=?。 2022-4-16353.2.2 3.2.2 算数运算类指令(算数运算类指令(2424条)条)算数算数运算结果运算结果要要影响影响PSWPSW中标志位中标志位 CYCY为为1 1,无符号数无符号数(字节)加减发生(字节)加减发生进位进位或或借位借位 OVOV为为1 1,有符号数有符号数(字节)加减发生(字节

26、)加减发生溢出溢出错误错误 ACAC为为1 1,低半字节出现进位或借位低半字节出现进位或借位 P P为为1 1,存于累加器,存于累加器A A中操作结果的中操作结果的“1 1”的个数的个数为为奇数奇数 标志位意义标志位意义2022-4-1636算数运算影响标志位示例算数运算影响标志位示例【例例】有有2 2个参与相加的机器数,一个是个参与相加的机器数,一个是84H84H,另一个是,另一个是8DH8DH。试分析运算过程及其对状态标志的影响。试分析运算过程及其对状态标志的影响。问题问题:CYCY为?;为?;ACAC为?;为?;OVOV为?;为?;P P为?为? 结果结果:CYCY为为1 1;ACAC为

27、为1 1 ;OVOV为为1 1 ;P P为为0 0 OV = D7D6OV = D7D62022-4-1637数学运算类指令数学运算类指令 2424条条2022-4-1638不带进位加法不带进位加法ADDADD、带进位加法、带进位加法ADDCADDC、带借位减法、带借位减法SUBBSUBBRnADDdirectADDC A RiSUBB#data,加加1 1、减、减1 1指令指令AR nIN C dirD PectD EC RTiR注意:没有DEC DPTR指令。思考:DPTR能不能实现自减呢?2022-4-1639乘法和除法指令乘法和除法指令MUL AB MUL AB ;B B中为积的中为积

28、的高高8 8位位,A A中为积的中为积的低低8 8位位 ;CYCY总是被清总是被清0 0,OV=1OV=1表示积大于表示积大于FFHFFH【例例3-283-28】若(若(A A)= 50H= 50H,(,(B B)=A0H=A0H,执行指令,执行指令MUL ABMUL AB后,后,(A)=00H, (B)=32H, (OV)=1(A)=00H, (B)=32H, (OV)=1。DIV AB DIV AB ;A A中为商的中为商的整数整数部分,部分,B B中为中为余数余数 ;CYCY总是被清总是被清0 0;OV=1OV=1表示除数为表示除数为0 0 【例例3-293-29】若(若(A A)= F

29、BH(251)= FBH(251),(,(B B)=12H(18)=12H(18),执行指,执行指令令DIV ABDIV AB后,后,(A)=0DH, (B)=11H, (OV)=0(A)=0DH, (B)=11H, (OV)=0。251/18251/181313余余1717,除数不为,除数不为0 02022-4-1640十进制调整指令(十进制调整指令(基本不用基本不用)DA A DA A ;调整;调整A A的内容为正确的的内容为正确的BCDBCD码码 两个压缩的两个压缩的BCDBCD码按二进制相加后,必须经过调整方能码按二进制相加后,必须经过调整方能得到正确的和。得到正确的和。 当当A A中

30、低中低4 4位出现了非位出现了非BCDBCD码(码(1010101011111111)或低)或低4 4位位的进位的进位AC=1AC=1,则应在低,则应在低4 4位加位加6 6调整。调整。 当当A A中高中高4 4位出现了非位出现了非BCDBCD码(码(1010101011111111)或高)或高4 4位位的进位的进位CY=1CY=1,则应在高,则应在高4 4位加位加6 6调整。调整。 执行十进制调整指令后,执行十进制调整指令后,PSWPSW中的中的CYCY表示结果的百位值表示结果的百位值 2022-4-1641【例例3-243-24】若(若(A A)0110 1001B0110 1001B,表

31、示的,表示的BCDBCD码为码为 BCD69)(R2R2)0101 1000B0101 1000B,表示的,表示的BCDBCD码为码为 BCD58)(,执行指令:,执行指令: ADD A,R2DA A(A A)0010 0111B0010 0111B,即,即 BCD27)(且(且(CYCY)1 1,即正确的结果为:,即正确的结果为:127127 2022-4-16423.2.3 3.2.3 逻辑运算与循环移位类指令(逻辑运算与循环移位类指令(2424条)条)2022-4-16433.2.3 3.2.3 逻辑运算与循环移位类指令(逻辑运算与循环移位类指令(2424条)条)逻辑与、逻辑或、逻辑异或

32、逻辑与、逻辑或、逻辑异或 逻辑运算:与、或、异或、清逻辑运算:与、或、异或、清0 0和取反和取反 循环移位:左、右移,带进位位左、右移循环移位:左、右移,带进位位左、右移ANLAORL direct #dataXRL,R nA N LdirectO R L A R iX R L#data,用的较多2022-4-1644【例例】(A A)=C3H=C3H,(,(R0R0)=55H=55H,执行指令,执行指令 ORL AORL A,R0 R0 后,(后,(A A)=D7H =D7H 或操作常用于对某些指定位进行或操作常用于对某些指定位进行“置置1 1”, ,同时同时“保留保留”其他位不变其他位不变

33、 【例例】(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,执行指令,执行指令 XRL AXRL A,R0 R0 后,(后,(A A)=69H =69H 异或操作常用于对某些指定位进行异或操作常用于对某些指定位进行“取反取反”, ,同时同时“保留保留”其他位不变其他位不变 【例例】(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,执行指令,执行指令 ANL AANL A,R0 R0 后,(后,(A A)=82H =82H 与操作常用于对某些指定位进行与操作常用于对某些指定位进行“清清0 0”, ,同时同时“保留保留”其他位不变其他位不变 2022-4-1645逻辑清逻辑

34、清0 0和取反和取反A0A;A;A CPLCLRCLR ACLR A指令与指令与MOV A,#00HMOV A,#00H功能相同,只是用功能相同,只是用MOVMOV指令时要多占指令时要多占用用1 1字节空间字节空间 2022-4-1646716007771600716007771600; (), ()R R; (), (), ()R R C A ;(),()R L;(),(),()R LCAAAAC YAAAAC YAAAAC YAAAAC Y累加器循环移位累加器循环移位2022-4-1647【例例3-373-37】若(若(A A)= C5H= C5H,执行指令,执行指令RL ARL A后,后

35、,(A)=8BH(A)=8BH。【例例3-383-38】若(若(A A)= 45H= 45H,(CY)=1, (CY)=1, 执行指令执行指令RLC ARLC A后,后,(A)=8BH,(CY)=0(A)=8BH,(CY)=0。【例例3-393-39】若(若(A A)= C5H= C5H,执行指令,执行指令RR ARR A后,后,(A)=E2H(A)=E2H。【例例3-403-40】若(若(A A)= C5H= C5H,(CY)=1, (CY)=1, 执行指令执行指令RRC ARRC A后,后,(A)=E2H,(CY)=1(A)=E2H,(CY)=1。2022-4-16483.2.4 3.2.

36、4 控制转移类指令(控制转移类指令(1717条)条)2022-4-16493.2.4 3.2.4 控制转移类指令(控制转移类指令(1717条)条)1 1 无条件转移无条件转移AJMP addr11 AJMP addr11 ;PC PC (PCPC)+ 2+ 2,PC10PC100 addr11 0 addr11 LJMP addr16 LJMP addr16 ;PC addr16 (PC addr16 (用的最多用的最多)SJMP rel SJMP rel ;PC PC (PCPC)+ 2+ 2,PC PC (PCPC)+ rel + rel AJMP AJMP 标号标号 ;跳转范围为;跳转范

37、围为2KB2KBLJMP LJMP 标号标号 ;跳转范围为;跳转范围为64KB64KBSJMP SJMP 标号标号 ;跳转范围为;跳转范围为256B256B2022-4-1650非数字字符开头,后跟字母、数字、非数字字符开头,后跟字母、数字、“- -”、“?”等等不能用已定义的保留字(指令助记符、伪指令等)不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号后跟英文冒号“: :” 标号:是指令的符号地址,通常作为转移指令的操作数。标号:是指令的符号地址,通常作为转移指令的操作数。 LOOP:MOV A,#7FH LOOP:MOV A,#7FH LJMP LOOP LJMP LOOPHERE

38、:LJMP HERE HERE:LJMP HERE 或或 LJMP $LJMP $HERE:AJMP HERE HERE:AJMP HERE 或或 AJMP $AJMP $HERE:SJMP HERE HERE:SJMP HERE 或或 SJMP $SJMP $编程时,经常遇到等待中断或调试程序,常使程序编程时,经常遇到等待中断或调试程序,常使程序“原地原地踏步的需要,可使用以下指令:踏步的需要,可使用以下指令: 2022-4-1651比较不等转移比较不等转移CJNE Aderect ACJNE Rn#data, Ri, 标号,标号注意:该指令会改变PSW寄存器中的CY值。(1)若目的字节中内

39、容小于源字节中内容时,CY置1;(2)若目的字节中内容大于或等于源字节中内容时,CY清02 2 条件转移条件转移用的较多2022-4-1652减减1 1不为不为0 0转移转移RnDJNZ direct,标号累加器判累加器判0 0转移(基本不用)转移(基本不用) JZ JNZ标号用的较多2022-4-1653【例例3-483-48】有一段程序如下,该程序执行后,有一段程序如下,该程序执行后,A A中的值是多少?中的值是多少? MOV R0,#0AH CLR ALOOPX:ADD A,R0 DJNZ R0,LOOPX SJMP $(A A)=10+9+8+7+6+5+4+3+2+1=37H=10+

40、9+8+7+6+5+4+3+2+1=37H,本例中,本例中23H23H地址就地址就是一个软计数器是一个软计数器思考:能否有其他方法编写这段程序?55/16=3 755/16=3 72022-4-1654 MOV R0,#10 CLR ALOOPX:ADD A,R0 DEC R0 CJNE R0,#0,LOOPX SJMP $2022-4-16553 3 子程序调用与返回子程序调用与返回调用指令调用指令ACALL LCALL标号返回指令返回指令RETRETIRETRET指令的功能是从堆栈中弹出调用指令压入堆栈保护指令的功能是从堆栈中弹出调用指令压入堆栈保护的返回地址(又称为断点)。的返回地址(又

41、称为断点)。RETIRETI专用于中断服务程专用于中断服务程序返回,它具有清除内部相应的中断状态触发器(以序返回,它具有清除内部相应的中断状态触发器(以保证正确的中断逻辑)的功能。保证正确的中断逻辑)的功能。 普通子程序返回指令中断子程序返回指令2022-4-16564 4 空操作空操作NOP NOP ;PC PC (PCPC)+ 1+ 1,占占1 1个周期个周期、一个字节一个字节 这条指令不产生任何功能性作用,在执行时间上要消耗这条指令不产生任何功能性作用,在执行时间上要消耗1 1个机器周期,因此主要个机器周期,因此主要用于较短暂精确时间延时用于较短暂精确时间延时。2022-4-1657延时

42、子程序示例延时子程序示例Delay:MOV R4,#249Delay:MOV R4,#249 ;1;1个机器周期个机器周期DL2:DL2:NOP NOP ;1;1个机器周期个机器周期NOPNOP;1;1个机器周期个机器周期DJNZ R4,DL2DJNZ R4,DL2 ;2;2个机器周期个机器周期RETRET;2;2个机器周期个机器周期【例例】若晶振频率为若晶振频率为12MHz12MHz,试计算下述延时子程序延时的,试计算下述延时子程序延时的时间。时间。延时的时间为:(1*1+1*249+1*249+2*249+2*1)us=999us思考:若延时时间再长些,比如10ms,如何处理?1次249次

43、249次249次1次2022-4-1658嵌套嵌套延时子程序示例延时子程序示例Delay:MOV R5,#10Delay:MOV R5,#10;1;1个机器周期个机器周期DL1:DL1:MOV R4,#249MOV R4,#249 ;1;1个机器周期个机器周期DL2:DL2:NOP NOP ;1;1个机器周期个机器周期NOP NOP ;1;1个机器周期个机器周期DJNZ R4,DL2DJNZ R4,DL2 ;2;2个机器周期个机器周期DJNZ R5,DL1DJNZ R5,DL1 ;2;2个机器周期个机器周期RETRET;2;2个机器周期个机器周期延时的时间为:(1+1*10+4*2490+2*

44、10+2*1)us=9993us, 非常接近10ms1次10次249*10次249*10次249*10次10次1次2022-4-16593.2.5 3.2.5 位操作类指令(位操作类指令(1717条)条)位操作是以位为单位进行的各种操作。位操作指位操作是以位为单位进行的各种操作。位操作指令中的位地址有令中的位地址有4 4种表示形式:种表示形式: 直接地址直接地址 (如,(如,0D5H0D5H);); 点操作符点操作符 (如,(如,0D0H.40D0H.4、PSW.4PSW.4等);等); 位名称位名称 (如,(如,RS1RS1);); 伪指令定义(如,伪指令定义(如,MYFLAG BIT F0

45、MYFLAG BIT F0)。)。以上几种形式表示的都是以上几种形式表示的都是PSWPSW中的中的位位5 5。位操作指令中,位累加器要用位操作指令中,位累加器要用“C C”表示。表示。位累加器相当于字节操作时的累加器位累加器相当于字节操作时的累加器A A。2022-4-16601 1 位传送(用的很少)位传送(用的很少)MOV bit,C ;bit(CY) MOV C ,bit ;CY (bit) 2 2 位状态设置(位状态设置(用的较多用的较多)位清位清0 0 0bit bit 0CY C CLR;位置位位置位 1bit bit 1CY C SETB;2022-4-16613 3 位逻辑运算

46、(用的很少)位逻辑运算(用的很少)位逻辑与位逻辑与位逻辑或位逻辑或 bitCYCY /bit bitCYCY bit C ANL)()(;)()(;, bitCYCY /bit bitCYCY bit C ORL)()(;)()(;,位取反位取反 bitbit bit CYCY C CPL)(;)(;2022-4-1662判判CYCY转移(注意与转移(注意与JZJZ和和JNZJNZ的区别)的区别) (用的很少)(用的很少)判判bitbit转移转移4 4 位控制转移位控制转移JC JNC标号; ;若(若(CYCY)=1,PC=1,PC(PCPC)+2+rel,+2+rel,否则顺次执行。否则顺次

47、执行。; ;若(若(CYCY)=0;PC=0;PC(PCPC)+2+rel;+2+rel;否则顺次执行。否则顺次执行。JBJNBJBC bit , 标号; ;(bitbit)=1,PC=1,PC(PCPC)+3+rel,+3+rel,否则顺次执行。否则顺次执行。; ;(bitbit)=1,PC=1,PC(PCPC)+3+rel,bit0,+3+rel,bit0,否则顺次执行否则顺次执行; ;(bitbit)=0,PC=0,PC(PCPC)+3+rel,+3+rel,否则顺次执行否则顺次执行 用的较多2022-4-1663伪指令,也叫汇编命令。仅对汇编过程进行指示作用伪指令,也叫汇编命令。仅对汇

48、编过程进行指示作用伪指令无对应的单片机可执行代码伪指令无对应的单片机可执行代码 1 1、起始地址设定伪指令、起始地址设定伪指令ORGORGORG ORG 表达式表达式表达式通常为十六进制地址,例:表达式通常为十六进制地址,例: ORG 8000HSTART:MOV A,#30H ORGORG可多次使用,但地址值的顺序要由小到大可多次使用,但地址值的顺序要由小到大 2 2、结束汇编伪指令、结束汇编伪指令ENDENDEND该伪指令位于源程序的该伪指令位于源程序的最后一行最后一行。3.2.6 3.2.6 伪操作类指令伪操作类指令每次都用每次都用2022-4-16643 3、定义字节数据表伪指令、定义

49、字节数据表伪指令DBDB1000H 标号:标号: DB DB 字节数据表字节数据表如:如:ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,18FEH FCHFAH08H0AH12H1001H用的较多4 4、定义位地址为符号名伪指令、定义位地址为符号名伪指令BITBIT符号名符号名 BIT BIT 位地址表达式位地址表达式如:如:ST BIT P1.0 ;ST BIT P1.0 ;将将P1.0P1.0的位地址赋给符号名的位地址赋给符号名STSTCF BIT 0D7H ;CF BIT 0D7H ;将位地址为将位地址为D7HD7H的位定义为

50、符号名的位定义为符号名初学用的较少2022-4-16655 5、定义常值为符号名伪指令、定义常值为符号名伪指令EQUEQU符号名符号名 EQU EQU 常值表达式常值表达式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H CLR A CLR A MOV R7, MOV R7,LENLEN MOV R0, MOV R0,BLOCKBLOCK LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP MOV MOV SUMSUM,A ,A 符号名为:符号名为:v地址地址v常数常数v段名段名v字符串字符串v寄存器名寄存器名v位名位名初学用的较少2022-4-1666 单片机应用系统由单片机应用系统由硬件系统硬件系统和和软件程序软件程序构成构成 汇编语言汇编语言 高级语言高级语言 软件程序设计方法软件程序设计方法v汇编语言是用语言直接控制硬件,由硬件间接达汇编语言是用语言直接控制硬件,由硬件间接达到某种控制效果。而到某种控制效果。而C语言是一种比较高级的语语言是

温馨提示

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

评论

0/150

提交评论