[信息与通信]单片机与嵌入式系统3到9章.ppt

上传人:sccc 文档编号:5615016 上传时间:2023-08-02 格式:PPT 页数:578 大小:13.42MB
返回 下载 相关 举报
[信息与通信]单片机与嵌入式系统3到9章.ppt_第1页
第1页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第2页
第2页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第3页
第3页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第4页
第4页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第5页
第5页 / 共578页
点击查看更多>>
资源描述

《[信息与通信]单片机与嵌入式系统3到9章.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]单片机与嵌入式系统3到9章.ppt(578页珍藏版)》请在三一办公上搜索。

1、第三章 MCS-51的指令系统,3.1 指令系统概述 3.2 指令系统的寻址方式 3.3 MCS-51指令系统分类介绍,3.1 指令系统概述,首先应该明确一个概念,什么是指令系统。我们把MCS-51单片机所能执行的指令的集合称为其指令系统。指令的表示方法称为指令格式,一条指令通常由两部分组成,即操作码和操作数。,操作码 操作数,指令的性质,指令操作的对象,当然操作数并不一定是一个具体的数据,也有可能仅指出到哪里取得数据的地址或符号。MCS-51的基本指令共111条,下面是指令系统按空间和时间上的划分:,从上表我们可以看出,绝大多数指令占用单字节或双字节,并且都能在1-2个机器周期内完成。由此可

2、见,MCS-51指令系统对存储空间和时间的利用率较高。,3.2 MCS-51指令系统的寻址方式,所谓寻址就是寻找确定参与操作的数的真正地址。一般来说,寻址方式越多则计算机的功能就越强,灵活性亦越大,指令系统也就越复杂。MCS-51单片机的指令系统共有7种寻址方式。,3.2.1 符号注释,在描述MCS-51指令系统的功能时,我们经常使用下面符号,其意义如下:,Rn(n0-7)当前选中的寄存器区的8个工作寄存器R0-R7,Ri(i=0、1)当前选中的寄存器区中可作地址寄存器的2个寄存器R0、R1。,Direct直接地址,即8位的内部数据存储器单元或特殊功能寄存器的地址。,#data 指令中的8位常

3、数#data16 指令中的16位常数,Rel 8位的有符号偏移量。用于SJMP或所有的条件转移指令中。偏移量按相对于下一条指令的第一个字节地址与跳转后指令的第一个字节地址之差计算,在128127范围内取值。,DPTR 数据指针,可用作16位的地址寄存器,Bit内部RAM或特殊功能寄存器中的直接寻址位地址,间址寄存器或基址寄存器的前缀。如Ri,A+DPTR,(X)X中的内容(X)由X寻址的单元中的内容,Cy进位标志或进位位,也可作为位处理机中的1位累加器。,/位操作数的前缀,表示对该位操作数取反,如/bit。,3.2.2 寻址方式,1、立即寻址2、直接寻址3、寄存器寻址4、寄存器间接寻址5、变址

4、寻址6、相对寻址7、位寻址,立即寻址,指令中直接给出操作数。立即操作数用前面加有#号的8位或16位数来表示。8位立即操作数占一个字节,16位立即操作数占二个字节。例如:MOVA,#60H;A#60H MOVDPTR,#3400HDPTR#3400H MOV30H,#40H;(30H)#40H,指令代码分别为:74H 60H90H 34H 00H 75H 30H 40H,直接寻址,指令直接给出操作数地址。占一个字节。可访问两种地址空间:特殊功能寄存器地址空间 唯一能访问该空间的寻址方式。片内内部RAM(128个字节:00H7FH),指令形如 MOVA,direct 指令代码:11100101 d

5、irect,对于特殊功能寄存器,在助记符指令中可直接用符号来代替地址,如:MOV A,P0(MOV A,80H这两条指令是等价的)表示将P0口的内容传送给A。思考:MOV 50H,40H 占多少字节?,例:MOVA,40H 指令代码 11100101 01000000即为:E5H 40H,寄存器寻址,寻址的对象为选定寄存器区的8个工作寄存器R0-R7,寄存器A、B、DPTR、和Cy位。这种寻址方式中,被寻址的寄存器的内容就是操作数,一般和操作码共占一个字节.,例:单字节指令:MOVA,Rn(n=07)指令代码:1110 1iii(iii=000111)即为:E8H-EFH,操作码的低3位指示所

