【文档说明】汇编语言实用程序设计课件.ppt,共(32)页,372.001 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44806.html
以下为本文档部分文字说明:
第四章汇编语言实用程序设计教学目标掌握程序的编辑和汇编方法掌握伪指令的使用方法掌握汇编程序的三种基本结构及设计程序的基本方法具备常用典型实用程序设计能力。教学内容§4.1汇编语言源程序的编辑和汇编§4.2实用
程序举例§4.1汇编语言源程序的编辑和汇编§4.1.1源程序编辑§4.1.2源程序的汇编§4.1.3伪指令§4.1.1源程序编辑在微型计算机上,借助编辑软件,编写或修改汇编语言源程序。如行编辑或屏幕编辑软件。§4.1.2源程序的汇编汇编:将汇编语言源程序转换为机器码表示的目标程序的过程
。对单片机有:一、手工汇编二、机器汇编三、反汇编一、手工汇编通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。手工汇编的缺点:1、偏移量的计算容易出错。2、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。二、机器汇编
机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。三、反汇编将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。汇编和反汇编的过程如图4-3所示。源程序(汇编语言)目标码(
机器语言)汇编(汇编程序)反汇编(汇编程序)图4-3汇编和反汇编过程§4.1.3伪指令伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。ORG汇编起始命令格式:ORG16位地址功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址
。例如:ORG2000HSTART:MOVA,#64H┇规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。END汇编结束指令格式:END功能:通知汇编程序结束汇
编,在END之后所有的汇编指令均不予以处理。EQU赋值命令格式:字符名称EQU项(数或汇编符号)。功能:把“项”赋给“字符名称”。注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以
用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。例如:EQU赋值命令例1:AAEQUR1MOVA,AA;AA代表工作寄存器R1例2:A10EQU10DELYEQU07EBHMOVA,A10;A10作为片内的一个直接地址
LCALLDELY;DELY作为一个16位子程序的入口地址DATA数据地址赋值命令格式:字符名称DATA表达式功能:与EQU类似,但有以下差别:1、EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。2、用EQU伪指令可以把一个汇编符号赋给一个名字
,而DATA只能把数据赋给字符名。3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中用来定义数据地址。DB定义字节命令格式:DB(项或项表)功能:
通知汇编程序从当前ROM地址开始,保留一个字或字节串的存储单元,并存入DB后的数据。注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。例如:DB定义字节命令ORG2000HDB0A3HLIST:DB26H,03HSTR:DB‘ABC’┇经汇编后(2
000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分别为A,B,C的ASCII码)DW定义字命令格式:DW16位数据
项或项表功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。例如:DW定义字命令ORG1500HTABLE:DW7234H,8AH,10H┇经汇编后(1500H)=72H,
(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,DS定义存储空间命令格式:DS表达式功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。例如:ORG100
0HDS08HDB30H,8AH汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H(1009H)=8AHBIT位地址符号命令格式:字符名BIT位地址功能:把BIT后的位地址值赋给字符名。其中字符
名不是标号,其后没有冒号,但字符名是必须的。例如:A1BITP1.0A2BIT02H汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。4.2实用程序举例延时程序代码转换排序延时程序编写一段延时
程序ORG2000H;周期数×执行次数MTEQU30HMOVR0,#MT;1×1DL:NOP;1×MTNOP;1×MTDJNZR0,DL;2×MT延时程序该程序的延时时间与系统所用的晶振和程序中每条指令的机器周期及其执行次数MT有关。设
系统晶振为12MHz,则可知一个机器周期为:T=1s/(12×106)×12=1us延时时间=T×(1×1+1×MT+1×MT+2×MT)=1us×(1+MT+MT+2MT)(式1)应用时给出需要的延时时间,就可求出MT值。例如用上例完成1ms延时,根据式1可知,MT=250
=0FAH,将0FAH代入程序循环次数MT中,就可完成1MS的延时程序设计。延时程序用双重循环完成延时程序(可增加延时时间)MT1EQU30HMT2EQU30HMOVR0,#MT1;1×1DL1:MOVR1,#MT2;1×MT1DL2:NOP;1×
MT2×MT1NOP;1×MT2×MT1DJNZR1,DL2;2×MT2×MT1DJNZR0,DL1;2×MT1延时程序设晶振仍为12MHz,则上面程序的执行时间T为:T=0.1us×(1+1×MT1+1×MT2×MT1+1×MT2×MT1+2×MT2×MT1+2×MT1)(式4-2
)应用时,可根据所需的延时时间,先选定常数MT2如取它的最大值FFH,再根据式代码转换已知20H单元存放一个二进制数,编程将它转换为BCD数,百位送入FIRST单元的低四位,十位和个位分别送入SECOND单元的高四位和低四位。本题只需将2
0H单元中内容除以100,得到的商就是百位BCD数,然后用余数除以10,其结果中,商为十位BCD数,余数为个位BCD数。代码转换FIRSTDATA30HSECONDDATA31HMOVA,20H;被除数送AMOVB,#64H;除数100送BDIVAB;A除以BMOVFIRST,A;百
位BCD数送FIRSTMOVA,B;余数送AMOVB,#0AH;除数10送BDIVAB;A除以BSWAPA;十位BCD数送高四位ORLA,B;十位和个位BCD数组合成一个字节MOVSECOND,A;送入S
ECOND单元SJMP$;结束排序将片内RAM30H开始的连续16个单元的数据按从小到大的顺序排序。此题采用的是冒泡排序法.即对这16个数据组成的数据串,依次将相邻两数分别进行比较,若后面的数小于前面的数,则比较的相邻两数互换,且置位地址单元7FH为1。若这组数据比较完后,相邻两数有交换(即
交换标志位7FH为1),则再重新进行两两比较,直到16个数已从小到大排序,相邻两数比较后不再交换为止。交换标志位7FH用来控制是否再需要重新两两比较。SORT:MOVR1,#30H;指向数据块首地址MOVR7,#10
H;数据块长度送R7CLR7FH;交换标志位清零DECR7;块长减1为比较次数LOOP1:MOVA,@R1;取相邻两数中的前一个数MOV20H,AINCR1MOVA,@R1;取相邻两数中后一个数CJNEA,20H,LOOP;相邻两数比较LOOP:JCNEXT
;前者小于后者转至NEXTXCHA,20H;前者大于后者,相邻两数互换MOV@R1,ADECR1MOV@R1,20HINCR1;恢复数据块指针SETB7FH;置“1”标志位NEXT:DJNZR7,LOOP1;所有相邻两数未比较完,转LOOP1JB7FH,SORT;
交换标志位为1,转SORTRET