第3章-80C51单片机的寻址方式和指令系统《单片机原理与C51基础》课件.ppt
-
资源ID:73605383
资源大小:1.73MB
全文页数:173页
- 资源格式: PPT
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
第3章-80C51单片机的寻址方式和指令系统《单片机原理与C51基础》课件.ppt
第第3 3章章 80C51 80C51单片机的寻址方式和指令系统单片机的寻址方式和指令系统第第3 3章章 目录目录n3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.2 80C513.2 80C51的寻址方式的寻址方式n3.3 3.3 数据传送类指令数据传送类指令n3.4 3.4 算术运算类指令算术运算类指令n3.5 3.5 逻辑运算及移位类指令逻辑运算及移位类指令n3.6 3.6 控制转移类指令控制转移类指令n3.7 3.7 位操作类指令位操作类指令80C5180C51单片机的寻址方式和指令系统单片机的寻址方式和指令系统n机器指令机器指令:是指单片机能直接识别和执行的指令是二进制编码是指单片机能直接识别和执行的指令是二进制编码(书写时常采书写时常采用十六进制的形式用十六进制的形式)指令,称为机器指令,也称为机器语言。机指令,称为机器指令,也称为机器语言。机器语言难编写、难读懂、难查错和难交流。器语言难编写、难读懂、难查错和难交流。n符号指令符号指令:为了编写程序的方便,人们采用便于记忆的符号(助记符)来表为了编写程序的方便,人们采用便于记忆的符号(助记符)来表示机器指令,从而形成了所谓的符号指令,它是机器指令的符号示机器指令,从而形成了所谓的符号指令,它是机器指令的符号表示,所以它与机器指令一一对应。符号指令必须转换成机器指表示,所以它与机器指令一一对应。符号指令必须转换成机器指令后,单片机才能识别和执行,汇编语言就是典型的符号指令。令后,单片机才能识别和执行,汇编语言就是典型的符号指令。80C5180C51单片机的寻址方式和指令系统单片机的寻址方式和指令系统n单片机常用的编程语言及其关系单片机常用的编程语言及其关系:单片机主要是采用汇编语言和C语言,其各自有自己的指令体系。汇编语言程序编译后代码效率高,但不同机型之间程序不能互相移植。早期C语言编制的程序编译成二进制代码后,编译效率低,占用ROM空间过大,在业界应用较少。随着高效率C语言编译器的成功开发,目前用C语言编制的程序其编译后的代码效率只比直接使用汇编语言低20%左右。而其高级语言所具有的可读性好、可移植性强的优势受到了开发人员的认可。3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号3.1.1 汇编语言指令格式3.1.2 机器码的三种格式3.1.3 指令中常用符号说明3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.1 3.1.1 汇编语言指令格式汇编语言指令格式 一条完整的80C51系列单片机汇编语言指令通常由标号、操作码、操作数(一般包括目的操作数和源操作数)及指令的注释几个字段构成。指令格式如下:标号标号:操作数操作数 ,操作数,操作数;注释;注释(注:在一条指令中,方括号中的内容可有可无,尖括号中的内容必须有。由指令格式可见,操作码是指令的核心,不可缺少。)3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.1 3.1.1 汇编语言指令格式汇编语言指令格式标号表示与标号同一行指令的起始地址,是一种符号地址。标号可以由18个字符组成,第一个字符必须是字母,其余字符可以是字母、数字或其他特定符号,标号后跟分隔符“:”。操作码指令的助记符,规定了指令所能完成的操作功能。操作数指出了指令的操作对象,操作数可以是一个具体的数据,也可以是存放数据的单元地址,还可以是符号常量或符号地址等。操作码与操作数之间必须用空格分隔。在一条指令中可能有多个操作数,操作数与操作数之间用逗号“,”分隔。注释为了方便阅读而添加的解释说明性的文字,用分号“;”开头。3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.2 3.1.2 机器码的三种格式:机器码的三种格式:1、单字节指令(49条):两种编码格式8位编码只表示一个操作码的编码,其格式为:例如:INC A 该汇编指令的机器码为:0000 0100B其十六进制数为04H,操作数(累加器A)隐含在操作码中。注意:在汇编语言指令中,“A”代表累加器,而用“ACC”代表累加器的地址E0H。3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.2 3.1.2 机器码的三种格式:机器码的三种格式:1、单字节指令(49条):两种编码格式8位编码中包含操作码和寄存器编码,其格式为:这类指令中高5位表示操作码,低3位rrr为存放操作数的寄存器Rn(n=0,7)的编码。例如:MOV A,R0。该指令的编码为:1110 1000B其十六进制表示为E8H,低三位000为R0的编码。3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.2 3.1.2 机器码的三种格式:机器码的三种格式:3、三字节指令(17条):三字节指令为24位编码,其格式为:第一个字节表示操作码,后两个字节为参与操作的操作数data或数据所在地址direct。例如:MOV 20H,#50H。该指令的3个字节编码为0111 0101B,0010 0000B,0101 0000B。其十六进制表示为75H,20H,50H。第一个字节存放75H这个操作码,第二个字节存放目的地址20H,第三个字节存放源操作数50H3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.3 3.1.3 指令中常用符号说明指令中常用符号说明在描述80C51系列单片机指令系统的功能时,经常使用的符号及意义如下:rel 补码形式表示的8位地址偏移量,其值的范围:128127;bit 片内RAM位寻址区或可位寻址的特殊功能寄存器的位地 址;间接寻址或变址寻址的前缀标志;C 进位标志位,也称为位累加器;加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;(X)由X指定的寄存器或地址单元中的内容;(X)由X寄存器的内容作为地址的存储单元的内容;3.1 3.1 汇编语言指令格式及其常用符号汇编语言指令格式及其常用符号n3.1.3 3.1.3 指令中常用符号说明指令中常用符号说明在描述80C51系列单片机指令系统的功能时,经常使用的符号及意义如下:$:本条指令的起始地址;指令操作流程,将箭头右边的内容送到箭头左边的单元中;数据交换。3.2 80C513.2 80C51的寻址方式的寻址方式 n寻址:寻找操作数地址或指令转移的目标地址。寻址:寻找操作数地址或指令转移的目标地址。n寻址方式:是指寻找操作数或指令目标地址的方式就是寻址方式。寻址方式:是指寻找操作数或指令目标地址的方式就是寻址方式。n寻址方式总体上分为两大类:寻址方式总体上分为两大类:一是操作数的寻址一是操作数的寻址二是跳转、调用等指令所涉及的跳转目标地址和调用程序的首地二是跳转、调用等指令所涉及的跳转目标地址和调用程序的首地址的寻址。址的寻址。3.2 80C513.2 80C51的寻址方式的寻址方式 n80C5180C51单片机的寻址方式有七种单片机的寻址方式有七种:1.立即数寻址2.直接寻址3.寄存器寻址4.寄存器间接寻址5.基址变址寻址6.相对寻址7.位寻址3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.13.2.1立即寻址立即寻址 立即寻址就是操作数在指令中直接给出的寻址方式。通常把出现在指令中的操作数称为立即数,为了与直接寻址指令中的直接地址相区别,指令中需要在直接给出的具体数据前面加“#”标志。【例3-1】执行指令:MOV A,#30H 后累加器A的值是多少?解:执行指令如图3-1 所示,(A)=30H。汇编指令MOV A,#30H编译成机器码后为:74H,30H,其中30H就是立即数,该指令功能是将30H这个数本身送入累加器A中,执行完这条指令后累加器A中的值为30H,即(A)=30H。立即寻址所对应的存储空间为ROM空间(立即数在ROM中存放)。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.13.2.1立即寻址立即寻址 3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.23.2.2立即寻址立即寻址 在指令中直接给出操作数存放在内部RAM的地址,或直接给出特殊功能寄存器的地址或符号,这就是直接寻址方式。此时,指令的操作数部分就是操作数的地址。【例3-2】已知内部RAM(30H)=58H,执行指令“MOV A,30H”后,(A)=?解:指令执行过程如图3-2所示,结果:(A)=58H。该指令在ROM中的机器码为:E5H、30H,其中30H表示直接地址,该指令功能是把内部RAM地址为30H单元中的操作数58H传送给累加器A,累加器原先的数值被覆盖。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.23.2.2立即寻址立即寻址直接寻址方式可访问以下存储空间:(1)内部RAM低128个字节单元,在指令中直接地址以单元地址的形式给出;(2)特殊功能寄存器。对于特殊功能寄存器,其直接地址既可以写成特殊功能寄存器的直接地址形式,如指令:MOV A,90H中,90H是特殊功能寄存器P1的直接地址形式;更常采用特殊功能寄存器的符号名称来表示,如指令:MOV A,P1中,P1是特殊功能寄存器的符号名称,也是符号地址,在指令中符号“P1”与地址“90H”是等同的。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.3 3.2.3 寄存器寻址寄存器寻址 寄存器寻址就是以寄存器的内容作为操作数。在指令的操作数位置上指定了寄存器就能得到操作数。【例3-3】如(RO)=60H,则执行MOV A,R0 指令后,(A)=?解:指令执行过程如图3-3,结果:(A)=60H。指令在ROM中的机器码为E8H,指令对应的机器码是:E8H=1110 1000B,二进制的后三位000就是隐含的R0寄存器的编码,如果是R7其编码为111。由于寄存器在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.3 3.2.3 寄存器寻址寄存器寻址 3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址 以寄存器中的内容作为RAM地址,该地址中的内容才是操作数,这种寻址方式称为寄存器间接寻址。寄存器名称前加“”标志来表示寄存器间接寻址。【例3-4】(RO)=60H,(60H)=32H,则执行MOV A,R0 指令后,(A)=?,(RO)=?解:指令执行过程如图3-4 结果:(A)=32H,(RO)=60H。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址 以寄存器中的内容作为RAM地址,该地址中的内容才是操作数,这种寻址方式称为寄存器间接寻址。寄存器名称前加“”标志来表示寄存器间接寻址。【例3-4】(RO)=60H,(60H)=32H,则执行MOV A,R0 指令后,(A)=?,(RO)=?解:指令执行过程如图3-4 结果:(A)=32H,(RO)=60H。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址 80C51系列单片机规定只能用寄存器R0、R1、DPTR作为间接寻址的寄存器。间接寻址可以访问的存储空间为内部RAM和外部RAM。(1)内部RAM的低128个单元采用R0、R1作为间址寄存器,在指令中表现为R0、R1的形式;(2)外部RAM的寄存器间接寻址有两种形式:一是采用R0、R1作为间址寄存器,指令中表现为R0、R1的形式,可寻址外部RAM的低256个单元,即可访问地址范围为0000H00FFH的单元;二是采用16位的DPTR作为间址寄存器,指令中表现为DPTR的形式,可寻址外部RAM整个64 KB个地址空间,地址范围为0000HFFFFH的单元。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.5 3.2.5 变址寻址变址寻址变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器(存放地址偏移量)并以两者内容相加形成的16位地址作为操作数地址。变址寻址用于两种情况:(1)用于对ROM(包含内外ROM)的数据进行寻址 如:MOVC A,A+DPTR;A(A)+(DPTR)MOVC A,A+PC;A(A)+(PC)(2)用于跳转指令,如JMP A+DPTR。功能:将累加器A的内容与数据指针DPTR的内容相加形成指令跳转的目标地址,从而使程序转移到该地址运行。注意:变址寻址所找到的地址是ROM空间的地址,指令中表现为A+DPTR,A+PC的形式。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.5 3.2.5 变址寻址变址寻址【例3-5】若(A)03H,(DPH)=20H,(DPL)=00H,即(DPTR)=2000H,ROM的(2003H)=66H。执行指令MOVC A,A+DPTR后,(A)=?解:指令执行过程如图3-5,结果:(A)=66H,(RO)=60H。该指令中累加器A的值和DPTR的值相加所得2003H为操作数所在ROM单元的地址,该地址中的数据66H才是要找的操作数,该指令将66H覆盖累加器A原来的值。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.5 3.2.5 变址寻址变址寻址3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.6 3.2.6 相对寻址相对寻址相对寻址就是将程序计数器PC的当前值(正在执行指令的下一条指令的首地址)与指令中给出的偏移量rel相加,其结果作为转移地址送入PC中。相对寻址只在相对转移指令中使用,指令中给出的操作数是相对地址偏移量rel,这种寻址方式通过修改PC的值,可实现程序的分支转移。rel是一个带符号的8位二进制数,编译后以补码形式存放于ROM中,取值范围是128+127,故rel给出了相对于PC当前值的跳转范围。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.6 3.2.6 相对寻址相对寻址【例3-6】设指令SJMP 54H存放在ROM内以2000H起始的单元,求执行本指令后程序将跳转到何处执行?解:这是无条件相对转移指令,是双字节指令,指令代码为80H、54H,其中80H是该指令的操作码,54H是偏移量。转移地址为2000H+02H+54H2056H。故指令执行后,PC的值变为2056H,程序的执行顺序发生了转移,指令执行过程如图3-6所示。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.6 3.2.6 相对寻址相对寻址3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.7 3.2.7 位寻址位寻址80C51系列单片机有位处理功能,对位地址中的内容进行操作的寻址方式称为位寻址。相应的在指令系统中有一类位操作指令,它们采用位寻址方式,在指令的操作数位置上直接给出位地址。【例3-7】位地址为07H单元中的值为1,CY=0,执行MOV C,07H指令后,CY=?解:指令的执行过程如图3-7所示。该指令的功能是把位地址07H中的值传送到位累加器CY中。80C51单片机内部RAM有两个区域可以位寻址:一个是字节地址为20H2FH单元的128 位另一个是字节地址能被8整除的特殊功能寄存器的相应位。3.2 80C513.2 80C51的寻址方式的寻址方式 n3.2.7 3.2.7 位寻址位寻址3.2 80C513.2 80C51的寻址方式的寻址方式 3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)3.3.1 内部RAM数据传送指令 3.3.2 访问外部RAM的数据传送指令MOVX 3.3.3 读取ROM中常数表的查表指令MOVC3.3.4 数据交换指令 3.3.5 堆栈操作指令3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n 数据传送类指令是最常用、最基本的一类指令。数据传送类指令是最常用、最基本的一类指令。n数据传送类指令的一般功能是把源操作数传送到目的操作数,指数据传送类指令的一般功能是把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数被源操作数所代替。令执行后,源操作数不变,目的操作数被源操作数所代替。这类指令主要用于数据的传送、保存及交换等场合。这类指令主要用于数据的传送、保存及交换等场合。在在80C5180C51系列单片机的指令系统中,各类数据传送指令共有系列单片机的指令系统中,各类数据传送指令共有2929条。条。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 内部RAM的数据传送类指令共16条,包括累加器、寄存器、特殊功能寄存器、RAM单元之间的相互数据传送。1、以累加器A为目的操作数的数据传送指令 MOV A,#data ;Adata MOV A,direct ;A(direct)MOV A,Rn ;A(Rn)MOV A,Ri ;A(Ri)3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 这组指令的功能:将源操作数所指定的内容送入累加器A中。源操作数可以采用立即寻址、直接寻址、寄存器寻址和寄存器间接寻址4种寻址方式。80C51多数数据的处理都要经过累加器A完成,所以以累加器A为目的操作数的指令是指令系统中使用最为频繁的指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 【例3-8】若(RO)=20H,(20H)=66H,试分别求解每条指令执行后,(A)=?MOV A,#20H ;A20H MOV A,20H ;A(20H)MOV A,R0 ;A(R0)MOV A,RO ;A(RO)解:执行每条指令后(A)=20H(A)=66H(A)=20H (A)=66H3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 2、以寄存器Rn为目的操作数的数据传送指令 MOV Rn,A ;Rn(A)MOV Rn,#data ;Rndata MOV Rn,direct ;Rn(direct)这组指令的功能:将源操作数所指定的内容送到当前工作寄存器组R0R7中的某个寄存器中。源操作数可以采用累加器A(属于寄存器寻址)、立即寻址和直接寻址。注意:没有“MOV Rn,Rn”指令,也没有“MOV Rn,Ri”指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 【例3-9】已知(A)=50H,(R1)=10H,(R2)=20H,(R3)=30H,(30H)=4FH,求解每条指令的执行结果。MOV R1,A ;R1(A)MOV R2,30H ;R2(30H)MOV R3,#85H ;R385H 解:执行后 (R1)=50H;(R2)=4FH;(R3)=85H。第条指令的执行过程见图3-8。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 3、以直接地址为目的操作数的数据传送指令 MOV direct,A ;direct(A)MOV direct,#data ;directdata MOV directl,direct2 ;direct1(direct2)MOV direct,Rn ;direct(Rn)MOV direct,Ri ;direct(Ri)这组指令的功能:将源操作数所指出的内容送入由直接地址direct所指定的片内存储单元。源操作数可以采用寄存器寻址、立即寻址、直接寻址和寄存器间接寻址。注意:“MOV directl,direct2”指令在译成机器码时,源地址在前,目的地址在后。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 【例3-10】若(A)=36H,(50H)=22H,(R0)=60H,(60H)=72H,求解每条指令执行后,(40H)?MOV 40H,A ;40H(A)MOV 40H,#50H ;40H50HMOV 40H,50H ;40H(50H)MOV 40H,R0 ;40H(R0)MOV 40H,R0 ;(40H)(R0)3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 解:每条指令的执行结果分别为:(40H)36H;(40H)50H;(40H)22H;(40H)60H;(40H)=72H。第条指令的执行过程如图3-9所示。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 4、以间接地址Ri为目的操作数的数据传送指令 MOV Ri,A ;(Ri)(A)MOV Ri,#data ;(Ri)data MOV Ri,direct ;(Ri)(direct)这组指令的功能:把源操作数所指定的内容送入以R0或R1为地址指针的片内RAM单元中。源操作数可以采用寄存器寻址、立即寻址和直接寻址3种方式。注意:没有“MOV Ri,Rn”指令和“MOV Ri,Ri”指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 【例3-11】已知(R1)=60H,(A)=20H,(30H)=22H,试分别求解每条指令的执行结果。MOV R1,A ;(R1)(A)MOV R1,#26H ;(R1)26H MOV R1,30H ;(R1)(30H)解:本条指令用源操作数的值修改的寄存器的值作为地址单元中的内容,寄存器的值不变。第三条指令的执行过程如图3-10所示。(R1)=60H,(60H)20H;(R1)=60H,(60H)26H;(R1)=60H,(60H)22H。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 5以DPTR为目的操作数的数据传送指令 MOV DPTR,#data16 ;DPTRdata16 这是80C51系列单片机指令系统唯一的一条16位传送指令,其功能是将外部存储器(RAM或ROM)某单元地址作为立即数送到DPTR中,立即数的高8位送DPH,低8位送DPL。注意:该指令在译成机器码时,16位立即数其高8位在前,低8位在后。在使用上述各类传送指令时,需注意以下几点:3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 5以DPTR为目的操作数的数据传送指令 (1)要区分各种寻址方式的含义,正确传送数据。【例3-12】若(R0)=30H,(30H)=50H时,注意以下指令的执行结果:MOV A,RO ;(A)=30H MOV A,R0 ;(A)=(30H)=50HMOV A,30H ;(A)=(30H)=50H MOV A,#30H ;(A)=30H(2)所有传送指令都不影响标志位,这里所说的标志位是指CY、AC和OV,涉及累加器A的将影响奇偶标志位P。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 5以DPTR为目的操作数的数据传送指令 (3)估算指令的字节数。凡是指令中既不包含直接地址,又不包含8位立即数的指令均为一字节指令;若指令中包含一个直接地址或8位立即数,指令字节数为2,若包含两个这样的操作数,则指令字节数为3。如:MOV A,R0 ;1字节 MOV A,direct ;2字节 MOV direct,#data ;3字节 MOV DPTR,#datal16 ;3字节3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.2 3.3.2 访问外部访问外部RAMRAM的数据传送指令的数据传送指令MOVXMOVX1、单片机读取片外RAM或I/O口指令MOVX A,DPTR ;A(DPTR)MOVX A,Ri ;A(Ri)第一条指令的功能是单片机读取以DPTR的值作为地址的外部RAM单元中的内容或I/O口状态。即单片机执行从64KB外RAM或I/O口的“读入”操作。第二条指令的功能是单片机读取以R0或R1的值作为地址的256B外部RAM单元中的内容或I/O口状态。即单片机执行从外RAM或I/O口的“读入”操作。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.2 3.3.2 访问外部访问外部RAMRAM的数据传送指令的数据传送指令MOVXMOVX2、单片机写片外RAM或I/O口指令 MOVX DPTR,A ;(DPTR)(A)MOVX Ri,A ;(Ri)(A)第一条指令是将累加器A中的内容传送给以DPTR值作为地址的外部RAM单元或I/O端口,即单片机执行向外RAM或I/O口的“写出”操作。第二条指令是将累加器A中的内容传送给以R0、R1值作为地址的外部RAM单元或I/O端口,即单片机执行向外RAM或I/O口的“写出”操作。注意:片外扩展的I/O接口进行数据的读、写没有专门的指令,只能与外部RAM共用这四条指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.2 3.3.2 访问外部访问外部RAMRAM的数据传送指令的数据传送指令MOVXMOVX2、单片机写片外RAM或I/O口指令【例3-13】试编程,将片外RAM的2000H单元内容送入片外RAM的20H单元中。解:片外RAM与片外RAM之间不能直接传送,需通过累加器A;另外,当片外RAM地址值大于0FFH时,不能用R0和R1作为间址寄存器,需用DPTR作为间址寄存器。编程如下:MOV DPTR,#2000H ;源数据地址送DPTRMOVX A,DPTR ;从外部RAM中取数送AMOV RO,#20H ;目的地址送DPTRMOVX R0,A ;A中内容送外部RAM3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC 通常ROM中是用来存放供单片机CPU执行的二(或十六)进制的程序代码的,但其内部也可以用来存放固定不变的数据,如:表格数据。读取ROM中常数表的查表指令MOVC,能够将程序存储器表格中的数据或字段代码送到累加器A中。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVCMOVC A,A+DPTR ;A(A)+(DPTR)MOVC A,A+PC ;A(A)+(PC)这两条指令的功能:从程序存储器中读取源操作数送入累加器A中。源操作数均为变址寻址方式。两条指令都是一字节指令。这两条指令特别适合于读取在ROM中建立的数据表格,故称做查表指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC【例3-14】若在外部ROM中2000H单元开始存放(O9)的平方值O,l,4,9,81,要求根据累加器A中的值(09),来查找所对应的平方值,并存入60H单元中。解(1)用DPTR作为基址寄存器:MOV DPTR,#2000H ;表格首地址送DPTR MOVC A,A+DPTR ;根据表格首地址及A确定地址,取数送A MOV 60H,A ;存结果 这种情况,(A)+(DPTR)之和就是待求数的平方值在ROM表格中的存放地址。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC(2)用PC作为基址寄存器,在MOVC指令之前应先用一条加法指令进行地址调整,编程如下:ADD A,#data ;(A)+data作为地址调整,本条指令占2字节 MOVC A,A+PC ;(A)+data+(PC)确定查表地址,取数送 A,本条指令占1字节 MOV 60H,A ;存结果,本条指令占2字节 RET ;本条指令占1字节 2000H:DB 0,1,4,9,16,25,36,813.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC 注意:1.执行该查表指令时,PC的当前值不是要查找的表格首地址2000H,两者之间存在地址差,因此需进行地址调整,使其能指向表格首地址,由于PC的内容不能随意改变,所以只能借助于A来进行调整。故在MOVC指令之前,先执行对A的加法操作,其中#data的值是由紧随MOVC指令的下一条指令的首地址与数据表格首地址之间其它指令所占的字节数之和来确定。本例中,查表指令与表格首地址之间只有两条指令,即:MOV 60H,A 和RET,两者共占3个字节,因此本题data=03H。2.A中的内容为8位无符号数,该查表指令只能查找指令所在地址以后256 B范围内的数据,故称之为近程查表指令。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.4 3.3.4 数据交换指令数据交换指令 数据交换指令共有5条,可完成累加器A和内部RAM单元之间的字节或半字节交换。1、整字节交换指令 整字节交换指令有3条,完成累加器A与内部RAM单元内容的整字节(即8位二进制数据)全部交换。指令如下:XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.4 3.3.4 数据交换指令数据交换指令 【例3-15】已知(A)=40H,(R0)=20H,(30H)=58H,(20H)=4FH,试分别求解下面3条各自独立指令的执行结果。XCH A,R0 ;(A)(R0)XCH A,30H ;(A)(30H)XCH A,R0 ;(A)(R0)解:(A)=20H,(R0)40H;(A)=58H,(30H)40H;(A)=4FH,(R0)20H,(20H)40H3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.4 3.3.4 数据交换指令数据交换指令 2、半字节交换指令 XCHD A,Ri ;(A)30(Ri)30 该指令功能:将累加器A中的低4位和Ri间接寻址找到的数据低4位交换,而各自的高4位内容都保持不变。【例3-17】已知(A)=40H,(R0)=26H,(26H)=3FH,试求解下面指令的执行结果。XCHD A,R0 ;(A)30(R0)30 解:指令执行后 (A)=4FH,(R0)26H,(26H)30H。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.4 3.3.4 数据交换指令数据交换指令 3、累加器高低半字节交换指令SWAP A ;(A)74(A)30 由于十六进制数或BCD码都是以4位二进制数表示,因此SWAP指令主要用于实现十六进制数或BCD码的数位交换。【例3-18】已知(A)=40H,试求解下面指令的执行结果。SWAP A ;(A)74(A)30解:指令执行后(A)=04H。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令堆栈操作指令可以实现对现场数据或断点地址的保护,它只有两条指令:1、进栈指令 PUSH direct ;SP(SP)+1,(SP)(direct)进栈指令的功能:先将栈顶指针SP的内容加1,使栈区向上生长出一个栈顶空单元,然后将直接地址direct单元的内容送入栈顶空单元。注意:指令中如用到累加器A,必须写出符号地址ACC的形式或写出直接地址E0H,不能写成A的形式。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令【例3-19】如图3-11(a)所示:(SP)=41H,(41H)=22H,设(A)=18H,试回答:执行指令之前栈顶单元的地址是多少?指令执行后栈顶单元的地址是多少?执行指令后(SP)=?,(42H)=?PUSH ACC ;解:指令执行过程如图3-11(b)和3-11(C)。指令执行前栈顶单元的地址就是SP的值即41H;指令执行后栈顶单元的地址为42H;(SP)=42H,(42H)=18H。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令2、出栈指令 POP direct ;direct(SP),SP(SP)-1 出栈指令的功能:先将SP所指出的栈顶单元的内容送入direct直接地址单元,然后将堆栈指针SP的内容减1,使之指向新的栈顶单元。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令【例3-20】已知如图3-12(a)所示:(SP)=41H,(41H)=22H,试回答:执行指令之前栈顶单元的地址是多少?指令执行后栈顶单元的地址是多少?执行指令后(SP)=?,(5FH)=?POP5FH 解:指令执行过程如图3-12(b)和3-12(C)。指令执行前栈顶单元的地址就是SP的值即41H;指令执行后栈顶单元的地址为40H;(SP)=40H,(5FH)=22H。3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令3.3 3.3 数据传送类指令(数据传送类指令(2929条)条)n3.3.5 3.3.5 堆栈操作指令堆栈操作指令注意:无论是进栈还是出栈均是对栈顶单元进行的,且这两条指令的操作数只能采用直接寻址方式,不能用累加器A或工作寄存器Rn作为操作数。利用堆栈操作指令也可以完成数据的传送。3.4 3.4 算术运算类指令(算术运算类指令(2424条)条)n3.4 3.4 算术运算类指令(算术运算类指令(2424条)条)3.4.1加法指令 3.4.2减法指令3.4.3乘、除法指3.4 3.4 算术运算类指令(算术运算类指令(2424条)条)n80C5180C51系列单片机的算术运算类指令共有系列单片机的算术运算类指令共有2424条,可以完成加、减、条,可以完成加、减、乘、除等各种操作,全部指令都是乘、除等各种操作,全部指令都是8 8位数运算指令。位数运算指令。n 如果需要做如果需要做1616位数的运算则需编写相应的程序来实现。算术运位数的运算则需编写相应的程序来实现。算术运算的大部分指令均以累加器算的大部分指令均以累加器A A作为源操作数之一,并且运算结果作为源操作数之一,并且运算结果还存放在累加器还存放在累加