汇编语言实用程序设计课件_第1页
汇编语言实用程序设计课件_第2页
汇编语言实用程序设计课件_第3页
汇编语言实用程序设计课件_第4页
汇编语言实用程序设计课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 汇编语言实用程序设计第四章 汇编语言实用程序设计教学目标掌握程序的编辑和汇编方法掌握伪指令的使用方法掌握汇编程序的三种基本结构及设计程序的基本方法具备常用典型实用程序设计能力。教学目标教学内容4.1汇编语言源程序的编辑和汇编4.2 实用程序举例教学内容4.1汇编语言源程序的编辑和汇编4.1 汇编语言源程序的编辑和汇编4.1.1 源程序编辑4.1.2 源程序的汇编4.1.3 伪指令4.1 汇编语言源程序的编辑和汇编4.1.1 源程序4.1.1 源程序编辑在微型计算机上,借助编辑软件,编写或修改汇编语言源程序。如行编辑或屏幕编辑软件。4.1.1 源程序编辑在微型计算机上,借助编辑软件,编写

2、4.1.2 源程序的汇编汇编:将汇编语言源程序转换为机器码表示的目标程序的过程。对单片机有: 一、手工汇编 二、机器汇编 三、反汇编4.1.2 源程序的汇编汇编:将汇编语言源程序转换为机器一、手工汇编通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。手工汇编的缺点: 1、偏移量的计算容易出错。 2、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。一、手工汇编通过手工方式查指令编码表,逐个把助记符指令“翻译二、机器汇编机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目

3、标程序。二、机器汇编机器汇编是在计算机上使用交叉汇编程序进行源程序的三、反汇编将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。汇编和反汇编的过程如图4-3所示。三、反汇编将二进制机器语言程序翻译成汇编语言程序的过程称反汇源程序(汇编语言)目标码(机器语言)汇编(汇编程序)反汇编(汇编程序)图4-3 汇编和反汇编过程源程序目标码汇编(汇编程序)反汇编(汇编程序)图4-3 4.1.3 伪指令伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。4.1.3 伪指令伪指令不是真正的指令,无对应的机器码,ORG 汇编起始命令格式:ORG 16位地址功能:规定

4、该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如: ORG 2000HSTART:MOV A,#64H 规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。ORG 汇编起始命令格式:ORG 16位地址END 汇编结束指令格式:END功能:通知汇编程序结束汇编,在END之后所有的汇编指令均不予以处理。END 汇编结束指令格式:ENDEQU 赋值命令格式:字符名称 EQU 项(数或汇编符号)。功能:把“项”赋给“字符名称”。注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址

