目录单片机课程大连理工大学电气系第2章MCS-51指令系统与汇编语言程序设计2.1概述2.2寻址方式2.3MCS-51指令系统2.4汇编语言程序设计2.5高级语言KeilC51简介目录单片机课程大连理工大学电气系2.1概述2.1.1单片机程序设计语言的种类2.1.2汇编语言指令格式及常用伪指令2.1.3MCS-51指令的分类2.1.4MCS-51指令中常用的符号目录单片机课程大连理工大学电气系2.1概述•2.1.1单片机程序设计语言的种类按照语言的结构及其功能可以分为三种:(1)机器语言(MachineLanguage)直接用机器码(0、1代码)编写程序、能够为计算机直接执行的机器级语言。机器码是一串由二进制代码“0”和“1”组成的二进制数据,其执行速度快,但是可读性极差。机器语言一般只在简单的开发装置中使用,程序的设计、输入、修改和调试都很麻烦。机器语言汇编语言高级语言目录单片机课程大连理工大学电气系2.1概述(2)汇编语言(AssemblyLanguage)指用指令助记符代替机器码的编程语言。汇编语言程序结构简单,执行速度快,程序易优化,编译后占用存储空间小,是单片机应用系统开发中最常用的程序设计语言。汇编语言的缺点是可读性比较差,只有熟悉单片机的指令系统,并具有一定的程序设计经验,才能研制出功能复杂的应用程序。•2.1.1单片机程序设计语言的种类按照语言的结构及其功能可以分为三种:机器语言汇编语言高级语言目录单片机课程大连理工大学电气系2.1概述(3)高级语言(High-LevelLanguage)在汇编语言的基础上用接近人的自然语言的语句来编写程序,例如PL/M-51、C51等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的的用户。高级语言是面向过程而独立于机器的通用语言。缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。单片机的汇编语言不但不会被高级语言完全取代,甚至还将继续占据重要地位。2.1•2.1.1单片机程序设计语言的种类按照语言的结构及其功能可以分为三种:机器语言汇编语言高级语言目录单片机课程大连理工大学电气系2.1概述•2.1.2汇编语言指令格式及常用伪指令1、常用单位与术语位(bit):位是计算机所能表示的最小的、最基本的数据单位,通常是指一个二进制位。字节(Byte):一个连续的8位二进制数码称为一个字节,即1Byte=8bit。字(Word):通常由16位二进制数码组成,即1Word=2Byte。字长:字长是指计算机一次处理二进制数码位的多少。MCS-51型单片机是8位机,即它的字长为8位。目录单片机课程大连理工大学电气系2、汇编语言指令格式[标号:]操作码[操作数][,操作数][;注释]2.1概述•2.1.2汇编语言指令格式及常用伪指令其中:[]项是可选项。标号:指本条指令起始地址的符号,也称为指令的符号地址。代表该条指令在程序编译时的具体地址。操作码:又称助记符,它是由对应的英文缩写构成的,是指令语句的关键。它规定了指令具体的操作功能,是一条指令中不可缺少的内容。操作数:它既可以是一个具体的数据,也可以是存放数据的地址。Start:MOVA,#0FH;将循环次数初值送累加器目录单片机课程大连理工大学电气系3、常用伪指令2.1概述•2.1.2汇编语言指令格式及常用伪指令伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是CPU不能执行的指令。目录单片机课程大连理工大学电气系(2)结束汇编伪指令END格式:[标号:]END[表达式]功能:放在源程序的末尾,表明源程序的汇编到此结束。2.1概述(1)定位伪指令ORG格式:ORGn其中:n为绝对地址,可以是十六进制数、标号或表达式。[例]ORG1000HSTART:MOVA,#20HMOVR0,#30H┇MOVX@DPTR,AEND3、常用伪指令•2.1.2汇编语言指令格式及常用伪指令目录单片机课程大连理工大学电气系(3)赋值伪指令EQU格式:字符名称xEQU赋值项n功能:将赋值项n的值赋予字符名称x。2.1概述ORG1000HLEDMAP:DB3fh,06h,5bh,4fh,66h,6dh,7dh,07hDB7fh,6fh,77h,7ch,39h,5eh,79h,71h;LEDBufEQU60h;显示缓冲(4)定义字节伪指令DB格式:[标号:]DBx1,x2,…,xn功能:将8位数据(或8位数据组)x1,x2,…,xn顺序存放在从当前程序存储器地址开始的存储单元中。2.13、常用伪指令•2.1.2汇编语言指令格式及常用伪指令目录单片机课程大连理工大学电气系1、按指令字节数分类单字节指令、双字节指令和三字节指令。2.1概述字节执行时间单字节指令49条1个机器周期指令64条双字节指令46条2个机器周期指令45条三字节指令16条4个机器周期指令2条•2.1.3MCS-51指令的分类MCS-51指令系统有111条指令,可按下列3种方式分类:2、按指令执行时间分类单机器周期指令、双机器周期指令和四机器周期指令。目录单片机课程大连理工大学电气系1、按指令字节数分类2.1概述2、按指令执行时间分类3、按指令功能分类序号功能数量1数据传送指令28条2算术运算指令24条3逻辑运算与移位指令25条4控制转移指令17条5位操作指令17条2.1•2.1.3MCS-51指令的分类MCS-51指令系统有111条指令,可按下列3种方式分类:目录单片机课程大连理工大学电气系•2.1.4指令中的常用符号Rn(n=0~7):表示当前工作寄存器R0~R7中的任一个。Ri(i=0或1):表示当前寄存器组中用于间址的R0或R1。#data:表示8位立即数。#data16:表示16位立即数。direct:表示片内RAM的8位单元地址。addr11:表示11位目的地址,用于ACALL和AJMP指令中。addr16:表示16位目的地址,用于LCALL和LJMP指令中。rel:用补码形式表示的8位二进制地址偏移量,取值范围为128~+127,主要用于相对转移指令。2.1概述目录单片机课程大连理工大学电气系bit:表示片内RAM的位寻址区,或者是可以位寻址的SFR的位地址。A(或ACC)、B:表示累加器、B寄存器。C:表示PSW中的进位标志位Cy。@:在间接寻址方式中,是间址寄存器指针的前缀标志。$:表示当前的指令地址。(X):表示由X所指定的某寄存器或某单元中的内容。((X)):表示由X间接寻址单元中的内容。•2.1.4指令中的常用符号2.1概述2.1目录单片机课程大连理工大学电气系2.2.1寄存器寻址2.2.2直接寻址2.2.3立即数寻址2.2.4寄存器间接寻址2.2.5变址寻址2.2.6相对寻址2.2.7位寻址2.2寻址方式在指令的操作数位置上,用于表征寻找操作数的方法定义为“寻址方式”。正确地理解、掌握寻址方式,是学习、使用指令的关键。在MCS-51单片机中,共使用了以下7种寻址方式——目录单片机课程大连理工大学电气系•2.2.1寄存器寻址指令中含有一个存有操作数的寄存器Rn(n=0~7)2.2寻址方式【特点】寄存器寻址方式的指令大多是单字节指令。寄存器的3位代码与操作码OP共同占用一个指令字节。例:MOVA,Rn;将寄存器Rn中的内容送累加器A中MOVRn,A;将累加器A中的数据送寄存器Rn以MOVA,R7为例,使用R7寄存器,所以rrr=111,即指令的机器码为:0EFH11101rrr操作码OP寄存器代码111E8H~EFHMOVA,RnROM的一个字节2.2目录单片机课程大连理工大学电气系•2.2.2直接寻址指令本身直接给出操作数在RAM中存放的地址。2.2寻址方式MOVA,direct;将内存地址direct中的内容送入累加器MOVdirect1,direct2;将内存地址direct2的内容送入direct1中例如:MOVA,30H;将RAM30H单元数据送累加器A【特点】直接寻址方式的指令为2~3字节指令。每个直接地址自身占用一个指令字节。程序ROMOP30H数据RAM操作数xnn+130H累加器AX目录单片机课程大连理工大学电气系•使用直接寻址应注意的两个问题:1、当地址恰好在SFR区域时,地址也可用寄存器名来表示。•2.2.2直接寻址2.2寻址方式如:MOVA,80H可以写成MOVA,P0后者用SFR中寄存器的名字取代它的物理地址80H。后者更容易阅读和交流,所以提倡使用SFR中寄存器名称来代替直接地址。如:MOVA,SBUF;串口数据缓冲器数据送AMOVTH1,#0FEH;为定时器1赋初值目录单片机课程大连理工大学电气系MOVA,00H;将RAM中00H单元数据送累加器AMOVA,R0;将工作寄存器R0的内容送累加器A返回•2.2.2直接寻址2.2寻址方式2、当直接地址是在工作寄存器区中时,可以使用两种寻址方式来访问。如:使用了不同的寻址方式,指令的结构与字节数也不相同。前者是:11100101(0E5H)、00000000(00H)双字节。后者是:11101000(0E8H)单字节;最好用寄存器寻址方式来访问类似的还有累加器A:INCA寄存器寻址方式(单字节);INCACC直接寻址方式(双字节);INC0E0H直接寻址方式(双字节)。2.2目录单片机课程大连理工大学电气系•2.2.3立即寻址指令中直接含有所需要的操作数data。2.2寻址方式MOVA,#data;将8位立即数送累加器AMOVDPTR,#data16;16位立即数送DPTR寄存器【特点】立即数寻址的指令长度为2或3个字节。90H20H00HROMDPTR例:MOVDPTR,#2000Hnn+1n+2注:对于16位立即数指令,汇编时高8位在前,低8位在后。目录单片机课程大连理工大学电气系【注意】MOVA,#30H与MOVA,30H两者的区别。74H30Hnn+1ROM累加器AMOVA,#30HE5H30Hnn+1ROM累加器AMOVA,30HXX30HRAM•2.2.3立即寻址2.2寻址方式2.2目录单片机课程大连理工大学电气系•2.2.4寄存器间接寻址指令中含有保存操作数地址的寄存器(Ri或DPTR)。CPU首先从寄存器中找到操作数地址,然后再从该地址中找到操作数。2.2寻址方式MOVA,@Ri;MOVXA,@Ri;MOVX@DPTR,A寻址范围:内部RAM低128B(只能使用R0或R1作间址寄存器)、外部RAM。对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器。下列的程序正确吗——MOVR1,#80HMOVA,@R1目录单片机课程大连理工大学电气系MOVR0,#30H;立即数送R0寄存器MOVA,@R0;从RAM的30H单元取数送累加器AROM11100110RAMx30H30HR000H累加器A123•2.2.4寄存器间接寻址【注意】MOVA,@R0和MOVA,R0指令的区别。2.22.2寻址方式MOVA,@R0执行过程示意图目录单片机课程大连理工大学电气系指令使用DPTR或PC中的内容作为基地址,再与累加器A的内容相加,其和作为操作数地址。如:MOVCA,@A+PC;PC内容为基地址与A的内容相加得操作数地址,并将此操作数送AMOVCA,@A+DPTR;DPTR内容为基地址与A的内容相加得操作数地址并将此操作数送A•2.2.5变址寻址这是访问程序存储器ROM中数据的唯一的寻址方式。变址寻址方式用于查表操作,而数据表是建立在程序存储器ROM中。2.2寻址方式目录单片机课程大连理工大学电气系【例】已知ROM中的0300H-0309H为0~9的平方表,编程求A中数据的平方(设A=02H)。02H0300H81644936251694100302H累加器ADPTR0300H(DPTR)+02H(A)0302HMOVCA,@A+DPTR0