6、用的寄存器,CLR AINC DPTRADD R5,#20H操作数采用什么寻址方式?指令占多少字节?,思考:,寄存器间接寻址,以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。访问内部RAM或外部数据存储器的低256个字节时,可采用 或作为间址寄存器,通用形式为Ri。,MOV A,Ri(i=0、1)例:MOV A,R0,指令代码:1110 0110。,最低位是0还是1区分现用寄存器为R0还是R1。,假设该条指令存放在2030H,工作寄存器为第0区,(R0)=50H。5

7、0H为片内RAM的一个单元(50H)=ACH。M0VA,R0该条指令的执行过程,2030H,MOVX A,Ri(i=0、1)例:MOVX A,R1,指令代码:1110 0011。假设该条指令存放在2030H,工作寄存器为第0组,(R1)=AFH。片外RAM(AFH)=30H。指令执行过程:,最低位是0还是1区分现用寄存器为R0还是R1。,访问片外数据存储器还可用数据指针DPTR作为间址寄存器,可对整个外部数据存储器空间(64)寻址。例:MOV DPTR,#1234H MOVX A,DPTR 执行PUSH和POP指令时,使用堆栈指针SP作间址寄存器来进行对栈区的间接寻址。,基址寄存器加变址寄存器

8、间址寻址,变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,此种寻址方式对查表访问特别有用。本寻址方式的指令只有三条:MOVC A,A+DPTR;A(A+DPTR)MOVC A,A+PC;A(A+PC)JMP A+DPTR 无条件转移指令 基址寄存器:DPTR或PC变址寄存器:累加器A 有效地址=(PC)+(A)或有效地址=(DPTR)+(A),例:(DPTR)=2000H,(A)=10H,MOVC A,A+DPTR,JMP A+DPTR指令操作示意图如下图所示。,相对寻址,为解决程序转移而专门设置的。它以PC的当前值为基准,加上指令中给出的相对

9、偏移量(rel)形成有效转移地址。偏移量占一个字节,但这里的PC的当前值是指执行完该指令后的PC值,即转移指令的PC值加上它的字节数。转移的目的地址用公式表示:,目的地址=转移指令所在地址+转移指令的字节数+rel,rel:1个有符号的8位二进制补码.表示的范围是:-128 至+127。,例如:SJMP 08H;PCPC+2+08(指令的地址)=2000H指令操作示意图如下图所示。,位寻址,MCS-51有位处理的功能,可以对数据位进行操作,因此有相应的位寻址的方式。除C外,位寻址指令直接使用位地址,占一个字节。例如:MOV C,40H;把位40H的值送到进位位C。位寻址的寻址范围为整个位地址2

10、11位的空间。,这些寻址位在指令中的表示方法不尽相同,有以下四种(以PSW位5为例):直接使用位寻址。0D5H位名称的表示方法。F0标志位 单元地址加位数的表示方法。(0D0H).5 特殊功能寄存器符号加位数的表示方法。PSW.5,3.3 MCS-51指令系统分类介绍,数据传送类指令算术运算类指令逻辑运算与循环类指令程序转移类指令调用子程序及返回指令 位操作指令空操作指令,数据传送类指令-使用最频繁的指令,数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、P

11、USH、POP 8种。数据传送类指令不影响标志,这里所指的标志是指Cy、Ac和OV,但不包括检验累加器奇偶性的标志位P。,目的地址 源地址,数 据,MOV,MOV A,#20H,,,MOV,20H,A,数据传送指令(29条)使用最频繁的指令 8位数据传送指令(15条),MCS-51单片机片内数据传送途径如图所示,以累加器为目的操作数的指令,MOV A,Rn;A RnMOV A,direct;A(direct)MOV A,Ri;A(Ri)MOV A,#data;A#data这组指令的功能是把源操作数的内容送入累加器A。,MOV A,R6;(R6)A 寄存器寻址MOV A,R0;(R0)A 间接寻

12、址MOV A,70H;(70H)A 直接寻址MOV A,#78H;78HA 立即寻址,以Rn为目的操作数的指令,MOV Rn,A;(A)Rn,n=07MOV Rn,direct;(direct)Rn,n=07MOV Rn,#data;dataRn,n=07这组指令的功能:把源操作数的内容送入当前工作寄存器区的R0-R7中的某一个寄存器.,以直接地址为目的操作数的指令,MOV direct,A;(A)directMOV direct,Rn;(Rn)direct n=07MOV direct1,direct2;(direct2)direct1MOV direct,Ri;(Ri)direct,i=0

