1 / 90

第三章

第三章. MCS-51 指令系统. 与指令系统相关的一些概念. 指令 : CPU 根据人们的意图来执行某种操作的命令。 指令系统 :是计算机所能够执行的全部指令的集合。 程序 :是按人们的要求所编制的指令操作序列。 程序设计语言 :是编写程序的某种规则。 三类编程语言 :机器语言、汇编语言、高级语言. 3.1 汇编语言的指令格式. MCS-51 汇编指令由操作码助记符字段和操作数字段所组成。指令格式如下 : 标号:操作码 ︹ [ 操作数 1] [, 操作数 2] [, 操作数 3] [; 注释 ].

ledell
Download Presentation

第三章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 MCS-51指令系统

  2. 与指令系统相关的一些概念 指令:CPU根据人们的意图来执行某种操作的命令。 指令系统:是计算机所能够执行的全部指令的集合。 程序:是按人们的要求所编制的指令操作序列。 程序设计语言:是编写程序的某种规则。 三类编程语言:机器语言、汇编语言、高级语言

  3. 3.1 汇编语言的指令格式 MCS-51汇编指令由操作码助记符字段和操作数字段所组成。指令格式如下: 标号:操作码 ︹ [操作数1] [,操作数2] [,操作数3] [;注释] 标号加在指令之前,标号必须以字母开始,后跟1~8个字母或数字,并以“:”结尾,用户定义的标号不能和汇编保留符号(包括指令操作码助记符以及寄存器名等)重复。标号的值是它后面的指令存储地址。 它由2~5个英文字母所组成,如JB、MOV、CJNE、LCALL等。 它以一个或几个空格和操作码隔开,根据指令功能的不同,操作数可以有1、2、3个或没有(如NOP)。操作数之间以“,”分开。 它以“;”和操作数分开。如果一行写不下,可以另起一行,但都必须以“;”开始。注释的作用:是用户对某一条指令或某一段程序的功能说明,在指令中不起作用。指令汇编后,注释没有被汇编成机器码

  4. 3.1.2 汇编伪指令 标准的MCS-51汇编程序还定义了许多伪指令供用户使用,多数伪指令汇编时不产生机器语言指令,仅提供汇编控制信息。 1、定位伪指令 ORG m m为十进制或十六进制数。 m指出该伪指令后的指令的汇编地址。在一个汇编语言源程序中允许使用多条定位伪指令,但其值应和前面生成的机器指令存放地址不重叠。

  5. 2、定义字节伪指令 DB X1,X2,X3,…,Xn Xi为单字节数据,它为十进制或十六进制数,也可以为一个表达式。 Xi也可以为由两个单引号“‘”所括起来的一个字符串,这时Xi定义的字节长度等于字符串的长度,每个字符为一个ASCII码 该伪指令把X1,X2,X3,…,Xn送目标程序存储器,通常用于定义一个常数表。

  6. 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn Yi为双字节数据,它可以为十进制或6十六进制数,也可以为一个表达式。 该伪指令把Y1,Y2,Y3,…,Yn送目标程序存储器,经常用于定义一个地址表。

  7. 4、字或字节赋值伪指令 EQU m 例: ASDF EQU 30H 则ASDF 等价于30H 5、定义存储空间伪指令 DS 表达式 例:ORG 1000H DS O7H ;从地址1000H开始保留7个单元 7、定义位地址符号伪指令 字符名称 BIT 位地址 例:P11 BIT P1.1;P1口位1地址91H赋给P11

  8. 7、数据地址赋值伪指令 字符名称 DATA 表达式 例:AA DATA 35H 8、汇编结束伪指令 END 该伪指令指出结束汇编,即使后面还有指令,汇编程序也不作处理。

  9. 3.2 寻址方式 • 寻址方式:就是指令中给出参与运算的操作数的方式 • MCS-51单片机有八种寻址方式: 1、寄存器寻址 5、变址寻址 2、寄存器间接寻址 6、相对寻址 3、直接寻址 7、位寻址 4、立即数寻址 8、页面寻址

  10. 寄存器寻址 • 由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。 寄存器寻址对所选的工作寄存器区中的R0~R7进行操作时,由PSW的4、3位决定是哪个工作寄存器区 可用寄存器寻址方式访问的寄存器有: R0~R7、A、B、DPTR、进位标志C(布尔处理器的累加器C)等 • 如:MOV A,R0 ;(R0)A DEC B ;(B)-1 B ADD A,R1 ;(A)+(R1) A INC DPTR ;(DPTR)+1 DPTR MOV bit,C ;(C) bit

  11. 直接寻址 在指令中含有操作数的直接地址,该地址指出了参与运算或传送的数据所在的字节单元或位地址。即直接给出操作数所在存储单元的地址或位地址。

  12. 直接寻址方式 • 直接寻址方式访问以下三种存储空间: ●特殊功能寄存器(SFR只能用直接寻址方式访问); ●内部数据存储器RAM低128字节(对于8032/8052等单片机,其内部高128字节RAM(80H~0FFH)不能用直接寻址方式访问 ) ●位地址空间 • 如: MOV A,3AH ;(3AH)A • MOV P1,R0 ;(R0)P1口 INC 58H ;(58H)+1 58H SUBB A,TL0 ;(A)-(TL0) A 例如:ANL 70H,#48H ;(70H)∧48H 70H

  13. 寄存器间接寻址 寄存器间接寻址用符号@ 8051规定:R0、R1和DPTR可以作为间接寻址寄存器。 由指令指出某一寄存器中的内容作为操作数的地址。这种寻址方式称为寄存器间接寻址。 1、用选定的工作寄存器区中的R0或R1作地址指针来寻址片内RAM的256B(00~0FFH)或片外RAM的低256B空间(00~0FFH)。 • 如:设(R0)=65H,(65H)=47H MOV A,@R0 ;(65H)A,A中的值是47H MOV @R0,#3AH;3AH65H MOVX A,@R0 ;外RAM的(65H) A 带X为访问外部RAM的指令

  14. 2、用DPTR作地址指针来进行寄存器间接寻址 如:设(DPTR)=2000H MOVX @DPTR,A ;A外部RAM的2000H单元 MOVX A,@DPTR;外RAM的2000H单元的内容A 例如:ANL A,@R0  ;(A)∧((R0)) A

  15. 立即寻址 • 立即寻址方式中操作数包含在指令中。即操作数以指令字节的形式存放于程序存储器中。在操作码后面。用“#”表示。 操作数可以是8位的,也可以是16位的。 • 如:MOV A,3AH ;(3AH)A× MOV A,#3AH ; 3AHA MOV DPTR,#23C8H ; 23C8H DPTR ADD A,#0D4H ;(A)+0D4H A 例如:MOV A,#70H ; 70HA

  16. 变址寻址 这种寻址方式以16位的程序计数器PC或数据指针DPTR作为基寄存器,以8位的累加器A作为变址寄存器。基寄存器和变址寄存器的内容相加形成16位的地址,该地址即为操作数的地址。 • 只能访问程序存储器,范围:64KB • MCS-51指令系统中总共有如下三条基寄存器加变址寄存器间接寻址指令

  17. 如: MOVC A,@A+DPTR ;((A)+(DPTR))A MOVC A,@A+PC ;((A)+(PC))A JMP @A+DPTR ;((A)+(DPTR))PC 该寻址方式多用于查表操作。

  18. 相对寻址 以当前的程序计数器PC值加上指令中给定的偏移量rel所得的结果作为转移地址 2字节或3字节 目的地址=源地址+相对转移指令字节数+rel 如 JC 75H ;(PC)+2+75H->PC

  19. 位寻址 操作数按8位二进制数中的某一位为单元进行存取和操作。 位寻址的两种方式: 直接使用位地址 特殊功能寄存器可由寄存器名字加位数表示 如: MOV C,01H ;01H为位地址 SETB EA ;中断允许寄存器IE的位7置1

  20. 页面寻址 用R0,R1作为地址指针访问片外RAM时的寻址方式。 如: MOV P2,#0A0H MOV R0,#01H MOV A,#10H MOVX @R0,A ;(A)->0A00H

  21. 3.3 MCS-51的指令系统 MCS-51指令系统按功能分类如下: • 数据传送类指令(29条) • 算术运算类指令(24条) • 逻辑运算类指令(24条) • 位操作类指令 (17条) • 控制转移类指令(17条)

  22. 数据传送指令 • 绝大多数指令都有操作数,所以数据传送操作是一种最基本最重要的操作之一。数据传送是否灵活快速对程序的编写和执行速度产生很大影响。 MCS-51的数据传送操作可以在累加器A、工作寄存 器R0~R7、内部数据存贮器、外部数据存贮器和程 序存贮器之间进行,其中对A和R0~R7的操作最多

  23. MOV A,Rn ;(Rn)A n=0~7 MOV A,direct ;( direct )A MOV A,@Ri ;((Ri))A i=0~1 MOV A,#data ; data A • 一、以累加器A为目的操作数的指令(4条) 这组指令的功能是把源操作数的内容送入累加器A。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。 例1: MOV A,R6 ;(R6) A, 寄存器寻址 MOV A,70H ;(70H) A, 直接寻址 MOV A,@R0 ;((R0)) A, 间接寻址 MOV A,#78H ; 78H  A, 立即寻址

  24. 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)Rn MOV Rn ,direc;( direct )Rn MOV Rn ,#data; data  Rn 这组指令的功能是把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。 例2: MOV R2,A ;(A) R2,寄存器寻址 MOV R7,70H ;(70H) R7,直接寻址 MOV R3,#0A0H ; 0A0H  R3,立即寻址

  25. 三、以直接寻址的单元为目的操作数的指令(5条)三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)direct MOV direct,Rn;(Rn)direct MOV direct,direct;(源direct)目的direct MOV direct,@Ri;((Ri))direct MOV direct,#data; datadirect • 这组指令的功能是把源操作数送入由直接地址指出的存贮单元。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。 • 例3: MOV P1,A ;(A)P1,寄存器寻址 MOV 70H,R2 ;(R2)70H,寄存器寻址 MOV 0E0H,78H ;(78H)ACC,直接寻址 MOV 40H, @ R0 ;((R0)) 40H,寄存器间接寻址 MOV 01H,#80H ; 80H  01H,立即寻址

  26. 四、以寄存器间接寻址的单元为目的操作数的指令(3条)四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)(Ri) MOV @Ri,direct;(direct)(Ri) MOV @Ri,#data; data(Ri) • 这组指令的功能是把源操作数的内容送入当前工作寄存器区的R0或R1内容所指出的内部RAM存贮单元中。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。 • 例4: MOV @R1,A ; (A)(R1) 寄存器寻址 MOV @R0,70H ; (70H)(R0)直接寻址 MOV @R1,#80H ; 80H(R1) 立即寻址

  27. 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataHDPH,dataL DPL 上述MOV指令中,累加器A是一个特别重要的8位寄存器,CPU对它具有其它寄存器所没有的操作指令,后面将介绍的加、减、乘、除指令都是以A作为操作数的,Rn为CPU当前选择的寄存器区中的R0~R7,在指令编码中rrr=000~111,分别对应于R0~R7。 直接地址指出的存贮单元为内部RAM的00~7FH和特殊功能寄存器。 在间接寻址中,用R0或R1作地址指针,访问内部RAM的00~0FFH这256个单元。 这条指令的功能是把16位常数送入DPTR。16位的数据 指针DPTR由DPH和DPL组成,这条指令执行结果把高位 立即数送入DPH,低位立即数送入DPL。

  28. 例5 设(70H)=60H,(60H)=20H,P1口为输入口,当前的输入状态为B7H,执行下面的程序: MOV R0,#70H ; 70HR0 MOV A,@R0 ; 60HA MOV R1,A ; 60HR1 MOV B,@R1 ; 20HB MOV @R0,P1 ; B7H70H 结果(70H)= B7H,(B)=20H (R1)=60H,(R0)=70H

  29. 六、查表指令 1 MOVC A ,@ A+PC ;((A)+(PC))A • 例10 设(A)=30H,执行指令: 地址 指令 1000H MOVC A , @ A+PC 结果:将程序存贮器中1031H单元内容送入A。 这条指令以PC作为基寄存器,A的内容作为无符号数和PC内容(下一条指令的起始地址)相加后得到一个16位的地址,由该地址指出的程序存贮器单元内容送到累加器A。 这条指令以PC作为基寄存器,当前的PC值是由该查表指令的存贮地址确定的,而变址寄存器A的内容为0~255,所以(A)和(PC)相加所得到的地址只能在该查表指令以下256个单元的地址之内,因此所查的表格只能存放在该查表指令以下256个单元内,表格的大小也受到这个限制。

  30. 例11 ORG 8000H MOV A,#30H MOVC A , @ A+PC … ORG 8030H DB 41H,42H,43H,44H,45H DB 46H,47H,48H,49H,4AH … • 上面的查表指令执行后,将8003H+30H=8033H所对应的程序存贮器中的常数44H送A。

  31. 2 MOVC A , @A+ DPTR ;((A)+(DPTR)) 这条指令以DPTR作为基寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,由该地址指出的程序存贮器单元的内容送到累加器A。 • 例12 设(DPTR)= 8100H,(A)=40H,执行指令: MOVC A , @ A+DPTR 结果:将程序存贮器中8140H单元中内容送入累加器A。 这条查表指令的执行结果只和数据指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此表格大小和位置可在64K字节程序存贮器中任意安排,只要在查表之前对DPTR和A赋值,就使一个表格可被各个程序块公用。

  32. 七、 累加器A与外部数据存贮器传送指令(4条) MOVX A,@DPTR ; ((DPTR))A MOVX A,@ Ri ; ((Ri))A i=0,1 MOVX @ DPTR ,A ; (A)( DPTR) MOVX @ Ri , A ; (A)(Ri) i=0,1 1.第1,3两条指令以DPTR作为外部RAM的16位地址指针,寻址范围为(0000H~0FFFFH)64KB空间; 2.第2,4两条指令以R0或R1作为低8位地址指针,由P0口送出,寻址范围为(0000H~00FFH)256B空间(P2口仍可作通用I/O口)。 • 这组指令的功能是累加器A和外部扩展的RAM/IO口之间的数据传送指令。由于外部RAM/IO口是统一编址的,共占一个64K字节的空间,所以指令本身看不出是对RAM还是对I/O口操作,而是由硬件的地址分配确定的。

  33. 八、堆栈操作指令 如前所述,在MCS-51内部RAM中可以设定一个后进先出(LIFO)的堆栈,在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置,在指令系统中有两条用于数据传送的堆栈操作指令。

  34. 1. 进栈指令 PUSH direct ;(SP)+1 SP ,(direct) SP 这条指令的功能是首先将堆栈指针SP加1,然后把直接地址指出的内容传送到堆栈指针SP寻址的内部RAM单元中。 例6 设(SP)=60H,(ACC)=30H,(B)=70H,执行下述指令: PUSH ACC ;(SP) +1,61H SP, (ACC)61H PUSH B ;(SP) +1,62H SP, (B)62H 结果:(61H)=30H,(62H)=70H,(SP)=62H • 进栈指令用于保护CPU现场。

  35. 2. 退栈指令 POP direct • 例7 设(SP)=62H,(62H)=70H,(61H)=30H,执行下述指令: POP DPH ;((SP)) DPH,(SP)-1  SP POP DPL ;((SP))DPL,(SP)-1  SP 结果:(DPTR)=7030H,(SP)= 60H 这条指令的功能是把堆栈指针SP寻址的内部RAM单元内容送入直接地址指出的字节单元中,堆栈指针SP减1。 • 退栈指令用于恢复CPU现场。

  36. 九、字节交换指令(5条) XCH A,Rn ;(A)(Rn) XCH A,direct :(A)(direct) XCH A,@Ri :(A)((Ri)) 这组指令的功能是将累加器A的内容和源操作数内容相互交换。源操作数有寄存器寻址,直接寻址和寄存器间接寻址等寻址方式。 • 例8 设(A)=80H,(R7)=08H,执行指令: XCH A,R7 ;(A)  (R7) 结果:(A)=08H,(R7)=80H

  37. 半字节交换指令 XCHD A,@Ri ;(A)0~3((Ri) ) 0~3 这条指令将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位不变。 • 例9 设(A)=15H,(R0)=30H,(30H)=34H,执行指令: XCHD A,@R0 ; 结果:(A)=14H,(30H)=35H

  38. 算术运算指令 MCS-51的算术运算指令有加、减、乘、除法指令,增量和减量指令;第一操作数一般为A;一般影响标志位CY、AC、OV和P。共24条指令。

  39. 一、加法指令 1. 不带进位的加法指令(4条) • ADD A,Rn ;(A)+(Rn)A • ADD A,direct ;(A)+(direct)A • ADD A,@Ri ;(A)+((Ri))A • ADD A,#data ;(A)+#dataA 这组加法指令的功能是把所指出的第二操作数和累加器A的内容相加,其结果放在累加器A中。 如果位7有进位输出,则置“1”进位CY;否则清“0”CY。如果位3有进位输出,置“1”辅助进位AC;否则清“0”AC。如果位6有进位输出而位7没有或者位7有进位输出而位6没有,则置位溢出标志OV;否则清“0”OV。第二操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。

  40. 例13 设(A)=53H,(R0)=0FCH,执行指令: ADD A, R0 01010011 + 11111100 (1) 01001111 结果:(A)=4FH,CY=1,AC=0,OV=0,P=1 例14 设(A)=85H,(R0)=20H,(20H)=0AFH,执行指令: ADD A,@ R0 10000101 + 10101111 (1) 00110100 结果:(A)=34H,CY=1,AC=1,OV=1,P=1

  41. 二、带进位加法指令(4条) ADDC A,Rn ;(A)+(Rn)+CYA ADDC A,direct ;(A)+(direct) +CY A ADDC A,@Ri ;(A)+((Ri)) +CY A ADDC A,#data ;(A)+ #data +CY A • 此指令影响程序状态字PSW的CY、AC、OV、P位 例15 设(A)=85H,(20H)=0FFH,CY=1,执行指令: ADDC A,20H 10000101 11111111 + 1 (1)10000101 结果: 和(A)=85H,CY=1,AC=1,OV=0,P=1

  42. 三、增量指令(5条) INC A ;(A)+1 A INC Rn ;(Rn)+1  Rn INC direct ;(direct)+1  direct INC @Ri ;((Ri))+1 (Ri) INC DPTR ;(DPTR)+1 DPTR 例16 设(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H, (40H)=00H,执行指令: INC A ;(A)+1 A INC R3 ;(R3)+1  R3 INC 30H ;(30H)+1  30H INC @R0 ;((R0))+1 (R0) 结果:(A)=00H,(R3)=10H,(30H)=0F1H,(40H)=01H PSW状态不改变。 • 这组增量指令的功能是把所指出的操作数加1,若原来为0FFH将溢出为00H,除对A操作影响P外,此类指令不影响标志位。操作数有寄存器寻址、直接寻址和寄存器间接寻址方式。

  43. 四、十进制调整指令(1条) DA A • 这条指令对累加器A中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的8位结果进行调整,使它调整为压缩BCD码的数; • 调整方法: 若(A)0~3>9或AC=1,则(A) +06H(A); 若(A)4~7>9或CY=1,则(A) +60H(A); 对标志的影响:若结果(A)>99H,则CY=1;不影响OV。 例17 设(A)=56H,(R5)=67H,执行指令: ADD A,R5 DA A 结果:(A)=23H,CY=1

  44. 例186位十进制加法程序 完成功能:(32H)(31H)(30H)+(42H)(41H)(40H) 52H51H50H,假设32H,31H,30H,42H,41H,40H中的数均为2位BCD码,程序如下:

  45. MOV A,30H ;(30H)+(40H) ACC ADD A,40H DA A ;对(A)十进制调整后50H MOV 50H,A MOV A ,31H ;(31H)+(41H)+CY A ADDC A,41H DA A ;对A十进制调整后51H MOV 51H,A MOV A,32H ; (32H)+(42H)+CY ACC ADDC A,42H DA A ;对A十进制调整后52H MOV 52H,A

  46. 减法指令 • 一、带进位减法指令 • SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data • 这组带进位减法指令从累加器A中减去第二操作数和进位标志,结果放在累加器A中。 • 影响CY、AC、OV、P • 第二操作数允许有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。 • 例19 设(A)= 0C9H,(R2)= 54H,CY=1,执行指令 SUBB A,R2 11001001 01010100 - 1 01110100 结果:(A)=74H,CY=0,AC=0,OV=1,P=0

  47. 二、减1指令(4条) DEC A DEC Rn DEC direct DEC @Ri • 这组指令的功能是将指定的操作数减1。若原来为00H,减1后下溢为0FFH,不影响标志(除(A)减1影响P外)。 • 例20 设(A)=0FH,(R7)=19H,(30H)=00H, (R1)=40H,(40H)=0FFH,执行指令: DEC A ;(A)-1 A DEC R7 ;(R7)-1  R7 DEC 30H ;(30H)-1  30H DEC @R1 ;((R1))-1 (R1) 结果: (A)=0EH,(R7)=18H,(30H)=0FFH, (40H)=0FEH,P=1 不影响其它标志。

  48. 乘法指令 MUL AB • 这条指令的功能是把累加器A和寄存器B中的8位无符号整数相乘,其16位积的低位字节放在累加器A中,高位字节放在B中。如果积大于255(0FFH),则置位溢出标志OV;否则清“0”OV。进位标志CY总是清“0” • 例21 设(A)=50H,(B)=0A0H。执行指令: MUL AB 结果:(B)=32H,(A)=00H,即积为3200H。

  49. 除法指令 DIV AB • 这条指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商的整数部分存放在累加器A中,余数放在寄存器B中。 • 如果原来B中的内容为0,即除数为0,则结果A和B中内容不定,并置位溢出标志OV。在任何情况下,都清“0”CY • 例22 设(A)=0FBH,(B)=12H,执行指令: DIV AB 结果:(A)=0DH,(B)=11H,CY=0,OV=0

  50. 逻辑运算指令 累加器A的逻辑操作指令 一、CLR A 这条指令的功能是将累加器ACC清“0”,不影响CY、AC、OV等标志。只影响P。 二、CPL A 这条指令的功能是将累加器ACC的每一位逻辑取反,原来为1的位变0,原来为0的位变为1。不影响CY、AC、OV等标志。 • 例23 设(A)=10101010B,执行指令: CPL A 结果:(A)=01010101B

More Related