第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
单片机原理及应用
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
内 容 提 要★概述 ★伪指令 ★汇编语言程序设计步骤 ★顺序程序设计 ★分支程序设计 ★循环程序设计 ★位操作程序设计 ★子程序 ★小结
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
3.1 概述汇编语言是面向机器硬件的语言, 汇编语言是面向机器硬件的语言,要求程序设计者对 MCS-51单片机具有很好的“软、硬结合”的功底。 MCS-51单片机具有很好的“ 硬结合”的功底。 单片机具有很好的 MCS-51单片机的编程语言可以是汇编语言也可以是高 单片机的编程语言可以是汇编语言也可以是高 级语言( 语言),高级语言编程快捷, 级语言(如C语言),高级语言编程快捷,但程序长, 语言),高级语言编程快捷 但程序长, 占用存储空间大,执行慢; 占用存储空间大,执行慢;汇编语言产生的目标程序 简短,占用存储空间小,执行快, 简短,占用存储空间小,执行快,能充分发挥计算机 的硬件功能。无论是高级语言还是汇编语言, 的硬件功能。无论是高级语言还是汇编语言,源程序 都要转换成目标程序(机器语言)单片机才能执行。 都要转换成目标程序(机器语言)单片机才能执行。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计 两种基本类型: 两种基本类型:指令语句和伪指令语句 (1)指令语句 已在第2 已在第2章介绍 每一条指令语句在汇编时都产生一个指令代码——机器代码 机器代码 每一条指令语句在汇编时都产生一个指令代码 (2)伪指令语句 是为汇编服务的。在汇编时没有机器代码与之对应。 是为汇编服务的。在汇编时没有机器代码与之对应。 没有机器代码与之对应 MCS-51的汇编语言的四分段格式如下: MCS-51的汇编语言的四分段格式如下: 的汇编语言的四分段格式如下 标号字段 规则: 规则: (1)标号字段和操作字码段之间要有冒号“:”相隔; 标号字段和操作字码段之间要有冒号“ 相隔; (2)操作码字段和操作数字段间的分界符是空格; 操作码字段和操作数字段间的分界符是空格; (3)双操作数之间用逗号相隔; 双操作数之间用逗号相隔; (4)操作数字段和注释字段之间的分界符用分号“;”相隔。 操作数字段和注释字段之间的分界符用分号“ 相隔。 操作码字段为必选项,其余各段为任选项。 操作码字段为必选项,其余各段为任选项。 操作码字段 操作数字段 注释字段
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单
片机汇编语言程序设计
补充例1 补充例1 下面是一段汇编语言程序的四分段书写格式 标号字段 操作码字段 操作数字段 注释字段 START: MOV A,#00H MOV R1,#10 ;0→A ;10→R1
MOV R2,#00000011B ;3→R2 LOOP:ADD A,R2 ;(A)+(R2)→A 为零, 为零,则循环 NOP HERE: SJMP HERE
DJNZ R1,LOOP;R1内容减1不
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计 基本语法规则: 基本语法规则: 1.标号字段 是语句所在地址的标志符号 (1)标号后边必须跟以冒号“:” 标号后边必须跟以冒号“ (2)由1~8个ASCII字符组成 8 ASCII字符组成 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号 2.操作码字段 是汇编语言指令中唯一不能空缺的部分。 是汇编语言指令中唯一不能空缺的部分。汇编程序就是根据这一字 段来生成机器代码的。 段来生成机器代码的。 3.操作数字段 通常有单操作数、双操作数和无操作数三种情况。如果是双操作数, 通常有单操作数、双操作数和无操作数三种情况。如果是双操作数, 则操作数之间,要以逗号隔开。 则操作数之间,要以逗号隔开。 (1)十六进制、二进制和十进制形式的操作数表示 十六进制、
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计 采用十六进制形式来表示 ,某些特殊场合才采用二进制或十进制的表 示形式 。 十六进制,后缀“ 十六进制,后缀“H” 。 二进制,后缀“ 二进制,后缀“B” 。 十进制,后缀“ 十进制,后缀“D”,也可省略。 也可省略。 若十六进制的操作数以字符A 中的某个开头时,则需在它前面加一个 若十六进制的操作数以字符A~F中的某个开头时,则需在它前面加一个 操作数以字符 “0”,以便在汇编时把它和字符A~F区别开来。 以便在汇编时把它和字符A F区别开来。 (2)工作寄存器和特殊功能寄存器的表示 采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。 采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。 例如,累加器可用A 例如,累加器可用A(或Acc)表示。也可用0E0H来表示,0E0H为累加器 Acc)表示。也可用0E0H来表示,0E0H为累加器 0E0H来表示 A的地址。 的地址。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计 (3)美元符号$的使用 美元符号$ 用于表示该转移指令操作码所在的地址。例如,如下指令: 用于表示该转移指令操作码所在的地址。例如,如下指令: JNB F0, $ 与如下指令是等价的: 与如下指令是等价的: HERE: HERE:JNB 再如: 再如: HERE:SJMP H
ERE: 可写为: 可写为: SJMP 4.注释字段 必须以分号“ 必须以分号“;”开头,换行书写,但必须注意也要以分号“;”开 开头,换行书写,但必须注意也要以分号“ 头。 汇编时,注释字段不会产生机器代码。 汇编时,注释字段不会产生机器代码。 $ HERE F0,HERE
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
编译器C51 编译器
C语言程序 语言程序
汇编语言 源程序
浮 动 地 址 目 标 程 序
绝对地址 目标程序 .BIN
·HEX
汇编器A51 汇编器
连接/定位器 连接 定位器 L51
符号转换程序 OHS51
图 3-1 两种语言源程序转换成目标程序
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
目前很多公司将编辑器、汇编器、编译器、连接/ 目前很多公司将编辑器、汇编器、编译器、连接/定位 符号转换程序做成集成软件包,用户进入该集成环境, 器、符号转换程序做成集成软件包,用户进入该集成环境, 编辑好程序后,只需点击相应菜单就可以完成上述的各步, 编辑好程序后,只需点击相应菜单就可以完成上述的各步, 如WAVE、KEIL ,WAVE集成软件的使用见附录。 WAVE、 WAVE集成软件的使用见附录。 集成软件的使用见附录
汇编 :将汇编语言源程序转换成机器语言 目标程序的 汇编:将汇编语言源程序转换成机器语言目标 源程序转换成机器语言目标程序的过程称为汇编。 过程称为汇编。 汇编程序 : 能将汇编语言 源程序 转换成机器语言 目标 汇编程序:能将汇编语言源程序 转换成机器语言目标 源程序转换成机器语言 程序的系统软件称为汇编程序。 程序的系统软件称为汇编程序。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
汇编的方法:汇编的方法有两种1.手工汇编: 手工汇编: 手工汇编 人工查指令表, 人工查指令表,查出程序中每条指令对应的机器 代码。早期的计算机使用。 代码。早期的计算机使用。 2.机器汇编: .机器汇编: 用计算机中的汇编程序对用户源程序进行汇编。 用计算机中的汇编程序对用户源程序进行汇编。 用机器汇编要提供给汇编一些信息,遵循汇编程序 用机器汇编要提供给汇编一些信息, 的一些约定。这些由伪指令指定。 的一些约定。这些由伪指令指定。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
1)确定程序中每条汇编语言指令的指令机器码 确定程序中每条汇编语言指令的指令机器码 2)确定每条指令在存储器中的存放地址 确定每条指令在存储器中的存放地址 3)提供错误信息 提供错误信息 4)提供目标执行文件 提供目标执行文件(
*.OBJ/*.HEX)和列表文件 和列表文件(*.LST) 提供目标执行文件 和列表文件
地址 2000H 2002H
机器码 78 30 E6
源程序 ORG 2000H MAIN: MOV R0,#30H : , MOV A,@R0 , …
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
3.2伪指令 伪指令一、汇编语言指令类型在MCS-51 汇编语言源程序中应有向汇编程序发出的指 示信息,告诉它如何完成汇编工作, 示信息,告诉它如何完成汇编工作,这是通过使用伪 指令来实现的。 指令来实现的。 也称为汇编程序控制命令。 也称为汇编程序控制命令。只有在汇编前的源程序中才 有伪指令。经过汇编得到目标程序(机器代码) 有伪指令。经过汇编得到目标程序(机器代码)后, 伪指令已无存在的必要,所以“ 体现在汇编时, 伪指令已无存在的必要,所以“伪”体现在汇编时, 伪指令没有相应的机器代码产生。 伪指令没有相应的机器代码产生。 宏汇编功能: 宏汇编功能:将需要反复多次执行的程序段定义成一个宏 指令名(宏定义)。编程时, )。编程时 指令名(宏定义)。编程时,可在程序中使用宏指令名来替 代被定义的程序段(宏调用)。 代被定义的程序段(宏调用)。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
宏定义过程: 宏定义过程 宏指令名 MACRO 形式参数 … ENDM … 宏指令名 … 宏指令名
;被定义的程序段
宏调用过程: 宏调用过程:
实际参数 实际参数
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
二.伪指令 常用伪指令及功能: 常用伪指令及功能:1.起始指令 ORG nn 起始指令 功能:定义程序或数据块的起始地址。 功能:定义程序或数据块的起始地址。指示此语句后面的程序 或数据块以nn为起始地址 连续存放在程序存储器中。 为起始地址, 或数据块以 为起始地址,连续存放在程序存储器中。 指令地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H : , 2002H E6 MOV A,@R0 , … 3000H 3001H 3002H 23 64 41 ORG 3000H TAB: DB 23H,100,‘A’ : , , ’
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
2.字节定义 标号: DB(字节常数, 字节定义 标号: (字节常数, 或字符或表达式) 或字符或表达式)功能: 功能 : 指示在程序存储器中以标号为起始地 址的单元里存放的数为字节数据( 址的单元里存放的数为字节数据 ( 八位二进 制数) 制数)。 例如 LN:DB 32,’C’,25H,-1;LN~ : , ’ , ; ~ LN+3 地址单元依次存放20H , 43H , 25H , 地址单元依次存放 FFH地址 LN 数据
20 43 25 FFGH 12 34 GH+2 56 78 GH+4 00 08
LN+1 LN+2 LN+3
3.
字定义 标号:DW (字常数或表达式) 标号:作用: 作用: 指示在程序存储器中以标号为起始地址 的单元里存放的数为字数据( 位的二进制数), 的单元里存放的数为字数据(即16位的二进制数), 位的二进制数 例如: 例如: GH :DW 1234H,5678H,08 , ,
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
4.保留字节 .
标号: 数值表达式) 标号:DS (数值表达式)
作用: 作用: 指示在程序存储器中保留以标号为起始地 址的若干字节单元,其单元个数由数值表达式指定。 址的若干字节单元,其单元个数由数值表达式指定。 地址开始保留32个存储单元 例如 L1:DS 32 ; 从L1地址开始保留 个存储单元。 : 地址开始保留 个存储单元。 5. 等值指令 标号 EQU(数值表达式) 数值表达式) 两边的量等值,用于为标号或标识符赋值。 表示EQU两边的量等值,用于为标号或标识符赋值。 X1 EQU 2000H 例如: 例如: X2 EQU 0FH … MAIN: MOV DPTR,#X1 ; DPTR=2000H ADD A,#X2 ; A=A+0FH
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
6. 位定义 标号 BIT [位地址] 位地址] 作用: 指令, 作用: 同EQU指令,不过定义的是位操作地址。 指令 不过定义的是位操作地址。 例如 AIC BIT P1.1。 。
7.汇编结束 END 汇编结束 作用: 指示源程序段结束。 作用: 指示源程序段结束。 END指令放在程序的最后。 指令放在程序的最后。 指令放在程序的最后 A51汇编程序还有一些其它的伪指令,列在教材表3-1中,以 汇编程序还有一些其它的伪指令,列在教材表 中 汇编程序还有一些其它的伪指令 备查阅。 备查阅。
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
汇编语言程序设计步骤 一.确定方案和计算方法 二.了解应用系统的硬件配置、性能指标 了解应用系统的硬件配置、 三.建立系统数学模型,确定控制算法和操作步骤 建立系统数学模型, 四.合理分配存储器单元和了解I/O接口地址 合理分配存储器单元和了解 接口地址 五. 编制源程序 1.按功能设计程序,明确各程序之间 按功能设计程序, 按功能设计程序 的相互关系 2. 用流程图表示程序结构和功能 3.程序中用注释说明指令在程序中的 程序中用注释说明指令在程序中的 作用,方便阅读、 作用,方便阅读、调试和修改开始
? N
Y
1
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
常用程序结构 顺序程序、分支程序、 顺序程序、分支程序、 循环程序、 循环程序、子程序 顺序程序设计 例3-1 编程将外部数据存储器 的000EH和000FH单元的内 和 单元的内 容相换。 容相换。
000EH 000FH
000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH 000EH 000FH
分析: 分析 外部数据存储器的数据操 作只能用MOVX指令,且只能 作只能用 指令, 指令 之间传送, 和A之间传送,因此必须用一个 之间传送 中间环节作暂存,设用20H单元。 单元。 中间环节作暂存,设用 单元 用R0、R1指示两单元的低八位 、 指示两单元的低八位 地址,高八位地址由P2指示 指示。 地址,高八位地址由 指示。 编程过程如下: 编程过程如下:
第3章 MCS-51单片机汇编程序设计
第3章 MCS-51单片机汇编语言程序设计 章 单片机汇编语言程序设计
ORG 0000H MOV P2, #0H MOV R0, #0EH MOV R1, #0FH MOVX A, @R0 MOV 20H, A MOVX A, @R1 XCH A, 20H MOVX @R1, A MOV A, 20H MOVX @R0, A SJMP $ END
;送地址高八位至 口 送地址高八位至P2口 送地址高八位至 ;R0= 0EH ;R1=0FH ;A=(000EH) ;(20H)=(000EH) ;A=(000FH) ; A=(000EH),(20H)=(000FH)
;交换后的数送各单元 交换后的数送各单元