13、,1MOV direct,#data;datadirect这组指令的功能:把源操作数送入直接地址指出的存储单元。,以寄存器间接地址为目的操作数的指令,MOV Ri,A;(A)(Ri),i=0,1MOV Ri,direct;direct(Ri),i=0,1MOV Ri,#data;data(Ri),i=0,1指令的功能:把源操作数内容送入R0或R1指出的存储单元。,例如:设(30H)=6FH,(R1)=40H,执行 MOV R1,30H30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。,16位数据传送指令(1条),MOV DPTR,#data16 指令功能:是把16位常数送入

14、DPTR。这是整个指令系统唯一的一条16位数据传送指令,用来设置地址指针。地址指针DPTR由DPH和DPL组成。这条指令的执行结果把高8位立即数送入DPH,低8位立即数送入DPL。,堆栈操作指令,所谓堆栈是在片内RAM中按“先进后出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。在指令系统中有两条用于数据操作的栈操作指令。,POP direct;(direct)(SP),SP SP-1指令功能:栈指针SP指示的内部RAM单元内容送入直接地址指出的字节单元中,栈指针SP减1。,PUSH direct;SP(SP+1),(SP)(direct)指令功能:首先将栈指针SP加1,然后把直接地

15、址指出的内容送到栈指针SP指示的内部RAM单元中。,PUSH A(SP)+1=61HSP(A)61H,例如:当(SP)=60H,(A)=30H,(B)=70H时执行下列指令,PUSH B(SP)+1=62HSP(B)62H,结果:(61H)=30H(62H)=70H(SP)=62H,栈底,栈顶,70H,例如:当(SP)=62H,(62H)=70H,(61H)=30H时,执行下列指令,POP DPH(SP)DPH(SP)-1SP,POP DPL(SP)DPL(SP)-1SP,结果:(DPTR)=7030H(SP)=6H,30H,61,DPH,DPL,【例】将片内RAM 30H单元与40H单元中的

16、内容互换。,方法1(直接地址传送法)MOV31H,30H MOV30H,40H MOV40H,31H SJMP$,方法2(间接地址传送法)MOVR0,#40H MOVR1,#30H MOVA,R0 MOVB,R1 MOVR1,A MOVR0,B SJMP$,方法3(字节交换传送法):MOVA,30H XCHA,40H MOV30H,A SJMP$,方法4(堆栈传送法):PUSH30H PUSH40H POP30H POP40H SJMP$,累加器A与外部数据存储器传送指令,指令功能:累加器A与外部RAM存储器或I/O的数据相互传送。MOVX A,DPTR;(DPTR)A,读外部RAM/IOMO

17、VX DPTR,A;(A)(DPTR),写外部RAM/IO MOVX A,Ri;(Ri)A,读外部RAM/IOMOVX Ri,A;(A)(Ri),写外部RAM/IO,采用16位的DPTR作间接寻址,可寻址整个64K片外数据存储器空间。高8位地址(DPH)由P2口输出,低8位地址DPL由P0口输出。,采用Ri作间接寻址,可寻址片外256B的数据存储器。8位地址和数据均由P0口输出,可选用其他任何输出口线来输出高于8位的地址(一般选用P2口输出高8位的地址)。,查表指令,MOVC A,A+PC 这条指令以PC作基址寄存器,A的内容作为无符号整数和PC的内容相加后得到一个16位的地址,由该地址指出的

18、程序存储单元的内容送达累加器A。,此指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,而且表格只能被一段程序所利用。,例:(A)=30H,执行地址1000H处的指令 1000H:MOVC A,A+PC 本指令占有一个单元,下一条指令的地址 为1001H,(PC)1001H再加上A中的30H,得1031H,结果将程序存储器中1031H的内容送入A。,MOVC A,A+DPTR 这条指令以DPTR作为基址寄存器,A的内容作为无符号整数和DPTR的内容相加后得到一个16位的地址,由该地址指出的

