第3章 MCS-51单片机指令系统_第1页
第3章 MCS-51单片机指令系统_第2页
第3章 MCS-51单片机指令系统_第3页
第3章 MCS-51单片机指令系统_第4页
第3章 MCS-51单片机指令系统_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

1、3.1 MCS-51指令系统的分类、格式及一般说明 3.2 寻址方式 3.3 分类指令 3.4 汇编语言程序设计,第3章 MCS-51单片机指令系统,主 要 内 容:,MCS-51单片机指令系统有如下特点:,(1)指令执行时间快。 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现2个一字节的相乘或相除。 (4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。,3.1 MCS-51指令系统的分类、格式及一般说明,3.1.1 指令分类 3.1.2 指令格式 3.1.3 指令描述符号介绍,返回本章首页,主 要 内 容:,3.1.1 指令分类,按指令功能,MC

2、S-51指令系统分为数据传递与交换、算术运算、逻辑运算、程序转移、布尔处理操作、CPU控制等6类。 布尔处理操作类指令又称位操作指令。,返回本节,3.1.2 指令格式,在MCS-51指令中,一般指令主要由操作码、操作数组成。 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。,返回本节,3.1.3 指令描述符号介绍,Rn当前选中的寄存器区中的8个工作寄存器R0R7(n=07)。 Ri当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。 direct8位的内

3、部数据存储器单元中的地址。 #data包含在指令中的8位常数。 #data16包含在指令中的16位常数。 addr1616位目的地址。 addr1111位目的地址。,rel8位带符号的偏移字节,简称偏移量。 DPTR数据指针,可用作16位地址寄存器。 bit内部RAM或专用寄存器中的直接寻址位。 A累加器。 B专用寄存器,用于乘法和除法指令中。 C进位标志或进位位,或布尔处理机中的累加器。,间址寄存器或基址寄存器的前缀,如Ri,DPTR。 / 位操作数的前缀,表示对该位操作数取反,如/bit。 片内RAM的直接地址或寄存器。 ()由寻址的单元中的内容。 箭头左边的内容被箭头右边的内容所代替。,

4、返回本节,3.2 寻址方式,3.2.1 立即寻址 3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址 3.2.5 变址寻址 3.2.6 相对寻址 3.2.7 位寻址,返回本章首页,主 要 内 容:,3.2.1 立即寻址,指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。 例如: MOV A,# 60H;A#60H MOV DPTR,# 3400H ;DPTR#3400H MOV 30H,# 40H ;30H单元#40H 上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。,返

5、回本节,3.2.2 直接寻址,指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。 例如: MOVPSW,# 20H;PSW#20H PSW为直接寻址寄存器的符号地址。 MOVA,30H;A30H内部RAM单元中的内容 30H为直接给出的内部RAM的地址。,返回本节,3.2.3 寄存器寻址,以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B 、DPTR以及R0R7 、Cy。 例如: CLR A;A0 INC DPTR;DPTRDPTR+1 ADDR5,# 20H;R5#20H+R5,返回本节,3.2.4 寄存器间接寻址,以寄存器中内容为地址,以该地

6、址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。,例如: MOV R0,A ;指令操作过程示意图如图3-1所示。 又如: MOVX A,R1;A指令操作过程示意图如图3-2所示。 再如: MOVX DPTR,A;指令操作过程示意图如图3-3所示。,图3-1 MOV R0,A间接寻址示意图,返回,返回本节,返回,3.2.5 变址寻址,变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变址寻址只有读操作而无写操作,在指令符

7、号上采用MOVC的形式(如图3-4所示)。 例如: MOVC A, A+DPTR;A(A+DPTR) 又如: MOVC A, A+PC ;A(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC。 JMPA+DPTR,图3-4 MOVC A, A+DPTR 变址寻址示意图,返回本节,3.2.6 相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP 08H ;PCPC+2+08H 指令操作示意图如图3-5所示。,图3-5 2000H 80 08 SJMP 08H 相对寻

8、址示意图,返回本节,3.2.7 位寻址,位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如: SETB 10H ;将10H位置1若22H单元中存放着数据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H)=41H。 又如: MOV 32H,C ;32H进位位C ORL C ,32H ;CC32H,返回本节,3.2.8 寻址空间,3.3 分类指令,3.3.1 数据传送类指令 3.3.2 算术运算类指令 3.3.3 逻辑运算与循环类指令 3.3.4 程序转移类指令 3.3.5 调用子程序及返回指令 3.3.6 空操作指令 3.3.7

9、位操作指令,返回本章首页,3.3.1 数据传送类指令(29),数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。 源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内数据传送途径如图3-6所示。,图3-6 MCS-51单片机片内数据传送图,1以A为目的操作数,MOV A,Rn;A Rn MOV A,direct;A(direct) MOV

10、A,Ri;A(Ri) MOV A,#data;A #data,2以Rn为目的操作数,MOV Rn,A;Rn A MOV Rn,direct;Rn (direct) MOV Rn,#data;Rn #data,3以直接地址为目的操作数,MOV direct ,A; direct (A) MOV direct 1,direct2; direct1 (direct2) MOV direct ,#data; direct #data MOV direct ,Ri; direct (Ri) MOV direct ,Rn; direct (Rn),4以间接地址为目的操作数,MOV Ri,A;(Ri) A

11、MOV Ri,direct;(Ri) (direct) MOV Ri,#data;(Ri) #data 例如:设(30H)=6FH,R1=40H,执行MOV R1,30H后,30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。,5以DPTR为目的操作数,MOV DPTR,#data16 ;DPTR #data16 例如执行 MOV DPTR,#2000H 后, (DPTR)= 2000H。,【例3.1】,MOVA,10H MOV R0,20H MOV R1,A MOV 20H,00H MOV DPTR,2000H MOV 40H,R0 MOV R1,40H 程序执行后的结果:

12、 A10H,R020H,R110H,(40H)00H (10H) 00H,(20H) 00H,DPTR2000H,6访问外部数据RAM,MOVX A,DPTR;A (DPTR) MOVX DPTR,A;(DPTR) A MOVX A,Ri;A (Ri) MOVX Ri,A;(Ri) A 片外RAM区64KB(0000H0FFFFH)只能与累加器A互传数据,7读程序存储器,MOVC A,A+DPTR;A (A+DPTR) MOVC A,A+PC;A (A+PC) 例如 已知A=30H,DPTR=3000H, 程序存储器单元(3030H)=50H,执行 MOVC A, A+DPTR后, A=50H

13、。,【例3.2】查表求09的平方值。,ORG 1000H START: MOV DPTR,2000H MOV A,NUMB ;NUMB09 MOVC A, ADPTR SJMP $ 2000H: DB 0,1,4,9,16,25,36,49,64,81,例3.3 查表将累加器A中的09的二进制数转换成ASCII码。,ORG 2000H START: MOV A,NUMB ;NUMB09 ADD A,02H;修正地址 MOVC A, APC SJMP $ TAB : DB 0,1,2,3,4,5,6,7,8,9,8数据交换,l字节交换 XCH A,Rn;A Rn XCH A ,direct;A(

14、direct) XCH A,Ri;A(Ri) l半字节交换 XCHD A,Ri;A03(Ri)03 SWAP A;A03A47,9堆栈操作,所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令: PUSH direct;SP(SP+1),(SP)(direct) POP direct;(direct)(SP),SP SP-1 PUSH是进栈(或称为压入操作)指令。指令执行过程如图3-7所示。 POP是出栈(或称为弹出操作)指令。指令执行过程如图3-8所示。,图3-7 指令PUSH操作示意图,图3-8 指令POP操作

15、示意图,【3.4】将片内RAM 30H单元与40H单元中的内容互换。,方法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$,返回本节,3.3.2 算术运算类指令(24),1加法指令 (13) 1)不带进位加指令

