第四章MCS-51汇编语言程序设计.ppt_第1页
第四章MCS-51汇编语言程序设计.ppt_第2页
第四章MCS-51汇编语言程序设计.ppt_第3页
第四章MCS-51汇编语言程序设计.ppt_第4页
第四章MCS-51汇编语言程序设计.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

第4章汇编语言程序设计,4.1伪指令4.2汇编语言语句格式4.3汇编语言程序设计方法4.4典型程序设计分析习题,4.1伪指令,伪指令的定义用汇编语言设计完成的源程序,需要用汇编程序(翻译程序)将其转换成由二进制代码组成的目标程序后,机器才能执行。在翻译过程中,需要了解程序的起始点、数据放在哪里、程序到哪里结束等一些问题,这些问题在机器指令系统中并没有解决,因此需要一些汇编命令来解决这些问题,这种汇编命令就是伪指令。伪指令就是为了解决汇编语言源程序汇编为机器码程序时说明一些汇编功能的指令,之所以称其为伪指令,是它在源程序中的表现形式与机器指令并无两样,只是它在目标程序中不产生机器代码,它只是给汇编程序一个指示而已。当然一些伪指令还有助于提高源程序的可读性。,4.1伪指令,起始指令ORGnn起始指令中的ORG表示起点(Origin),也称定位伪指令。指令中的nn表示地址,其功能是确定程序代码和数据代码放在存储器中的起始位置。起始指令可以在源程序中多处使用,用于表达某段程序的起始地址。,4.1伪指令,结束指令END结束指令END的功能似乎象它助记符号那样简单,表示源程序到此结束,指示汇编程序翻译到此为止,即使END后面还有其他语句,汇编程序不再进行翻译。每一个源程序应该只有一个结束指令END。,4.1伪指令,定义字节数据伪指令标号:DB项或项表助记符号DB的含义是定义字节数据(DefineByte)。每一个数据都是常数,每一个常数的大小范围不能超过8位二进制数能表达的范围。这些常数存放在程序存储器中,指令中的标号是这些数据存放在存储器中的首地址。指令中的“项或项表”有以下几层含义:1)“项或项表”可以是一个数据,也可以是一串数据。每一个数据之间用逗号隔开。2)“项或项表”中数据书写的形式可以是二进制数、十进制数、十六进制数等。3)“项或项表”也可以表达字符串,表达时用单引号将字符串包括在内,字符串经过汇编以后将生成相应的ASCII码。,4.1伪指令,定义字节数据伪指令例4-1:分析下列程序段。ORG0100HLABLE:DB10000101B,100,93HDBABC,56H,程序存储器,4.1伪指令,定义字数据伪指令标号:DW项或项表助记符号DW的含义是定义字数据(DefineWord)。每一个数据都是常数,每一个常数的大小范围不能超过十六位二进制数能表达的范围。这些常数存放在程序存储器中,指令中的标号是这些数据存放在存储器中的首地址。指令中的“项或项表”可以是一个数据,也可以是一串数据,每一个数据之间用逗号隔开;“项或项表”中数据书写的形式可以是二进制数、十进制数、十六进制数。,4.1伪指令,定义字数据伪指令,例4-3:分析下列程序段。ORG2100HLABLE:DW1,2,3,4.1伪指令,定义字节变量于内部数据存储器伪指令符号名DATAaddr8这条伪指令的功能是将一个字节型变量定义在内部数据存储器00H7FH中,指令中符号名用于给变量起名,指令中addr8是内部数据存储器地址,表示变量所在的内存单元。,4.1伪指令,定义字节变量于内部数据存储器伪指令例4-4:试编制一段程序,完成公式y=7x+8的运算。设y的值域为大于零、小于255。解:根据题意,程序编制如下:xDATA30H;定义变量x于内部数据存储器30H单元.yDATA31H;定义变量y于内部数据存储器31H单元.MOVA,x;将变量x的值送入累加器A.MOVB,#7;将常数7送入寄存器B.MULAB;进行7x运算.ADDA,#8;进行7x+8运算.MOVy,A;将运算值送入y.STOP:SJMPSTOP;程序暂停.,4.1伪指令,定义字节变量于外部数据存储器伪指令符号名XDATAaddr16这条伪指令的功能是将一个字节型变量定义在外部数据存储器0000HFFFFH中,指令中符号名用于给变量起名,指令中addr16是外部数据存储器地址,表示变量所在的内存单元。需要注意的是,访问该变量时必须采用寄存器间接寻址方式。,4.1伪指令,定义字节变量于外部数据存储器伪指令例4-5:试编一段程序,将变量X1定义在外部数据存储器0124H单元,并把数据39H赋予X1。解:根据题意,程序编制如下:X1XDATA0124H;定义X1变量于外部;数据存储器0124H单元。MOVDPTR,#X1;设立变量X1指针。MOVA,#39H;将常数39H送入累加器A。MOVXDPTR,A;通过累加器A把;常数39H赋给变量X1。,4.1伪指令,定义位变量伪指令符号名BITaddr8这条伪指令的功能是将一个位变量定义在内部数据存储器位寻址区域20H2FH中,指令中符号名用于给变量起名,指令中addr8是内部数据存储器位寻址单元地址,表示变量所在的内存位单元。,4.1伪指令,等值伪指令符号名EQU表达式这条伪指令的功能是将源程序中的一些常数符号化,以便增加源程序的可读性,指令中的表达式可以是指常数或算式。例4-6:试写一语句,将count代替常数100。解:根据题意,需用以下语句:countEQU100,4.2汇编语言语句格式,汇编语言语句格式标号:机器指令/伪指令;注释一条语句最多由三部分组成,标号、机器指令/伪指令、注释。其中第一和第三部分用方括号括住,表示不是每条语句都需要它们标号是用于表达指令或数据的位置,便于程序的编写、阅读和修改。它经常用在转移类指令中,以及数据表格的首位。注释是语句的说明部分,用于增加程序的可读性。注释部分必须以分号“;”开头,汇编程序不对它翻译。,4.3汇编语言程序设计方法,一程序设计的步骤分析问题,明确所要解决问题的要求确定算法,解决问题的方法制定程序框图,确定程序运行的步骤确定数据格式,分配工作单元根据程序的流程图编写程序程序测试程序优化,4.3汇编语言程序设计方法,二程序流程图的绘制程序流程图主要由一些有向线段和一些框图组成。框图的种类有以下几种:,设置指针,执行框:表示某些操作,用一个写有文字的矩形表示,比如,判断框:表示程序的分支处,用图形或表示,框内写上判断的条件。,A0?,开始框:表示某一程序的开始。用图形表示。,结束框:表示某一程序的结束。用图形表示。,开始,结束,4.3汇编语言程序设计方法,三汇编语言程序基本结构无论再复杂的程序,总可以将程序分解成三种程序结构,即顺序结构、分支结构、循环结构。以下逐一阐述各种程序结构。,4.3汇编语言程序设计方法,1、顺序结构程序设计顺序结构程序不仅是最简单的程序结构,而且是最基本的程序结构,其特点是程序按指令顺序排列依次逐条执行。无论多么复杂的程序,总是可以分解成若干个顺序结构的程序段。例4-7:若寄存器R2R3和R4R5分别存放了一组压缩8421BCD码,要求编一程序段将这两组BCD码数据相加,结果放在寄存器R6R7,进位放在Cy中。,4.3汇编语言程序设计方法,1、顺序结构程序设计解:根据题意,程序编制如下:BCDADD:MOVA,R3;取低位BCD码数据于A。ADDA,R5;两个BCD码数据低位相加。DAA;BCD码相加后调整。MOVR7,A;存放BCD码数据低位相加的结果。MOVA,R2;取高位BCD码数据于A。ADDCA,R4;两个BCD码数据高位相加,并加上;低位BCD码数据相加产生的进位。DAA;BCD码相加后调整。MOVR6,A;存放BCD码数据高位相加结果。SJMP$;程序在此打住。$表示该指令的首地址。END;源程序结束。以上程序段执行时,从头开始(BCDADD:MOVA,R3;),顺序依次逐条执行至最后(SJMP$;)。,4.3程序设计方法,2、分支结构程序设计分支程序结构就是根据不同情况,采用不同处理方法的一种程序结构。具体实现的方法是,根据指定的条件,使程序转向不同的程序段。例4-8:编制一程序,实现以下符号函数。设x是一个单字节补码变量,y也采用单字节补码表示。,4.3汇编语言程序设计方法,2、分支结构程序设计解:根据题意,程序编制如下:xDATA30H;定义变量x于内部RAM30H元。yDATA31H;定义变量y于内部RAM31H单元。START:MOVA,x;取变量x于累加器A。JNZNEXT1;若x不等于零,转入NEXT1执行。MOVy,#00H;若x等于零,则y=0。SJMPSTOP;转入程序结束处。NEXT1:JBACC.7,NEXT2;若x小于零,转入NEXT2执行。MOVy,#01H;若x大于零,则y=1。SJMPSTOP;转入程序结束处。NEXT2:MOVy,#0FFH;因x小于零,故y=-1。STOP:SJMP$;程序在此打住。END;源程序结束。,4.3汇编语言程序设计方法,3、循环程序的设计循环结构程序是指某程序段被反复执行若干次的程序,其特点是程序代码被反复利用,从而缩短了程序代码,减少了占用程序存储器的资源。循环结构程序一般由以下几部分组成:1)初始化部分初始化是为循环执行作准备工作,包括设立指针、设置计数器、设置变量的初值、累加器清零、设置标志位等。2)工作部分工作部分是循环程序的主体,是完成某任务的程序段。3)修改部分修改一些继续循环需要的参数,比如修改地址指针、循环次数计数值等。,4.3汇编语言程序设计方法,3、循环程序的设计4)控制部分控制部分用于检测循环条件,决定循环是否继续下去。5)结束处理部分结束处理部分是用于对循环结果进行适当处理,比如存放结果,恢复某寄存器的内容等。有的循环结构程序没有这一部分。,4.3汇编语言程序设计方法,3、循环程序的设计例4-10:编制一段程序,找出数据块中最小的数据并存放在暂存器B。设数据块位于外部数据存储器3000H为首地址的内存中,数据是单字节无符号数据,共有200个数据。解:根据题意,画出程序流程图(图4-3)。,4.3汇编语言程序设计方法,3、循环程序的设计(1)START:MOVDPTR,#3000H;设置外部数据区指针。(2)MOVR6,#199;设置比较次数。(3)MOVXA,DPTR;取第一个数至A。(4)MOVB,A;将第一个数送至B。(5)INCDPTR;调整指针至下一个数据。(6)LOOP:MOVXA,DPTR;取下一个数据至A。(7)CJNEA,B,COMP;比较两数。(8)COMP:JNCNEXT;若(A)(B);转入NEXT处执行。(9)MOVB,A;若(A)(B),(A)B。(10)NEXT:INCDPTR;地址指针加1。(11)DJNZR6,LOOP;若数据块比较没完;程序循环至LOOP。(12)SJMP$;若数据块比较完毕,程序打住。(13)END;程序结束。,4.3汇编语言程序设计方法,3、循环程序的设计例5.1计算n个单字节数据和(结果为二个字节)解:根据题意需要运算的数是单字节无符号整数,运算的结果是双字节形式,画出数据在存储器的存放形式的示意图设立一个累加单元(双字节),一个取数指针单元,一个取数计数单元,然后逐个取数相加,一直到数据加完为止。画程序框图将R3R4作为累加单元,R2作为计数器,R0作为数据区指针编制程序,4.3汇编语言程序设计方法,4.3汇编语言程序设计方法,例5.1ORG8100HSTART:MOVR3,#0MOVR4,#0MOVR0,#50HMOVR2,#10LOOP:MOVA,R4ADDA,R0MOVR4,ACLRAADDCA,R3MOVR3,AINCR0DJNZR2,LOOPSTOP:SJMPSTOPEND,4.3汇编语言程序设计方法,3、循环程序的设计例5.2将内部RAM中30H32H的内容左移4位,移出部分送R2。解:根据题意,程序要完成的内容如图所示利用交换指令,进行4位二进制数的搬移制定程序框图:图-3编制程序,4.3汇编语言程序设计方法,4.3汇编语言程序设计方法,RL43:MOVR0,#32HCLRALOOP:XCHDA,R0SWAPAXCHA,R0DECR0CJNER0,#2FH,LOOP;指针值作为循环终止的条件SWAPAMOVR2,ARET,4.3汇编语言程序设计方法,4、多重循环程序的设计例5.350ms延时子程序设计设系统的时钟频率为12MHZ,则一个机器周期的时间为T=12/12MHZ=1s,延时程序的算法是通过循环执行DJNZ指令来达到延时的目的,由于延时的时间比较长,所以采用双重循环的程序结构。程序如下:DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET指令DEL2:DJNZR6,DEL2执行一次所需时间为2T,即2s。以上程序该指令共执行了125200=25000次,共需时间为250002s=50ms,4.3汇编语言程序设计方法,4、多重循环程序的设计例5.4比较精确的50ms子程序的设计例5.3的程序的延时时间是不太精确的,实际所化的时间为(1252+1+2)200+2=50.302ms。如果需要更精确的延时,可将以上的程序修改如下:DEL:MOVR7,#200DEL1:MOVR6,#123NOPDEL2:DJNZR6,DEL2DJNZR7,DEL1RET总的延时时间为(1232+1+1+2)200+2+1=50.003ms。,4.3汇编语言程序设计方法,4、多重循环程序的设计例5.5试编制一个产生方波的程序段解:设单片机的工作频率为12MHZ,在P1.1线输出一个频率为0.2KHZ的方波。因为方波的频率为0.2KHZ,则它的周期为5ms,波形的示意图如下:CLRP1.1DL:MOV30H,#05HDL0:MOV31H,#0FAHDL1:DJNZ31H,DL1;指令执行需要2个机器周期,一个机器周期需DJNZ30H,DL0;时1s,即该指令执行需时2s,这一指令CPLP1.1;执行1250次,就能耗时2.5ms。每隔2.5ms改SJMPDL;变一次P1.1的状态,就可使P1.1产生5ms周期的方波。,4.3汇编语言程序设计方法,4、多重循环程序的设计例5.6例5.2程序的另一种实现方法。将内部RAM中30H32H的内容左移4位,移出部分送R2。解:采用双重循环方法,第一循环是将存储器有关内容左移一位,第二循环是将第一循环的内容进行四次。程序框图如下:图6-4编制程序,32H,C,4.3汇编语言程序设计方法,A,B,A,B,C,4.3汇编语言程序设计方法,RLC43:MOVR7,#4MOVR2,#0LOOP0:MOVR0,#32HMOVR6,#3CLRCLOOP1:MOVA,R0RLCAMOVR0,ADECR0DJNZR6,LOOP1MOVA,R2RLCAMOVR2,ADJNZR7,LOOP0RET,4.3汇编语言程序设计方法,四子程序设计和参数传递方法1子程序的基本结构保护现场:保护子程序将要用到的有关寄存器的内容,使得子程序调用更方便安全。一般可将需要保护的内容压入堆栈,或采用改变工作寄存器区。程序主体:是子程序为完成有关功能而编制的程序段。恢复现场:若保护现场是用压入堆栈,则恢复现场要注意先进后出。返回:采用返回指令将程序返回到原先调用子程序的地方。,4.3汇编语言程序设计方法,三子程序设计和参数传递方法2子程序的参数入口参数:子程序入口地址,被处理数据存放的位置,影响哪些寄存器。出口参数:有关结果数据的存放位置,有关指针的内容。3用工作寄存器或累加器来传递参数例5.7将十六进制数的ASCII码转换成十六进制数。1)根据ASCII码与16进制数之间的关系,程序框图如下:图6-62)被转换的数据在R0中。3)编制程序0930H39H;AF41H46H,4.3汇编语言程序设计方法,ASCH:PUSHPSWPUSHACCCLRCMOVA,R0SUBBA,#30HCJNEA,#10,$+3JCAH10SUBBA,#07AH10:MOVR0,APOPaccPOPPSWRET,4.3汇编语言程序设计方法,三子程序设计和参数传递方法4用存储器来传递参数例5.8将(R0)和(R1)指出的内部RAM中两个3字节无符号数相加,结果送(R0)指出的内部RAM中。,R0,R1,入口参数:(R0)和(R1)分别指向加数和被加数的低位字节的内存地址。出口参数:(R0)指向结果的高位字节的内存地址。,4.3汇编语言程序设计方法,编制程序如下:NADD:PUSHACCPUSHPSWMOVR7,#3CLRCNADD1:MOVA,R0ADDCA,R1MOVR0,ADECR0DECR1DJNZR7,NADD1INCR0POPPSWPOPACCRET,4.3汇编语言程序设计方法,三子程序设计和参数传递方法5用堆栈来传递参数例5.9将一位十六进制数转换成ASCII码入口参数:调用该子程序前,已将一位16进制数压入堆栈。出口参数:将转换好了的ASCII码存放在原来16进制数的堆栈位置。HASC:MOVR0,SPDECR0DECR0XCHA,R0ANLA,#0FHADDA,#2MOVCA,A+PCXCHA,R0RETDB0123456789DBABCDEF,(SP),(SP1),(SP1),4.3汇编语言程序设计方法,三子程序设计和参数传递方法5用堆栈来传递参数例5.10把内部RAM中50H,51H的双字节十六进制数转换成4位ASCII码,存放于(R1)指向的4个内部RAM单元。数据存放的方法如下图所示:,50H51H,(R1),4.3汇编语言程序设计方法,编制程序如下:利用例9的程序来完成本程序的编制HA24:MOVA,50HSWAPASWAPAPUSHACCPUSHACCACALLHASCACALLHASCPOPACCPOPACCMOVR1,AMOVR1,AINCR1INCR1MOVA,51HMOVA,50HPUSHACCPUSHACCACALLHASCACALLHASCPOPACCPOPACCMOVR1,AMOVR1,ARETINCR1MOVA,51H,4.3汇编语言程序设计方法,例5.11一个字节的2位十六进制数转换为二个ASCII码子程序。在调用该子程序前刚刚将需转换的一个字节的2位十六进制数压入了堆栈,在退出该子程序后,转换好的相应ASCII码放在堆栈的顶部。解:设进入该子程序时,堆栈顶的地址为ADDR,则根据题意进入该子程序时和退出该子程序时的堆栈情况如下所示。,AddAdd-1Add-2,AddAdd-1Add-2,(SP),(SP),转换成的相应ASCII码,转换前,转换后,4.3汇编语言程序设计方法,子程序如下:HTA2:MOVR0,SPXCHA,R0DECR0INCR0DECR0XCHA,R0PUSHACCINCR0MOVA,R0XCHA,R0ANLA,#0FHRETADDA,#14DB0123456789MOVCA,A+PCDBABCDEFXCHA,R0SWAPAANLA,#0FH注意执行过程中堆栈内容的变化。ADDA,#7MOVCA,A+PCINCR0,4.3汇编语言程序设计方法,三子程序设计和参数传递方法6程序段参数传递如果需要大量参数,并且这些参数均为常数时,程序段参数传递方法是很有效的。例字符串传送子程序SOUT:POPPDHMP1:ACALLSOUTPOPDPLDBMCS-51SOT1:CLRADBCONTROLLERMOVCA,A+DPTRDB0AH,0DH,0INCDPTRMP2:JNZSENDMOVR0,AINCR0SJMPSOT1SEND:JMPA+DPTR,4.4典型程序设计分析,一定点数运算程序例5.12双字节取补子程序将(R4R5)中的双字节数取补,结果送R4R5。解:CMPT:MOVA,R5CPLAADDA,#1MOVR5,AMOVA,R4CPLAADDCA,#0MOVR4,ARET,4.4典型程序设计分析,一定点数运算程序例5.13a双字节无符号数加减程序将(R2R3)和(R6R7)两个双字节无符号数相加,结果送R4R5。解:NADD:MOVA,R3ADDA,R7MOVR5,AMOVA,R2ADDCA,R6MOVR4,ARET,4.4典型程序设计分析,一定点数运算程序例5.13b双字节无符号数加减程序将(R2R3)和(R6R7)两个双字节无符号数相减,结果送R4R5。解:NADD:MOVA,R3CLRCSUBBA,R7MOVR5,AMOVA,R2SUBBA,R6MOVR4,ARET,4.4典型程序设计分析,一定点数运算程序例5.14原码加减运算程序解:原码表示的数是有符号的数,用程序实现时,可以先由符号决定做加减,再将符号去掉后调用前面所编的无符号加减程序。其程序框图及程序如下所示。(1)程序框图(2)程序如下,4.4典型程序设计分析,4.4典型程序设计分析,DSUB:MOVA,R6JBACC.7,DABECPLACC.7;减数符号取反DAB1:MOVC,F0;恢复和数符号MOVR6,AMOVACC.7,CDADD:MOVA,R2MOVR4,AMOVC,ACC.7RETMOVF0,C;保存被加数符号DABE:SETBC;溢出XRLA,R6RETMOVC,ACC.7;C=0两数同号DAB2:ACALLNSUB;异号做减法MOVA,R2;C=1两数异号MOVA,R4CLRACC.7;清被加数符号JNBACC.7,DAB1MOVR2,AACALLCMPT;不够减,取补MOVA,R6CPLF0;差数符号取反CLRACC.7;清加数符号SJMPDAB1MOVR6,AJCDAB2ACALLNADD;同号做加法MOVA,R4,4.4典型程序设计分析,二查表程序设计1线性表格的地址形成公式若在内存中,有一个数据表格,表格中有n个数据,即a0a1a2an-1,每一个数据有L个字节,设表格的首地址为addr(a0),则第i个数据的存储器地址为:addr(ai)=addr(a0)+iL(5-1),a0aian1,Addr(a0)Addr(ai),4.4典型程序设计分析,二查表程序设计2根据序号i值查找ai例5.15a根据累加器A中的数(09之间)查平方表,求出相应的结果。解:addr(ai)=addr(a0)+iL,其中L=1PUSHPSWADDA,#03HMOVCA,A+PCPOPPSWRETDB00H,01H,04H,09H,10HDB19H,24H,31H,40H,51H,4.4典型程序设计分析,二查表程序设计2根据序号i值查找ai例5.15设有一个巡回检测报警装置,需对16路输入进行测量控制,每路有一个最大允许值,它为双字节数。控制时根据测量的路数,找出该路的最大允许值,判断输入值是否大于最大允许值,如大于则报警。(题中的每一路极限数据为十进制数,转换为十六进制数时,为两个字节)。解:根据题意,设需检测信号的路数号为x,则x=0,1,215,设每一路信号的极限值为y,为双字节数据,即L=2。程序的功能是根据X的值查找Y的值。程序的入口参数(X)在R2程序的出口参数(Y)在R3R4程序如下:,4.4典型程序设计分析,LTB1:MOVA,R2;ADDA,R2;R22送AMOVR3,A;保存指针ADDA,#6;加偏移量MOVCA,A+PC;查第一字节XCHA,R3ADDA,#3MOVCA,A+PC;查第二字节MOVR4,ARETTAB1:DW1520,3721,42645,7850;最大值表DW3483,32657,883,9943DW10000,40511,6758,8931DW4468,5871,13284,27808,4.4典型程序设计分析,二查表程序设计3根据元素ai值查找另一元素bi该数据表存放结构有如下两种形式:,4.4典型程序设计分析,二查表程序设计3根据元素ai值查找另一元素bi例:输入给单片机一个ASCII字符,该字符代表一种命令。要按输入的命令字符,转去执行对应的处理程序。设命令字符为A、E、L、M、X、Z七种,对应的处理程序入口标号分别为XA、XD、XE、XL、XM、XX、XZ。采用0结束标志表格。,4.4典型程序设计分析,二查表程序设计3根据元素ai值查找另一元素biLTB5:MOVDPTR,#TAB5MOVDPH,BMOVB,ACLRALOP5:CLRAJMPA+DPTRMOVCA,A+DPTRLNF5:INCDPTRJZLENDINCDPTRINCDPTRSJMPLOP5CJNEA,B,LNF5LEND:NOP;NOFINDCLRATAB5:DBAMOVCA,A+DPTRDWXAMOVB,ADBDINCDPTRDWXDCLRADBEMOVCA,A+DPTR:MOVDPL,ADB0,4.4典型程序设计分析,二查表程序设计4根据ai值找出序号i例5.P181.例25,题略,解:根据题意,ai在R0指示的内部数据存储器中,由ai的值查出i的值。ai在数据存储器中存放的形式和命令在程序存储器中存放形式如表所示。框图如图,an1,ai,a1,a0,表首地址,(R0),4.4典型程序设计分析,4.4典型程序设计分析,LTB4:MOVR2,#0FFHLT4D:INCDPTR;不相符MOVDPTR,#TAB4JBF0,LT4ALT4A:MOVA,R0LT4E:CLRAMOVR1,AMOVCA,A+DPTRINCR2INCDPTRLT4B:MOVA,R1;取一个输入字符JBACC.7,LT4AMOVB,ASJMPLT4ECLRALT4Y:;查到MOVCA,A+DPTR;R2内容为命令号CLRF0LT4N:;查不到JBCACC.7,LT4CSETBF0;字符串末TAB4:DBRESET,0D4HLT4C:JZLT4N;表末端DBBEGI,0CEHCJNEA,B,LT4DJBF0,LT4YINCR1;查下一个字符DBCHANG,0C5HINCDPTRDB0SJMPLT4B,4.4典型程序设计分析,三数据极值查找程序设计例5.17已知内部RAM40H(ADDR)为起始地址的数据块内数据是无符号数,块长在20H(LEN)单元内,找出数据块中最大值并存入22H(MAX)单元ORG2000HF_MAX:PUSHACCPOPPSWPUSHPSWPOPACCMOV22H,#00HRETMOVR0,#40HNEXT1:MOVA,R0CJNEA,22H,NEXT2NEXT2:JCNEXTMOV22H,ANEXT:INCR0DJNZ20H,NEXT1NOPNOP,4.4典型程序设计分析,四数据排序程序设计例5.16用冒泡法将内部RAM40H49H中的10个单字节补码表示的二进制整数从小到大的次序重新排列。解:若有一组10个数,分别为:22、12、80、6、70、9、127、10、00、40,用冒泡法排序的方法如图所示。对于补码数的比较用相减法有如下规则:正数减正数,结果为正

温馨提示

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

评论

0/150

提交评论