2019年大学课件单片机原理及应用 汇编语言程序设计简介

上传人:我*** 文档编号:145106484 上传时间:2020-09-16 格式:PPT 页数:78 大小:526KB
返回 下载 相关 举报
2019年大学课件单片机原理及应用 汇编语言程序设计简介_第1页
第1页 / 共78页
2019年大学课件单片机原理及应用 汇编语言程序设计简介_第2页
第2页 / 共78页
2019年大学课件单片机原理及应用 汇编语言程序设计简介_第3页
第3页 / 共78页
2019年大学课件单片机原理及应用 汇编语言程序设计简介_第4页
第4页 / 共78页
2019年大学课件单片机原理及应用 汇编语言程序设计简介_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《2019年大学课件单片机原理及应用 汇编语言程序设计简介》由会员分享,可在线阅读,更多相关《2019年大学课件单片机原理及应用 汇编语言程序设计简介(78页珍藏版)》请在金锄头文库上搜索。

1、2020年9月16日星期三,单片机原理及应用,docin/sundae_meng,2020年9月16日星期三,第4章 汇编语言程序设计简介,4.1 伪指令 4.2 汇编语言程序设计,docin/sundae_meng,2020年9月16日星期三,伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。它不是单片机执行的指令,所以没有对应的可执行目标码,汇编后产生的目标程序中不会再出现伪指令。 一、起始地址设定伪指令 ORG 格式为:ORG 表达式 该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址。表达式通常为16进制地址,也可以是已定义的标号地址。,4.1伪指令,doci

2、n/sundae_meng,2020年9月16日星期三,ORG 8000H START:MOV A,#30H 此时规定该段程序的机器码从地址8000H单元开始存放。 在每一个汇编语言源程序的开始,都要设置一条ORG伪指令来指定该程序在存储器中存放的起始位置。若省略ORG伪指令,则该程序段从0000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令规定不同程序段或数据段存放的起始地址,但要求地址值由小到大依序排列,不允许空间重叠。,docin/sundae_meng,2020年9月16日星期三,二、汇编结束伪指令 END 格式为:END 该指令的功能是结束汇编。 汇编程序遇到END伪指令后

3、即结束汇编。处于END之后的程序,汇编程序将不处理。,docin/sundae_meng,2020年9月16日星期三,三、字节数据定义伪指令 DB 标号: DB 字节数据表 功能是从标号指定的地址开始,在ROM中定义字节数据。字节数据表可以是一个或多个字节数据、字符串或表达式。该伪指令将字节数据表中的数据根据从左到右的顺序依次存放在指定的存储单元中。一个数据占一个存储单元。例如: ORG 9000H DATA1: DB 73H, 01H, 90H DATA2: DB 02H DB ABCD,3*25,01H.1 11个数据从9000H单元连续存放。,docin/sundae_meng,2020

4、年9月16日星期三,四、字数据定义伪指令 DW 标号: DW 字数据表 功能是从标号指定的地址单元开始,在程序存储器中定义字数据。该伪指令将字或字表中的数据根据从左到右的顺序依次存放在指定的存储单元中。应特别注意:16位的二进制数,高8位存放在低地址单元,低8位存放在高地址单元。例如: ORG 1400H DATA:DW 324AH,3CH 汇编后,(1400H)=32H,(1401H)= 4AH,(1402H)=00H,(1403H)=3CH。,docin/sundae_meng,2020年9月16日星期三,在定义中使用dup重复操作符,格式如下: dup ()例如: ZERO: DB 3D