16、 ADD A,Rn;A (A) + (Rn) ADD A,direct;A (A) +(direct) ADD A,Ri;A (A) +((Ri)) ADD A,#data;A (A) + #data 标志位:C、AC 、 OV、P,2)带进位加指令 ADDC A,Rn;A (A )+ (Rn)+ C ADDC A,direct;A (A) +(direct)+ C ADDC A,Ri;A (A) +((Ri))+ C ADDC A,#data;A (A) + #data + C 例: 设A=20H,R0=21H,C=1,执行指令 ADDCA,R0后, A=42H。,【例3.5】 试把存放在R

17、1R2和R3R4中的两个16位数相加,结果存于R5R6中。 解:参考程序如下: MOVA,R2;取第一个数的低8位 ADDA,R4;两数的低8位相加 MOVR6,A;保存和的低8位,MOVA,R1 ;取第一个数的高8位 ADDCA,R3 ;两数的高8位相加,并把低8位相加时的进位位加进来 MOVR5,A ;把相加的高8位存入R5寄存器中 SJMP $,3)加1指令 INC A;A (A) + 1 INC Rn;Rn (Rn) + 1 INC direct;direct (direct)+ 1 INC Ri;(Ri)((Ri))+ 1 INC DPTR;DPTR (DPTR) + 1 例如:(3

18、0H)=22H,执行 INC 30H 后,(30H)=23H。,2.减法指令 (8) 1)带借位减指令 SUBB A,Rn;A (A) (Rn) - C SUBB A,direct;A (A) -(direct)- C SUBB A,Ri;A (A) -((Ri))- C SUBB A,#data;A (A) - #data C 例:设A=39H,R0=20H,(20H)=32H,C=1,执行指令 SUBB ,R0 后, A=06H。,2)减1指令 DEC A;A (A) - 1 DEC Rn;Rn (Rn) - 1 DEC direct;direct (direct)- 1 DEC Ri;(

