第4章汇编程序设计(补充)(1)_第1页
第4章汇编程序设计(补充)(1)_第2页
第4章汇编程序设计(补充)(1)_第3页
第4章汇编程序设计(补充)(1)_第4页
第4章汇编程序设计(补充)(1)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2022-6-101第四章第四章 汇编语言程序设计汇编语言程序设计 通过前面的学习,我们已经了解了单片机内部的结通过前面的学习,我们已经了解了单片机内部的结构,构,MCS-51指令系统的寻址方式、各类指令的格式及指令系统的寻址方式、各类指令的格式及功能。功能。 下面我们就是要学习如何利用下面我们就是要学习如何利用MCS-51的指令系统,的指令系统,来编写高效、充分利用其特点的程序。来编写高效、充分利用其特点的程序。2022-6-102常用的伪指令v ORG (Origin) 定位目的程序的起始地址。定位目的程序的起始地址。 格式:格式:ORG 表达式表达式 如:如:ORG 0000H 注:表达

2、式必须为注:表达式必须为16位地址值。位地址值。v END 汇编语言程序结束伪指令。汇编语言程序结束伪指令。 注:注:一定放在程序末尾!一定放在程序末尾!4.1 汇编语言程序编辑和汇编汇编语言程序编辑和汇编2022-6-103常用的伪指令v EQU (EQUate) 赋值伪指令。赋值伪指令。 格式:格式: 字符名称字符名称 EQU 数值或汇编符号数值或汇编符号 例:例: AAEQU 30HK1EQU 40HMOV A,AA; (30H)AMOV A,K1;(40H)A2022-6-104常用的伪指令v DB(Define Byte) 从指定单元开始定义(存储)若干个字节的数据从指定单元开始定义

3、(存储)若干个字节的数据或或ASCII码字符,常用于定义数据常数表。码字符,常用于定义数据常数表。格式:格式:DB 字节常数或字节常数或ASCII字符字符例例:ORG 1000HDB34H,0DEH,A,BDB0AH,0BH,202022-6-105常用的伪指令vDW(Define Word) 从指定单元开始定义(存储)若干个字的数据从指定单元开始定义(存储)若干个字的数据 或或ASCII码字符。码字符。 格式:格式:DW字常数字常数或或ASCII字符字符 例:例: ORG 2000HDW1234H,BDW0AH,202022-6-106常用的伪指令v BIT 位地址符号指令。位地址符号指令。

4、 把位地址赋于规定的字符名称。把位地址赋于规定的字符名称。 格式格式:字符名称字符名称BIT位地址位地址例:例: ABC BITP1.1QQBITP3.22022-6-1071. 编辑(源程序,以编辑(源程序,以.ASM扩展名存盘);扩展名存盘);2. 汇编(手工或汇编(手工或机器汇编机器汇编););如:如: 地址地址 目标码目标码 源程序源程序 ORG 1000H 1000H 747F MOV A,#7FH 1002H 7944 MOV R1,#44H END2022-6-1084.2 程序设计基础与举例程序设计基础与举例4.2.1 顺序结构程序例1:变量存在内部RAM的20H单元中,其取值

5、范围:05,编程,查表法求其平方值开始表格首地址送DPTR变量送A(20H) A查平方表(A+DPTR) A结束结果送21H单元:A 21H2022-6-109 ORG 1000HSTART: MOV DPTR,#TABLE MOV A,20H MOVC A,A+DPTR MOV 21H,A SJMP $ ORG 2000HTABLE: DB 0,1,4,9,16,25 END2022-6-1010例例2:将:将20H单元的压缩单元的压缩(Packed )BCD码拆成两个码拆成两个ACSII码存入码存入21H、22H单元。单元。内部RAM22H21H20H6 93 63 9BCD 0 1 2.

6、 9ASCII 30H 31H 32H . 39H2022-6-1011方法1(20H)A0AHBA/B,A中为高中为高4位位BCD码,码,B中为低中为低4位位BCD码码B+30HBB(21H)A+30HAA(22H)开始结束2022-6-1012周期数周期数 源程序源程序 ORG 2000HMOV A,20HMOV B,#0AHDIV ABORL B,#30HMOV 21H,BORL A,#30HMOV 22H,AEND124221113;除以;除以10;低低4位位BCD码转换位码转换位ASCII码码;高高4位位BCD码转换位码转换位ASCII码码2022-6-10130 (21H) (20

