1、第四章第四章 MCS-51MCS-51汇编语言程序设计汇编语言程序设计课件制作:高惠芳课件制作:高惠芳 4.1 4.1 机器语言和汇编语言机器语言和汇编语言 指令系统:指令系统:一台计算机所能识别、执行的指令的集合就是它一台计算机所能识别、执行的指令的集合就是它的指令系统。的指令系统。机器语言:机器语言:指令系统是一套控制计算机执行操作的二进制编指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。机器语言指令是计算机唯一能识别和执码,称为机器语言。机器语言指令是计算机唯一能识别和执行的指令。行的指令。汇编语言:汇编语言:指令系统是利用指令助记符来描述的,称为汇编指令系统是利用指令助记符
2、来描述的,称为汇编语言。语言。计算机的指令系统一般都是利用汇编语言描述的,是由计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。计算机硬件设计所决定的。指令系统没有通用性。单片机一般是空机,未含任何系统软件。因此在第一次单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程使用前,必须对其进行编程 4.1 4.1 单片机程序设计语言概述单片机程序设计语言概述高级语言:高级语言:BASIC、PL/M、C语言语言应用最广泛的是应用最广泛的是C语言语言优点:优点:可以大大提高单片机应用系统研制开发的效率可以大大提高单片机应用系统研制开发的效
3、率 易移植,有助于打破不同单片机之间的界限易移植,有助于打破不同单片机之间的界限缺点:缺点:生成的目标程序代码较长,导致程序运行速度较慢生成的目标程序代码较长,导致程序运行速度较慢4.1.2 4.1.2 汇编语言指令格式与伪指令汇编语言指令格式与伪指令 1 1常用单位与术语常用单位与术语 位位(bitbit):位位是是计计算算机机所所能能表表示示的的最最小小的的、最最基基本本的的数数据据单单位,位通常是指一个二进制位。位,位通常是指一个二进制位。字字节节(ByteByte):一一个个连连续续的的8 8位位二二进进制制数数码码称称为为一一个个字字节节,即即1Byte=8bit1Byte=8bit
4、字(字(WordWord):):通常由通常由1616位二进制数码组成,即位二进制数码组成,即1Word=2Byte1Word=2Byte。字长:字长:字长是指计算机一次处理二进制数码位的多少。字长是指计算机一次处理二进制数码位的多少。MCS-51MCS-51型单片机是型单片机是8 8位机,所以说它的字长为位机,所以说它的字长为8 8位。位。MCS-51MCS-51系列单片机都是以系列单片机都是以IntelIntel公司最早的典型产品公司最早的典型产品80518051为核心,增加了一定的功能部件后构成的。本章以为核心,增加了一定的功能部件后构成的。本章以80518051为主介为主介绍绍MCS-
5、51MCS-51系列单片机系列单片机 。2 2汇编语言指令格式汇编语言指令格式 指指令令格格式式:指指令令的的表表示示方方式式称称为为指指令令格格式式,它它规规定定了了指指令令的的长长度和内部信息的安排。完整的指令格式如下:度和内部信息的安排。完整的指令格式如下:标号标号:操作码操作码 操作数操作数,操作数操作数;注释注释 其中:其中:项是可选项。项是可选项。标标号号:指指本本条条指指令令起起始始地地址址的的符符号号,也也称称为为指指令令的的符符号号地地址址。代表该条指令在程序编译时的具体地址。代表该条指令在程序编译时的具体地址。操操作作码码:又又称称助助记记符符,它它是是由由对对应应的的英英
6、文文缩缩写写构构成成的的,是是指指令令语语句句的的关关键键。它它规规定定了了指指令令具具体体的的操操作作功功能能,描描述述指指令令的的操操作作性质,是一条指令中不可缺少的内容。性质,是一条指令中不可缺少的内容。操操作作数数:它它既既可可以以是是一一个个具具体体的的数数据据,也也可可以以是是存存放放数数据据的的地地址。址。注注释释:注注释释也也是是指指令令语语句句的的可可选选项项,它它是是为为增增加加程程序序的的可可读读性性而而设设置置的的,是是针针对对某某指指令令而而添添加加的的说说明明性性文文字字,不不产产生生可可执执行行的目标代码。的目标代码。伪指令(也称为汇编程序的控制命令)是程序员发给
7、汇编伪指令(也称为汇编程序的控制命令)是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。用户程序代码的位置。伪指令只出现在汇编前的源程序中,仅提供汇编用的某些伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是控制信息,不产生可执行的目标代码,是CPUCPU不能执行的指令。不能执行的指令。(1 1)定位伪指令)定位伪指令ORGORG 格式:格式:ORG nORG n 其中:其中:n n通常为绝对地址,可以是十六进制数、标号或通常为绝对地址,可以是十六进制数、标号或 表
8、达式。表达式。功能:规定编译后的机器代码存放的起始位置。功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但在一个汇编语言源程序中允许存在多条定位伪指令,但 每一个每一个n n值都应和前面生成的机器指令存放地址不重叠。值都应和前面生成的机器指令存放地址不重叠。例如程序:例如程序:ORGORG1000H1000H START START:MOVMOVA A,#20H#20H MOV MOVB B,#30H#30H 3 3伪指令伪指令 (2 2)结束汇编伪指令)结束汇编伪指令ENDEND 格式:格式:标号标号:END :END 表达式表达式 功功能能:放放在在
9、汇汇编编语语言言源源程程序序的的末末尾尾,表表明明源源程程序序的的汇汇编编到到此此结束,其后的任何内容不予理睬。结束,其后的任何内容不予理睬。(3 3)赋值伪指令)赋值伪指令EQUEQU 格式:格式:字符名称字符名称x EQU x EQU 赋值项赋值项n n 功功能能:将将赋赋值值项项n n的的值值赋赋予予字字符符名名称称x x。程程序序中中凡凡出出现现该该字字符符名名称称x x就就等等同同于于该该赋赋值值项项n n,其其值值在在整整个个程程序序中中有有效效。赋赋值值项项n n可可以以是是常常数数、地地址址、标标号号或或表表达达式式。在在使使用用时时,必必须须先先赋赋值值后后使使用。用。“字符
10、名称字符名称”与与“标号标号”的区别是的区别是“字符名称字符名称”后无冒号,后无冒号,而而“标号标号”后面有冒号。后面有冒号。(4 4)定义字节伪指令)定义字节伪指令DBDB 格式:格式:标号标号:DB x:DB x1 1,x,x2 2,x,xn n 功功能能:将将8 8位位数数据据(或或8 8位位数数据据组组)x x1 1,x x2 2,x xn n顺顺序序存存放放在在从从当当前前程程序序存存储储器器地地址址开开始始的的存存储储单单元元中中。x xi i可可以以是是8 8位位数数据据、ASCIIASCII码码、表表达达式式,也也可可以以是是括括在在单单引引号号内内的的字字符符串串。两两个个数
11、数据据之之间用逗号间用逗号“,”分隔。分隔。x xi i为数值常数时,取值范围为为数值常数时,取值范围为00H00HFFHFFH。x xi i为为ASCIIASCII码时,要码时,要使用单引号使用单引号,以示区别。,以示区别。x xi i为字符串常数时,其长度不应超为字符串常数时,其长度不应超过过8080个字符。个字符。例如:例如:DB -2DB -2,-4-4,-6-6,1010,1111,1717把把6 6个数转换为十六进制表示(即个数转换为十六进制表示(即FEHFEH,0FCH0FCH,0FAH0FAH,0AH0AH,0BH0BH,11H11H),并连续存放在),并连续存放在6 6个程序
12、存储单元中个程序存储单元中例如:存放数码管显示的十六进制数的字形码,可使用例如:存放数码管显示的十六进制数的字形码,可使用 多条多条DBDB命令定义:命令定义:(5 5)定义双字节伪指令)定义双字节伪指令DWDW 格式:格式:标号标号:DW x:DW x1 1,x,x2 2,x,xn n 功能:将双字节数据功能:将双字节数据 或双字节数据组或双字节数据组 顺序存放在从标号指定顺序存放在从标号指定地址单元开始的存储单元中。其中,地址单元开始的存储单元中。其中,x xi i为为1616位数值常数,占两个位数值常数,占两个存储单元,先存高存储单元,先存高8 8位(存入低位地址单元中),后存低位(存入
13、低位地址单元中),后存低8 8位(存位(存入高位地址单元中)。入高位地址单元中)。例如:例如:注意:注意:DBDB和和DWDW定义的数表,数的个数不得超过定义的数表,数的个数不得超过8080个。个。如数据的数目较多时,可使用多个定义命令如数据的数目较多时,可使用多个定义命令一般以一般以DBDB来定义数据,以来定义数据,以DWDW来定义地址来定义地址(6 6)预留存储空间伪指令)预留存储空间伪指令DSDS 格式:格式:标号标号:DS n:DS n 功能:从标号指定地址单元开始,预留功能:从标号指定地址单元开始,预留n n个存储单元,汇编时个存储单元,汇编时不对这些存储单元赋值。不对这些存储单元赋
14、值。n n可以是数据,也可以是表达式。可以是数据,也可以是表达式。(7 7)定义位地址符号伪指令)定义位地址符号伪指令BITBIT 格式:字符名称格式:字符名称x BIT x BIT 位地址位地址n n 功能:将位地址功能:将位地址n n的值赋予字符名称的值赋予字符名称x x。程序中凡出现该字符。程序中凡出现该字符名称名称x x就代表该位地址。位地址就代表该位地址。位地址n n可以是绝对地址,也可以是符可以是绝对地址,也可以是符号地址。号地址。AQ BIT P1.0(8 8)数据地址赋值伪指令)数据地址赋值伪指令DATADATA 格式:字符名称格式:字符名称x DATA x DATA 表达式表
15、达式n n 功能:把表达式功能:把表达式n n的值赋值给左边的字符名称的值赋值给左边的字符名称x x。n n可以是数可以是数据或地址,也可以是包含所定义的据或地址,也可以是包含所定义的“字符名称字符名称x x”在内的表达在内的表达式,但不能是汇编符号。式,但不能是汇编符号。DATADATA与与EQUEQU的主要区别是:的主要区别是:EQUEQU定义的定义的“字符名称字符名称”必须先必须先定义后使用,而定义后使用,而DATADATA定义的定义的“字符名称字符名称”没有这种限制。所没有这种限制。所以,以,DATADATA伪指令通常用在源程序的开头或末尾。伪指令通常用在源程序的开头或末尾。4.2.1
16、 手工编程和汇编4.2.2 机器编辑和交叉汇编机器编辑:借助与PC机或开发器进行程序设计.其扩展名为*.asm交叉汇编:借助PC机运行汇编程序将汇编语言转换成单片机能识别的机器码过程.4.2 单片机汇编语言源程序的编辑单片机汇编语言源程序的编辑和汇编和汇编4.3 单片机汇编语言程序设计单片机汇编语言程序设计设计步骤设计步骤1、拟定设计任务书、拟定设计任务书2、建立数学模型、建立数学模型3、确定算法、确定算法4、分配内存单元,编制程序流程图、分配内存单元,编制程序流程图5、编制源程序、编制源程序6、上机调试及程序优化、上机调试及程序优化单片机汇编语言程序的基本结构形式单片机汇编语言程序的基本结构
17、形式3种形式种形式顺序结构顺序结构分支结构分支结构循环结构循环结构4.3.1 4.3.1 顺序程序顺序程序 顺序程序是最简单的程序结构,在顺序程序中既无顺序程序是最简单的程序结构,在顺序程序中既无分支、循环,也不调用子程序,程序执行时一条一条地分支、循环,也不调用子程序,程序执行时一条一条地按顺序执行指令。按顺序执行指令。例例4.3.1 将片内将片内RAM 30H单元中的两位单元中的两位压缩压缩BCD码转换成二进制数送到片内码转换成二进制数送到片内RAM 40H单元中单元中.(P63)ORG 1000HSTART:MOV A,30H ;取两位取两位BCD压缩码压缩码a1a0送送AANL A,#
18、0F0H ;取高取高4位位BCD码码a1SWAP A ;高高4位与低位与低4位换位位换位MOV B,#0AH ;将二进制数将二进制数10送入送入BMUL AB ;将将10a1送入送入A中中MOV R0,A ;结果送入结果送入R0中保存中保存MOV A,30H ;再取两位再取两位BCD压缩码压缩码a1a0送送AANL A,#0FH ;取低取低4位位BCD码码a0ADD A,R0 ;求和求和10a1+a0MOV 40H,A ;结果送入结果送入40H保存保存SJMP$;程序执行完,程序执行完,“原地踏步原地踏步”END例例4.3.2 将内部将内部RAM中中20H单元的压缩单元的压缩BCD码拆开,转换
19、成码拆开,转换成相应的相应的ASC码,存入码,存入21H、22H,高位存,高位存22H.(P64)ORG 1000HSTART:MOVA,20H ;取压缩取压缩BCD码码 ANLA,#0FH ;取低位取低位BCD码码 ADD A,#30H ;转换为低位转换为低位ASCII码码 MOV21H,A ;保存低位保存低位ASCII码码 MOVA,20H ;重新取压缩重新取压缩BCD码码 ANLA,#0F0H ;分离高位分离高位BCD码码 SWAPA ;得到高位得到高位BCD码码 ADD A,#30H ;转换为高位转换为高位ASCII码码 MOV22H,A ;保存高位保存高位ASCII码码 SJMP$E
20、ND补充举例:三字节无符号数相加,其中被加数在内部补充举例:三字节无符号数相加,其中被加数在内部RAM的的50H、51H和和52H单元中;加数在内部单元中;加数在内部RAM的的53H、54H和和55H单元中;要求把相加之和存放在单元中;要求把相加之和存放在50H、51H和和52H单元中进位存放在位寻址区的单元中进位存放在位寻址区的20H单元最低位中单元最低位中(即(即20H.0)。)。分析分析:除最低字节可以使用除最低字节可以使用ADDADD指令之外,其它字节指令之外,其它字节相加时要把低字节的进位考虑进去,因此使用相加时要把低字节的进位考虑进去,因此使用ADDCADDC指令指令.MOV 00
21、H,C#20H4.3.2 分支程序设计分支程序有三种形式分支程序有三种形式(见(见P64,图图4.3.2)一、单分支一、单分支二、双分支二、双分支三、多分支三、多分支分支程序设计要点:分支程序设计要点:1、先建立可供条件转移指令测试的条件、先建立可供条件转移指令测试的条件2、选用合适的条件转移指令、选用合适的条件转移指令3、在转移的目的地址处设定标号、在转移的目的地址处设定标号分支程序是通过转移指令实现的分支程序是通过转移指令实现的一、单分支程序一、单分支程序 使用条件转移指令实现,即根据条件对程序使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否的执行进行判断,
22、满足条件则进行程序转移,否则程序顺利执行。则程序顺利执行。可实现单分支程序转移的指令有:可实现单分支程序转移的指令有:JZJZ、JNZJNZ、CJNECJNE、DJNZDJNZ等等还有以位状态作为条件进行程序分支的指令:还有以位状态作为条件进行程序分支的指令:JCJC、JNCJNC、JBJB、JNBJNB和和JBCJBC等等(1 1)单分支结构举例)单分支结构举例例例4.3.3 求符号函数的值。已知片内求符号函数的值。已知片内RAM的的40H单元单元内有一自变量内有一自变量X,编制程序按如下条件求函数编制程序按如下条件求函数Y的值,的值,并将其存入片内并将其存入片内RAM的的41H单元中。见单
23、元中。见P651 X00 X=0-1 X0AH。根据这个关系可以编出转换程序如下,程序以根据这个关系可以编出转换程序如下,程序以R1作为入口和出口。作为入口和出口。ASCHIN:MOV A,R1 ;取操作数;取操作数 CLR C ;清进位标志位;清进位标志位C SUBB A,#30H ;ASCII码减去码减去30H,实现,实现0-9的转换的转换 MOV R1,A ;暂存结果;暂存结果 SUBB A,#0AH ;结果是否;结果是否9?JC LOOP ;若;若9则转换正确则转换正确 XCH A,R1 SUBB A,#07H ;若;若9则减则减37H MOV R1,A LOOP:RET4.3.5 查表程序设计查表程序设计 作业:8910