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

上传人:音乐台 文档编号:2000760 上传时间:2019-01-30 格式:PPT 页数:578 大小:13.42MB
返回 下载 相关 举报
[信息与通信]单片机与嵌入式系统3到9章.ppt_第1页
第1页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第2页
第2页 / 共578页
[信息与通信]单片机与嵌入式系统3到9章.ppt_第3页
第3页 / 共578页
亲,该文档总共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

3、指令中的8位常数 #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 、 直接寻

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

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

6、节指令: MOV A,Rn(n=07) 指令代码:1110 1iii (iii=000111) 即为:E8H-EFH,操作码的低3位指示所用的寄存器,CLR A INC DPTR ADD R5,# 20H 操作数采用什么寻址方式?指令占多少字节?,思考:,寄存器间接寻址,以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。 访问内部RAM或外部数据存储器的低256个字节时,可采用 或作为间址寄存器,通用形式为Ri。,MOV A ,Ri (i=0、1) 例: MOV A,

7、 R0 , 指令代码: 1110 0110。,最低位是0还是1区分现用寄存器为R0还是R1。,假设该条指令存放在2030H,工作寄存器为第0区,(R0)=50H。50H为片内RAM的一个单元(50H)=ACH。 M0V A,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作为 间址寄存器,可对整个外部数据

8、存储器空间(64) 寻址。 例: MOV DPTR ,#1234H MOVX A ,DPTR 执行PUSH和POP指令时,使用堆栈指针SP作间 址寄存器来进行对栈区的间接寻址。,基址寄存器加变址寄存器间址寻址,变址寻址只能对程序存储器中数据进行操作。由 于程序存储器是只读的,因此变址寻址只有读操作而 无写操作,此种寻址方式对查表访问特别有用。本寻 址方式的指令只有三条: MOVC A,A+DPTR ;A(A+DPTR) MOVC A, A+PC ;A(A+PC) JMP A+DPTR 无条件转移指令 基址寄存器:DPTR或PC 变址寄存器:累加器A 有效地址=(PC)+(A) 或有效地址=(D

9、PTR)+(A),例:(DPTR)=2000H,(A)=10H, MOVC A,A+DPTR , JMP A+DPTR 指令操作示意图如下图所示。,相对寻址,为解决程序转移而专门设置的。它以PC的当前值为基准,加上指令中给出的相对偏移量(rel)形成有效转移地址。偏移量占一个字节,但这里的PC的当前值是指执行完该指令后的PC值,即转移指令的PC值加上它的字节数。 转移的目的地址用公式表示:,目的地址=转移指令所在地址+转移指令的字节数+rel,rel: 1个有符号的8位二进制补码. 表示的范围是:-128 至 +127。,例如: SJMP 08H ; PCPC+2+08 (指令的地址)=200

10、0H 指令操作示意图如下图所示。,位寻址,MCS-51有位处理的功能,可以对数据位进行操作,因此有相应的位寻址的方式。除C外,位寻址指令直接使用位地址, 占一个字节。 例如: MOV C, 40H ;把位40H的值送到进位位C。 位寻址的寻址范围为整个位地址211位的空间。,这些寻址位在指令中的表示方法不尽相同, 有以下四种(以PSW位5为例): 直接使用位寻址。 0D5H 位名称的表示方法。 F0标志位 单元地址加位数的表示方法。(0D0H).5 特殊功能寄存器符号加位数的表示方法。PSW.5,3.3 MCS-51指令系统分类介绍,数据传送类指令 算术运算类指令 逻辑运算与循环类指令 程序转

11、移类指令 调用子程序及返回指令 位操作指令 空操作指令,数据传送类指令 -使用最频繁的指令,数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP 8种。 数据传送类指令不影响标志,这里所指的标志是指Cy、Ac和OV,但不包括检验累加器奇偶性的标志位P。,目的地址 源地址,数 据,MOV ,MOV A,#20H,,,MOV,20H,A,数据传送指令(29条) 使用最频繁的指令 8位数据传送指令(15条),MCS-51单片机片内数据传送途径如图所示

12、,以累加器为目的操作数的指令,MOV A,Rn ;A Rn MOV 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 间接寻址 MOV A,70H ;(70H)A 直接寻址 MOV A,#78H ;78HA 立即寻址,以Rn为目的操作数的指令,MOV Rn,A ; (A) Rn,n=07 MOV Rn,direct ; (direct) Rn,n=07 MOV Rn,#data ; dataRn,n=07 这

