单片机原理及应用-3MCS-51指令系统_第1页
单片机原理及应用-3MCS-51指令系统_第2页
单片机原理及应用-3MCS-51指令系统_第3页
单片机原理及应用-3MCS-51指令系统_第4页
单片机原理及应用-3MCS-51指令系统_第5页
已阅读5页,还剩187页未读 继续免费阅读

下载本文档

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

文档简介

1、MCS-51指令系统ZUCC 方健指令学习要点n了解指令的格式n了解指令的寻址方式n了解常用指令,能合理使用n了解指令对程序状态字的影响第三章 MCS-51指令系统3-1 指令系统概述指令系统概述3-2 数据与寻址方式数据与寻址方式3-3 数据传送类指令数据传送类指令(29)3-4 数据运算类指令数据运算类指令(24)3-5 逻辑操作类指令逻辑操作类指令(24)3-6 程序控制类指令程序控制类指令(17)3-7 布尔操作类指令布尔操作类指令(17)3-1 指令系统概述指令系统概述 一、相关概念一、相关概念二、指令格式二、指令格式三、指令系统支持的操作数:三、指令系统支持的操作数:四、四、指令系

2、统中使用的符号指令系统中使用的符号五、五、指令的执行过程指令的执行过程一、一、相关概念: 指令: 计算机各功能部件能够完成的最基本动作的指示和命令称之为指令; 指令系统: 微处理器能完成的所有操作指令的集合称作该微处理器的指令系统; 程序: 用于解决某一特定问题的指令的有序组合就构成了程序。1、MCS-51指令机器码格式 MCS-51的指令机器格式,即指令由操作码和地址码两部分组成: 操作码:(1字节)是一条指令所必须的,它指明执行什么操作及是否需要操作数; 地址码:(02字节)非一条指令所必须,它指明参与操作数据的地址。 MCS-51有无操作数、单操作数、双操作数指令之分,从字节上有单、双、

3、叁字节之分。二、二、 MCS-51的指令格式: 2、MCS-51指令助记符格式 MCS-51的指令助记符格式也由指令的操作码和操作数两部分组成: 操作码:一条指令所必须,它指明执行什么操作及是否需要操作数; 操作数:非一条指令所必须,可以是无操作数或既有源操作数,又有目的操作数,它指明被操作的对象。 指令助记符格式通常有相应的指令机器码格式相对应。3、指令的字节数n单字节指令(49条)n双字节指令(45条)n三字节指令(17条)3、MCS-51指令速查表(p.195198)n111条指令,5大类n数据传送n算术运算n逻辑运算n控制转移n布尔操作和运算n速查表使用n指令 (助记符)n操作码 (机

4、器码)n功能 n字节数 (空间)n机器周期(时间)三、指令系统支持的操作数三、指令系统支持的操作数1、位位: 某个存储单元的某一个二进制位;某个存储单元的某一个二进制位;2、字节字节:8位无符号数,位无符号数, 表达范围为表达范围为0255;3、短整数短整数: 8位有符号数,位有符号数, 表达范围为表达范围为-128+127;4、字字: 16位无符号数,位无符号数, 表达范围为表达范围为065535 (仅支持乘法的操作结果及地址);(仅支持乘法的操作结果及地址); 四、指令系统中使用的符号四、指令系统中使用的符号v1、寄存器:寄存器:vRi 可用作可用作间接寻址间接寻址的寄存器,的寄存器,只能

5、是只能是 R0,R1两个寄存器两个寄存器,所以,所以i=0,1vRn 当前工作寄存器当前工作寄存器的的8个通用寄存器个通用寄存器 R0R7 所以所以n=07vDirect 可可直接寻址直接寻址的片内的片内8位位地址地址,既可以,既可以 指片内指片内RAM的低的低128个单元地址,也可以指特个单元地址,也可以指特殊功能寄存器(殊功能寄存器(SFR)的地址或是符号地址的的地址或是符号地址的名称,因此名称,因此direct表示表示直接寻址地址直接寻址地址。vDPTR 可用作间接寻址或变址寻址基本地址的可用作间接寻址或变址寻址基本地址的16位专用寄存器位专用寄存器。v2、立即数: v#data 八位立

6、即数八位立即数v#data16 16位立即数位立即数v3、地址:、地址:vAddr16 16位立即数表示的地址位立即数表示的地址vAddr11 11位立即数表示的地址位立即数表示的地址vRel 8位立即数表示的偏移量,为有符号数位立即数表示的偏移量,为有符号数vBit 8位立即数表示的位地址,位立即数表示的位地址,(包括片内(包括片内 RAM中及中及SFR区中可寻址的位)区中可寻址的位)n4、其他:、其他: n 间址寄存器的前缀标志。间址寄存器的前缀标志。n/ 位地址的前缀标志,表示对该位操作数取反。位地址的前缀标志,表示对该位操作数取反。nA 累加器累加器 ,ACCnB 寄存器寄存器nC 进

7、位标志位进位标志位Cy,是布尔处理机中的累加器,也称之为累加位,是布尔处理机中的累加器,也称之为累加位n() 某寄存器或某单元的内容某寄存器或某单元的内容n() 由由寻址的单元中的内容。寻址的单元中的内容。n 箭头左边的内容被箭头的右边内容所取代箭头左边的内容被箭头的右边内容所取代n$ 当前指令的地址当前指令的地址五、五、MCS-51单片机执行指令的过程单片机执行指令的过程 n单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令执行的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-分析指令-执行指令。n取指令阶段的任务:根据程序计数器PC中的值从程序存储器读出现行指令

8、,送到指令寄存器。n分析指令阶段的任务:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。 计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。n一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。用户命令指令指令指令000010101011100111100011 cpu123单片机执行指令的过程 指令的执行过程举例 n开机时,程序计算器PC变为0000H。然

9、后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。n例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:n1) 程序计数器的内容(这时是0000H)送到地址寄存器;n2) 程序计数器的内容自动加1(变为0001H);n3) 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电平,使地址为0000H的单元被选中;

