汇编语言程序设计概述课件

上传人:我*** 文档编号:144695279 上传时间:2020-09-13 格式:PPT 页数:50 大小:367.50KB
返回 下载 相关 举报
汇编语言程序设计概述课件_第1页
第1页 / 共50页
汇编语言程序设计概述课件_第2页
第2页 / 共50页
汇编语言程序设计概述课件_第3页
第3页 / 共50页
汇编语言程序设计概述课件_第4页
第4页 / 共50页
汇编语言程序设计概述课件_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《汇编语言程序设计概述课件》由会员分享,可在线阅读,更多相关《汇编语言程序设计概述课件(50页珍藏版)》请在金锄头文库上搜索。

1、,单片机原理及应用,主讲:禹定臣,信息工程系,4.1 汇编语言程序设计概述,汇编语言的特点及其语句格式 汇编语言程序设计的特点,汇编语言的特点及其语句格式,以助记符表示的指令称为汇编语言 1.汇编语言的特点 *占用存储空间小,运行速度快。 *汇编语言是面向计算机的,程序设计人员必须对计算机硬件有相当的了解。 *能直接管理和控制硬件设备。 *缺乏通用性,不易移植,编写较困难。 2.汇编语言的语句格式 : ; 1)标号:语句地址的标志符号,标号由18个ASCII字符组成,第一个字符必须是字母。 不能使用本汇编语言已经定义了的符号作为标号,如指令助记符、伪指令以及寄存器的名称等。 标号后面必须跟冒号

2、。 同一标号在一个程序中只能定义一次,不能重复定义。 没有其它语句访问时,标号可以省略。 2)操作码:规定语句执行的操作是汇编指令中唯一不能空缺的 3)操作数:给指令的操作提供数据或数据所在的地址 操作数的数量03个。多于一个时,操作数之间用逗号分隔。,4)注释:不属于语句的功能部分,便于阅读程序。 以分号开始,长度不限,另起一行时也必须以分号开始。 5)分隔符 *冒号(:) 用于标号后 *空格( ) 用于操作码和操作数之间 *逗号(,) 用于操作数之间 *分号(;) 用于注释前,数据的存放、寄存器和工作单元的使用等要由设计者安排。 要求设计人员对所使用计算机的硬件结构有较详细的了解,特别是对

3、各类寄存器、端口、定时器/计数器、中断等内容能熟练掌握,以便在程序设计中使用。 程序设计的技巧性较高,需要软件与硬件的结合。,汇编语言程序设计的特点,顺序程序 分支程序 循环程序,4.2 单片机汇编语言程序的基本结构形式,程序执行时一条一条按顺序执行指令 例 三字节无符号数字节加法 被加数在内部 RAM 52H、51H、50H中(低字节在低地址中),加数在内部RAM 55H、54H、53H中,要求把相加结果存放在52H、51H、50H中,进位存放在位地址区的00H中。 ORG 0000H MOV R0 ,#50H ;被加数首址 MOV R1 ,#53H ;加数首址 MOV A,R0 ;取被加数

4、低字节 ADD A ,R1 ;被加数与加数相加 MOV R0,A ;存低字节相加结果 INC R0 ;调整地址指针,指向中间字节 INC R1,顺序程序,MOV A,R0 ;取被加数中间字节 ADDC A ,R1;被加数与加数带进位(低字节的进位)加 MOV R0,A ;存中间字节相加结果 INC R0 ;调整地址指针,指向高字节 INC R1 MOV A,R0 ;取被加数高字节 ADDC A ,R1 ;被加数与加数带进位相加 MOV R0,A ;存高字节相加结果 MOV 00H,C ;高字节相加的进位位送00H SJMP $ END,1.单分支程序 用条件转移指令实现JZ、JNZ、CJNE、

5、DJNZ ,或用位寻址指令实现:JC、JNC、JB、JNB、JBC 例4.2 假定在外部RAM 中有ST1、ST2和 ST3共3个连续单元,其中ST1和ST2单元分别存放着两个8位无符号二进制数,要求找出其中的大数并存入ST3单元中。,分支程序,ST1 EQU 0050H ORG 0000H START:MOV DPTR,#ST1 ;设置数据指针 MOVX A,DPTR ;取第一个数 MOV R2 ,A ;第一个数存R2 INC DPTR ;指向第二个数 MOVX A,DPTR ;取第二个数 CLR C ;清进位标志 SUBBA,R2 ;第二个数-第一个数,A 中是差 JNC BIG1 ;第二