7、H)AA与(21H)的低4位交换(21H)+30H(21H)A的高低半字节交换A+30HAA(22H)开始结束方法2:2022-6-1014ORG 2000H MOV R0,#21H MOV R0,#0 MOV A,20H XCHD A,R0 ORL 21H,#30H SWAP A ORL A,#30H MOV 22H,A END;清21H单元;低4位BCD码送21H单元,;低4位BCD码转换位ASCII码;高4位BCD码转换位ASCII码111121119周期数源程序2022-6-10154.2.2 分支程序分支程序可根据要求分支程序可根据要求无条件无条件或或条件地条件地改变程序执行流改变程

8、序执行流向。编写分支程序主要在于正确使用向。编写分支程序主要在于正确使用转移指令转移指令。分支。分支程序有:单分支结构、双分支结构、多分支结构(散程序有:单分支结构、双分支结构、多分支结构(散转)转)条件成立?下条指令程序段A单分支结构YN条件成立?程序段AYN程序段A双分支结构2022-6-1016K=?程序段nn0程序段1多分支结构程序段012022-6-1017例例1:设变量:设变量x以补码形式存放在片内以补码形式存放在片内RAM 30H单元中,变量单元中,变量y与与x的关系是:的关系是:编程根据编程根据x的值求的值求y值并放回原单元。值并放回原单元。0, 50,200,xxxHxxy2

9、022-6-1018A=?y=x+50y=20Hy=x0取x 即(30H) A开始存y 即y 20h结束2022-6-1019 ORG 1000HSTART:MOV A,30H JZ NEXT ;x=0,转移 ANL A,#80H ;保留符号位 JZ ED ;x0,转移 MOV A,#05H ;x0,不转移 ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED: SJMP $2022-6-1020 4.2.3 循环程序循环程序循环程序一般由: 初始化部分 循环体部分-处理部分、修改部分、控制部分 结束部分其结构一般有两种: 先进入处理部分,再控制循环

10、 至少执行一次循环体 先控制循环,再进入处理部分 循环体是否执行,取决于判断结果。2022-6-1021开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?NYYN2022-6-1022循环控制的一般方法:循环控制的一般方法:v 循环次数已知循环次数已知 利用循环次数控制利用循环次数控制v 循环次数未知循环次数未知 利用关键字控制利用关键字控制v 利用利用“逻辑尺逻辑尺” 根据根据“逻辑尺逻辑尺”的内容,进行控制。的内容,进行控制。2022-6-1023例1 : 50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。DEL: M

11、OV R7,#200 ;1MCDEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC延时时间:t=1+200(1+1+2*123)+2+2 50000us=50ms2022-6-1024例2 (上机调试): 将内部RAM中起始地址为data的数据串送到外部RAM中起始地址为buffer的存储区域中,直到发现$字符,传送停止-循环次数事先不知道先判断,后执行。 MOV R0,#data MOV DPTR,#bufferLOOP1:MOV A,R0 CJNE A,#24H,LOOP2 ;判断是否为字符 SJM

12、P LOOP3 ;是,转结束LOOP2:MOVX DPTR,A ;不是,传送数据 INC R0 INC DPTR SJMP LOOP1 ;传送下一数据LOOP3:END2022-6-1025 4.2.4 子程序问题子程序问题子程序设计时注意事项:子程序设计时注意事项:1. 给子程序赋一个名字。实际为入口地址代号。给子程序赋一个名字。实际为入口地址代号。2. 要能正确传递参数:要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式)(寄存器、存储器、堆栈

13、方式)3. 保护与恢复现场:保护与恢复现场: 保护现场:保护现场:压栈指令压栈指令PUSH 恢复现场:恢复现场:弹出指令弹出指令POP4. 子程序可以嵌套子程序可以嵌套2022-6-1026例1 (上机调试) :利用查表法求平方和 ,设a、b、c分别存于内部RAM的DA、DB、DC三个单元中。 MOV A,DA ;取a ACALL SQR ;调用查表子程序 MOV R1,A ;a的平方暂存R1中 MOV A,DB ;取b ACALL SQR ;调用查表子程序 ADD A,R1 ;求出平方和暂存阿A中 MOV DC,A ;结果存于DC 中 SJMP $SQR:MOV DPTR,#TAB ;子程序 MOVC A,A+DPTR RETTAB: DB 0,1,4,9,16,25,36,49,64,81 END 22bac利用累加器或寄存器传递参数2022-6-1027 4.2.5 码型转换程序的设计码型转换程序的设计一、十六进制数与ASCCII码之间的转换 表4-1 十六进制数与ASCII码之间的关系十 六进制数十 六进制数十 六进制数十 六进制数 0 30H 4 34H 8 38H C 43H 1 31H 5 35H 9 39H D 44H 2 32H 6 36H A 41H E 45H 3 33H 7 37H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论