19、Ri)((Ri))- 1 例如,R0=30H,(30H)=22H,执行 DEC R0 后, (30H)=21H。,3十进制调整指令 DA A ;把A中按二进制相加的结果调整成按BCD码相加的结果 例:A=65BCD,B=78BCD,C=0,执行下列语句 ADD A,B DA A后, A=43 BCD,C=1。,设被加数存于内部RAM地址为32H、31H、30H单元中,加数存于地址为42H、41H、40H单元中,和数存于地址52H、51H、50H单元中,加数、被加数已按压缩型BCD码存放于相应单元中。 试编制6位BCD码加法程序,并考虑产生溢出时转符号地址OVER处。,两个6位压缩BCD码相加求

20、和,难点:BCD码减法运算的实现,1 实现方法: 2 BCD码减数的补数求法: 例3.6 设A78H,R156H,求BCD码减法:AR1; 解:先求R1的BCD码补数,即9AH56H44H,再求加法AR1补数;操作过程如下: 01111000 (78H) 01000100 (44H) 10111100 (BCH) 01100110 (66H) 1 00100010(1 22H) 得到的结果为:78H56H22H,4乘法指令 MUL AB ;BA AB A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B中,低8位存A中。 例:设A=30H,B=60H,执行 MUL AB 后, A

21、=00H,B=12H。,重点:多字节乘操作算法(双字节),3.6利用MUL指令实现双字节乘操作:4054H2005H,其中R1 = 40H,R0 = 54H,R3 = 20H,R2 = 05H,结果由低到高存放在R4R7中。 解:程序实现的算法: R1 R0 R3 R2 (R0R2)H (R0R2)L (R1R2)H (R1R2)L (R0R3)H (R0R3)L (R1R3)H (R1R3)L (R1R3)H (R1R3)L(R0R3)H(R1R2)H) (R0R3)L(R1R2)L(R0R2)H) (R0R2)L (R7) (R6) (R5) (R4),5除法指令 DIV AB ;AB商在

