第四章语言程序设计课件_第1页
第四章语言程序设计课件_第2页
第四章语言程序设计课件_第3页
第四章语言程序设计课件_第4页
第四章语言程序设计课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第四章汇编语言程序设计提要程序设计概述汇编语言源程序的编辑和汇编汇编语言程序设计2023年6月6日2第1节程序设计概述1、程序设计语言简介2、汇编语言程序设计初步2023年6月6日31、程序设计语言简介常用的编程语言是汇编语言和高级语言。1.汇编语言用英文字符来代替机器语言,这些英文字符被称为助记符汇编语言:用助记符表示的指令。汇编语言源程序:用汇编语言编写的程序。优点:用汇编语言编写程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序。缺点:可读性差,离不开具体的硬件,是面向“硬件”的语言通用性差。2023年6月6日41、程序设计语言简介2.高级语言不受具体“硬件”的限制,优点:通用性强,直观、易懂、易学,可读性好。目前多数的51单片机用户使用C语言(C51)来进行程序设计,已公认为高级语言中高效简洁而又贴近51单片机硬件的编程语言。将C语言向单片机上移植,始于20世纪80年代的中后期。汇编语言设计步骤(1)分析题意,明确要求(2)确定算法(3)画程序流程图(4)分配内存工作单元(5)编写源程序(6)程序优化(7)上机调试、修改和最后确定源程序4.2汇编语言源程序的编辑和汇编伪指令源程序的编辑和汇编1、伪指令(1)指令语句已在第3章介绍。每一指令语句在汇编时都产生一个指令代码(机器代码),执行该指令代码对应着机器的一种操作。(2)伪指令语句是控制汇编(翻译)过程的一些控制命令。在汇编时没有机器代码与之对应。下面介绍伪指令语句。1、伪指令1.ORG(ORiGin)汇编起始地址命令 源程序的开始,用一条ORG伪指令规定程序的起始地址。如果不用ORG,则汇编得到的目标程序将从0000H地址开始。例如:

ORG 2000HSTART:

MOV A,#00H

……即规定标号START代表地址为2000H开始。在一源程序中,可多次用ORG指令,规定不同的程序段的起始地址。但是,地址必须由小到大排列,且不能交叉、重叠。例如:ORG 2000H……ORG 2500H……ORG 3000H……这种顺序是正确的。若按下面顺序的排列则是错误的,因为地址出现了交叉。ORG 2500H……ORG 2000H……ORG 3000H……1、伪指令2.

END(ENDofAssembly)汇编终止命令源程序结束标志,终止源程序的汇编工作。整个源程序中只能有一条END命令,且位于程序的最后。如果END出现在程序中间,其后的源程序,将不进行汇编处理。1、伪指令3.DB(DefineByte)定义数据字节命令格式:[标号:]DB8位字节数据表用于从(标号)指定的地址开始,在程序存储器连续单元中定义字节数据。例如:

ORG 1000HDB -2,-4,100,30H,‘C’,‘A’1、伪指令4、DW(DefineWord)定义字数据命令该命令用于从指定的地址开始,在程序存储器的连续单元中定义16位的字数据。例如:ORG 2000HDATA:DW 1246H,7BH,10汇编后(2000H)=12H (2001H)=46H ;第1个字(2002H)=00H (2003H)=7BH ;第2个字(2004H)=00H (2005H)=0AH ;第3个字1、伪指令5.DS(DefineStorage)定义存储区命令从指定地址开始,保留指定数目的字节单元作为存储区,供程序运行使用。例如:

TABEL:DS 10表示从TABEL代表的地址开始,保留10个连续的地址单元。又例如:

ORG 2000H DS 10H表示从2000H地址开始,保留16个连续地址单元。2023年6月6日141、伪指令6.EQU(EQUate)标号赋值命令用于给标号赋值。赋值后,标号值在整个程序有效。例如:TEST: EQU2000H

表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H来代替。2023年6月6日152、源程序的编辑和汇编1、源程序的编辑2、源程序的汇编2023年6月6日164.3汇编语言程序设计顺序结构分支结构循环结构子程序结构2023年6月6日174.3.1顺序结构例:两个无符号双字节数相加。设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入40H和41H单元中。2023年6月6日18程序如下:START:CLRC;将Cy清零

MOVR0,#41H;将被加数地址送数据指针R0MOVR1,#51H;将加数地址送数据指针R1AD1:MOVA,@R0;被加数低字节的内容送入AADDA,@R1;两个低字节相加MOV@R0,A;低字节的和存入被加数低字节中

DECR0;指向被加数高位字节

DECR1;指向加数高位字节

MOVA,@R0;被加数高位字节送入AADDCA,@R1;两个高位字节带Cy相加

MOV@R0,A;高位字节的和送被加数高位字节2023年6月6日194.3.2分支程序设计2023年6月6日20(a)单分支流程;(b)多分支流程例设变量X存放在内部RAM30H单元,函数值Y存入内部RAM31H单元。试编程,按照下式的要求给Y赋值。1X>0Y=0