5、UP(0,0) BUFFER: DB AB , 2DUP(BA , 3DUP(1),docin/sundae_meng,2020年9月16日星期三,五、位地址符号定义伪指令 BIT 格式为:符号名 BIT 位地址表达式 功能是将位地址赋给指定的符号名。其中,位地址表达式可以是绝对地址,也可以是符号地址。 例如: ST BIT P1.0 将P1.0的位地址赋给符号名ST,在其后的编程中就可以用ST来代替P1.0。,docin/sundae_meng,2020年9月16日星期三,六、赋值伪指令 EQU 符号名 EQU 表达式 功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名。例如: L

6、EN EQU 10 BLOCK EQU 22H MOV R7,LEN MOV R0,BLOCK,命令执行后:R7=? R0=? 10 22H,docin/sundae_meng,2020年9月16日星期三,汇编语言的语句格式 语句行由四个字段组成 : 标号:操作码 操作数 ;注释 括号内的部分可以根据实际情况取舍。每个字段之间要用分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等。 如:LOOP:MOV A,#7FH ;A7FH,docin/sundae_meng,2020年9月16日星期三,一、标号 标号是语句地址的标志符号,用于引导对该语句的非顺序访问。有关标号的规定为: 标号由1

7、8个ASCII字符组成。第一个字符必须是字母,其 余字符可以是字母、数字或其他特定字符; 不能使用该汇编语言已经定义了的符号作为标号。如指令助记 符、寄存器符号名称等; 标号后边必须跟冒号。 二、操作码 操作码用于规定语句执行的操作。它是汇编语句中唯一不能空缺的部分。它由指令助记符表示。,docin/sundae_meng,2020年9月16日星期三,三、操作数 操作数用于给指令的操作提供数据或地址。在一条汇编语句中操作数可能是空缺的,也可能包括一项,还可能包括两项或三项。各操作数间以逗号分隔。操作数字段的内容可能包括以下几种情况: (1)工作寄存器名; (2)特殊功能寄存器名; (3)标号名

8、; (4)常数; (5)符号“$”,表示程序计数器PC的当前值; (6)表达式。,docin/sundae_meng,2020年9月16日星期三,四、注释 注释不属于汇编语句的功能部分,它只是对语句的说明。注释字段可以增加程序的可读性,有助于编程人员的阅读和维护。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行接着书写,但换行时应注意在开头使用分号“;”。 五、数据的表示形式 8051汇编语言的数据可以有以下几种表示形式: 二进制数,末尾以字母 B 标识。如:1000 1111B; 十进制数,末尾以字母 D 标识或将字母D省略。如:88D,66; 十六进制数,末尾以字母 H

9、标识。如:78H,0A8H(但应注意的是,十六进制数以字母AF开头时应在其前面加上数字“0”。); ASCII码,以单引号括起来标识。如:AB,1245,docin/sundae_meng,2020年9月16日星期三,ORG 1000H TAB: DB 1,2,3,1,EFGHI DB 2 DUP(?) DB 2 DUP(01H,02H) BUF: DW $-TAB DUP(?),0FFH TT EQU BUF-TAB,TT=?,TT=15,docin/sundae_meng,2020年9月16日星期三,4.2 汇编语言程序设计,4.2.1 简单程序设计,例 1 两个无符号双字节数相加。 设被

10、加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。,docin/sundae_meng,2020年9月16日星期三,程序如下: START: CLR C ; 将Cy清零 MOV R0, 41H ; 将被加数地址送数据指针R0 MOV R1, 51H ; 将加数地址送数据指针R1 AD1: MOV A, R0 ; 被加数低字节的内容送入A ADD A, R1 ; 两个低字节相加 MOV R0, A ; 低字节的和存入被加数低字节中 DEC R0 ; 指向被加数高位字节 DEC R1 ; 指向加数

11、高位字节 MOV A, R0 ; 被加数高位字节送入A ADDC A, R1 ; 两个高位字节带Cy相加 MOV R0, A ; 高位字节的和送被加数高位字节 RET,这一句省略掉可以不?,将这一句的ADDC改为ADD行吗?,这个程序还可以怎么改?,docin/sundae_meng,2020年9月16日星期三,例 2 将两个半字节数合并成一个一字节数。 设内部RAM 40H, 41H单元中分别存放着 8 位二进制数, 要求取出两个单元中的低半字节, 并成一个字节后, 存入 50H单元中。 程序如下:,START: MOV R1, 40H ; 设置R1为数据指针 MOV A, R1 ; 取出第

12、一个单元中的内容 ANL A, 0FH ; 取第一个数的低半字节 SWAP A ; 移至高半字节 INC R1 ; 修改数据指针 XCH A, R1 ; 取第二个单元中的内容 ANL A, 0FH ; 取第二个数的低半字节 ORL A, R1 ; 拼字 MOV 50H, A ; 存放结果 RET,这个程序还可以怎么改呢?,docin/sundae_meng,2020年9月16日星期三,4.2.2 分支程序设计,图 4.1 分支结构框图 (a) 单分支流程; (b) 多分支流程,docin/sundae_meng,2020年9月16日星期三,例 3 x, y均为8位二进制数, 设 x存入R0,

13、y存入R1, 求解:,docin/sundae_meng,2020年9月16日星期三,图 4.2,docin/sundae_meng,2020年9月16日星期三,程序如下: START: CJNE R0, 00H, SUL1 ; R0中的数与00比较不等转移 MOV R1, 00H ; 相等, R1 0 SJMP SUL2 SUL1: JC NEG ; 两数不等, 若(R0)0, 则 R101H SJMP SUL2 NEG: MOV R1, 0FFH ;(R0)0, 则 R10FFH SUL2: RET,docin/sundae_meng,2020年9月16日星期三,例 4 比较两个无符号数的

14、大小。 设外部 RAM 的存储单元 ST1(2000H)和 ST2(2100H)中存放两个不带符号的二进制数, 找出其中的大数存入外部 RAM 中的 ST3(2200H)单元中。,docin/sundae_meng,2020年9月16日星期三,docin/sundae_meng,2020年9月16日星期三,程序如下: ORG 1000H ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H START: MOV DPTR, ST1 ; 第一个数的指针 MOVX A, DPTR ; 取第一个数 MOV R2, A ; 保存 MOV DPTR, ST2 ; 第二个数的

15、指针 MOVX A, DPTR ; 取第二个数 CLR C,docin/sundae_meng,2020年9月16日星期三,SUBB A, R2; 两数比较 JNC BIG1 ; 若第二个数大, 则转 XCH A, R2; 第一个数大 BIG0: MOV DPTR, ST3 MOVX DPTR, A ; 存大数 RET BIG1: MOVX A, DPTR; 第二个数大 SJMP BIG0,docin/sundae_meng,2020年9月16日星期三,4.2.3 循环程序设计,一、 循环程序,图 4.4,docin/sundae_meng,2020年9月16日星期三,循环程序一般由四个主要部分组成: (1) 初始化部分: 为循环程序做准备, 如规定循环次数、 给各变量和地址指针预置初值。 (2) 处理部分: 为反复执行的程序段, 是循环程序的实体, 也是循环程序的主体。 (3) 循环控制部分: 这部分的作用是修改循环变量和控制变量, 并判断循环是否结束, 直到符合结束条件时, 跳出循环为止。 (4) 结束部分: 这部分主要是对循环程序的结果进行分析、 处理和存放。,docin/sundae_meng,2020年9月16日星期三,例 5 工作单元清零。 在应用系统程序设计时, 有时经常需要将存储器中部分

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号