19、程序存储单元的内容送达累加器A。,例:(DPTR)=8100H(A)=40H 执行指令 MOVC A,A+DPTR结果将程序存储器中的8140H单元内容送入累加器A。,这条查表指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64K程序存储器中任意安排,一个表格可以为各个程序块公用。,字节交换指令,XCH A,Rn;(A)(Rn),n07XCH A,direct;(A)(direct)XCH A,Ri;(A)(Ri),i=0,1指令功能:将累加器A的内容和源操作数的内容相互交换。,例:(A)=80H(R7)=08H(40H

20、)=F0H(R0)=30H(30H)=0FH 执行指令:XCH A,R7;(A)(R7)寄存器寻址 XCH A,40H;(A)(40H)直接地址 XCH A,R0;(A)(R0)寄存器间接寻址结果:(A)=0FH(R7)=80H(40H)=08H(30H)=F0H,半字节交换指令,XCHD A,Ri 指令功能:累加器的低4位与内部RAM低4位交换。例:(R0)=60H,(60H)=3EH,(A)=59H 执行完XCHD A,R0指令 则(A)=5EH,(60H)=39H。,算术运算类指令,算术运算类指令主要是对8位无符号数进行算术操作,包括加、减、加1、减1以及乘法和除法运算指令。这类指令会影

21、响PSW的有关位,例如:加法、减法运算指令执行结果影响PSW的进位位CY、溢出位OV、半进位位AC和奇偶校验位P。对这一类指令要特别注意正确地判断结果对标志位的影响。,加法指令,ADD A,Rn;(A)+(Rn)A,n=07ADD A,direct;(A)+(direct)AADD A,Ri;(A)+(Ri)A,i=0,1ADD A,#data;(A)+data A,这组指令的特点:一个加数总是来自累加器A,并且运算结果放在累加器A中。,使用加法指令时,对各个标志位的影响:,位7有进位,则置“1”进位标志Cy,否则清“0”Cy,位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac,如果位6有

22、进位,而位7没有进位,或者位7有进位,而位6没有,则置“1”OV,否则清“0”OV。,注意:溢出标志位OV,只有在有符号数加法运算时才有意义。当2个有符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围(-128+127),例:(A)53H,(R0)=FCH 执行指令 ADD A,R0 0101 0011)1111 1100 1 0100 1111结果:(A)=4FH Cy=1 Ac=0 P=1 OV=0(位6、位7同时有进位),例:(A)85H(R0)=20H,(20H)=AFH 执行指令 ADD A,R0 1000 0101)1010 1111 1 0011 01

23、00 结果:(A)=34H Cy=1 Ac=1 P=1 OV=1(位7有进位,位6无),带进位加法指令,ADDC A,Rn;(A)+(Rn)+Cy A,n=07ADDC A,direct;(A)+(direct)+Cy AADDC A,Ri;(A)+(Ri)+Cy A,i=0,1ADDC A,#data;(A)+data+Cy A,这组指令的特点:进位标志位Cy参加运算。功能是同时把所指出的字节变量、进位标志与累加器A内容相加,结果留在累加器A中。,1000 0101)1111 1111 1 Cy=1 1000 0101 结果:(A)85H Cy=1 Ac=1 OV=0 P=1,例:(A)=8

24、5H,(20H)=FFH,Cy=1执行指令 ADDC A,20H,增量指令,INC A INC Rn;n07INC Ri;i=0,1INC DPTR(16位数加1指令)INC direct指令功能:把所指出的变量加1。,指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作。,对于指令INC direct,若直接地址是I/O端口,则进行“读-修改-写”操作。指令执行过程中,首先读入端口的内容(来自端口锁存器而不是端口引脚),然后在CPU中加1,继而输出到端口。,十进制调整指令,DA A 这条指令是对压缩BCD码加法运算时,跟在ADD和ADDC指令之后,用于对

25、BCD码的加法运算结果自动进行修正,使其结果仍为BCD表达形式。,调整方法:若(A0-3)9或(AC)=1则(A0-3)+06H(A0-3)若(A4-7)9或(Cy)=1则(A4-7)+06H(A4-7),在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU硬件中的十进制修正电路自动进行时,用户不必考虑何时该加“6”,使用时只需在上述加法指令后面紧跟一条“DA A”指令即可。注意:在MCS-51中,“DA A”指令不适用于减法指令。,5.带进位减法指令,SUBB A,Rn;(A)-(Rn)-Cy A,n=07SUBB A,direct;(A)-(direct)-Cy ASUBB A,Ri