10、n4) CPU使读控制线有效; n5) 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。n至此,取指阶段完成,进入译码分析和执行指令阶段。n由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出

11、。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。 3-2 数据和寻址方式数据和寻址方式 n寻址的“地址”即为操作数所在单元的地址,绝大部分指令执行时都需要用到操作数,那么到哪里去取得操作数呢?51系列单片机中,存放数据的空间有4种:n内部RAM、n特殊功能寄存器SFR、n外部RAMn程序存储器ROM。 指令系统中的寻址方式 寻址:在单片机的存储空间中寻找指令规定的操作数据的地址,并将操作数取出来在一条指令中,通常是根据指令的源操作数来决定寻址方式的MOV 目的操作数,源操作数1、直接寻址、直接寻址直接寻址:直接寻

12、址: 指令中操作数直接以指令中操作数直接以地址的形式给出,地址的形式给出,就称为直接寻址方式就称为直接寻址方式。例:例: MOV A,30H ;E5H 30H 若执行指令前,(若执行指令前,(30H)=11H,则执行指令后则执行指令后A即即(E0H)=11H程序程序ROMROMOPOP30H30H数据数据RAMRAM操作数操作数x xn nn+1n+130H30H累加器累加器A A直接寻址示意图直接寻址示意图MOV A, 30H程序程序ROMROMOPOP30H30H数据数据RAMRAM操作数操作数x xn nn+1n+130H30H累加器累加器A A直接寻址示意图直接寻址示意图MOV Rn,

13、 20HMOV direct, 20HMOV Ri, 20HADD A, 20HSUB A, 20H 访问的地址空间:访问的地址空间:内部内部RAM,特殊功能寄存器特殊功能寄存器n低128单元,在指令中直接以单元地址出现;n专用寄存器,可以以单元地址形式出现,也可以寄存器符号出现nMOV 65H,A ;将A的内容送入内部RAM的65H单元地址中nMOV A,direct ;将直接地址单元的内容送入A中nMOV direct, direct;将直接地址单元的内容送直接地址单元片内 RAM(20H-2FH)中的位寻址区结构图7F7E7D7C7B7A797877767574737271706F6E6

14、D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字节地址24H位地址使用直接寻址应注意的三个问题:使用直接寻址应注意的三个问题:n1,指令助记符中指令助记符中direct是用是用16进制数表示的操作

15、数进制数表示的操作数地址。地址。当地址在当地址在SFR区域时区域时,指令用寄存器名表示指令用寄存器名表示。 如:如:MOV A,80H 可以写成可以写成 MOV A,P0 后者用后者用SFR中寄存器的名字取代它的物理地址中寄存器的名字取代它的物理地址80H。很明显,后者更容易阅读和交流,。很明显,后者更容易阅读和交流,所以我们所以我们提倡使用提倡使用SFR中寄存器名称来代替直接地址中寄存器名称来代替直接地址。 如:如:MOV A,SBUF ;串口数据缓冲器数据送;串口数据缓冲器数据送A MOV IE,#00H ;初始化中断允许寄存器;初始化中断允许寄存器 MOV TH1,#0FEH ;为定时器

16、;为定时器1赋初值赋初值 尽管使用尽管使用SFR的寄存器名称来取代直接地址,的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址。存器名字转换为直接地址。BB寄存器寄存器 F7 F6 F5 F4 F3 F2 F1 F0F0H00HB.7B.6B.5 B.4B.3 B.2 B.1 B.0ACC累加器累加器E7E6E5E4E3E2E1E0E0H00HPSW 程序程序状态字状态字D7D6D5D4D3D2D1D0D0H00HCYACF0RS1RS0OV-PIP中断优先中断优先寄存器寄存器BFBEBDBCBBBAB9B

17、8B8H*00000B-PSPT1PX1PT0PX0P3 P3口口B7B6B5B4B3B2B1B0B0HFFHP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IE中断允许中断允许寄存器寄存器AFAEADACABAAA9A8A8H0*00000BEA-ESET1EX1ET0EX0P2 P2口口A7A6A5A4A3A2A1A0A0HFFHP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0SCON串行口控串行口控制寄存器制寄存器9F9E9D9C9B9A999898H00HSM0SM1SM2RENTB8RB8TIRIP1 P1口口979695949392919090HFF

18、HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TCON定时器控定时器控制寄存器制寄存器8F8E8D8C8B8A898888H00HTF1TR1TF0TR0IE1IT1IE0IT0P0P0口口878685848382818080HFFHP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0011011116FHn2,当直接地址时在工作寄存器区中时,可以使用两当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问。种寻址方式来访问。 如:如: MOV A,00H ; MOV A,R0 ; 前者是:前者是:11100101(0E5H)、00000000 (00H)

19、双字节。后者的机器码是:双字节。后者的机器码是: 11101000(0E8H) 单字节单字节; 在物理结构上,在物理结构上,R0与与RAM的的00H单元恰好是同单元恰好是同一单元,所以不同的指令而执行结果是一样的。一单元,所以不同的指令而执行结果是一样的。 类似的还有累加器类似的还有累加器A: INC A ;寄存器寻址方式(单字节);寄存器寻址方式(单字节); INC ACC ;直接寻址方式(双字节);直接寻址方式(双字节); INC 0E0H ;直接寻址方式(双字节)。直接寻址方式(双字节)。 n3,在指令系统中:在指令系统中:字节地址字节地址与与位地址位地址是完全不同是完全不同的概念。的概

20、念。 前者用前者用direct表示,而后者用表示,而后者用bit 表示,但在指表示,但在指令中都是用令中都是用16进制表示的数。进制表示的数。 如:如: MOV A,20H ;将;将RAM的的20H单元内容送单元内容送A MOV C,20H ;将位寻址区中的位地址为;将位寻址区中的位地址为 20H位内容送位内容送 PSW 中的中的Cy中。中。2、寄存器寻址、寄存器寻址寄存器寻址:寄存器寻址: 操作数在寄存器中,因此指定了寄存操作数在寄存器中,因此指定了寄存器就能得到操作数在寄存器寻址方式的指令中器就能得到操作数在寄存器寻址方式的指令中以符号名称来表示寄存器以符号名称来表示寄存器例:例: E8H

21、 MOV A,R0若此指令执行前若此指令执行前PSW.4=0(RS1)、)、PSW.3=1(RS0)、()、(08H)=22H(R0);); 则执行指令后累加器则执行指令后累加器A即(即(E0H)=22H。寄存器寻址方式和范围:寄存器寻址方式和范围: 32个个 通用寄存器(通用寄存器(4个工作寄存器组(个工作寄存器组(R0-R7),RS0,RS1决定当前工作的寄存器组)决定当前工作的寄存器组) 部分专用寄存器部分专用寄存器(A,B,DPTR等)等)寄存器寻址与直接寻址的区别nMOV A, 20HnMOV P1, AnMOV P1, R4nCLR A直接寻址是直接对地址操作直接寻址是直接对地址操

22、作,而操作数在地址单元中而操作数在地址单元中寄存器寻址是对寄存器操作寄存器寻址是对寄存器操作,而操作数在寄存器中而操作数在寄存器中20H88HA88H3、寄存器间接寻址:、寄存器间接寻址:寄存器间接寻址:寄存器间接寻址: 寄存器中存放的是操作数地址,寄存器中存放的是操作数地址,即操作数是通过寄存器间接得到的。即操作数是通过寄存器间接得到的。间址提示间址提示符。符。 MCS-51规定工作寄存器规定工作寄存器R0,R1可以作为间接寻址可以作为间接寻址寄存器,用以寻址内部存储器低寄存器,用以寻址内部存储器低128个单元或外个单元或外部数据存储器部数据存储器256个单元,用数据指针个单元,用数据指针D

23、PTR作间作间址寄存器可寻址外部址寄存器可寻址外部64K字节单元。字节单元。 例:例: E7H MOV A,R1 若指令执行前若指令执行前PSW.4=0(RS1)、)、PSW.3=0(RS0)、)、(01H)=30H(R1)、()、(30H)=33H; 则执行指令后累加器则执行指令后累加器A即(即(E0H)=33H。 注意本寻址方式不能访问高注意本寻址方式不能访问高128单元的特殊功能单元的特殊功能寄存器。寄存器。将将R1寄存器的内容作为地址寄存器的内容作为地址,这个地址这个地址所确定单元的所确定单元的内容送入累加器内容送入累加器A寄存器寻址和寄存器间接寻址MOV A, R0MOV A, R0

24、n寄存器间接寻址的三种用法:寄存器间接寻址的三种用法:间接寻址使用的寄存器: R0,R1,DPTRn可以借助于可以借助于R0或或R1这这2个工作寄存器用个工作寄存器用MOV指令进行寄存器间接寻址来寻址片内指令进行寄存器间接寻址来寻址片内RAM区的通用寄存器(低区的通用寄存器(低128个字节);个字节);n可以借助于可以借助于R0或或R1这这2个工作寄存器用个工作寄存器用MOVX指令进行寄存器间接寻址来寻址片指令进行寄存器间接寻址来寻址片外外64K数据存储器区的低数据存储器区的低256单元;单元; MOVX A, R0n还可以借助于还可以借助于16位的数据指针位的数据指针DPTR用用MOVX指令

25、进行寄存器间接寻址来寻址整指令进行寄存器间接寻址来寻址整个片外个片外64K数据存储器区中的任一单元。数据存储器区中的任一单元。 MOVX A, DPTR (4) 堆栈操作指令(堆栈操作指令(PUSH或或POP)也应算作寄存器的间接寻址,即以堆栈也应算作寄存器的间接寻址,即以堆栈指针指针SP作间址寄存器的间址寻址方式作间址寄存器的间址寻址方式使用寄存器间址指令时应注意的三个问题使用寄存器间址指令时应注意的三个问题1、间址寄存器、间址寄存器Ri只能使用只能使用R0、R1(i=0、1)。)。2、间址方式不仅用于片内、间址方式不仅用于片内RAM,同样也适用于片外,同样也适用于片外 RAM。n 对于片内

26、对于片内RAM使用使用Ri,寻址范围为,寻址范围为00HFFH。n 对于片外对于片外RAM,可以使用,可以使用Ri,也可以使用,也可以使用DPTR做做 间址寄存器。两者区别在于后者寻址范围为间址寄存器。两者区别在于后者寻址范围为0000HFFFFH,两者都可以,两者都可以RAM和和ROM。3、间址方式的指令不能访问、间址方式的指令不能访问SFR中的单元。如下面中的单元。如下面的程序是的程序是错误错误的:的: MOV R1,#80H MOV A,R1 (因为(因为80H为为SFR的物理地址)的物理地址)4、立即数寻址:、立即数寻址:立即数寻址:立即数寻址: 操作数紧跟在操作码之后,无须去寄操作数

27、紧跟在操作码之后,无须去寄存器或存储器中取数的寻址方式为立即寻址,该存器或存储器中取数的寻址方式为立即寻址,该操作数称作立即数操作数称作立即数。例:例: 74H 6FH MOV A,#6FH 执行该指令后累加器执行该指令后累加器A(地址为地址为E0H)中的内容为中的内容为6FH; 指令中的指令中的“#”符号称为立即数符号,表示其后面符号称为立即数符号,表示其后面的内容是立即数而不是寄存器地址。的内容是立即数而不是寄存器地址。n指令本身直接含有所需要的指令本身直接含有所需要的8位或位或16位的操作数。位的操作数。 将此数称为将此数称为“立即数立即数”(使用(使用#标明)。如:标明)。如: MOV

28、 A,#30H ;将(;将(8位)立即数送累加器位)立即数送累加器A MOV DPTR,#2000H ;16位立即数送位立即数送DPTR积存器积存器 【注意注意】:MOV A,#30H MOV A,30H 两者区别两者区别。n立即数寻址的指令长度为立即数寻址的指令长度为2或或3个字节。个字节。30H30H74H74Hn nn+1n+1ROMROM累加器累加器A A00H00H20H20H90H90HROMROMDPTRDPTRnMOV Rn, #01HnMOV DPTR ,#data16 16位数寻址操作(只有这一条位数寻址操作(只有这一条 16位传送指令)位传送指令) MOV DPTR, 1

29、FFFHnMOV direct , #88H MOV 70H, #88HnADD A, #05HnSUB A, #01H立即寻址操作空间立即寻址操作空间:A, R0-R7, DPTR,内部内部RAM地址地址 5、变址寻址:、变址寻址: 变址寻址:变址寻址: 以以数据指针数据指针DPTRDPTR或程序计数器或程序计数器PCPC作为作为基址寄存器基址寄存器,以累加器,以累加器A A作为作为变址寄存器变址寄存器,并以两,并以两者内容相加形成的者内容相加形成的1616位地址作为位地址作为操作数地址操作数地址,以,以达到访问达到访问程序储存区程序储存区中数据表格的目的中数据表格的目的 例:例: 93H

30、MOVC A,A+DPTR 若执行指令前累加器若执行指令前累加器A即(即(E0H)=07H、(、(DPTR)=0800H、(、(0807H)=44H; 则执行指令后累加器则执行指令后累加器A即(即(E0H)=44H 该寻址方式该寻址方式仅用于访问程序存储器仅用于访问程序存储器,常用于查表,常用于查表获取数据。获取数据。 变址寻址示意图变址寻址示意图02H02H0300H0300HROMROM X X0302H0302H累加器累加器A ADPTRDPTR0300H0300H+ 02H+ 02H0302H0302Hn变址指令只适用于对变址指令只适用于对ROMROM存储器得访问,如查表等。存储器得访

31、问,如查表等。【举例举例】:已知:已知ROMROM中中0302H 0302H 单元有一个数单元有一个数x x,现要把,现要把它送到累加器它送到累加器A A中,试编程。中,试编程。 MOV DPTR,#0300HMOV DPTR,#0300H ;立即数送;立即数送DPTRDPTR MOV A,#02HMOV A,#02H ;立即数送累加器;立即数送累加器A A MOVC A,A+DPTRMOVC A,A+DPTR ;从;从ROMROM的的0030200302单元取数送单元取数送A A间接寻址和变址寻址nMOV A, R0nMOVC A, A+DPTR变址寄存器变址寄存器(02H)+基址寄存器基址

32、寄存器(0300H)0302H程序存储器APC, DPTR数据存储器只读6、位寻址位寻址: 查询片内RAM单元中的20H2FH单元和允许进行位操作的特殊功能寄存器地址,从该地址中取出位数据进行操作可寻址的位为: 片内RAM位寻址区的20H2FH这16个单元的128位,位地址为00H 7FH ; 片内RAM中SFR区的地址能被8整除的存储单元(即以0、8结尾的单元)中的位,共用11个单元,83位;BB寄存器寄存器 F7 F6 F5 F4 F3 F2 F1 F0F0H00HB.7B.6B.5 B.4B.3 B.2 B.1 B.0ACC累加器累加器E7E6E5E4E3E2E1E0E0H00HACC.

33、7ACC.6ACC.5ACC.4ACC.3ACC.2ACC.1ACC.0PSW 程序程序状态字状态字D7D6D5D4D3D2D1D0D0H00HCYACF0RS1RS0OV-PIP中断优先中断优先寄存器寄存器BFBEBDBCBBBAB9B8B8H*00000B-PSPT1PX1PT0PX0P3 P3口口B7B6B5B4B3B2B1B0B0HFFHP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IE中断允许中断允许寄存器寄存器AFAEADACABAAA9A8A8H0*00000BEA-ESET1EX1ET0EX0P2 P2口口A7A6A5A4A3A2A1A0A0HFFHP2.7P

34、2.6P2.5P2.4P2.3P2.2P2.1P2.0SCON串行口控串行口控制寄存器制寄存器9F9E9D9C9B9A999898H00HSM0SM1SM2RENTB8RB8TIRIP1 P1口口979695949392919090HFFHP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TCON定时器控定时器控制寄存器制寄存器8F8E8D8C8B8A898888H00HTF1TR1TF0TR0IE1IT1IE0IT0P0P0口口878685848382818080HFFHP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0例:MOV C , 3AH101110012

35、7H执行完结果 C=020H这个位在哪个单元?可位寻址的特殊功能寄存器位的表示方法可位寻址的特殊功能寄存器位的表示方法 直接使用位地址表示方法直接使用位地址表示方法 单元地址加位的表示方法单元地址加位的表示方法 特殊功能寄存器符号加位的表示方法特殊功能寄存器符号加位的表示方法 位名称的表示方法,特殊功能寄存器位名称的表示方法,特殊功能寄存器 中的一些寻址位是有名称的。中的一些寻址位是有名称的。例:特殊功能寄存器的例:特殊功能寄存器的PSW.5位位SETB D5H SETB D0.5 SETB F0 SETB PSW.57、相对寻址:、相对寻址:相对寻址:相对寻址: 为解决程序转移而专门设置的,

36、为转为解决程序转移而专门设置的,为转移指令所采用移指令所采用 说明:说明:操作码之后提供一个字节的偏移量,该偏操作码之后提供一个字节的偏移量,该偏移量与移量与1616位的程序计数器位的程序计数器PCPC中内容的基地址一起中内容的基地址一起形成操作数的有效地址。偏移量形成操作数的有效地址。偏移量relrel为符号数为符号数例例 JZ relJZ rel 目的地址=转移指令地址+转移指令字节数+rel 或目的地址=转移指令的下一条指令地址+rel 例如:例如:SJMP relSJMP rel ;(80H(80H、54H54H)54H54H2002H2002H累加器累加器A APCPC2002H20

37、02H+ 54H+ 54H2056H2056H 54H80H程序存程序存储器储器ROMROM2056H操作码操作码偏移量偏移量2000H2002H(LOOP1)例:例: 80H 38H SJMP rel 若该指令所在地址为若该指令所在地址为0100H,即指令执行前即指令执行前(PC)=0100H; 则执行指令后:则执行指令后: (PC)=0100H+2+38H=013AH,即下一条即下一条指令取自指令取自013AH单元。单元。寻址方式总结MOV P1, AMOV P1, R4立即数寻址立即数寻址MOV A, #55HMOV Rn, #01H寄存器寻址寄存器寻址MOVC A, A+DPTRMOV

38、C A, A+PC变址寻址变址寻址MOV A, 55HMOV Rn, 20H直接寻址直接寻址MOV A, R0MOVX A, DPTR寄存器间接寻址寄存器间接寻址MOV C, D5HMOV C, PSW.5位寻址位寻址JC 23HSJMP 54HSJMP MAIN相对寻址相对寻址MCS-51的寻址方式和寻址空间表序号寻址方式使用的变量寻址空间1立即寻址#50H*程序存储器2直接寻址30H片内RAM低128位B,特殊功能寄存器SFR3寄存器寻址R0R7,A,B, DPTR,CY片内RAM4寄存器间接寻址RO,R1,SP片内RAMR0,R1,DPTR片外RAM5相对寻址PC+rel程序存储器6变址

39、寻址A+PC,A+DPTR程序存储器7位寻址D5HF0D0H.5PSW.5片内RAM中的位寻址区,可以位寻址的特殊功能寄存器位例题 (1)寻址比较nMOV P1, #20HnMOV P1, 20HnMOV P1, R0nMOV P1,R01)直接将20H这个数送P1口2)地址是内存20H3)地址是寄存器R04)地址在寄存器R0内(2)已知片外ROM的0302H单元中有一常数x,现欲把它取到累加器A,请编出相应程序,并进行必要的分析。解:解:根据变址寻址特点,基地址显然应取0300H,地址偏移量为02H,相应程序为: MOV DPTR , #0300H ; DPTR-0300HMOV A, #0

40、2H ; A-02HMOVC A, A+DPTR ; A-x单片机指令分类介绍nMCS-51单片机指令系统共有基本指令111条,分为类数据传送类指令数据传送类指令(29)数据运算类指令数据运算类指令(24)逻辑操作类指令逻辑操作类指令(24)程序控制类指令程序控制类指令(17)布尔操作类指令布尔操作类指令(17)分类n从指令字节数划分:(单字节指令(49条),双字节指令(45条),三字节指令(17条))n从指令执行时间上划分:(单周期指令(64条),双周期指令(45条),四周期指令(条(乘,除指令)111种基本指令共派生出255种指令代码,代码范围是00H-FFH(其中A5H无定义)例如:MO

41、V A, Rn(n=0-7,代码 E8H-EFH)3-3 数据传送类指令数据传送类指令(29)nMCS-51单片机中,数据传送是最基本和最主要的操作,数据传送可以在片内RAM和SFR内进行,也可在累加器A和片外存储器之间进行n数据传送n数据交换n数据堆栈数据传送指令通用格式: MOV ,源操作数可以是:累加器A,通用寄存器Rn,直接地址direct,间接地址和立即数.目的作数可以是:累加器A,通用寄存器Rn,直接地址direct,间接地址.数据传送指令1.内部内部RAM是数据传送最为频繁的部分是数据传送最为频繁的部分,这其这其中有寄存器中有寄存器,累加器累加器,RAM单元以及特殊功能单元以及特

42、殊功能寄存器之间的寄存器之间的相互相互数据传送数据传送. 15条条2.以以DPTR为目的地址传送指令:为目的地址传送指令: 1条条3.程序存储器访问类指令:程序存储器访问类指令: 2条条4.片外数据存储器访问类指令:片外数据存储器访问类指令:4条条5.数据交换类指令:数据交换类指令: 5条条6.堆栈操作类指令:堆栈操作类指令: 2条条3.3.1.内部内部RAM数据(含SFR)传送指令:一般传送指令(1)以累加器A为目的操作数类指令(4条) n MOV A, direct ; (direct)An MOV A, #data ; #dataAn MOV A, Rn ; (Rn)An MOV A,

43、Ri ; (Ri)A 这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:n已知: R0=40H,(40H)=11H, 试问如下指令执行后累加器A中内容是什么?nMOV A, R0 解:解:指令执行后的操作结果是:A=11H。(2)以寄存器Rn为目的操作数的指令(3条)n MOV Rn, direct ;directRnn MOV Rn, #data ;#dataRnn MOV Rn, A ;ARn这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:MOV Rn, Rn = MOV A, R3MOV R4

44、,A n已知 (40H)=30H, 试问如下指令执行后累加器A,R1,R2,R7单元中内容是什么? MOV A, #80H MOV R1, A MOV R2,#40H MOV R7,40H 解解:指令执行后的操作结果是:A=80H,R1=80H,R2=40H,R7=30H。 (3)以直接地址为目的操作数的指令(5条)n MOV direct2, direct1 ; direct1direct2n MOV direct, #data ; #datadirectn MOV direct, A ; Adirectn MOV direct, Rn ; Rndirectn MOV direct, Ri

45、;(Ri)direct 这组指令的功能是把源操作数指定的内容送到由直接地址direct所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:n已知 R0=50H,(50H)=10H, 试问如下指令执行后(35H)单元中内容是什么? MOV 35H, R0 解:解:指令执行后的结果是:(35H)=10H,这一操作也可用指令MOV 35H, 50H 来完成。(4)以间接地址为目的操作数的指令(3条)n MOV Ri, direct ; direct(Ri)n MOV Ri, #data ; #data(Ri)n MOV Ri, A ; A(Ri)这组指令的功能是把源操作数指定的内容送

46、到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:n已知R1=32H,(30H)=AAH,(31H)=BBH,(32H)=CCH,试问如下指令执行后累加器A、50H、R6、32H和P1口中的内容是什么? MOV A, 30H MOV 50H, A MOV R6, 31H MOV R1, 30H MOV P1, 32H 解:解:上述指令执行后的结果为:A=AAH,(50H)=AAH,R6=BBH,(32H)=AAH,P1=AAH。MOV指令示意图-一般传送指令传送数据关系一般传送指令传送数据关系指令编程中的注意几点1)每条指令由厂家提供给用户,因而合法。用户只能使用,不能任

47、意制造非法指令 MOV Rn, Ri MOV #data, A 2)以累加器A为目的寄存器传送指令会影响PSW中的奇偶标志位,其余传送指令对所有标志位均无影响。3)学会正确估计指令字节数4)设计合理的编程方法5)注意给程序正确注释 MOV A, 30H ; (30H) A例:30H与40H地址单元数据交换MOV A, 30H ; (30H)-AMOV 30H, 40H ; (40H)-(30H)MOV 40H, A ; A-(40H)3.3.2以DPTR为目的操作数(1条) n MOV DPTR, #data16 ;#data DPTR这条指令的功能是把16位常数送入数据指针寄存器。唯一一条1

48、6位数据传送指令 DPHDPL3字节,双周期3.3.3外部RAM的字节传送指令(4条) MOVX A, Ri ; (Ri)-A MOVX Ri, A ; A-(Ri) MOVX A, DPTR ;(DPTR)-A MOVX DPTR, A ; A-(DPTR)访问外部RAM的低地址区,地址范围为0000H-00FFH访问外部RAM的64K字节区,地址范围为0000H-FFFFH 将立即数23H送入外部RAM的0FFFH单元。 解解:MOV A, #23H MOV DPTR, #0FFFH MOVX DPTR, A 另解:MOV A, #23H MOV P2, #0FH MOV R0, #FFH

49、 MOVX R0 A3.3.4访问程序存储器指令(2条) MOVC A, A+DPTR ; (A+DPTR)-A MOVC A, A+PC ; (A+PC)-A程序存储器只能读,不能写,因而只有两条读指令。这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:外部数据存储器及程序存储器的传送指令 外部数据存储器及程序存储器只能和累加器A进行数据传送,而不能与内部RAM和SFR进行数据传送. 3.3.5堆栈操作指令(2条)n堆栈指令 内部RAM低128个单元或专用寄存器内容送栈顶单元PUSH direct ; SP+1-SP, (direct)-(SP)n出栈指令 栈顶单

50、元内容送内部RAM低128个单元或专用寄存器POP direct ; (SP)-direct, SP-1-SP以SP为间址寄存器的间接寻址方式,SP隐含 MOV A, #90H MOV SP, #15H PUSH ACC ; SP=16H,(16H)=90H (这里累加器A为直接寻址,写作ACC) POP 20H ; (20H)=90H, SP=15H3.3.6交换指令(5条) n (1)字节交换指令(3条) 这三条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。 XCH A, Rn ; A Rn XCH A, Ri ; A (Ri) XCH A, direct ; A direc

51、tXCH指令 n 已知 A=FFH, R1=30H,(30H)=87H,试问执行如下指令后A和(30H)单元中的内容是什么? XCH A, R1n解:解:指令执行后的结果是: A=87H, (30H)=FFH (2)低半字节交换指令(1条) n XCHD A, Ri ; A3-0 (Ri)3-0 累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换.已知A=34H, (50H)=96H,试问执行如下指令后A和(50H)单元中的内容是什么? MOV R1, #50H XCHD A, R1解解:指令执行后的结果为:A=36H, (50H)=94H,操作如图所示 (3)累加器A的高、低半字节交换

52、(1条) nSWAP A ;(A3-0)(A7-4) 累加器中的内容高低半字节互换. A=0FH, 执行SWAP A 后,A=F0H 注意:累加器与片内注意:累加器与片内RAM单元内容相互交换单元内容相互交换例:外部RAM的20H单元一个数x与内部RAM20H单元的一个数y的交换MOV R1 , #20H ; 20H-R1MOVX A , R1 ; x-AXCH A, R1 ; x-(20H), y-AMOVX R1 , A ; y-20H(片外RAM)数据传送类指令汇总及说明数据传送类指令汇总及说明 1)同样的数据传送可以使用不同的寻址方式实现 MOV 26H,A MOV R0,#26H M

53、OV R0,A MOV 26H,ACC MOV 26H,0E0H; ACC字节地址 PUSH ACC POP 26H 2)A和ACC属不同的寻址方式,指令字节数不同MOV 26H,A;寄存器寻址MOV 26H,ACC;直接寻址 0E0H实验二.数据传送.5n ORG 0000HnSJMPMAINnORG0030HnMAIN: MOVSP,#60HnMOVA,#12HnMOVR0,#50HnMOV30H,#03HnMOVDPTR,#2200HnMOVXDPTR,AnMOVR0,AnXCHA,30HnPUSHDPHnPUSHDPLnMOVDPTR,#2400HnMOVCA, A+DPTRnPOPD

54、PLnPOPDPHnMOV30H,AnXCHDA,R0nMOVXA,DPTRnXCHA,R0nSJMP$nORG2400HnDB11H,22H,33H,44HnEND; SP 0 x60 ; A0 x12; R0 0 x50 ; 30H 0 x03 ; DPTR 0 x2200 ; 2200H 0 x12 ; 50H 0 x12 ; A 0 x03, 30H0 x12 ; SP 0 x61, 61H0 x22 ; SP 0 x62, 62H0 x00 ; DPTR 0 x2400 ; A 0 x44 ; DPL0 x00, SP 0 x61, ; DPH0 x22, SP 0 x60 , DP

55、TR0 x2200; 30H0 x44 ; A 0 x42, 50H0 x14 ; A 0 x12 ; A 0 x14, 50H0 x12 3.4 算术运算类指令算术运算类指令(24) 使用的助记符为:使用的助记符为:ADD、ADDC、INC、DA、SUBB、DEC、MUL、DIV等八种。等八种。除了加除了加1和减和减1指令之外,算术运算结果将使进位指令之外,算术运算结果将使进位标志(标志(CY),半进位标志(),半进位标志(AC)、溢出标志()、溢出标志(OV)置位或复位,因此会影响置位或复位,因此会影响PSWPSW。 8位二进制无符号数的操作分类一、一、 加法指令:加法指令: 8条条二、二

56、、 减法指令:减法指令: 4条条三、三、 增减量指令:增减量指令: 9条条四、四、 其他算术操作指令:其他算术操作指令: 3条条3.4.1不带进位位加法指令ADDADD A,Rn;A(A)+(Rn)ADD A,direct;A(A)+(direct)ADD A,Ri;A(A)+(Ri)ADD A,#data;A(A)+ data助记符 ADDn加法运算影响PSW位的状态。如果位3有进位,则辅助进位标志AC置1,否则AC清0;如果位7有进位,则进位标志CY置1,否则CY清0。n两个带符号数相加,还有溢出的问题。如运算结果使溢出标志OV置1,则表示有溢出出现。n这类指令将影响标志位这类指令将影响标

57、志位AC、CY、OV、P。1 0 0 1 0 0 1 11 0 1 0 1 0 0 01 0 0 1 1 1 0 1 1CPCSOV=CPOCS=1 0=1+ O 例如:(A)=C2H,(R0)=A9H 执行ADD A,R0 指令运算结果(A)=6BH,(AC)=0,(CY)=1,(OV)=1。若C2H和A9H是两个无符号数,则连进位在内的结果为16BH,运算是正确的。若C2H和A9H是两个带符号数,则由于有溢出而表明结果是错误的,因为两个负数相加不可能得到正数的和。试分析MCS-51单片机执行如下指令后累加器A和PSW中各标志位的变化状况。 MOV A, #19H ADD A, #66H其中

58、:CP是最高位的进位位,CS是次高位的进位位。 单片机在加法时确定PSW中各标志位的方法是:由于CP=0,因此Cy=0;由于低4位向高4位无进位位,因此AC=0;溢出标志位OV=CP CS=0 0=0,表示加法运算没有产生溢出,即PSW各位为: CyACF0RS1RS0OV-P00000001其中,F0,RS1,RS0和“-”位以0计。3.4.3带进位加法指令组带进位加法指令组 ADDC ADDC A,Rn;A(A)+(Rn)+(CY) ADDC A,direct ;A(A)+(direct)+(CY)ADDC A,Ri;A(A)+(Ri)+(CY)ADDC A,#data ;A(A)+ da

59、ta +(CY) 已知:A=85H、R0=30H、(30H)=11H、(31H)=0FFH和Cy=1。试问CPU执行如下指令后累加器A和Cy中的值是多少? a. ADDC A, R0 b. ADDC A, 31H c. ADDC A, R0 d. ADDC A, #85H解:解:指令执行后的结果为: a. A=B6H, Cy=0 b. A=85H, Cy=1 c. A=97H, Cy=0 d. A=0BH, Cy=1带借位减法指令组带借位减法指令组 SUBB A,Rn ;A(A)(Rn)(CY)SUBB A,direct ;A(A)(direct)(CY)SUBB A,Ri ;A(A)(Ri)

60、 (CY)SUBB A,#data ;A(A)data (CY)使用此种指令时注意如下问题:n在单片机内部,减法操作实际上是在控制器控制下采用补码加法来实现的。但在实际应用中,若要判定减法的操作结果,则可按二进制减法法则进行。n无论相减的两数是无符号数还是有符号数,减法操作总是按带符号二进制数进行的,并能对PSW中各标志位产生影响。产生各标志位的法则是,若最高位在减法有借位,则Cy=1,否则Cy=0;若低4位在减法时向高4位有借位,则AC=1,否则AC=0;若减法时最高位有借位而次高位无借位或最高位无借位而次高位有借位,则OV=1,否则OV=0;奇偶校验标志位P和加法时的取值相同。n减法运算影

温馨提示

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

评论

0/150

提交评论