13、组指令的功能:把源操作数的内容送入当前工作 寄存器区的R0-R7中的某一个寄存器.,以直接地址为目的操作数的指令,MOV direct,A ;(A) direct MOV direct,Rn ;(Rn)direct n=07 MOV direct1,direct2 ;(direct2) direct1 MOV direct,Ri ;(Ri) direct ,i=0,1 MOV direct,#data ;datadirect 这组指令的功能:把源操作数送入直接地址指出 的存储单元。,以寄存器间接地址为目的操作数的指令,MOV Ri,A ;(A) (Ri),i=0,1 MOV Ri,direct

14、 ;direct(Ri),i=0,1 MOV Ri,#data ;data(Ri),i=0,1 指令的功能:把源操作数内容送入R0或R1 指出的存储单元。,例如:设(30H)=6FH,(R1)=40H,执行 MOV R1,30H 30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。,16位数据传送指令 (1条),MOV DPTR,#data16 指令功能:是把16位常数送入DPTR。这是整个指令系统唯一的一条16位数据传送指令,用来设置地址指针。地址指针DPTR由DPH和DPL组成。这条指令的执行结果把高8位立即数送入DPH,低8位立即数送入DPL。,堆栈操作指令,所谓堆栈是

15、在片内RAM中按“先进后出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。在指令系统中有两条用于数据操作的栈操作指令。,POP direct;(direct)(SP),SP SP-1 指令功能:栈指针SP指示的内部RAM单元内容送入 直接地址指出的字节单元中,栈指针SP减1。,PUSH direct;SP(SP+1),(SP)(direct) 指令功能:首先将栈指针SP加1,然后把直接地址 指出的内容送到栈指针SP指示的内部RAM单元中。,PUSH A (SP)+1=61HSP (A)61H,例如:当(SP)=60H,(A)=30H,(B)=70H时 执行下列指令,PUSH B (S

16、P)+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单元中的内容互换。,方法1(直接地址传送法) MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $,方法2(间接地址传送法) MOV R0,#

17、40H MOV R1,#30H MOV A,R0 MOV B,R1 MOV R1,A MOV R0,B SJMP $,方法3(字节交换传送法): MOV A,30H XCH A,40H MOV 30H,A SJMP $,方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SJMP $,累加器A与外部数据存储器传送指令,指令功能:累加器A与外部RAM存储器或I/O的数据相互传送。 MOVX A,DPTR ;(DPTR)A, 读外部RAM/IO MOVX DPTR,A ;(A)(DPTR),写外部RAM/IO MOVX A,Ri ;(Ri)A, 读外部RAM

18、/IO MOVX 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位的地址,由该地址指出的程序存储单元的内容送达累加器A。,此指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以

19、取出表格中的常数。缺点是表格只能存放在该条查表指令后面的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位的地址,由该地址指出的程序存储单元的内容送达累加器A。,例:(DPTR)=8100H (A)=40H 执行指令 MOVC

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

21、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以及乘法和除法运算指令。这类指令会影响PSW的有关位,例如:加法、减法运算指令执

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

23、位,或者位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 0100

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

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

26、D码加法运算时,跟在ADD和ADDC指令之后,用于对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=07 SUBB

27、 A,direct ;(A)-(direct) - Cy A SUBB A,Ri ; (A)-(Ri) - Cy A, i=0,1 SUBB 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 01

28、11 0100 结果为:(A)=74H, Cy=0, Ac=0, OV=1,减1指令,DEC A ;(A)-1A DEC Rn ;(Rn) -1A ,n07 DEC direct ;(direct)-1direct DEC 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) 结果为: (

29、A)=0EH,(R7)=18H,(30H)=0FFH (40H)=0FEH,P=1 (除A减1影响P标志外),乘法指令,MUL AB ;A*B BA 这条指令的功能是把累加器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中的内容不定,并置溢出标志位

30、OV位1。,例:(A)=FBH=251,(B)=12H=18 执行指令 DIV AB 结果为:(A)=0DH=13,(B)=11H=17, Cy=0,OV=0,逻辑运算类指令,简单逻辑操作指令 左环移指令 右环移指令 带进位左环移指令 带进位右环移指令 累加器半字节交换指令 逻辑与指令 逻辑或指令 逻辑异或指令,简单逻辑操作指令,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,注意:执

31、行带进位的循环移位指令之前,必须给CY置位或清零。,循环移位指令,例: 已知A=7AH,CY=1,执行指令 RLC A,结果: A=F5H,CY=0,P=0,1,0,1,1,1,1,0,1,0,例: 已知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, n07 ANL A ,direct ; (A)(direct)A

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

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