22、A中,余数在B中,例3.7 利用DIV指令将工作寄存器R7单元的8位二进制数转换为3位BCD码。 解: MOV B,64H ; B除数100 MOV A,R7 ; A被除数 DIV AB ;AB,A商(百位数BCD码),B余数 MOV R6,A ;R6将百位数BCD码 MOV A,B ;A余数作被除数 MOV B,0AH ;B除数10 DIV AB;AB,A商(十位数BCD码), ;B余数(个位BCD码) SWAP A;十位BCD码调整到A中高4位 ADD A,B ;A中压缩成2位BCD码 MOV R7,A; R7十位、个位BCD码,返回本节,思考题,1 DA A 指令的作用是什么?怎样使用?

23、 2 试用三种方法将累加器A中无符号数乘2。,3.3.3 逻辑运算与循环类指令(20+4),1“与”操作指令 2“或”操作指令 3“异或”操作指令 4求反与清除指令 5循环指令,返回本节,3.3.4 程序转移类指令,1无条件转移指令(4) l绝对(短)转移指令 AJMPaddr11;PC100 addr11 l长转移指令 LJMPaddr16;PC addr16 l短(相对)转移指令 SJMPrel;PC PC + 2 + rel l 间接转移指令 JMPA+DPTR;PC A + DPTR,2条件转移指令(8) l累加器为零(非零)转移指令(2) l减1非零转移指令(2) l两数不等转移指令

24、(4),3.3.5 调用子程序及返回指令(4),1调用子程序指令 LCALL addr16 ;PCPC+3,SPSP+1,(SP)PC710 ;SPSP+1,(SP)PC158, PCaddr16 ACALL addr11 ;PC PC+2,SPSP+1,(SP)PC70 ;SP SP+1,(SP) PC158,PC100addr11,2返回指令 RET ;PC158 (SP),SPSP-1 ;PC70 (SP),SPSP-1 RETI ;PC158(SP),SPSP-1 ;PC70 (SP),SPSP-1,返回本节,3.3.6 空操作指令(1),NOP ;PC PC+1 这是一条单字节指令。

25、执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延迟。,返回本节,3.3.7 位操作指令(17),1位数据传送指令 MOVC,bit;C(bit) MOV bit,C;bitC 2位状态修改指令 CLRC;C0 CLRbit;(bit)0 SETBC;C1 SETBbit;(bit)1,3位逻辑运算指令 ANLC,bit;CC(bit) ANLC,/bit;CC(/bit) ORLC,bit;CC(bit) ORLC,/bit;CC( / bit) CPLC CPLbit,4位转移指令 JCrel; 若C=

26、1, 则转移(PCPC+2+rel);否则程序顺序执行 JNCrel; 若C=0, 则转移(PCPC+2+rel);否则程序顺序执 JBbit,rel; 若(bit)=1, 则转移(PCPC+3+rel);否则程序顺序执行,JNBbit,rel; 若(bit)=0, 则转移(PCPC+3+rel);否则程序顺序执行 JBCbit,rel; 若(bit)=1, 则PCPC+3+rel,(bit)0;否则程序顺序执行 功能:分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。,返回本节,3.4 汇编语言程序设计,3.4.1汇编语言格式与伪指令 1 定

27、义 在汇编时不产生机器指令代码,不影响程序的执行,仅产生供汇编用的某些指令。 2 常用的基本伪指令 1)程序起始地址伪指令-ORG 格式:ORG 表达式 ORG 0100H START:MOV A,#00H;从START开始的目标程序,其起始地址由0100H开始 2)数据存储说明伪指令,返回本章首页,(1)定义字节数据伪指令-DB 格式:标号:DB表达式 HERE:DB 56H ;将数据56H存入HERE指示的存储单元中 DB 0A7H;将0A7H存入HERE+1的存储单元中 (2)定义字数据伪指令DW 格式:标号:DW表达式或表达式串 ABC:DW 1234H,4567H,0A5C H;12

