《第三章 MCS-51系列单片机指系统及汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第三章 MCS-51系列单片机指系统及汇编语言程序设计.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3章章 MCS-51系列单片机指令系统系列单片机指令系统及汇编语言程序设计及汇编语言程序设计uMCS-51单片机的寻址方式单片机的寻址方式uMCS-51单片机分类指令单片机分类指令uMCS-51单片机汇编语言程序设计基础单片机汇编语言程序设计基础3.1 MCS-51单片机的寻址方式单片机的寻址方式MCS-51单片机共有7种寻址方式:立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址1.立即寻址立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中。立即操作数有8位和16位两种形式,前面加“”来表示。例如:MOVA,#0FFH;将立即数FFH传送到累加器A中MOVDPTR,#
2、2000H;将16位立即数2000H传送到数据指针DPTR中MOV40H,#60H;将立即数60H传送到40H内部RAM单元中2.直接寻址指令中直接给出操作数地址的寻址方式。例如:MOVA,30H;内部RAM中的30H单元中的数据内容传送到累加器A中3.寄存器寻址以通用寄存器的内容为操作数的寻址方式。通用寄存器包括:A,B,DPTR,R0R7。其中,R0R7必须在工作寄存器组之中。例如:INCR0;(R0)1R0需要注意的是,A和B既是通用寄存器,又是具有直接地址的特殊功能寄存器。4.寄存器间接寻址以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够用于寄存器间接寻址的寄存器有:R0
3、,R1,DPTR,SP。其中,R0,R1必须在工作寄存器组之中,SP仅用于堆栈操作。例如:MOVXA,R1;外部数据RAM中地址为P2R1的单元内容AMOVXDPTR,A;A外部数据RAM中DPTR为地址的单元寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同寻址64K空间;第二种是用16位的DPTR
4、作寄存器间接寻址。5.变址寻址由程序计数器PC或DPTR加上偏移量寄存器A中内容之和形成操作数地址的寻址方式。变址寻址只能对程序存储器中的数据作寻址操作。由于程序存储器是只读存储器,因此变址寻址操作只有读操作而无写操作。例如:MOVCA,A+DPTR;A+DPTR为地址的存储器单元内容AMOVCA,A+PC;A+PC为地址的存储器单元内容A6.相对寻址以当前程序计数器PC的内容为基址,加上指令给出的一字节补码数形成新的PC值的寻址方式。PC中的当前值称为基地址,一字节补码数称为偏移量,新的PC值称为转移目的地址。例如:JC80H;C1跳转表示进位位C为0,则程序计数器PC中的内容不改变,即不转
5、移。若进位位C为1,则PC中的当前值为基地址加上偏移量80H后所得到的结果作为该转移指令的目的地址。7.位寻址对位地址中的内容作位操作的寻址方式。单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址(两者统一编址,地址空间为00HFFH),因此,位寻址只能对有位地址的这两个空间作寻址操作。例如SETB20H;120H位MOV32H,C;进位位C32H位3.2 分类指令分类指令MCS-51单片机共有111条指令,按功能分类,MCS-51指令系统可分为5大类:数据传送类指令(共29条)算术操作类指令(共24条)逻辑操作类指令(共24条)控制转移类指令(共17条)布尔变量操作类指令(共17条)1
6、.数据传送类指令数据传送类指令(共29条)l以累加器A为目的操作数类指令(4条)MOVA,dirMOVA,#dataMOVA,RnMOVA,Ri例:R120H,(20H)55H,指令MOVA,R1执行后,A55H。l以寄存器Rn为目的操作数的指令(3条)MOVRn,dirMOVRn,#dataMOVRn,A例:(40H)30H,指令MOVR7,40H执行后,R730H。l以直接地址为目的操作数的指令(5条)MOVdir,dirMOVdir,#dataMOVdir,AMOVdir,RnMOVdir,Ri例:R050H,(50H)10H,指令MOV35H,R0执行后,(35H)10H。l以间接地址
7、为目的操作数的指令(3条)MOVRi,dirMOVRi,#dataMOVRi,Al查表指令(2条)MOVCA,A+DPTRMOVCA,A+PC例:A20H,DPTR2000H,指令MOVCA,A+DPTR执行后,程序存储器2020H单元中的内容送入A。l累加器A与片外数据存储器RAM传送指令(4条)MOVXDPTR,AMOVXA,DPTRMOVXA,,RiMOVXRi,A例:DPTR2000H,外部RAM中(2000H)18H,指令MOVXA,DPTR执行后,A18H。例:P210H,R150H,A64H,指令MOVXR1,A执行后,外部RAM中(1050H)64H。l堆栈操作类指令(2条)P
8、USHdirPOPdir例:SP07H,(35H)55H,指令PUSH35H执行后,55H送入08H地址单元,SP08H。l交换指令(5条)XCHA,RnXCHA,RiXCHA,dirXCHDA,RiSWAPA例:A80H,R032H,(32H)FFH,指令XCHDA,R0执行后,A8FH,(32H)F0H。l16位数据传送指令(1条)MOVDPTR,#data162.算术操作类指令算术操作类指令(共24条)算术运算指令共有24条,算术运算主要是执行加、减、乘、除、增量、减量和十进制调整等指令。l加法指令(4条)ADDA,#dataADDA,dirADDA,RnADDA,Ril带进位加法指令(
9、4条)ADDCA,dirADDCA,#dataADDCA,RnADDCA,Ril带借位减法指令(4条)SUBBA,dirSUBBA,#dataSUBBA,RnSUBBA,Ri例:A38H,R120H,(20H)23H,C1,指令SUBBA,R1执行后,A14Hl乘法指令(1条)MULA,B例:A50H,BA0H,指令MULA,B执行后,A00H,B32Hl除法指令(1条)DIVA,B例:A28H,B12H,指令DIVA,B执行后,A02H,B04Hl加1指令(5条)INCAINCdirINCRiINCRnINCDPTRl减1指令(4条)DECADECdirDECRiDECRnl十进制调整指令(
10、1条)DAA;把A中按二进制相加后的结果调整成按BCD数相加的结果3.逻辑操作类指令逻辑操作类指令(共24条)逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、清0、左右移位等逻辑操作。l“与”操作指令(6条)ANLA,dirANLA,#dataANLA,RnANLA,RiANLdir,AANLdir,#datal“或”操作指令(6条)ORLA,dirORLA,#dataORLA,RnORLA,RiORLdir,AORLdir,#data例:(21H)3AH,A14H,指令ORL21H,A执行后,(21H)3EH。l“异或”操作指令(6条)XRLA,dirXRLA,#dataX
11、RLA,RnXRLA,RiXRLdir,AXRLdir,#data例:R023H,(23H)32H,A53H,指令XRLA,R0执行后,A61Hl求反指令(1条)CPLA;累加器A中的内容按位取反l清零指令(1条)CLRA;0A,累加器A中的内容清零l循环移位指令(4条)RLA;累加器A中的内容左移一位RRA;累加器A中的内容右移一位RLCA;累加器A中的内容连同进位位C左移一位RRCA;累加器A中的内容连同进位位C右移一位例:A16H,指令RRA执行后,A0BH。4.控制转移类指令控制转移类指令(共17条)控制转移类指令共有17条,用于控制程序的流向,所控制的范围即为程序存储器区间。l子程序
12、调用指令(4条)绝对调用指令ACALLaddr11绝对调用指令实现在2K地址范围内的子程序调用。本指令实现的操作将不改变原PC的高5位,仅把11位地址addr11送入PC的低11位,以此确定子程序的入口地址。由于整个64K程序存储器空间被分成32个基本2K地址范围(见表3.4),编程时,必须保证紧接ACALL指令后面的那一条指令的第一字节与被调用子程序的入口地址在同一2K范围内,否则将不能使用ACALL指令实现这种调用。表3.4 程序存储器空间中的32个基本2K地址范围0000H07FFH5800H5FFFHB000HB7FFH0800H0FFFH6000H67FFHB800HBFFFH100
13、0H17FFH6800H6FFFHC000HC7FFH1800H1FFFH7000H77FFHC800HCFFFH2000H27FFH7800H7FFFHD000HD7FFH2800H2FFFH8000H87FFHD800HDFFFH3000H37FFH8800H8FFFHE000HE7FFH3800H3FFFH9000H97FFHE800HEFFFH4000H47FFH9800H9FFFHF000HF7FFH4800H4FFFHA000HA7FFHF800HFFFFH5000H57FFHA800HAFFFH长调用指令LCALLaddr16长调用指令为64K程序存储器空间中的全范围子程序调用指
14、令,子程序的入口地址可在64K地址空间中的任一处。子程序返回指令RET从被调用子程序返回,与LCALL与ACALL指令配合使用。中断返回指令RETI从中断服务程序中返回,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替。l转移类指令(12条)转移类指令分为无条件转移指令和条件转移指令两组。无条件转移指令包括绝对转移、长转移、短转移和间接转移;条件转移指令包括结果为零、结果为非零、减“1”后结果为非零以及两数不相等的转移条件等,它们全部采用相对转移的方式。无条件转移指令(4条)【1】长转移指令LJMPaddr16长转移指令为64K程序存储器空间的全范围转移指
15、令,转移地址可为16位地址值中的任一值。【2】绝对转移指令AJMPaddr11绝对转移指令为2K地址范围内的转移指令,对转移目的地址的要求与ACALL指令中对子程序入口地址的要求相同。【3】短转移指令SJMPrel;PC+2+relPC短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码偏移量,且SJMPrel指令为2字节指令,所以转移范围为126D129D【4】间接转移指令JMPA+DPTR条件转移指令(8条)【1】累加器为零/非零转移指令JZrel若A=0,则PC+2+relPC,程序转移到偏移量所指向的地址若A0,程序顺序执行JNZrel若A0,则PC+2+relPC,程序转
16、移到偏移量所指向的地址若A=0,程序顺序执行【2】两数不等转移指令CJNEA,dir,rel若A(dir),则PC3relPC,程序转移;若A(dir),则程序顺序执行CJNEA,#data,rel若A#data,则PC3relPC,程序转移;若A#data,则程序顺序执行CJNERn,#data,rel若Rn#data,则PC3relPC,程序转移;若Rn#data,则程序顺序执行CJNERi,#data,rel若(Ri)#data,则PC3relPC,程序转移;若(Ri)#data,则程序顺序执行【3】减“1”非零转移指令DJNZRn,relRn1Rn,若Rn0,则PC2relPC,程序转
17、移;若Rn0,则程序顺序执行DJNZdir,rel(dir)1dir,若(dir)0,则PC3relPC,程序转移;若(dir)0,则程序顺序执行需要注意的是,DJNZRn,rel是2字节指令,而DJNZdir,rel是3字节指令,所以在满足转移条件后,前者是PC2relPC,而后者是PC3relPC。例:说明下面一段程序运行后累加器A中的结果。MOV23H,0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$解:根据程序可知,运算结果A1098765432155D37Hl空操作指令(1条)NOP5.布尔变量操作类指令布尔变量操作类指令(共17条)布尔变量操作类指令共有1
18、7条,其共同特点是对进位位C和直接位地址bit的操作,包括清零、置位、求反、逻辑与、逻辑或、位传送以及判断转移指令。l清位指令(2条)CLRC;0CCLRbit;0bitl置位指令(2条)SETBC;1CSETBbit;1bitl位求反指令(2条)CPLCCPLbitl位逻辑“与”指令(2条)ANLC,bitANLC,l位逻辑“或”指令(2条)ORLC,bitORLC,l位传送指令(2条)MOVC,bit;(bit)CMOVbit,C;Cbitl位控制转移指令(5条)位控制转移指令是以位的状态作为实现程序转移的判断条件,介绍如下:JCrel若C=1,则PC+2+relPC,程序转移;否则程序顺
19、序执行JNCrel若C=0,则PC+2+relPC,程序转移;否则程序顺序执行JBbit,rel若(bit)=1,则PC+3+relPC,程序转移;否则程序顺序执行JNBbit,rel若(bit)=0,则PC+3+relPC,程序转移;否则程序顺序执行JBCbit,rel若(bit)=1,则PC+3+relPC,程序转移,且该位清零;否则程序顺序执行3.3 MCS-51单片机汇编语言程序设计单片机汇编语言程序设计l汇编语言概述l顺序程序l分支程序l循环程序l子程序1.汇编语言概述结构化程序的概念顺序结构顺序结构是按照语句实现的先后次序执行一系列的操作,它没有分支、循环和转移。分支结构分支结构又
20、叫条件选择结构,根据不同情况做出判断和选择,以便执行不同的程序段。分支的意思是在两个或多个不同的操作中选择其中的一个。循环结构循环结构是重复执行一系列操作,直到某个条件出现为止。循环实际上是分支结构的一种扩展,循环是否继续是依靠条件判断语句来完成的。按照条件判断的位置,可以把循环分为“当型循环”和“直到型循环”。第一种情况是先作条件判断,第二种情况是先执行一次循环,然后判断是否继续循环。汇编语言程序设计的一般步骤分析问题,抽象出描述问题的数学模型;确定解决问题的算法或解题思想;绘制流程图和结构图;分配存储空间和工作单元;编制程序;程序静态检查,上机调试;编写相关说明。汇编语言的语句格式MCS-
21、51汇编语言的语句格式应符合下列结构:【标号:】操作码【操作数】【;注释】汇编语言语句由标号、操作码、操作数和注释4部分组成。其中,标号和注释部分可以没有,甚至某些指令的操作数也可以没有,如NOP、RET指令等。标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操作码之间可以有空格。操作码是指令的助记符。操作数在操作码之后,二者用空格分开。操作数可以是数据,也可以是地址。有多个操作数时,操作数之间用逗号分开。注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。指令中的数据可以是十进制、十六
22、进制、二进制、八进制数和字符串,具体格式如下:十进制数以D结尾,也可以省略,如55D或55;十六进制数以H结尾,如55H。如果数据以AF开头,其前必须加数字0,如0FFH;二进制数以B结尾,如00110011B;八进制数以O或Q结尾,如55O或55Q;字符串用或”表示,如M表示字符M的ASCII码。例:MAIN:MOVA,00H;将A清零在这条指令中,MAIN为标号,表示该指令的地址;MOV为操作码,表示指令的功能为数据传送;A和00H为操作数;将A清零为注释,用于说明这条语句的功能,注释内容不参与程序的汇编。伪指令 ORG:汇编程序起始地址ORG用来说明其后程序段在存储器中存放的起始地址。例
23、:ORG0030HMAIN:MOV20H,0FFHMOV30H,0FEHORG0030H表明从MAIN开始的程序从存储器的0030H地址单元开始存放,并且MAIN0030H。EQU:赋值指令EQU用来给变量标号赋予一个确定的数值。例:DATAEQU0AHMAINEQU1000H这段程序使DATA0AH,MAIN1000H。DB:定义数据字节DB指令按字节数的形式把数据存放在存储单元中。例:TAB:DB0C0H,0F9H,0A4H,0B0H,99H92H,82H,0F8H,80H,90H这段程序从表头TAB起,连续存放了十个字节的数值:0C0H,0F9H,0A4H,0B0H,99H,92H,82
24、H,0F8H,80H,90H。DW:定义数据字DW指令按字(双字节)的形式把数据存放在存储单元中。例:ORG1020HDW30H,31H,1020H这段程序把数据30H,31H,1020H以字(双字节)的形式存放在从1020H开始的一片存储单元中。DS:定义存储区DS从指定的地址单元开始,保留一定数量的存储单元。例:ORG0100HDS5从0100H地址开始,空出5个字节的存储单元来,为程序所用。BIT:位定义其功能是把位地址赋给字符名称。例:LEDBITP1.0是将位地址P1.0赋给变量LED。END:汇编结束END命令表明汇编语言程序结束。2.顺序程序顺序程序是指程序中没有使用转移类指令的
25、程序段,机器执行这类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环,也不需要调用子程序。例:将一个单字节十六进制数转换成BCD码。解:算法分析。单字节十六进制数在0255之间,将其除以100后,商为百位数;余数除以10,商为十位数,余数为个位数。设单字节数存放在40H,转换后,百位数存放在R0中,十位数存放在R1中,个位数存放在R2中,具体程序如下:ORG0030HMOVA,40H;将单字节十六进制数送入A中MOVB,#64H;将100送入B中DIVABMOVR0,A;百位数送R0,余数在B中XCHA,B;余数送入A中MOVB,#0AHDIVAB;商为十位数,余数为个位数MOVR1
26、,AMOVR2,BSJMP$例:设变量放在片内RAM20H单元,其取值范围为00H,01H,02H,03H,04H,05H,要求编制一段查表程序,查出变量的平方值,并放入片内RAM21H单元。解:在程序存储器的一片指定的地址单元中,建立各个变量的平方值表,用数据指针指向表的首地址,则变量与数据指针之和的地址单元中的内容就是变量的平方值,程序如下;ORG0030HMAIN:MOVDPTR,#0500H;将表的首地址送给数据指针MOVA,20H;将变量送入A中MOVCA,DPTR+A;查表得到变量的平方值MOV21H,A;将平方值送到指定的地址单元SJMP$TABEQU0500H;给表赋首地址TA
27、BDB00H,01H,04H,09H,10H,19H;建立平方值表END3.分支程序例:将一位十六进制数转换为ASCII码。设十六进制数在A中(A的高4位为0),转换结果仍存放在A中。解:十六进制数转换为ASCII码的原则是:十六进制的09,加30H即转换为ASCII码;0AH0FH要加37H才能转换为ASCII码,具体程序如下:ORG0030HCJNEA,#0AH,NO10;判断十六进制数是否为10NO10:JCLT10;C=1,即十六进制数小于10则转移ADDA,#07H;十六进制数大于或等于10,则先加07HLT10:ADDA,#30HSJMP$例:设变量X以补码的形式存放在片内RAM3
28、0H单元,函数Y与X有如下的关系:试编制程序,根据X的大小求出Y,并放回原单元。解:取出变量后,先对变量X作取值范围的判断,再按照函数表达式求出Y的值。对符号的判断可以用位操作类指令,也可以用逻辑运算类指令,此处用逻辑运算指令。程序流程图如图3.1所示。程序如下:ORG0030HMAIN:MOVA,30HJZNEXT;判断X是否为零ANLA,80H;判断符号位JZED;若X大于0,YXMOVA,#05HADDA,30HMOV30H,ASJMPEDNEXT:MOV30H,#20HED:SJMP$图3.14.循环程序例:将内部数据RAM中20H3FH单元的内容传送到外部数据存储器,起始单元地址为2
29、000H。解:20H3FH共计32个单元,需传送32次数据。将R1作为循环计数器,程序流程图如图3.2所示。具体程序如下:所谓循环程序是指单片机反复执行某一段程序,这个程序段通常称为循环体。循环是在一定条件控制下进行的,以决定是继续循环执行或是结束循环。程序循环是通过条件转移指令进行控制的。MAIN:MOVR0,#20H;将数据首地址赋给R0MOVDPTR,#2000H;设置外部RAM首地址MOVR1,#20H;设置循环计数器LOOP:MOVA,R0;取内部RAM数据MOVXDPTR,A;将数据送往外部RAMINCR0;调整内部数据RAM;指针,指向下一个数据INCDPTR;调整外部RAM指针
30、DJNZR1,LOOPSJMP$例:把片内数据RAM30H39H单元中的10个无符号数逐一比较,按从小到大的顺序依次排列在这片单元中。解:为了把10个单元中的数按从小到大的顺序排列,可以从30H单元开始,取前数与后数比较,如果前数小于后数,则顺序继续比较下去;如果前数大于后数,则前数和后数交换后再继续比较下去。第一次循环将在最后单元中得到最大的数,要得到所有数据从小到大的排列需要进行多重循环。程序流程图如图3.3所示。具体程序如下:MAIN:CLR00H;清除交换标志位MOVR7,#0AHMOVR0,#30H;数据区首地址MOVA,R0LOOP:INCR0MOVR2,A;保存前数SUBBA,R
31、0MOVA,R2;恢复前数JCNEXT;判断前后两数大小SETB00HXCHA,R0;前后两数交换DECR0XCHA,R0INCR0NEXT:MOVA,R0;取下一个数DJNZR7,LOOPJB00H,MAIN;交换后重新比较SJMP$5.子程序在调用子程序时,要注意以下几个问题:子程序占用的存储单元和寄存器。如果在调用子程序之前,主程序已经使用了这些存储单元或寄存器,在调用后,这些存储单元或寄存器又被子程序使用,就应当先把这些存储单元或寄存器中的内容压入堆栈保护起来,调用完后再从堆栈中弹出,加以恢复。入口参数和出口参数。调用之前要按照子程序的要求设置好入口参数,只有这样才能在调用后,从出口参
32、数处得到调用后的正确结果。参数的传递。子程序可以从指定的地址单元或寄存器获得调用程序的数据参数,经过调用后得到的数据可输出到指定的地址单元或寄存器,从而实现两者之间的参数传递。可递归性与可重入性。可递归性是指子程序可以调用自己,可重入性是指一个子程序可以同时被多个程序调用。这两个特性主要是对大规模复杂系统程序的要求,对一般应用程序可不作要求。例:通过调用子程序实现延时100ms,设单片机晶振频率为12MHz。解:子程序名称为DELAY,可实现1256ms的延时功能,具体延时时长可以通过设置入口参数获得,入口参数放在R3中,具体程序如下:MAIN:PUSHPSWMOVPSW,#08HMOVR3,
33、#64H;入口参数为100LCALLDELAY;调用子程序POPPSWSJMP$DELAY:MOVR2,#0FAHLOOP:NOP;内层循环为1msNOPDJNZR2,LOOPDJNZR3,DELAYRET例:将存于R0中的一位十六进制数(R0的高4位为0)转换为七段显示码,并将结果送P1口显示。设七段显示器为共阴极接法。解:显示子程序为DIR,具体程序如下:ORG0000HLJMPMAINORG0030HMAIN:LCALLDELAYMOVP1,#00HLCALLDIRDIR:PUSHACCMOVA,R0;取R0中的数MOVDPTR,#TABLEMOVCA,A+DPTR;查表,取出七段显示码
34、MOVP1,APOPACCRETDELAY:MOVR7,#0FAHLOOP:MOVR6,#0FAHLOOP1:DJNZR6,LOOP1DJNZR7,LOOPRETTABLE:DB40H,79H,24H,30HDB19H,12H,02H,78HDB00H,18H,08H,03HDB46H,21H,06H,0EHEND习题解答1.什么是寻址方式?MCS-51单片机有哪几种寻址方式?答案:指令的一个重要的组成部分是操作数,指令给出参与运算的数据的方式称为寻址方式,换句话说,寻址方式就是寻找确定参与操作的数的真正地址。MCS-51系列单片机共有7种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻
35、址、变址寻址、相对寻址和位寻址。2.什么是指令系统?MCS-51单片机共有多少种指令?答案:CPU所能执行的各种指令的集合称为指令系统。MCS-51系列单片机的指令系统是一种简明易掌握、效率较高的指令系统。在MCS-51系列单片机的指令系统中共使用了7种寻址方式、42种助记符,这些助记符与寻址方式组合起来,共形成111条指令,完成数据传送、算数运算、逻辑运算、控制转移以及位操作等方面的工作。3.汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用?答案:MCS-51汇编语言的语句格式应符合下列结构:【标号:】操作码【操作数】【;注释】标号位于语句的开始,由以字母开头的字母和数字组成,
36、它代表该语句的地址。标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操作码之间可以有空格。注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。4.MCS-51汇编语言有哪几条常用伪指令?各起什么作用?答案:ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址;EQU:赋值指令,用来给变量标号赋予一个确定的数值;DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中;DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中;DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元;BIT:位定义,其功能是把位地址赋给字符名称;
37、END:汇编结束,表明汇编语言程序结束。5.汇编语言程序设计分哪几步?各步骤的任务是什么?答案:分析问题,抽象出描述问题的数学模型;确定解决问题的算法或解题思想;绘制流程图和结构图;分配存储空间和工作单元;编制程序;程序静态检查,上机调试;编写相关说明。6.将累加器A中的压缩BCD码分为两个字节,形成非压缩BCD码,放入20H和21H单元中,写出源程序。解:由题意,将累加器A中的低4位保留,高4位清零放入20H;高4位保留,低4位清零,半字节交换后存入21H单元中。程序如下。MOVR0,AANLA,#0FHMOV20H,AMOVA,R0ANLA,#0F0HSWAPAMOV21H,A7.已知内部
38、RAM的20H和21H单元中各有一个无符号8位二进制数,试编程比较它们的大小,并把大数送到30H单元。解:MOVA,20HCJNEA,21H,LOOPLOOP:JNCLOOP1MOVA,21HLOOP1:MOV30H,ARET8.编制一段程序,要求在端口线P1.0和P1.1上分别产生周期为200us和400us的方波。设单片机的晶振频率为12MHz。解:ORG0000HAJMPSTARTORG000BHAJMPIT0ORG001BHAJMPIT1ORG0100HSTART:MOVTMOD,#03HMOVTL0,#9CHMOVTH0,#38HMOVTCON,#50HMOVIE,#8AHSJMP$ORG0130HIT0:MOVTL0,#9CHCPLP1.0RETIIT1:MOVTH0,#38HCPLP1.1RETIEND9.试编写一段程序,将外部数据RAM中从地址2000H开始的100个补码数逐一取出,若为正数则放回原单元,若为负数则求反后放回原单元。解:START:MOVDPTR,#2000HMOVR0,#64HLOOP:MOVXA,DPTRMOV20H,AJNBACC.7,NEXTMOVA,20HCPLAMOVXDPTR,ANEXT:INCDPTRDJNZR0,LOOPSJMP$