34、direct)A XRL A ,#data ; (A)+dataA XRL A ,Ri ;(A)+(Ri)A XRL direct, A ; (direct)+Adirect XRL direct, #data ; (direct)+datadirect,指令功能:在指出的变量之间执行以位为基础的逻辑异或操作,结果存放到目的变量所在的寄存器或存储器中去。,例:(A)=90H,(R3)=73H 执行指令 XRL A,R3 1001 0000 + 0111 0011 1110 0011 结果:(A)=E3H,控制转移类指令,无条件转移指令(4条) 相对转移指令 长跳转指令 间接跳转指令(散转指令)

35、 条件转移指令 比较转移指令 减1不为0转移指令 (循环指令) 调用子程序指令 子程序返回指令 中断返回指令 空操作指令,长跳转指令,LJMP addr16 指令中包含16位地址,所以转移的目标地址范围是程序存储器的0000H-FFFFH。指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。,LJMP AAAAH ; AAAAHPC,PC=0000H,PC=AAAAH,假设执行该指令前,PC的值为0000H。,注意:该指令可以转移到64 KB程序存储器中的任意位置。,绝对转移(短转移)指令,AJMP addrll 指令中包含11位地址,因此这是2K字节范围内的

36、跳转指令。执行该指令时,先将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值的变化?,相对转移指令,SJMP rel 这是无条件跳转指令,执行时在PC加2之后,把指令的有符号的偏移量rel(-128+127,负数表示向后转移,正数向前转移)加到PC上,并计算出转向地址。 程序汇编时

37、,直接写上要转向的目标地址标号就可以了。例如: LOOP: MOV A,R6 SJMP LOOP ,手工汇编时, 计算目的地址值 目的地址值 = 本指令地址值+2+rel 计算偏移量 rel=目标地址-本指令地址值-2,例: LOOP : SJMP LOOP 偏移量REL为多少(补码)? 例: 执行指令 2000H : SJMP 07H 问执行后PC值的变化?,PC,2002H,2003H,0000H,0001H,2004H,2005H,2006H,PC,PC,PC,2006H,2003H,PC,0002H,PC,相对转移指令,例: SJMP 03H,03H就是当前PC值 与目的PC值相对差,

38、PC,间接跳转指令(散转指令),JMP A+DPTR 指令功能:累加器中的8位无符号数与数据指针 DPTR的16位数相加,结果作为下条指令的地 址送入PC,不改变累加器和数据指针DPTR的 内容,也不影响标志。,条件转移指令,条件转移指令是依某种特定条件转移的指令。条件满足时转移,不满足时顺序执行下一条指令。 JZ rel ;如果累加器为零则执行转移 JNZ rel ;如果累加器不为零则执行转移,比较转移指令,CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,(PC)+3 (PC) 若(原地址)(目的地

39、址) 则(PC)+REL (PC) 且 1 (CY) 若(原地址)=(目的地址) 则顺序执行,这组指令的功能是比较前面两个操作数的大小,如果它们的值不相等则转移,在PC加到下一条指令的起始地址后,通过把指令的最后一个字节的有符号的相对偏移量加到PC上,计算出转向地址。,减1不为0转移指令(循环指令),这组指令把减1与条件转移两种功能结合在一起。执行时,将源操作数减1,结果回送到源操作数寄存器或存储器中去。 DJNZ Rn, rel ;n07 DJNZ direct,rel,在实际问题中,经常需要多次重复执行某段程序。在编程时,可以设置一个计数值,每执行一次这段程序,计算值减1,直至计数值减为0

40、为止。,调用子程序指令,(1) 短调用指令:ACALL addrll PC+2PC,SP+1SP, PC.7-PC.0(SP), SP+1SP PC.15-PC.8(SP), addr11PC.10-PC.0 2KB范围内的调用子程序指令,其操作码的形成 类似于“AJMP”指令。,(2)长调用指令: LACLL addrl6 PC+3PC,SP+1SP, PC.7PC.0(SP), SP+1SP PC.15PC.8(SP), addr16PC 这条指令无条件的调用位于指定地址的子程序。,子程序返回指令,RET ; (SP) PC.15PC.8,SP-1SP (SP) PC.7PC.0,SP-1

41、SP 指令功能:从堆栈中退出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,(61H)=08H(PC)=1000H, 指令地址 指令 1000H RET

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

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

44、转移 JB bit, 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单片机

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

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

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

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1