26、;(A)-(Ri)-Cy A,i=0,1SUBB A,#data;(A)-data-Cy A,这组带进位减法指令是从累加器A中减去指定的变量和进位标志,结果存在累加器中。,如果位7需借位则置位Cy,否则清“0”Cy;如果位3需借位则置位Ac,否则清“0”Ac;如果位6需借位而位7不需要借位,或位7需借位而位6不需要借位,则置位溢出标志位OV,否则清“0”OV。,例:(A)=C9H,(R2)=54H,Cy=1执行指令 SUBB A,R2 1100 1001 0101 0100)1 0111 0100 结果为:(A)=74H,Cy=0,Ac=0,OV=1,减1指令,DEC A;(A)-1ADEC

27、Rn;(Rn)-1A,n07DEC direct;(direct)-1directDEC Ri;(Ri)-1(Ri),i0,1指令功能:是指定的变量减1。若原来为00H,减1后下溢为FFH,不影响标志。,例:(A)=0FH,(R7)=19H,(30H)=00H(R1)=40H,(40H)=0FFH执行指令:DEC A;(A)1A DEC R7;(R7)1R7 DEC 30H;(30H)130H DEC R1;(R1)1(R1)结果为:(A)=0EH,(R7)=18H,(30H)=0FFH(40H)=0FEH,P=1(除A减1影响P标志外),乘法指令,MUL AB;A*B BA 这条指令的功能是

28、把累加器A和寄存器B中的无符号8位整数相乘。其16位积的低位字节在累加器A中,高位字节在B中。如果积大于255,则置位溢出标志OV,否则清“0”OV。注意:进位标志总是清“0”。,除法指令,DIV AB;A/B A(商),余数 B 指令的功能:把累加器A中8位无符号整数除以B中的8位无符号整数。商存放在累加器A中,余数在寄存器B中,清“0”Cy和溢出标志位OV。注意:如果B的内容为0,则结果A,B中的内容不定,并置溢出标志位OV位1。,例:(A)=FBH=251,(B)=12H=18执行指令 DIV AB结果为:(A)=0DH=13,(B)=11H=17,Cy=0,OV=0,逻辑运算类指令,简

29、单逻辑操作指令 左环移指令 右环移指令 带进位左环移指令带进位右环移指令累加器半字节交换指令逻辑与指令逻辑或指令逻辑异或指令,简单逻辑操作指令,1)CLR A 指令功能:累加器A清“0”。不影响 Cy,Ac,OV等标志。2)CPL A 指令功能:累加器A按位取反,不影响标志。,A.0,A.7,A.0,A.7,A.0,A.7,A.0,A.7,CY,CY,RL A RR A RLC A RRC A,注意:执行带进位的循环移位指令之前,必须给CY置位或清零。,循环移位指令,例:已知A=7AH,CY=1,执行指令 RLC A,结果:A=F5H,CY=0,P=0,1,0,1,1,1,1,0,1,0,例:

30、已知A=7AH,CY=1,执行指令 RLC A,结果:A=F5H,CY=0,P=0,0,1,1,1,1,0,1,0,1,累加器半字节交换指令,SWAP A指令功能:累加器A的高半字节和低半字节互换。例:(A)=0C5H,执行指令 SWAP A 结果:(A)=5CH,逻辑与指令,ANL A,Rn;(A)(Rn)A,n07ANL A,direct;(A)(direct)AANL A,#data;(A)dataAANL A,Ri;(A)(Ri)AANL direct,A;(direct)AdirectANL direct,#data;(direct)datadirect,指令功能:在指出的变量之间以

31、位为基础进行逻辑与操作,结果存放到目的变量所在的寄存器或存储器中去。,例:(A)07H,(R0)=0FDH执行指令:ANL A,R0 0000 0111)1111 1101 0000 0101结果为:(A)05H,逻辑或指令,ORL A,Rn;(A)(Rn)A,n07ORL A,direct;(A)(direct)AORL A,#data;(A)dataAORL A,Ri;(A)(Ri)AORL direct,A;(direct)AdirectORL direct,#data;(direct)datadirect,指令功能:在指出的变量之间执行以位为基础的逻辑“或”操作,结果存放到目的变量所在

32、的寄存器或存储器中去。,例:(P1)05H,(A)33H执行指令 ORL P1,A 0000 0101)0011 0011 0011 0111结果:(P1)=37H,逻辑异或指令,XRL A,Rn;(A)+(Rn)A,n07XRL A,direct;(A)+(direct)AXRL A,#data;(A)+dataAXRL A,Ri;(A)+(Ri)AXRL direct,A;(direct)+AdirectXRL direct,#data;(direct)+datadirect,指令功能:在指出的变量之间执行以位为基础的逻辑异或操作,结果存放到目的变量所在的寄存器或存储器中去。,例:(A)=