28、H存入ABC指示的单元,34H存入(ABC)+1单元中,按此;顺序将后续字节存入对应存储单元中。 (3)存储区说明伪指令-DS 格式:标号:DS表达式 BASE:DS 0100H;程序存储器从标号BASE为首址开始,空出256个存储单元,以备另用。,3) 为标号赋值伪指令 1) 标号等值伪指令 EQU 格式:标号:EQU表达式 TTY:EQU 1080H;标号TTY等值于1080H 2) 定义标号值伪指令-DL 格式:标号:DL表达式 COUNT1:DL 2300H;定义COUNT1=2300H COUNT2:DL COUNT1+1 ; COUNT2=2300H+1 注意: DL可对同一源程序

29、中对同一标号多次赋值,即可更改已定义的标号值;而用EQU则只能给标号一次赋值,而后整个源程序中再不能更改。,4)汇编结束伪指令END 一个源程序只能而且必须有一个END指令,设置在整个程序的结束处。它有两种格式 标号:END表达式 标号:END 有无表达式的区别在于前者汇编结束后立即转向由表达式指定的开始地址开始执行程序。 注意:如果END语句出现在中间,则汇编程序将不汇编END后面的语句。,3.4.2 MCS51单片机汇编语言程序设计,返回本章首页,1 简单程序设计,例1:拆字程序段 将一个字节内的两个 BCD 码十进制数拆开并变成相应的ASCII 码,存入两个RAM 单元中。设该BCD 码

30、已存放在内部RAM 的 30H 单元中,变换后的 ASCII 码分别存放在 31H 和 32H单元中,且高位 BCD 码的 ASCII 码存于 31H 单元。数字0 9 的ASCII 码为 30H 39H ,完成拆字转换只需将一个字节的两个BCD码拆开放在另两个单元的低 4 位,并在其高位赋以0011即可。 程序如下所示:,MOV R0 ,#32H ;将32H 单元地址送 R0 MOV R0 ,#00H ;32H 单元清0 MOV A , 30H ;两个 BCD 码送 A XCHD A ,R0 ;将低位 BCD 码送 32H 单元 ORL 32H ,#30H ;完成低位 BCD 码的转换 SW

31、AP A ;将高位 BCD 码调到低位 ORL A ,#30H ;完成高位 BCD 码的转换 MOV 31H ,A ;将高位 BCD 码的 ASCII 码 存入 31H 单元,返回本节,2 分支程序设计,例2:两个无符号数比较大小。 设存储单元 ST1 和 ST2 中存放两个无符号二进制数,找出其中的大数存入 ST3 单元中。程序流程图如下图 所示:,返回本节,3 循环程序设计,1)单重循环结构程序 2)多重循环结构程序 采用循环程序进行软件延时,一般可实现任意延时要求,但需牺牲 CPU 工作。,返回本节,例3. 多重循环程序设计。试设计延时秒钟的程序。,程序如下: ORG 2000H MOV

32、 R5,2 LOP3:MOVR6,250 LOP2:MOVR7,250 LOP1:NOP NOP DJNZR7,LOP1 DJNZR6,LOP2 DJNZR5,LOP3 RET,4 子程序结构设计,子程序及其调用 1、必须标明子程序的入口地址,又称首地址,以便于主程序调用。 2、必须以返回指令 RET 结束子程序。,1、传递参数。 2、传递地址。 主程序的现场保护与恢复 1、 调用前保护,返回后恢复 2、调用后保护,返回前恢复。,返回本节,5 MCS51源程序的基本格式,由于不同类型的单片机其有关资源的地址分配不同,故而其对应的源程序格式也各不相同。MCS51 系列单片机的中断矢量地址被分配在程序存储器的0003H0033H 区域, 而源程序的起始地址必须从 0000H 单元

温馨提示

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

评论

0/150

提交评论