1、单片机原理与接口应用单片机原理与接口应用第四章 指令系统MCS51l一、指令和指令格式 l 指令:是CPU根据人的意图来执行某种操作的命令。 l指令系统 :一台计算机所能执行的全部指令的集合 。 8051单片机指令系统功能很强,例如,它有乘、除法指令,丰富的条件转移类指令,并且使用方便、灵活。 程序:要使计算机按照人的思维完成一项工作,就必须让CPU按顺序执行各种操作,即一步步地执行一条条的指令,这些按人的要求编排的指令操作序列称为程序。程序设计:编排程序的过程就叫作程序设计。 程序设计语言 :分为机器语言、汇编语言和高级语言。 l本章重点介绍汇编语言。 l目标程序:目标程序:机器语言用二进制
2、编码表示每条指令,它是机器语言用二进制编码表示每条指令,它是计算机能直接识别和执行的语言。用机器语言编写的程计算机能直接识别和执行的语言。用机器语言编写的程序称为机器语言程序或指令程序序称为机器语言程序或指令程序(机器码程序机器码程序)。因为机。因为机器只能直接识别和执行这种机器码程序,所以又称它为器只能直接识别和执行这种机器码程序,所以又称它为目标程序。目标程序。 l例如,要做例如,要做1010加加2020的加法,在的加法,在MCSMCS5l 5l中可用机器码指中可用机器码指令编程:令编程: 01110100 00001010 01110100 00001010 把把1010放到累加器放到累
3、加器A A中中 00100l00 00 010100 A加加 20,结果放,结果放A中中l为了便于书写和记忆,可采用十六进制表示指令码,以为了便于书写和记忆,可采用十六进制表示指令码,以上两条指令可写成上两条指令可写成 74 074 0AHAH 24 14H 显然,用机器语言编写程序不易记忆、不易查错,不易修改。显然,用机器语言编写程序不易记忆、不易查错,不易修改。 l汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。l汇编语言不象高级语言(如BASIC)那样通用性强,而是属于某种计算机所独有,与计算机的内部硬件结构密切相关。l用汇编语言编写的
4、程序叫汇编语言程序。 l把汇编语言源程序翻译成目标程序的过程称为汇编过程,简称汇编。l完成这个任务有两种方法: 手工汇编: 所谓手工汇编是程序设计人员根据机器语言指令与汇编语言指令对照表,把编好的汇编语言程序翻译成目标程序。 如上述10加20的例子可写成: 汇编语言程序 机器语言程序 MOV A,#0AH 74 0AH ADD A,#14H 24 14H 机器汇编: 许多公司为了方便用户,编制了一些软件,能将用户编写的汇编语言源程序翻译成目标程序。l在单片机应用系统中,源程序设计好后,还要翻译成二进制机器语言的目标程序,计算机才可执行,这一过程称汇编。l反汇编: 在分析现成产品ROMEPROM
5、芯片中的程序时,有时要将二进制机器语言翻译成汇编语言,该过程称为反汇编。 8051汇编语言指令由操作码助记符字段和操作数字段两部分组成。指令格式如下: l 操作码 目的操作数 ,源操作数 例如: MOV A, #OOHl操作码部分规定了指令所实现的操作功能,由25个英文字母表示,例如:JB、MOV、DJNZ、LCALL等。 l 操作数部分指出了参与操作的数据来源和操作结果存放在什么空间单元。操作数可以直接是一个数(立即数),或者是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数。 l操作码和操作数都有对应的二进制代码,指令代码由若干字节组成。l805l指令系统中,有一字节、两字
6、节或三字节指令。l (1) 一字节指令 一字节指令中的8位二进制代码既包含操作码的信息,也包含操作数的信息。如:INC A 805l单片机共有49条一字节指令。l(2) 双字节指令用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址: 其指令格式为: 操作码 立即数或地址 如:MOV A, #00H 8051中有45条双字节指令。 (3) 三字节指令一个字节操作码,两个字节操作数。 其格式如下: 操作码 立即数或地址 立即数或地址 8051单片机共有三字节指令17条 如:MOV 90H, #00H l伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序(机器码),它只是用来对汇
7、编过程进行某种控制。l标准的MCS5l汇编程序(如Intel的ASM51)定义的伪指令常用的有以下几条: l(1) ORG 汇编起始命令 格式: ORG 16位地址 其功能是规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址, 例如: ORG 2000H START: MOV A,#64H 既规定了标号START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。l ORG可以多次出现在程序的任何地方,当它出现时,下一条指令的地址就由此重新定位。 (2) END 汇编结束命令 END命令通知汇编程序结束汇编。在END之后所有的汇编语言指令均不予以处理。 (3)
8、 EQU 赋值命令 格式: 字符名称 EQU 项(数或汇编符号) EQU命令是把“项”赋给“字符名称”,注意这里的字符名称不等于标号(其后没有冒号),其中的项,可以是数也可以是汇编符号。 用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。因此,它可以是8位的、也可以是16位的。如: AA EQU R1 ;AA就代表了工作寄存器Rl MOV A, AA ;l(4) DATA 数据地址赋值命令 格式: 字符名称 DATA 表达式 l(5) DB 定义字节命令 格式: DB项或项表 l(6) DW 定义字命令 格式: DW 16位数据项或项表 l(7) DS 定义存储空间命令
9、格式: DS表达式 l(8) BIT 位地址符号命令 格式: 字符名 BIT 位地址 寻址寻址就是寻找指令中操作数或操作数所在地址。就是寻找指令中操作数或操作数所在地址。寻址方式寻址方式就是如何找到存放操作数的地址就是如何找到存放操作数的地址 把操作数提取出来的方法,它是计算机的重把操作数提取出来的方法,它是计算机的重要性能指标之一,也是汇编语言程序设计中最要性能指标之一,也是汇编语言程序设计中最基本的内容之一,必须十分熟悉,牢固掌握。基本的内容之一,必须十分熟悉,牢固掌握。 l 寄存器寻址 l 直接寻址 l 立即数寻址 l 寄存器间接寻址 l 变址寻址 l 相对寻址 l 位寻址 l寄存器寻址
10、就是由指令指出寄存器组R0R7中某一个或其它寄存器(A、B、DPTR等)的内容作为操作数。l例如 MOV A, R0l MOV P1, A l ADD A, R0 l在指令中直接给出操作数所在存储单元的地址,称直接寻址方式。此时,指令中操作数部分是操作数所在地址。 l在8051中,使用直接寻址方式可访问片内RAM的128个单元以及所有的特殊功能寄存器(SFR)。对于特殊功能寄存器,既可以使用它们的地址,也可以使用它们的名字。 例如: MOV A, 3AH ;(3AH) A 把片内RAM中3AH这个单元的内容送累加器A。 MOV A, P1 ;(P1口) A 是把SFR中P1口内容送A,它又可写
11、成 MOV A, 90H 其中90H是P1口的地址。 l指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。 例如: MOV A, 3AH ;(3AH) A MOV A, #3AH ;3AHA 前者是表示把片内RAM中3AH这个单元的内容送累加器A, 而后者则表示把3AH这个数 又:MOV DPTR, #2000H ;l操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。l8051规定R0或R1为间接寻址寄存器,它可寻址内部RAM低位地址的128字节单元内容。还可采用数据指针(DPTR)作为间接寻址寄存器,
12、寻址外部数据存储器的64K字节空间, 例如,将片内RAM 65H单元的内容47H送A,可执行指令: MOV R0, #65H ; R065H MOV A,R0 ; A(65H) 指令的执行过程为:当程序执行到本指令时,以指令中所指定的工作寄存器R0内容(65H)为指针,将片内RAM 65H单元内容47H送累加器A。l变址寻址是以某个寄存器的内容为基地址,然后在这个基地址的基础上加上地址偏移量形成真正的操作数地址。8051中采用数据指针DPTR或PC为变址寄存器,地址偏移量是累加器A的内容,以DPTR或PC的内容与累加器A的内容之和作为操作数的l 6位程序存储器地址。在8051中,用变址寻址方式
13、只能访问程序存储器,访问的范围为64KB。当然,这种访问只能从ROM中读取数据而不能写入。例如: MOVC A, A十DPTR ;(A)十(DPTR) A 这种方式多用于查表操作。 l相对寻址只出现在相对转移指令中。l相对转移指令执行时,是以当前的PC值加上指令中规定的偏移量rel而生成实际的转移地址的,这里所说的PC的当前值是执行完相对转移指令后的PC值。l一般将相对转移指令操作码所在地址称为源地址,转移后的地址称为目的地址,则有: 目的地址源地址十2(相对转移指令字节数)十rel例如:执行指令 SJMP rel l采用位寻址方式的指令,其操作数将是8位二进制数中的某一位。在指令中给出的是位地址,即给出片内RAM某一单元中的一位。l位地址在指令中用Bit表示。例如,CLR bit l 8051单片机片内RAM有两个区域可以位寻址,其一是20H一2FH的l 6个单元中的128位;其二是字节地址能被8整除的特殊功能寄存器。 l在805l中,位地址常用下列两种方式表示: l 直接使用位地址。对于20H一2FH的16个单元共128位的位地址分布是00H一7FH。l 对于特殊功能寄存器,可以直接使用位地址,又可以直接用寄存器名字加位数表示,如PSW3等。