33、90H,(R3)=73H 执行指令 XRL A,R3 1001 0000+0111 0011 1110 0011结果:(A)=E3H,控制转移类指令,无条件转移指令(4条)相对转移指令 长跳转指令 间接跳转指令(散转指令)条件转移指令 比较转移指令 减1不为0转移指令(循环指令)调用子程序指令 子程序返回指令 中断返回指令 空操作指令,长跳转指令,LJMP addr16 指令中包含16位地址,所以转移的目标地址范围是程序存储器的0000H-FFFFH。指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。,LJMP AAAAH;AAAAHPC,PC=0000H,

34、PC=AAAAH,假设执行该指令前,PC的值为0000H。,注意:该指令可以转移到64 KB程序存储器中的任意位置。,绝对转移(短转移)指令,AJMP addrll 指令中包含11位地址,因此这是2K字节范围内的跳转指令。执行该指令时,先将PC加2,然后把addrll送入PC.10PC.0,PC.15PC.11不变,程序转移到指定的地方。,PC高5位(保持不变),PC低11位,操作码(第一字节),操作数(第二字节),11位转移地址的形成示意图,程序计数器PC,AJMP addr11;PC+2PC,addr11 PC.10PC.0,例:执行指令 2000H:AJMP 2600H执行后PC值的变化

35、?,相对转移指令,SJMP rel 这是无条件跳转指令,执行时在PC加2之后,把指令的有符号的偏移量rel(-128+127,负数表示向后转移,正数向前转移)加到PC上,并计算出转向地址。程序汇编时,直接写上要转向的目标地址标号就可以了。例如:LOOP:MOV A,R6 SJMP LOOP,手工汇编时,计算目的地址值 目的地址值=本指令地址值+2+rel计算偏移量 rel=目标地址-本指令地址值-2,例:LOOP:SJMP LOOP 偏移量REL为多少(补码)?例:执行指令 2000H:SJMP 07H问执行后PC值的变化?,PC,2002H,2003H,0000H,0001H,2004H,2

36、005H,2006H,PC,PC,PC,2006H,2003H,PC,0002H,PC,相对转移指令,例:SJMP 03H,03H就是当前PC值与目的PC值相对差,PC,间接跳转指令(散转指令),JMP A+DPTR指令功能:累加器中的8位无符号数与数据指针DPTR的16位数相加,结果作为下条指令的地址送入PC,不改变累加器和数据指针DPTR的内容,也不影响标志。,条件转移指令,条件转移指令是依某种特定条件转移的指令。条件满足时转移,不满足时顺序执行下一条指令。JZ rel;如果累加器为零则执行转移 JNZ rel;如果累加器不为零则执行转移,比较转移指令,CJNE A,direct,rel

37、CJNE A,#data,relCJNE Rn,#data,relCJNE Ri,#data,rel,(PC)+3(PC)若(原地址)(目的地址)则(PC)+REL(PC)且 1(CY)若(原地址)=(目的地址)则顺序执行,这组指令的功能是比较前面两个操作数的大小,如果它们的值不相等则转移,在PC加到下一条指令的起始地址后,通过把指令的最后一个字节的有符号的相对偏移量加到PC上,计算出转向地址。,减1不为0转移指令(循环指令),这组指令把减1与条件转移两种功能结合在一起。执行时,将源操作数减1,结果回送到源操作数寄存器或存储器中去。DJNZ Rn,rel;n07 DJNZ direct,rel

38、,在实际问题中,经常需要多次重复执行某段程序。在编程时,可以设置一个计数值,每执行一次这段程序,计算值减1,直至计数值减为0为止。,调用子程序指令,(1)短调用指令:ACALL addrll PC+2PC,SP+1SP,PC.7-PC.0(SP),SP+1SPPC.15-PC.8(SP),addr11PC.10-PC.02KB范围内的调用子程序指令,其操作码的形成类似于“AJMP”指令。,(2)长调用指令:LACLL addrl6 PC+3PC,SP+1SP,PC.7PC.0(SP),SP+1SP PC.15PC.8(SP),addr16PC这条指令无条件的调用位于指定地址的子程序。,子程序返

