《31单片机》由会员分享,可在线阅读,更多相关《31单片机(65页珍藏版)》请在金锄头文库上搜索。
1、第三章MCS-51指令系统,3、熟悉指令系统的各指令,能分析程序的功 能并能编写程序,重点,1、熟悉伪指令的格式、功能及使用,2、掌握指令的寻址方式,一、指令系统概述,指令:,执行某一操作的命令,指令系统:,所有指令的集合,机器码:,由一串二进制数0、1组成的指令代码,汇编语言:,用助记符形式编写的完成某一功能的指令组合,汇编语言,高级语言,机器语言,评价一个程序优劣的因素有哪些?,汇编指令的格式:,标号:操作码助记符 操作数1 ,操作数2 ;注释,1、标号,标号:用字符表示的该行指令的符号地址; 所用字符不超过8个(不能用关键字),2、操作码助记符,操作码助记符 :用助记符的形式表示指令的操
2、作类型; 指令系统中每条指令的操作码是唯一的,3、操作数,操作数表示操作的数据或数据地址;,4、注释,寻址方式,二、伪指令,不产生可执行的目标代码,只对汇编过程进行控制,或对符号、标号赋值,1、ORG(Origin 汇编起始命令),ORG 16位地址/符号地址,作用:规定ORG伪指令下面的目标程序起始地址,例如:ORG 0000HAJMP MAIN;LJMP MAINORG 0003HLJMP INTEXT0ORG 0040HMAIN:,3)源程序开始处若无ORG伪指令,程序从0000H 处开始存放,注意:,1)一个源程序中,可多次使用ORG伪指令,规 定不同的程序段起始地址,2)ORG伪指令
3、规定的地址必须从小到大,不允 许有地址重叠,ORG 0010H LJMP MAIN1 ORG 0020H LJMP MAIN2 ORG 0040HMAIN1: MOV A,#0FFH SJMP $MAIN2: MOV A,#00H SJMP $ END,判断如下程序段的合法性:,2、END (汇编结束命令),标号: END,作用:表示对源程序的汇编结束,注意:,1)一个源程序中,只能有一个END伪指令,2)END伪指令以后的源程序不被汇编,故END伪指 令必须放在整个源程序的最后,例如: ORG 1000H DB 45H,73,5,A,a DB 1010001B,ABC,3、DB (Defin
4、e Byte 定义字节命令),标号: DB 8位二进制数据或数据表项,作用:从指定的程序存储器地址单元开始,存放8位(一个字节)二进制数据或数据表项,ORG 1000HDB 45H,73,5,A,aDB 1010001B,ABC,注意:,1)该伪指令经汇编后,影响程序存储器内容,2)数据形式可以是16进制数、10进制数、2进制数、 ASCII码、字符串等,3)字符/字符串可用单引号或双引号括起来,表示 ASCII码,例如: ORG 1500H DW 7234H,8AH,10,”AB” DW 1010001B,4、DW (Define Word 定义字命令),标号: DW 16位二进制数据或数据
5、表项,作用:从指定的程序存储器地址单元开始,存放 16位二进制数据或数据表项,例如: ORG 1500H DB 10H,20H,50H DS 56H DB 34H,25H,5、DS (Define Space 定义空间命令),标号: DS 表达式,作用:从指定的程序存储器地址单元开始,预留 一块存储区(由表达式的值确定),以备 源程序使用,例如:AA EQU R0A10 EQU 10HDELAY EQU 1000HMOV A,A10MOV A,#A10LCALL DELAYMOV A,AA,6、EQU (Equate 等值命令),符号名 EQU 数据或汇编符号,作用:将一个数或某汇编符号赋予符
6、号名,注意:,1)EQU伪指令必须先定义,后使用,2)定义的字符名可用作数据字节地址、立即数,3)不能对该符号名进行运算 如:MOV A,A10+1,例如:AA EQU R0MOV A,A10+1MOV A,#A10MOV A,AAA10 DATA 10H,7、DATA (数据地址赋值命令),符号名 DATA 数据或表达式,作用:将一个数据或表达式值赋予符号名,4)用DATA定义的字符名可出现在表达式中 如:MOV A,A10+1,注意:,1)DATA伪指令可以后定义,先使用,2)用EQU可将一个汇编符号赋给字符名,用DATA则 不能,3)用DATA可将一个表达式的值赋给字符名(表达式 是可求
7、值的),用EQU则不能 如:A10 DATA 30H+10H,例如: ROM1_CS BIT P2.7 ROM2_CS BIT P2.6 RAM1_CS BIT P2.5 CLR ROM1_CS SETB ROM2_CS,8、BIT (定义位地址符号命令),位地址字符名 BIT 位地址,作用:将位地址赋予字符名,三、MCS-51指令的寻址方式,寻址方式:寻找操作数或操作数地址的方式, 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 基址寄存器加变址寄存器的间接寻址 相对寻址 位寻址,MCS-51单片机共有 7 种寻址方式:,1234H,1235H,MOV A,#62H,62H,1、立即寻址(给
8、寄存器或存储器赋值),3)寻址空间:程序存储器,2)指令中直接给出操作数,MOV DPTR,#1234H,MOVX A,DPTR,1000H,1001H,12H,1002H,34H,)可访问三种地址空间: SFR 内部数据存储器RAM地址空间的低128B 位地址空间,直接位地址,直接字节地址,2、直接寻址,)在指令中直接给出操作数的地址(直接地址),)指令形式为: MOV A,directMOV direct,direct MOV C,bit, 例如:已知(A)=0FFH,内部RAM的65H单元内容 为00H,在0145H处执行指令: MOV 65H,A,MOV 65H,A,FFH,直接地址,
9、3、寄存器寻址,MOV A,Rn ;n=0 7,1)操作数存放在工作寄存器(R0 R7)中,2)对A、B、DPTR、Cy寄存器的操作也可为该寻址 方式,3)被寻址的寄存器隐含在操作码中,也称为“隐 含寻址”, 例如:已知(R3)= 4FH ,(A)=10H,在0145H处 执行指令MOV A,R3,4FH,)用DPTR作间址寄存器,寻址外部RAM的64KB空间 (0000H0FFFFH),4、寄存器间接寻址,)寻址空间:, 内部RAM(R0, R1,SP), 外部RAM (R0, R1, DPTR),)寄存器的内容作为操作数的地址,该地址所指 的单元内容为操作数,对该地址单元进行读/写,)用R
10、0、R1作间址寄存器,寻址内部或外部RAM的 256B空间(00H0FFH),)寄存器间接寻址符,6)内部RAM用MOV指令 ,外部RAM用MOVX指令,MOV A,RiMOVX A,DPTR, 例1:已知(A)=47H,R0的内容为65H,在 0145H 处执行指令:MOV A,R0,MOV A,R0,10H,R0, 例2:已知(A)=47H,DPTR的内容为30FEH,在 100AH处执行指令:MOVX A,DPTR,MOVX A,DPTR,10H,MOVC A,A+PC;查表指令MOVC A,A+DPTR;取ROM中表格数据JMP A+DPTR;转移指令,5、基址寄存器加变址寄存器间接寻
11、址,3)寻址空间:,程序存储器,程序计数器PC/数据指针DPTR,累加器A,1)操作数地址=基址寄存器内容+变址寄存器内容,2)指令形式为:, 例3:已知ROM中的5000H处开始存放09对应的七段 码。取出A中值08H对应的七段码。,MOVC A,A+DPTR,5000H,08H,+),5008H,7FH,8位带符号二进制数(-128+127), 例3:PC值为1000H,进位标志C=1,执行指令 JC 65H,6、相对寻址,3)寻址空间:,程序存储器,1)有效地址 = PC的当前值+ 相对偏移量(rel),2)用于控制程序的转移,指令执行前 PC ,PC = 1000H + 2 + 65H
12、 = 1002H + 65H = 1067H,JC 65H,指令执行后 PC”,跳过65H个单元,loop : sjmp loop或 sjmp $,sjmp $,指令执行前 PC,PC = PC” +rel = PC+2+rel = PC故: rel = -2 =(1111,1110)2=FEH, 例4:指令如下,该指令为2字节指令,作用是死循 环,指令中偏移量用符号表示,该符号的实际 偏移量值为多少?,指令执行后 PC”,FEH,例如: CLR 80H ;清除SFR中的80H位,即(P0.0)=0 SETB 00H ;置位内部RAM的00H位,即(20H.0)=1,7、位寻址方式,2)以位为
13、单位进行寻址,1)寻址空间:, 内部RAM的可位寻址位(20H2FH单元的各位), SFR中地址能被8整除的寄存器(可位寻址寄 存器)的各位,3)具体寻址方式在指令系统中讲述,寻址方式小结:,外部RAM(256B64KB ),寄存器间接寻址 R0 R1,FFFFH,ROM(064KB),外部RAM(256B),0000H,0100H,直接寻址,寄存器间接寻址 R0 R1,寄存器间接寻址 DPTR,基址+变址间接寻址,伪指令,四、MCS-51指令系统, 按字节划分: 单字节指令:49 双字节指令:45 三字节指令:17,指令系统共111条:,(指令字节数少,可提高存储器的利用率), 按机器周期划
14、分: 单机器周期:64 双机器周期:45 四机器周期:2(乘、除指令),(指令机器周期数少 , 可提高程序的执行效率 , 速度更快), 按指令的功能分类: 数据传送类 (29条) 算术运算类 (24条) 逻辑运算类 (24条) 控制程序转移类 (17条) 布尔(位)处理类 (17条), 除用POP或MOV指令修改PSW内容外,一般不影响 标志位:C、 AC、OV(但对累加器A的操作会影 响P标志位),1、数据传送类指令(29条), 片内数据存储器的数传:MOV 片外数据存储器的数传:MOVX 查表传送:MOVC 交换:XCH、XCHD、SWAP 堆栈操作:PUSH、POP,MOV 目的单元,源操作数 将源操作数传送到目的单元中,