X=0-1X<02023年6月6日212023年6月6日22开始A←XA=0A>0A=-1A=1存结果结束YNNYORG0200HMOVA,30H

;JZ

COMPJNB

ACC.7,POSIMOV

A,#0FFHSJMP

COMPPOSI:MOV

A,#1COMP:MOV

31H,AEND2023年6月6日234.3.3循环程序设计2023年6月6日24循环的组成

循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。

(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。

(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。

(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。2023年6月6日25例:编写多字节无符号数加法程序设有两个多字节无符号数分别存放在内部RAM的DAT1和DAT2开始的区域中(低字节先存),字节个数放在R2中,求它们的和,并将结果存放在DAT1开始的区域中。2023年6月6日262023年6月6日27开始循环初始化读取被加数两数相加传送部分和到目的单元指向下一个被加数和加数全部相加完毕处理高字节进位结束NYORG0400HMOVR0,#DAT1MOVR1,#DAT2CLRCLOOP:MOVA,@R0ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR2,LOOPCLRAADDCA,#0MOV@R0,AEND2023年6月6日28多重循环例5秒延时程序。延时程序与MCS-51执行指令的时间有关,如果使用12MHz晶振,一个机器周期为1μs,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。5秒延时程序如下:2023年6月6日29DELAY:MOVR5,#50DEL0:MOVR6,#200#49901539980306DEL1:MOVR7,#248DEL2:DJNZR7,$;DEL2DJNZR6,DEL1DJNZR5,DEL0RET2023年6月6日304.3.4子程序设计子程序的概念通常把那些基本操作功能编制为一个独立夫人程序段,这些就是可供不同程序或同一程序反复调用的子程序。在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,并返回到原来的程序继续执行下去。2023年6月6日31子程序结构与设计注意事项子程序中必须有一条子程序返回指令(RET),其功能是当子程序执行完后能自动返回到主程序中去。注意事项:(1)子程序名(2)明确入口条件、出口条件(3)注意保护现场和恢复现场2023年6月6日32子程序的调用与返回子程序的调用调用子程序的指令有“ACALL”和“LCALL”,“LCALL”:16位入口地址

“ACALL”:11位入口地址,另5位由PC提供执行调用指令时,先将程序地址指针PC改变(“ACALL”加2,“LCALL”加3),然后PC值压入堆栈,用新的地址值代替。执行返回指令时,再将PC值弹出。

2023年6月6日33子程序调用中,主程序应先把有关的参数存入约定的位置,子程序在执行时,可以从约定的位置取得参数,当子程序执行完,将得到的结果再存入约定的位置,返回主程序后,主程序可以从这些约定的位置上取得需要的结果,这就是参数的传递。子程序的调用涉及到堆栈,在主程序中必须要正确设置堆栈指针。子程序嵌套是指在子程序执行过程中,还可以调用另一个子程序。2023年6月6日34例4-13用程序实现C=A*A+B*B。设A和B均小于10,A存在内部RAM31H单元,B存在内部RAM32H,把C存入内部RAM33H单元。解:本题中包含2个求平方值,把求平方设计为子程序。子程序名称:SQR功能:求小于10的数的平方(查表法)入口参数A,出口参数A2023年6月6日35

主程序:ORG0800HMOVSP,#60HMOVA,31HLCALLSQRMOVR1,AMOVA,32HLCALLSQRADDA,R1MOV33H,ASJMP $2023年6月6日36ORG0900HSQR:ADDA,#01HMOVCA,@A+PCRETTAB:DB0,1,4,9,16DB25,36,49,64,81END堆栈变化:画图说明2023年6月6日37TheEnd习题:4-6试编程将内部RAM40H---60H单元内容传送到外部RAM以2000H为首地址的存储区中4-7在外部RAM首地址为DATA的存贮器中,有10个字节的数据,试编程将每个字节的最高位无条件置“1”4-8编写程序将外部RAM3000H开始的13个单元中的数据隔一个传送到内部RAM30H开始的区域4-9编程将外部RAM地址为1000H---1030H的数据块全部搬迁到内部RAM30H---60H中,并将原来数据全部清零。4-18设在外部RAM2000H---2004H单元中,存放有5个压缩BCD码,试编程将它们转换成ASCII码,存放到以2005H为首地址的外部RAM中。4-21根据图3-10,设计灯亮移位程序,要求8个发光二极管每次亮1个,点亮40ms。顺次循环右移点亮,循环不止。4-22根据图3-10,设计亮灯程序,要求8个发光二极管间隔分成2组,每组4个,2组交叉点亮,变换时间为100ms,反复循环不止。2023年6月6日392023年6月6日40该单片机系统的晶振频率为12MHz3-14已知(A)=5Bh,(R1)=40H,(40H)=C3H,(PSW)=81H,试写出各条指令单独执行结果,并说明程序状态字的状态。

(1)XCHA,R1(2)XCH A,40H (3)XCH A,@R1 (4)XCHD A,@R1 (5)SWAP A (6)ADD A,R1 (7)ADD A,40H (8)ADD A,#40H (9)ADD

温馨提示

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

评论

0/150

提交评论