6、个数大转移 XCH A ,R2 ;第一个数大,A 中为第一个数 BIG0:INC DPTR ;指向ST3 MOVX DPTR,A ;存大数 HERE:SJMP HERE BIG1:MOVX A,DPTR ;第二个数大,取第二个数 SJMP BIG0 END,2.多分支程序 MCS-51没有多分支转移指令,不能用一条指令实现分支。 1)使用CJNE指令逐次比较,例4.3 某温度控制系统,采集的温度值(Ta )放在累加器A 中。在内部RAM 54H单元存放控制温度下限值(T54 ),在55H单元存放控制温度上限值(T55 )。 若Ta T55 ,程序转向JW(降温处理程序);若Ta T54 ,程序

7、转向SW(升温处理程序);若T55TaT54,则程序转向FH(返回主程序)。 ; 如果转升温程序,出口R0=2;如果转降温程序,出口R0=0;温度在设定范围内,出口R0=1。 TA EQU 43 ;采集的温度值 T54 EQU 42 ;控制温度下限值 T55 EQU 45 ;控制温度上限值 ORG 0000H MOV SP,#60H ;设置堆栈指针,MOV R0,#01H ;温度控制程序出口标志初值 MOV A,#TA ;采集的温度值送A MOV 54H,#T54 ;取控制温度下限值 MOV 55H,#T55 ;取控制温度上限值 LCALL TEMPR ;调用温度控制子程序 HERE:SJMP

8、 HERE ;温度控制子程序 TEMPR:CJNE A,55H,LOOP1;与上限值比,不相等转移 AJMP FH ;采集的温度值与温度上限值相等,返回 LOOP1:JNC JW ;采集的温度值大于温度上限值,转降温程序JW CJNE A,54H,LOOP2;与温度下限值比,不等转移 AJMP FH ;采集的温度值与温度下限值相等,返回 LOOP2:JC SW ;采集的温度值小于温度下限值,转升温程序SW FH:RET,JW: DEC R0 ;温度控制程序出口标志值减1 RET SW:INC R0 ;温度控制程序出口标志值加1 RET END,2 )使用查地址表方法实现多分支程序转移 在程序中

9、建立一个差值表,将各分支入口地址与该表首地址的差值按顺序排列其中。 差值表的首地址送DPTR,分支序号值送A 中。 查表后用转移指令JMP A+DPTR 进行分支。 例4.4 有四个分支程序段 BR0分支程序段:从内部RAM 取数 BR1分支程序段:从外部RAM 低256字节范围取数 BR2分支程序段:从外部RAM 4K字节范围取数 BR3分支程序段:从外部RAM 64K字节范围取数 R0 中存放取数地址低8位,R1 中存放高8位地址。 R3 中存放分支序号值, BRTAB为差值表首址。 BR0-BRTAB BR3-BRTAB 为差值,;用查地址表方法实现多分支程序转移 ORG 0000H M

10、OV A,R3 ;取分支值 MOV DPTR,#BRTAB ;差值表的首址 MOVC A,A+DPTR ;查表 JMP A+DPTR ;转分支程序 BRTAB:DB 04H ;BR0-BRTAB DB 07H ;BR1-BRTAB DB0AH ;BR2-BRTAB DB 15H ;BR3-BRTAB BR0: MOV A,R0 ;从内部RAM取数 SJMP BRE,BR1:MOVX A,R0 ;从外部RAM低256B取数 SJMP BRE BR2: MOV A ,R1 ;取高8位地址 ANL A ,#0FH ;屏蔽最高4位 ANL P2,#0F0H ;屏蔽P2的低4位 ORL P2,A ;更新

