1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章,MCS-51,指令系统,及汇编语言程序设计,3.1,指令系统简介及寻址方式,3.2,指令系统及应用举例,3.3,汇编语言程序设计,3.4,实训项目,3,3.1,指令系统简介及寻址方式,指令系统是一种,CPU,所能直接执行的所有命令的集合,,CPU,的主要功能是由它的指令系统来体现的。,MCS-51,系列单片机指令系统共有,111,条指令,其中有,49,条单字节指令、,45,条双字节指令和,17,条三字节指令。,MCS-51,的指令系统中有,64,条指令的执行时间为一个机器周期(,12,个振荡周
2、期),,45,条指令的执行时间为两个机器周期。,3.1.1,指令分类,按指令实现的功能可分为五大类:,1,)数据传送指令:完成数据交换、存储。包括片内,RAM,、片外,RAM,、程序存储器的传送指令,交换及堆栈指令。,2,)算术运算类:完成各种算术运算,包括加法、带进位加、减、乘、除、加,1,、减,1,指令。,3,)逻辑运算类:完成逻辑运算,包括逻辑与、或、异或、测试及移位指令。,4,)布尔变量操作类:完成单独一位的操作,分为位数据传送、位与、位或、位转移指令。,5,)控制程序转移类:实现各种有条件和无条件的转移等,包括无条件转移、条件转移、子程序调用返回、中断返回及空操作指令,3.1.2,指
3、令格式,MCS-51,指令系统中的每一条指令都有两级指令格式:,CPU,可直接识别并执行的机器语言指令。,汇编语言指令(简称汇编指令)。,机器语言指令由二进制数,“,0,”,和,“,1,”,编码而成,也称目标代码,执行速度最快。,汇编语言指令是在机器语言指令的基础上,用英文单词或英文单词缩写表示机器语言指令的操作码(助记符),用符号表示操作数或操作数的地址。汇编语言指令实际上是符号化的机器语言,MCS-51,汇编语言指令格式由以下几个部分组成:,标号:,操作码,目的操作数,源操作数,;注释,其中:,中的项表示为可选项;,标号:又称为指令地址符号,一般是由,1,6,个字符 组成,以字母开头的字母
4、数字串,与操作码之间用冒号分开;,操作码:是由助记符所表示的指令的操作功能;,操作数:是指参加操作的数据或数据的地址;,注释:是为该条指令作的说明,以便于阅读。,操作码是指令的核心,不可缺少,其他几项根据不同指令为可选项。,3.1.3,寻址方式,所谓寻址方式就是寻找或获得操作数的方式。,MCS-51,指令系统的寻址方式有以下,7,种:,1.,立即寻址,在立即寻址方式中,操作数直接出现在指令中。操作,数前加,“,#,”,号表示,也称立即数。指令的操作数可以是,8,位或,16,位数。,例如:,MOV A,#26H,;A26H,指令执行结果:(,A,),=26H,,即把立即数,26H,直接送到,A,
5、中。,2.,直接寻址,在直接寻址方式中,操作数的单元地址直接出现在指令中,这一寻址方式可进行内部存储单元的访问。,它包括:,(1),特殊功能寄存器地址空间。这也是惟一可寻址特殊功能寄存器(,SFR,)的寻址方式。,例如:,MOV TCON,ACC,指令执行结果:累加器,A,的内容传送给寄存器,TCON,。,(,ACC,在汇编后的机器码为字节地址,E0H,,因而为直接寻址。而,A,表示对累加器的寄存器寻址。),(2),内部,RAM,的低,128,字节,例如:,MOV A,76H,指令执行结果:内部,RAM,地址为,76H,单元的内容传送给,A,。,3.,寄存器寻址,在寄存器寻址方式中,寄存器中的
6、内容就是操作数。,例如:,MOV A,R1;A(R1),指令执行结果:把寄存器,R1,中的内容送到累加器,A,中。,4.,寄存器间接寻址,在寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储单元的内容才是操作数。,(,1,)访问内部数据存储器时,用当前工作寄存器,R0,和,R1,作间址,即,R0,、,R1,,,例如:,MOV A,R0,该指令的功能是将,R0,所指存储单元中内容送,A,中。,(,2,)访问外部存储器,,16,位数据指针,DPTR,作为间址寄存器。,例如:,MOVX A,R1,MOVX DPTR,A,(,3,)在堆栈操作中则用堆栈指针,SP,作间址。,5.,变
7、址寻址,变址寻址方式是以程序指针,PC,或数据指针,DPTR,为基址寄存器,以累加器,A,作为变址寄存器,两者内容相加(即基地址,+,偏移量)形成,16,位的操作数地址,变址寻址方式主要用于访问固化在程序存储器中的某个字节。,变址寻址方式有两类:,(1),用程序指针,PC,作基地址,,A,作变址,形成操作数地址:,A+PC,。,(2),用数据指针,DPTR,作基地址,,A,作变址,形成操作数地址:,A+DPTR,。,6.,相对寻址,相对寻址是以程序计数器,PC,的当前值作为基地址,与指令中的第二字节给出的相对偏移量,rel,进行相加,所得和为程序的转移地址。,7.,位寻址,MCS-51,系列单
8、片机中有独立的性能优越的布尔处理器,包括位变量操作运算器、位累加器和位存储器,可对位地址空间的每个位进行位变量传送、状态控制、逻辑运算等操作。,位地址包括:,内部,RAM,地址空间的可进行位寻址的,128,位;,SFR,地址空间的可位寻址的,11,个,8,位寄存器的,88,位。,位寻址给出的是直接地址。,3.1.4,寻址空间,MCS-51,的,7,种操作数的寻址方式与所涉及到的存储器空间的关系如下:,立即寻址:立即数在程序存储器,ROM,。,直接寻址:操作数的地址在指令中,操作数在片内,RAM,低,128B,和专用寄存器,SFR,。,寄存器寻址:操作数在工作寄存器,R0,R7,,,A,,,B,
9、Cy,,,DPTR,。,寄存器间接寻址:操作数的地址在指令中,操作数在片内,RAM,低,128B,(以,R0,、,R1,、,SP,(仅对,PUSH,、,POP,指令)形式寻址);片外,RAM,(以,R0,、,R1,、,DPTR,形式寻址)。,基址加变址寻址:操作数在程序存储器,ROM,。,相对寻址:操作数在程序存储器,-128,+127B,范围内。,位寻址:操作数为片内,RAM,的,20H,2FH,字节地址中的所有位(位地址为,00H,7FH,)和部分,SFR,的位。,3.2,指令系统及应用举例,3.2.1,数据传送指令,(1),片内数据传送指令,MOV A,Rn,;A,(,Rn,)源操作
10、数为寄存器寻址,MOV A,Ri,;,A(Ri,),为寄存器间接寻址,;,(,i=0,或,1,,下同,),MOV A,direct,;A(,直接地址,direct,),;源操作数为直接寻址,MOV A,#data,;A,立即数,data,,下同,;源操作数为立即寻址,MOV,Rn,A,;,Rn(A,),(,Rn,为,R0,R7,下同,),MOV,Rn,direct,;,Rn(direct,),MOV,Rn,#data,;,Rndata,MOV direct,A,MOV direct,Rn,MOV direct,direct,MOV direct,Ri,MOV direct,#data,MOV
11、Ri,A,MOV ,Ri,direct,MOV ,Ri,#data,16,位数据传送指令有以下惟一形式:,MOV DPTR,#data16,该指令的功能:把,16,位立即数传送至,16,位数据指针寄存器,DPTR,。,(2),片外数据存储器传送指令,片外数据存储器传送指令有以下形式:,MOVX A,Ri,;,A(Ri,),,为寄存器间接寻址,MOVX A,DPTR,;A(DPTR),,为寄存器间接寻址,MOVX R,A,;(,Ri)(A,),MOVX DPTR,A,;(DPTR)(A),单片机内部与片外数据存储器是通过累加器,A,进行数据传送的。,(3),程序存储器数据传送指令,程序存储器数
12、据传送指令有以下两种形式:,MOVC A,A+PC,MOVC A,A+DPTR,(4),数据交换指令,数据交换指令有以下形式:,1),字节交换指令:,XCH A,,,Rn,;A,的内容与,Rn,的内容交换,XCH A,Ri,;A,的内容与,(,Ri,),的内容交换,XCH A,direct,;A,的内容与,(direct),的内容交换,2),低半字节交换指令:,XCHD A,Ri,;A,的低四位与,(,Ri,),的低四位交换,3),累加器,A,的高、低半字节交换指令:,SWAP A,;A,的低四位与高四位互换,(5),堆栈操作指令,堆栈操作指令有以下形式:,PUSH direct,;SP(SP
13、)+1,(先指针加,1,),;(,SP)(direct,),(再压栈),POP direct,;(,SP)(direct,),(先弹出),;SP(SP)-1,(再指针减,1,),PUSH,指令是入栈(或称压栈或进栈)指令,其功能是先将堆栈指针,SP,的内容加,1,,然后将直接寻址,direct,单元中的数压入到,SP,所指示的单元中。,POP,是出栈(或称弹出)指令,其功能是先将堆栈指针,SP,所指示的单元内容弹出到直接寻址,direct,单元中,然后将,SP,的内容减,1,,,SP,始终指向栈顶。,3.3.2,算术运算指令,算术运算类指令共有,24,条,包括加法、带进位加法、带借位减法、乘、
14、除、加,1,、减,1,和十进制调整指令,其指令助记符分别为:,ADD,、,ADDC,、,SUBB,、,MUL,、,DIV,、,INC,、,DEC,、和,DA,等。,1.,加减运算,不带进位的加法指令:,ADD A,#data,;A,(A)+data,ADD A,direct,;A,(,A)+(direct,),ADD A,Rn,;A,(,A)+(Rn,),ADD A,Ri,;A,(A)+(Ri),带进位加法指令:,ADDCA,Rn,;A,(,A)+(Rn)+Cy,ADDCA,#data,;A,(A)+#data+Cy,带借位减法指令有以下形式:,SUBBA,Rn,;A,(A)-(,Rn,)-C
15、y,SUBBA,Ri,;A,(A)-(Ri)-Cy,SUBBA,direct,;A,(A)-(direct)-Cy,SUBBA,#data,;A,(A)-data-Cy,利用加减法指令的可实现的主要功能:,1,)对,8,位无符号二进制数进行加减运算。,2,)借助溢出标志对有符号的二进制整数进行加减运算。,3,)借助进位标志,可以实现多字节的加减运算。,2.,乘法指令,乘法指令有以下惟一形式:,MUL AB,;AAB,低字节,;,BAB,高字节,该指令的功能:把累加器,A,和寄存器,B,中的两个,8,位无符号数相乘,乘积又送回,A,、,B,内,,A,中存放低位字节,,B,中存放高位字节。,除法指
16、令有以下惟一形式:,DIVAB,;A(A)/(B),(商),;,B(A)/(B),(余数),该指令的功能:把,A,中的,8,位无符号数除以,B,中的,8,位无符号数,商存放在,A,中,余数存放在,B,中。,Cy,和,OV,均清,0,。若除数为,0,,执行该指令后结果不定,并将,OV,置,1,。,3.,加,1,、减,1,指令,加,1,指令有以下形式:,INCA,;A,(A)+1,INC,Rn,;,Rn,(Rn)+1,INCdirect,;(direct),(direct)+1,INCRi,;(Ri),(Ri)+1,INCDPTR,;DPTR,(DPTR)+1,减,1,指令有以下形式:,DEC A
17、A(A)-1,DEC,Rn,;Rn(Rn)-1,DEC ,Ri,;(Ri)(Ri)-1,DEC direct,;(direct)(direct)-1,加,1,、减,1,指令主要用于调整寻址单元的数据进行加,1,、减,1,操作,其结果仍存放在原数据单元。该指令常用于循环程序中对循环次数的控制,。,4.,十进制调整指令,DAA,;A(A)(BCD,码调整,),指令的功能:将存放于,A,中的两个,BCD,码(十进制数)的和进行十进制调整,使,A,中的结果为正确的,BCD,码数。,3.3.3,逻辑运算类指令,逻辑操作指令均对,8,位二进制数按位进行逻辑运算。,逻辑运算类指令无进位,一般不影响标志位
18、1.,双操作数的逻辑运算指令(与、或、异或),(1),逻辑“与”指令,ANLA,Rn,;,A(A)(Rn,),ANLA,#data,;,A(A)data,ANLdirect,A,;(,direct)(direct)(A,),与运算规则是:与“,0”,相与,本位为“,0”,(即屏蔽);与,“,1”,相与,本位不变。,(2),逻辑“或”指令,ORL A,Rn,;,A(A)(Rn,),ORL A,Ri,;,A(A)(Ri,),或运算规则是:与“,1”,相或,本位为“,1”,;与“,0”,相或,本位不变。,(3),逻辑“异或”指令,XRL A,Rn,;,A(A)(Rn,),XRL A,#data,
19、A(A)data,将源操作数和目的操作数按对应位进行逻辑“异或”运算,并将结果存入目的地址。,异或运算的运算规则是:与“,1”,异或,本位为非(即求反);与“,0”,异或,本位不变。,2.,单操作数的逻辑运算指令(取反、清零),单操作数逻辑运算指令有以下形式:,(1),累加器,A,清,0,指令,CLRA,;A0,(2),累加器,A,求反指令,CPLA,;A(),3.,循环移位指令,(1),累加器,A,循环移位指令,累加器,A,循环移位指令有以下形式:,RL A,;A,的各位依次左移一位,,A.0A.7,RR A,;A,的各位依次右移一位,,A.7A.0,该组指令不影响标志位。,当,A,的最
20、高位(,D7,)为,0,时,执行一次,RL,指令相当于对,A,进行一次乘,2,操作。,当,A,的最低位(,D0,)为,0,时,执行一次,RR,指令相当于对,A,进行一次除,2,操作。,(2),带进位位,Cy,的累加器,A,循环移位指令,带进位位,Cy,的累加器,A,循环移位指令有以下形式:,RLC A,;A,的各位依次左移一位,,CyA.7,,,A.0Cy,RRC A,;A,的各位依次右移一位,,CyA.0,,,A.7Cy,3.2.4,位操作类指令,位操作指令共,17,条,所有的位操作指令均采用位(直接)寻址方式,在进行位操作时,,MCS-51,汇编语言中的位地址可用以下四种方式表示:,(1)
21、直接位地址方式。,(2),点操作符表示方式。,(3),位名称方式。,(4),用户定义名方式。,1.,位传送指令,位传送指令有以下形式:,MOV,C,bit,;,Cy(bit,),MOV,bit,C,;(bit),(,Cy,),指令中其中一个操作数必须是进位标志,C,,,bit,可表示任何直接位地址。,2.,位修改指令,(1),位置位指令有以下形式:,SETBC,;Cy,1,SETBbit,;(bit),1,(2),位清,0,指令有以下形式:,CLRC,;Cy,0,CLRbit,;(bit),0,采用这类指令可以对,C,和指定位置,1,或清零。,(3),位逻辑“非”指令有以下形式:,CPLC,
22、CPLbit,该组指令的功能是:对进位标志,Cy,或直接寻址位,bit,的布尔值进行位逻辑“非”运算,结果送入,Cy,或,bit,。,3.,位逻辑运算指令位逻辑“与”指令位逻辑“与”指令有以下形式:,ANLC,bit,;,C(C)(bit,),ANLC,/bit,;C(C)(),该组指令的功能是:进位标志,Cy,与直接寻址位的布尔,值进行位逻辑“与”运算,结果送入,Cy,。,注意:,bit,前的斜杠表示对(,bit,)求反,求反后再与,Cy,的内容进行逻辑操作,但并不改变,bit,原来的值。,位逻辑,“,或,”,指令,位逻辑,“,或,”,指令有以下形式:,ORLC,bit,;,C(C)(bit
23、),ORLC,/bit,;C(C)(),该组指令的功能是:进位标志,Cy,与直接寻址位的布尔,值进行位逻辑,“,或,”,运算,结果送入,Cy,。,3.2.5,控制转移类指令,控制转移指令可分为三类:无条件转移指令、条件转移指令及子程序调用与返回指令。,1.,无条件转移指令,不受任何条件限制的转移指令称为无条件转移指令。,MCS-51,无条件转移指令有以下类型:,(1),长转移指令,长转移指令有以下惟一形式:,LJMPaddrl6,;PC(PC)+2;PCaddr16,该指令功能:把,16,位地址(,addr16,)送给,PC,,从而实现程序转移。允许转移的目标地址在整个程序存储器空间。,(2
24、),绝对转移指令,绝对转移指令有以下惟一形式:,AJMP,addr11,;PC(PC)+2,;PC10,0addr10,0,PC15,11,不变,该指令功能:把,PC,当前值(加,2,修改后的值)的高,5,位与指令中的,11,位地址拼接在一起,共同形成,16,位目标地址送给,PC,,从而使程序转移。,(3),相对转移指令(亦称短转移指令),相对转移指令有以下惟一形式:,SJMP,rel,;PC(PC)+2+rel,该指令的功能:根据指令中给出的相对偏移量,rel,(相对于当前,PC=(PC)+2,),计算出程序将要转移的目标地址(,PC,),+2+rel,,把该目标地址送给,PC,。,(4),
25、间接长转移指令(相对长转移指令),间接长转移指令有以下惟一形式:,JMPA+DPTR,;PC(A)+(DPTR),该指令也称散转指令,其功能是把累加器,A,中,8,位无符号数与数据指针,DPTR,的,16,位数相加,结果作为下一条指令地址送入,PC,,指令执行后不改变,A,和,DPTR,中的内容,也不影响标志位。,2.,条件转移指令,所谓条件转移指令是指根据指令中给定的判断条件决定程序是否转移。,当条件满足时,就按指令给定的相对偏移量进行转移;否则,程序顺序执行。,(1),累加器判零转移指令,累加器判零转移指令有以下形式:,JZ,rel,JNZ,rel,这两条指令均为双字节指令,以累加器,A,
26、的内容是否为,0,作为转移的条件。本指令执行前,累加器,A,应有确定的值。,(2),比较不相等转移指令,例如:,CJNEA,#data,rel,该指令的功能:若,Adata,,则,PC(PC)+3+rel,,且,Cy=0,(满足条件相对转移)。若,(A)data,,则,PC(PC)+3+rel,,且,Cy=1,(满足条件相对转移)。否则,,PC(PC)+3,且,Cy=0,(顺序执行),(3),减,1,不为,0,转移指令,减,1,不为,0,转移指令有以下形式:,DJNZ,Rn,rel,DJNZ,direct,rel,该组指令中第一条指令为两字节指令,第二条指令为三字节指令,。,3.,子程序调用与
27、返回指令,在程序设计时,常常有一些程序段被多次反复执行。为了缩短程序,节省存储空间,把具有多处使用的且逻辑上相对独立的某些程序段编写成子程序。当某个程序(可以是主程序或子程序)需要引用该子程序时,可通过子程序调用指令转向该子程序执行,当子程序执行完毕,可通过子程序返回指令返回到子程序调用指令的下一条指令继续执行原来程序。,子程序绝对调用指令:,ACALL addrl1,子程序调用返回指令格式:,RET,中断子程序返回指令格式:,RETI,空操作指令有以下惟一形式:,NOP,;PC(PC)+1,空操作指令是惟一的一条不使,CPU,产生任何操作控制的指令,,NOP,指令的功能是使程序计数器,PC,
28、加,1,,在执行时间上消耗,12,个时钟周期。,3.3,汇编语言程序设计基础,3.3.1,伪指令,汇编语言源程序是由汇编语句组成的,一般情况下,汇编语言语句可分为:指令性语句(即汇编指令)和指示性语句(即伪指令)。,1.,指令性语句,指令性语句(可简称指令)是进行汇编语言程序设计的可执行语句,每条指令都产生相应的机器语言的目标代码。源程序的主要功能是由指令性语句去完成的。,2.,指示性语句,指示性语句(伪指令)又称汇编控制指令。它是控制汇编(翻译)过程的一些命令,程序员通过伪指令要求汇编程序在进行汇编时的一些操作。因此,伪指令不产生机器语言的目标代码,是汇编语言程序中的不可执行语句。伪指令主要
29、用于指定源程序存放的起始地址、定义符号、指定暂存数据的存储区以及将数据存入存储器、结束汇编等。,3.4.2,伪指令,MCS-51,单片机汇编语言中常用的伪指令如下:,1.,ORG,(汇编起始地址),格式:,ORG 16,位地址,功能:规定紧跟在该伪指令后的源程序经汇编后产生的目标程序在程序存储器中存放的起始地址。,2.,END,(结束汇编),格式:,END,或,END,标号,功能:汇编语言源程序的结束标志,即通知汇编程序不再继续往下汇编。,3.EQU,(等值),格式:,标识符,EQU,数或汇编符号,功能:把数或汇编符号赋给标识符,且只能赋值一次。,4.DB,(定义字节),格式:,标号,:DB,
30、项或项表,功能:将项或项表中的字节(,8,位)数据依次存入标号所指示的存储单元中。,5.DW,(定义字),格式:,标号,:DW,项或项表,功能:将项或项表中的字(,16,位)数据依次存入标号所指示的存储单元中。,6.DS,(定义存储单元),格式:,标号:,DS,数字,功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,留给以后存储数据用。,7.BIT,(地址符号命令),格式:,标识符,BIT,位地址,功能:将位地址赋以标识符(注意,不是标号)。,8.,定义存储单元伪指令,DS,格式:,标号,:DS,数字,功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,留
31、给以后存储数据用。,3.3.2,汇编语言程序结构及应用,1.,程序设计步骤,汇编语言程序设计一般经过以下几个步骤:,(1),分析问题,明确任务要求,对于复杂的问题,还要将要解决的问题抽象成数学模型。,(2),确定算法,即根据实际问题和指令系统的特点确定完成这一任务需经历的步骤。,(3),根据所选择的算法,确定内存单元的分配;使用哪些存储器单元;使用哪些寄存器;程序运行中的中间数据及结果存放在哪些单元,以利于提高程序的效率和运行速度。,(4),根据流程图,编写源程序。,(5),上机对源程序进行汇编、调试。,2.,程序设计技术,在进行汇编语言程序设计时,对于同一个问题,会有不同的编程方式,但应按照
32、结构化程序设计的要求,即程序的基本结构应采用顺序、选择和循环三种基本结构,而实现基本结构的指令语句也会有多种不同的形式,因而在执行速度、所占内存空间、易读性和可维护性等方面就有所不同。用汇编语言编写程序,对于初学者来说是会遇到困难的,程序设计者只有通过实践,不断积累经验,才能编写出较高质量的程序。,3.,几种常见汇编语言程序设计结构,(,1,)顺序程序结构示例,拼字:将外部数据存储器,3000H,和,3001H,的低,4,位取出拼成一个字,送,3002H,单元中。,程序如下:,ORG 2000H,MOV DPTR,#3000H ;DPTR,外部数据存储器地址,MOVX A,DPTR ;,取,3
33、000H,单元数据送,A,ANL A,#0FH ;,屏蔽高,4,位,SWAP A ;,将,A,的低,4,位与高,4,位交换,MOV R1,A ;,暂存于,R1,INC DPTR ;,指向下一单元,MOVX A,DPTR ;3001H,单元数据送,A,ANL A,#0FH ;,屏蔽高,4,位,ORL A,R1 ;,拼成一个字节,INC DPTR ;,指向下一单元,MOVX DPTR,A ;,拼字结果送,3002H,单元,SJMP$,END,说明:,1,)本例中最后一条指令原地踏步指令,SJMP$,。,2,)凡访问外部数据存储器,必须先建立外部数据存储器地址指针(一般使用,DPTR,)。访问外部数
34、据存储器的指令为,MOVX,。,(,2,),分支程序示例,把片外,RAM,的首地址为,10H,开始存放的数据块,传送给片内,RAM,首地址为,20H,开始的数据块中去,如果数据为“,0”,,就停止传送。,程序如下:,ORG 2000H,MOV R0,#10H,MOV R1,#20H,LOOP:MOVX A,R0 ;A,片外,RAM,数据,HERE:JZ HERE ;,程序原地踏步,MOV R1,A ;,片内,RAMA,INC R0,INC R1,SJMP LOOP ;,循环传送,END,(,3,),循环程序示例,在程序执行过程中,当需要多次反复执行某段程序时,可采用循环程序。,循环程序一般由三
35、部分组成:,1),初始化。,2),循环体。,3),循环控制。,有,20,个数存放在内部,RAM,从,41H,开始的连续单元中,试求其和并将结果存放在,40H,单元(和数是一个,8,位二进制数,不考虑进位问题)。,程序如下:,ORG 2000H,MOV A,#00H;,清累加器,A,MOV R7,#14H;,建立循环计数器,R7,初值,MOV R0,#41H;,建立内存数据指针,LOOP:ADD A,R0 ;,累加,INCR0 ;,指向下一个内存单元,DJNZ R7,LOOP ;,修改循环计数器,MOV 40H,A ;,存累加结果于,40H,SJMP$,END,(,4,)子程序设计,编写一子程序
36、将累加器,A,中的,ASCII,码转换为十六进制数。程序代码如下:,ASCH:CLR C,SUBB A,#30H,CJNE A,#0AH,NEXT,NEXT:JC DONE,SUBB A,#07H,DONE:RET,(5),查表程序,查表是程序设计中使用的基本方法。只要适当地组织表格,就可以十分方便地利用表格进行多种代码转换和算术运算等。,利用表格计算内部,RAM,的,40H,单元中一位,BCD,数的平方值,并将结果存入,41H,单元。首先组织平方表,且把它作为程序的一部分。,程序如下:,ORG 2000H,MOV A,40H,MOV DPTR,#SQTAB,MOVC A,A+DPTR,MO
37、V 41H,A,SJMP$,SQTAB:DB 0,1,4,9,16,25,36,49,64,81,(6),运算程序,编写一子程序,实现多字节加法。,两个多字节数分别存放在起始地址为,FIRST,和,SECOND,的连续单元中(从低位字节开始存放),两个数的字节数存放在,NUMBER,单元中,最后求得的和存放在,FIRST,开始的区域中。,SUBAD:MOV R0,#FIRST,MOV R1,#SECOND;,置起始地址,MOV R2,NUMBER ;,置计数初值,CLRC;,清,Cy,LOOP:MOV A,R0,ADDCA,R1;,进行一次加法运算,MOV R0,A;,存结果,INCR0,INC R1;,修改地址指针,DJNZR2,LOOP;,计数及循环控制,RET,本章小结:,练习及思考题:,实训项目三:,予习:,谢谢大家!,本章结束 谢谢使用,