39、回指令,RET;(SP)PC.15PC.8,SP-1SP(SP)PC.7PC.0,SP-1SP 指令功能:从堆栈中退出PC的高位和低位字节,把栈指针减2,从PC值开始继续执行程序。不影响任何标志。,例:(SP)=62H,(62H)=20H,(61H)=08H(PC)=1 000H,指令地址 指令 1000H RET执行过程:,57H,08H,20H,60H,61H,62H,栈底,例:(SP)=62H,(62H)=20H,(61H)=08H(PC)=1000H,指令地址 指令1000H RET,57H,08H,20H,60H,61H,62H,栈底,例:(SP)=62H,(62H)=20H,(61

40、H)=08H(PC)=1000H,指令地址 指令 1000H RET执行过程:,57H,60H,栈底,20H,08H,执行结果:(PC)=2008H(SP)=60H,中断返回指令,RETI 指令功能:和RET指令相似,不同的是清除MCS-51内部的中断状态标志。,位操作指令,由于MCS-51 单片机内部有一个位处理机,所以对位地址空间具有比较丰富的位操作指令。数据位传送指令 位变量修改指令 位变量逻辑与指令 位变量逻辑或指令 条件转移类指令,数据位传送指令,MOV C,bit MOV bit,C 指令功能:把由源操作数指出的位变量送到目的操作数指定的单元中去。注意:一个操作数必须为进位标志(位

41、累加器)。,例:指令 MOV C,06H必须要注意,这里的06H是内部RAM20H字节位6的位地址。,位变量修改指令,CLR C;清CyCLR bit;清bitCPL C;Cy求反CPL bit;bit位求反SETB C;置1CySETB bit;置1 bit位,例:指令如下CLR 27H;0(24H).7CPL 08H;将(21H).0取反SETB P1.7;1P1.7,位变量逻辑与指令,ANL C,bit ANL C,/bit,位变量逻辑或指令,ORL C,bitORL C,/bit,条件转移类指令,JC rel;如果进位位Cy=1,则转移JNC rel;如果进位位Cy=0,则转移JB b

42、it,rel;如果直接寻址位bit=1,则转移JNB bit,rel;如果直接寻址位bit=0,则转移JBC bit,rel;如果直接寻址位bit=1,则转移,并清bit,空操作指令,NOP CPU不进行任何实际操作,只消耗1个机器周期的时间。只执行(PC+1)PC操作。NOP指令常用于程序中的等待或时间的延迟。,第四章 MCS-51汇编语言程序设计,4.1 汇编语言程序设计概述4.2 顺序与循环程序设计4.3 子程序的设计4.4 分支转移程序设计4.5 查表程序设计4.6 综合编程举例,4.1 汇编语言程序设计概述,4.1.1 概述 MCS-51单片机的汇编语言指令系统,每一条指令就是汇编语

43、言的一条命令语句。由于汇编语言是面向机器硬件的语言,因此使用汇编语言进行程序设计,必须熟悉MCS-51单片机的硬件结构、指令系统、寻址方式等,才能编写出符合要求的程序。,汇编语言语句有两种基本类型:1.指令语句 每一条指令在汇编时都产生一个指令代码,也称为机器代码,该机器代码对应着机器的一种操作。2.伪指令语句 伪指令语句没有目标代码,它主要是为汇编程序服务的,在汇编过程中起控制作用。,标号字段和操作字码段之间要有冒号“:”相隔;操作码字段和操作数字段间的分界符是空格;双操作数之间用逗号相隔;操作数字段和注释字段之间的分界符用分号“;”相隔。,标号字段 操作码字段 操作数字段 注释字段(LAB

44、LE)(OPCODE)(OPRAND)(COMMENT),MCS-51汇编语言的4分段格式:,1.标号字段 标号是语句所在地址的标志符号2.操作码字段 规定语句执行的操作,不能空缺3.操作数字段 存放指令的操作数或操作数地址,可以采用字母和数字的多种表示形式4.注释字段,在MCS-51汇编语言中应有向汇编程序发出的指示信息,告诉它如何完成汇编工作,这一任务是通过使用伪指令来实现的。“伪”体现在汇编时,伪指令没有相应的机器代码产生。伪指令具有控制汇编程序的输入输出、定义数据和符号、条件汇编、分配存储空间等功能。不同汇编语言的伪指令也有所不同,但一些基本的内容却是相同的。,伪指令,下面介绍在MCS