11、P2的低4位 MOVX A ,R0 ;从外部RAM 4KB取数 SJMP BRE BR3:MOV DPL,R0 ;取低8位地址 MOV DPH,R1 ;取高8位地址 MOVX A,DPTR ;从外部RAM 64KB取数 BRE:SJMP $ END,3) 使用查转移指令表的方法实现多分支程序转移 用转移指令构成一个表 ORG 0000H MOV A,R3 ;分支序号值 RL A ;分支序号乘2 MOV DPTR,#BRTAB ;转移指令表首址 JMP A+DPTR ;查表 BRTAB:AJMP BR0 ;转移指令表,2字节 AJMP BR1 AJMP BR2 AJMP BR3 BR0:MOV

12、A,R0 ;从内部RAM取数 SJMP BRE,BR1:MOVX A,R0 ;从外部RAM低256B取数 SJMP BRE BR2:MOV A,R1 ;取高8位地址 ANL A ,#0FH ;屏蔽最高4位 ANL P2 ,#0F0H ;屏蔽P2的低4位 ORL P2,A ;更新P2的低4位,即12位地址的高4位, ;用P2 口的P2.0P2.3送出 MOVX A,R0 ;指令送出低8位地址, ;从外部RAM 4KB取数 SJMP BRE BR3:MOV DPL,R0 ;取低8位地址 MOV DPH,R1 ;取高8位地址 MOVX A,DPTR ;指令送出16位地址 ;从外部RAM 64KB取数

13、 BRE:SJMP $ END,例4.5 假定键盘上有三个操作键,功能说明如下表,键值在A 中。 键功能 键值 处理程序 读数据01 DS 写数据02 XS 插入 03CR 有关此键盘的译码程序段: MOV DPTR ,#3000H ;3000H为基址 CLR C ;进位位CY清0 RLC A ;A带进位位循环左移 JMP A+DPTR ;读操作键处理程序,3000H 3001H 3002H AJMP DS ;转读数据程序 3003H 3004H AJMP XS ;转写数据程序 3005H 3006H AJMP CR ;转插入程序,4)通过堆栈操作实现多分支程序转移 通过堆栈操作,把分支程序的

14、入口地址压入堆栈中,然后利用返回指令把分支程序的入口地址装入PC,实现了分支程序的转移。 例假定分支程序的入口地址表首址为BRTEAB,分支转移序号在R3中 通过堆栈操作实现多分支程序转移 ORG 0000H MOV SP,#60H ;设置堆栈指针 MOV DPTR,#BRTAB ;分支程序入口地址表 MOV A ,R3 ;取分支值 RL A ;分支值乘2 MOV R1,A ;暂存A (分支值乘2 ) INC A ;(分支值乘2 )+1,MOVC A,A+DPTR ;取低位地址(在表高地址) PUSH A ;低8位地址入栈 MOV A ,R1 ;取暂存值(分支值乘2 ) MOVC A,A+DP

15、TR ;取高位地址(在表低地址) PUSH A ;高8位地址入栈 RET ;分支入口地址装入PC BR0: MOV A,R0 ;从内部RAM取数 SJMP BRE BR1: ;略,同前 BR2: ;略,同前 BR3: ;略,同前 BRE: SJMP $ BRTAB:DW BR0,BR1,BR2,BR3 END,*循环初始部分 *循环体 *循环控制部分 *循环结束部分 例4.6 设有一字符串以回车符为结束标志,并存放在内部RAM从40H单元开始的连续存储单元中,编写测试字符串长度的程序。 (回车符的ASCII码为0DH,字符串长度不超过255 ),循环程序,;结果:字符串长度在R2 中(回车符不

16、计入), 回车符地址在R0 中。 ORG 0000H MOV SP,#60H LCALL TEST SJMP $ TEST:MOV R2 ,#00H ;长度计数器初值 MOV R0,#40H ;字符串指针初值 LOOP:CJNE R0,#0DH,GOON;与回车符比,不等转移 RET GOON:INC R2 ;不是回车符,长度计数器加1 INC R0 ;指向下一个字符 LJMP LOOP ;继续比较 END,例4.7 把内部RAM 中起始地址为data1的数据串传送到外部RAM 以buffer为首地址的区域,直到发现“$”字符的ASCII码为止。数据串最大长度为32个字节。 ;“$” 不传送 BUFFER EQU 4000H ;外部RAM 区首址(目标) DATA1 EQU 40H ;内部RAM 区首址(源) ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#60H ;

展开阅读全文
相关资源
相关搜索

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

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