- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任务5 算术运算程序
任务5 算术运算程序 徐闽燕 任务描述 用汇编语言编写简单的算术运算程序。 取数、放数 两个单字节数的加法 两个多字节无符号二进制数的加法 为什么要学习汇编语言? 直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址、寄存器、端口等。 对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。 汇编语言对于程序调试是不可或缺的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。 与机器打交道的其实都是二进制得代码,汇编语言就是这些代码好记忆的名称和规则。 高级语言可以做的汇编可以做,高级语言不可以做的汇编也可以做。 为解决某些特定的问题,代码中必须嵌入汇编语言,以代替C语言完成的单片机的编程。 学习汇编语言的难处? 指令难记 学习汇编语言的难处? 要像CPU一样思考 就以两个单字节无符号数相加这一简单的运算来说,当需要运算的数已存入存储器后,还需要进行以下几步: 第一步:把第一个数从它的存储单元中取出来,送至运算器。 第二步:把第二个数从它所在的存储单元中取出来,送至运算器。 第三步:相加。 第四步:把相加完的结果,送至存储器中指定的单元。 单片机的指令 所有这些取数、送数、相加、存数等等都是一种操作,我们把要求CPU执行的各种操作用命令的形式写下来,这就是指令。 这些指令必须是选定的单片机能识别和执行的指令。 一条指令,对应着一种基本操作。 因为单片机是一种可编程器件,只“认得”二进制代码(0、1)。要单片机运作,单片机系统中的所有指令,都必须以二进制编码的形式来表示。 机器码是由一连串的0和1组成,没有明显的特征,不好记忆,不易理解,易出错。所以,直接用它来编写程序十分困难。 人们就用一些助记符(指令功能的英文缩写)来代替操作码。这样,每条指令有明显的动作特征,易于记忆和理解,也不容易出错。 单片机的指令系统 单片机所能执行的全部指令,就是该单片机的指令系统。 不同种类的单片机,其指令系统亦不同。 基于MCS-51核心的单片机,如AT89C51、AT89S52、SST89C58、W77E058、C8051F020等,都是一样的指令系统。 MCS-51系列单片机指令系统中有51种功能的111条汇编指令,对应有255条目标指令。 数据转移指令:29条 算术运算指令:24条 逻辑运算指令:24条 控制转移指令:17条 位操作指令:17条 1、取数、放数 教材《单片机的C51应用程序设计》P39 21、若要完成以下的数据传送,应如何用8051的指令来实现? ①R3内容传送R4。 ②外部RAM40H单元内容送R1。 ③外部RAM30H单元内容送内部RAM30H。 ④外部RAM2000H单元内容送内部RAM20H单元。 ⑤ROM4000H单元内容送R1。 ⑥ROM3000H单元内容送内部RAM30H。 ⑦ROM5000H单元内容送外部RAM70H。 ①R3内容传送R4。 参考指令: MOV A,R3 ;寄存器传送到累加器 MOV R4,A ;累加器传送到寄存器 MOV:8位传送:4+3+5+3=15条 MOV:15+1+2=18条 ②外部RAM40H单元内容送R1。 参考指令: MOV R0,#40H ;立即数传送到寄存器 MOVX A,@R0 ;外部RAM(8位地址)传送到累加器 MOV R1,A ; 累加器传送到寄存器 MOVX:2+2=4条 (1)常数用来参与指令操作,一般用#标记作前缀。 (2)立即数在寻址操作中只能作源操作数。 例:MOV DPTR,#1234H (1)间接寻址的地址空间有片内数据存储器的00H~FFH和片外数据存储器的0000H~FFFFH。 (2)间接寻址的寄存器有Ri和DPTR,间接寻址时前面加@符号。 (3)间接寻址时,寄存器中的内容是操作数的地址。 例:ANL A, @R1 ③外部RAM30H单元内容送内部RAM30H。 参考指令: MOV R1,#30H ;立即数传送到寄存器 MOVX A,@R1 ;外部RAM(8位地址)传送到累加器 MOV 30H,A ; 累加器传送到直接地址 (1)直接寻址的空间有片内数据存储器的直接地址direct,它包括00H—7FH中的数据区及80H—FFH中的SFR。 (2)直接寻址方式的操作指令直接把地址作为操作数来运行,既可作为源操作数,也可作为目的操作数。 例: MOV A , 3AH ④外部RAM2000H单元内容送内部RAM20H单元。 参考指令: MOV DPTR,#2000H ;16位常数加载到数据指针 MOVX A,@DPTR ;外部RAM(16位地址)传送到累加器 MOV
文档评论(0)