45、-51汇编语言程序中常用的伪指令。ORG 汇编起始地址命令 END 汇编语言程序结束伪指令 EQU 赋值伪指令 DB 定义字节伪指令 DW 定义字伪指令 BIT 位地址符号伪指令 DATA 定义标号数值伪指令,ORG 汇编起始地址命令,功能:规定程序的起始地址。如果不用ORG规定,则汇编的得到的目标程序将从0000H开始。通用形式ORG M,M为十或十六进制数.例如:ORG 2000H START:MOV A,#00H,注意:在一个源程序中,可以多次使用ORG指令,来规定不同的程序段的起始地址。但是,地址必须由小到大排列,不能交叉、重叠。,END 汇编语言程序结束伪指令,功能:用在程序末尾,表

46、示程序已经结束。汇编程序对END以后的指令不再汇编。,EQU 赋值伪指令,功能:把操作数段中的地址或数据赋值 给标号字段中的标号。格式:标号(字符名称)EQU 数或汇编符号例:AA:EQU 1000H,DB 定义字节伪指令,功能:从指定单元开始定义(存储)若干个字节的数值或ASCII码字符。常用于定义数据常数表。格式:操作码 操作数 DB 字节常数或ASCII字符例:ORG 1000HDB 76H,73,C,BDB 0ACH 则(1000H)=76H(1001H)=49H(1002H)=43H(1003H)=42H(1004H)=0ACH,DW 定义字伪指令,功能:从指定单元开始定义(或存储)

47、若干个字的数据或ASCII码字符。格式:操作码 操作数 DW 字常数或ASCII字符,BIT 位地址符号伪指令,功能:把位地址赋予所规定的字符名称。格式:字符名称 操作码 操作数 BIT 位地址例:ABC BIT P1.0 Q4 BIT P2.2 汇编后,位地址P1.0、P2.2分别赋给变量ABC和Q4。,DATA 定义标号数值伪指令,功能:给标号段中的标号赋以数值。格式:标号 操作码 操作数 字符名称:DATA 表达式例:MN:DATA 3000H汇编后MN的值为3000H.,DATA与EQU的区别在于:用DATA定义的标识符汇编时作为标号登记在符号表中,所以可以先使用后定义;而EQU定义的

48、标识符必须先定义后使用,因后者不登记在符号表中。,4.1.2 汇编语言程序设计步骤,使用汇编语言作为程序设计语言的步骤与高级语言编程步骤类似,但略有差异。其程序设计步骤大致可分为以下几步:1分析课题,确定算法或解题思路。2画工作流程图(图形的符号规定均同于高级 语言流程图)3分配内存单元,确定程序与数据区存放地址。4编写源程序。5上机调试、修改,最后确定源程序。,程序设计时,必须根据实际问题和所使用的计算机的特点来确定算法,然后按照尽可能使程序简短和缩短运行时间两个原则编写程序。,4.1.3 汇编语言源程序的汇编 语言源程序翻译成机器代码(指令代码)的过程称为“汇编”。手工汇编 通过查指令的机

49、器代码表,逐个把助记符指令翻译成机器代码,再进行调试和运行。,缺点:繁琐、容易出错。所以只有小程序或受条件限制时才使用。在实际的程序设计中,都是采用机器汇编来自动完成。,机器汇编 借助于微计算机来代替手工汇编。它实际上是通过执行汇编程序来对源程序进行汇编的。由于使用微型计算机完成了汇编,而汇编后得到的机器代码却是在单片机上运行,所以这种机器汇编又称为交叉汇编。交叉汇编后,通过微机的串口(或并口)将汇编得到的机器代码送到用户样机(或在线仿真器)再进行程序的调试和运行。,有时,在分析现成产品的ROM/EPROM中的程序时,要将二进制数的机器代码语言程序翻译成汇编语言源程序,该过程称为反汇编。,4.

50、2 顺序与循环程序设计,顺序结构的程序是一种最简单、最基本的程序(也称为简单程序)。它的特点是按程序编写的顺序一次执行,程序流向不变。这类程序是所有复杂程序的基础。在很多实际程序中会遇到需多次重复执行某段程序的情况,可把这段程序设计为循环结构程序,这样可大大缩短程序。,4.2.1 顺序程序设计,要写出高质量的程序还是需要掌握一定的技巧,需要熟悉指令系统,正确地选择指令,最大限度地优化程序的目的。例1:将20H单元的两个BCD码拆开并变成ASCII码,存入21H、22H单元。,方法一 采用把BCD数除以10H的方法,除后相当于把此数右移了4位,这样两个BCD码分别移到A、B的低4位,然后再各自与

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号