5、、位地址或一个立即数。可以是8位的,也可以是16位的。例如:EQU 赋值命令格式:字符名称 EQU 项(数或汇编EQU 赋值命令例1:AA EQU R1 MOV A,AA;AA代表工作寄存器R1例2: A10 EQU 10DELY EQU 07EBH MOV A,A10;A10作为片内的一个直接地址 LCALL DELY;DELY作为一个16位子程序的入口地址EQU 赋值命令例1:DATA 数据地址赋值命令格式:字符名称 DATA 表达式功能:与EQU类似,但有以下差别:1、EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。2、用EQU伪指令可以把一个汇编符号赋给一个

6、名字,而DATA只能把数据赋给字符名。3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中用来定义数据地址。DATA 数据地址赋值命令格式:字符名称 DATADB 定义字节命令格式:DB(项或项表)功能:通知汇编程序从当前ROM地址开始,保留一个字或字节串的存储单元,并存入DB后的数据。注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。例如:DB 定义字节命令格式:DB(项或项表)DB 定义字节命令 ORG 2000H DB 0A3HLIST:DB 26H,03H STR:DB ABC 经汇编后(2000H)=A3H

7、, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,(41H,42H,43H分别为A,B,C的ASCII码)DB 定义字节命令 ORG 2DW 定义字命令格式:DW 16位数据项或项表功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。例如:DW 定义字命令格式:DW 16位数据项或项表DW 定义字命令 ORG 1500HTABLE:DW 7234H,8AH,10H 经汇编后(1500H)=72H, (1501H)=34H, (1502H

8、)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,DW 定义字命令 ORG DS 定义存储空间命令格式:DS 表达式功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。例如:ORG 1000HDS 08HDB 30H,8AH汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H (1009H)=8AHDS 定义存储空间命令格式:DS 表达式BIT 位地址符号命令格式:字符名 BIT 位地址功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。例如:A1

9、 BIT P1.0A2 BIT 02H汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。BIT 位地址符号命令格式:字符名 BIT 位地址4.2 实用程序举例延时程序代码转换排序4.2 实用程序举例延时程序延时程序编写一段延时程序 ORG 2000H ;周期数执行次数 MT EQU 30H MOV R0,#MT;11DL:NOP;1MT NOP;1MT DJNZ R0,DL ;2MT延时程序编写一段延时程序延时程序该程序的延时时间与系统所用的晶振和程序中每条指令的机器周期及其执行次数MT有关。设系统晶振为12MHz,则可知一个机器周期为:T=1s/(12106 )12=1u

10、s延时时间=T(11+1MT+1MT+2MT)=1us(1+MT+MT+2MT) (式1) 应用时给出需要的延时时间,就可求出MT值。例如用上例完成1ms延时,根据式1可知,MT=250=0FAH,将0FAH代入程序循环次数MT中,就可完成1MS的延时程序设计。延时程序该程序的延时时间与系统所用的晶振和程序中每条指令的机延时程序用双重循环完成延时程序(可增加延时时间) MT1 EQU 30H MT2 EQU 30H MOV R0,#MT1;11DL1:MOV R1,#MT2;1MT1DL2:NOP;1MT2MT1 NOP;1MT2MT1 DJNZ R1,DL2;2MT2MT1 DJNZ R0,

11、DL1;2MT1延时程序用双重循环完成延时程序(可增加延时时间)延时程序设晶振仍为12MHz,则上面程序的执行时间T为:T=0.1us(1+1MT1+1MT2MT1+1MT2MT1+2MT2MT1+2MT1) (式4-2)应用时,可根据所需的延时时间,先选定常数MT2 如取它的最大值FFH,再根据式延时程序设晶振仍为12MHz,则上面程序的执行时间T为:代码转换已知20H单元存放一个二进制数,编程将它转换为BCD数,百位送入FIRST单元的低四位,十位和个位分别送入SECOND单元的高四位和低四位。 本题只需将20H单元中内容除以100,得到的商就是百位BCD数,然后用余数除以10,其结果中,

12、商为十位BCD数,余数为个位BCD数。代码转换已知20H单元存放一个二进制数,编程将它转换为BCD代码转换 FIRST DATA 30H SECOND DATA 31H MOV A,20H;被除数送A MOV B,#64H;除数100送B DIV AB;A除以B MOV FIRST,A;百位BCD数送FIRST MOV A,B;余数送AMOV B,#0AH;除数10送BDIV AB;A除以BSWAP A;十位BCD数送高四位ORL A,B;十位和个位BCD数组合成一个字节MOV SECOND,A;送入SECOND单元SJMP $;结束代码转换 FIRST DATA 排序将片内RAM 30H开始

13、的连续16个单元的数据按从小到大的顺序排序。此题采用的是冒泡排序法.即对这16个数据组成的数据串,依次将相邻两数分别进行比较,若后面的数小于前面的数,则比较的相邻两数互换,且置位地址单元7FH为1。若这组数据比较完后,相邻两数有交换(即交换标志位7FH为1),则再重新进行两两比较,直到16个数已从小到大排序,相邻两数比较后不再交换为止。交换标志位7FH用来控制是否再需要重新两两比较。排序将片内RAM 30H开始的连续16个单元的数据按从小到大汇编语言实用程序设计课件SORT: MOV R1,#30H;指向数据块首地址 MOV R7,#10H;数据块长度送R7 CLR 7FH;交换标志位清零 DEC R7;块长减1为比较次数LOOP1:MOV A,R1;取相邻两数中的前一个数 MOV 20H,A INC R1 MOV A,R1;取相邻两数中后一个数 CJNE A,20H,LOOP;

温馨提示

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

评论

0/150

提交评论