




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章,单片机的指令系统与汇编语言程序设计3.1MCS-51指令系统与寻址方式3.2汇编语言程序设计3.3汇编程序设计与调试,3.1MCS-51指令系统与寻址方式,指令的基本概念单片机指令与分类51单片机的寻址方式不同空间的数据传输方法作业题P55-1、2,1指令的基本概念,指令是计算机能够识别的二进制数代码,指令系统的好坏决定计算机的性能和灵活性。指令集计算机能够识别的指令的集合,指令的组成,指令由操作码和操作对象组成。操作码指明执行什么操作,如数据传送、加、减运算等操作对象可以是一个数,或者是一个数所在的内存地址。51指令有单字节指令、双字节指令和三字节指令。单字节指令和双字节指令的操作对象隐含在操作码之中。例如:MOVA,#0AH740A操作码MOV和A合并在一字节中74H,2单片机指令与分类,51系列单片机采用8位二进制数作为操作码,最多可有256种操作码实际有111条指令,7种寻址方式42种助记符,说明33种操作功能这些指令可分为四大类:1数据传送指令;2算术运算与逻辑运算指令;3控制转移指令;4位操作指令.,指令和助记符,为了容易记忆这些符号一般采用英文单词的缩写构成,这些符号称为指令助记符;由这些助记符描述的计算机语言称为汇编语言。指令有指令代码和操作对象构成。例:指令代码助记符操作对象功能740AMOVA,#0AH将十六进制数0AH放入累加器A中,3寻址方式,寻址方式是计算机寻找操作数的具体办法。51系列单片机有7种寻址方式:源操作数目的操作数,1立即寻址2直接寻址3寄存器寻址4寄存器间接寻址5变址寻址6相对寻址7位寻址,.1立即寻址,指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例:MOVA,#30H;A#30HMOVDPTR,#3400H;DPTR#3400H,立即寻址演示,30H31H32H33H34H35H,累加器A,MOVA30H,源地址寄存器,指令寄存器,PC,74H,Z总线,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.2直接寻址,指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例:MOVPSW,#20H;PSW#20HMOVA,30H;A(30H),直接寻址演示,30H31H32H33H34H35H,累加器A,MOVA30H,源地址寄存器,指令寄存器,PC,74H,Z总线,30H,55H,ROM,RAM,74H,23H,目的地址寄存器,E0H,.3寄存器寻址,以通用寄存器的内容为操作数的寻址方式。寄存器包括:通用寄存器R0R7和特殊功能寄存器A、B、DPTR等。例:MOVA,R0;A(R0),.4寄存器间接寻址,以寄存器中内容为地址的寻址方式。间接寻址的存储空间包括内部数据RAM和外部数据RAM。能用于寄存器间接寻址的寄存器有R0,R1和DPTR。表示方式是在寄存器名称前面加一个符号。例:MOVA,R0;A(R0)MOVXDPTR,A;外部RAM(DPTR)A,.5变址寻址,变址寻址是以某个寄存器的内容为基本地址,加上偏移量作为操作数地址的寻址方式。例:MOVCA,A+DPTR;A(A+DPTR)MOVCA,A+PC;A(A+PC),这些指令的用途主要是查表,寄存器存放表首地址,A存放偏移量,程序存储器,DPTR,0211H,11H,A,+,MOVCA,A+DPTR操作示意图,变址寻址举例,0200H,0211H,0200H,11H,地址寄存器,1EH,0200H,.6相对寻址,以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。相对寻址用于修改PC值,主要用于实现程序的分支转移。例:SJMP08H;PCPC+2+08H,SJMP08H操作示意图,相对寻址举例,.7位寻址,位寻址是可位寻址单元的位操作。位寻址其实是一种直接寻址方式,不过其操作对象是指定的1位。例:SETB10H;将10H位置1MOV32H,C;32H进位位CCLRPSW.4;将RS1位清0,操作数寻址方式总结,助记符说明MOV、MOVX、MOVC传送操作XCH、XCHD、SWAP交换操作PUSH、POP堆栈操作,4数据传送类指令,数据传送指令有以下三种类型,MOVX片外RAM空间MOVCROM空间其他片内RAM空间,单片机片内传送图,1以累加器为目的操作数的指令(4条),MOVA,RnMOVA,directMOVA,RiMOVA,#data这组指令功能将源操作数指定内容送到A中。,.1,.2,MOVRn,AMOVRn,directMOVRn,#data这组指令功能是把源操作数指定的内容送入当前工作寄存器,源操作数不变。,2以寄存器Rn为目的操作数的指令(3条),3以直接地址为目的操作数的指令(5条),MOVdirect,AMOVdirect,RnMOVdirect1,direct2MOVdirect,RiMOVdirect,#data这组指令功能是把源操作数指定的内容送入由直接地址指出的片内存储单元。,.3,4以间接地址为目的操作数的指令(3条),MOVRi,AMOVRi,directMOVRi,#data功能:把源操作数指定的内容送入以R0或R1中内容为地址的片内存储单元。,.4,5十六位数的传递指令(1条),MOVDPTR,#data16这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOVDPTR,#1234H执行完了之后DPH中的值为12H,DPL中的值为34H。如果我们分别向DPH,DPL送数,则结果也一样。如下面两条指令:MOVDPH,#35HMOVDPL,#12H。相当于执行了MOVDPTR,#3512H。,.5,程序举例:把片内RAM中地址为30H3FH的字节单元内容复制到地址为60H6FH的字节单元中去。程序如下:COPY:MOVR0,#30HMOVR1,#60HMOVR2,#10HLP1:MOVA,R0MOVR1,AINCR0INCR1DJNZR2,LP1RET,采用了间址寻址,6A与片外RAM间的数据传递类指令(4条),MOVXA,RiMOVXRi,AMOVXA,DPTRMOVXDPTR,A说明:1与外部RAM存储器打交道的只可以是累加器A。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。内部RAM间可以直接进行数据的传递,而外部则不行。,.6片外RAM操作,2.要读或写外部RAM,必须要知道RAM的地址,采用DPTR时,地址被直接放在DPTR中的。采用Ri(R0或R1)时,由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口来提供。3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。,.6续,将外部RAM中100H单元中的内容送入外部200H单元中。,例:这段程序做了什么事?左右两块等价吗?MOVDPTR,#0100HMOVP2,#01HMOVXA,DPTRMOVR0,#00HMOVDPTR,#0200HMOVXA,R0MOVXDPTR,AMOVP2,#02HMOVXR0,A,举例:1、读入片外RAM中0080H地址单元的内容2、向端口号为8FFEH的端口写入0,或:MOVP2,#00HMOVR0,#80HMOVXA,R0,MOVDPTR,#80HMOVXA,DPTR,MOVA,#0MOVDPTR,8FFEHMOVXDPTR,A,7读程序存储器指令(2条),MOVCA,A+DPTRMOVCA,A+PC本组指令是将ROM中的数送入A中,也被称为查表指令,常用此指令来查一个已做好在ROM中的表格例:如果R0=3程序执行后累加器A的值是多少?MOVDPTR,#100HMOVA,R0MOVCA,A+DPTRORG0100HDB0,1,4,9,16,25,.7ROM操作,有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5),8堆栈操作(2条),PUSHdirectPOPdirect(不能为Rn)第一条为压入指令,将direct中的内容送入堆栈中,第二条为弹出指令,将堆栈中的内容送回到direct中。例:MOVSP,#10HMOV40H,#50HPUSH40HPOP30H执行第一条PUSH40H指令是这样的:将SP中的值加1,变为11H,然后将40H中的值送到11H单元中,因此执行完本条指令后,内存11H单元的值是50H,同样,执行POP30H时,是将11H中的值送入到30H单元中,即执行完本条指令后,30H单元中的值变为50H。,.8堆栈操作,9交换指令(5条),XCHA,RnXCHA,directXCHA,RiXCHDA,RiSWAPA例:已知A中的内容为34H;AR6MOVR6,#29H;34H29HXCHA,R6;29H34HSWAPA;92H34HXCHA,R6;34H92H,.9交换指令,判断以下指令对错,并改正错误的指令:1、MOVXDPTR,02、MOVR4,R03、MOVR1,R24、MOVA,R25、MOV38H,60H6、MOVCB,A+DPTR7、POPR18、XCH10H,20H9、XCHDA,50H,MOVXDPTR,A,不允许RnRn,不允许RnRi,只有R0、R1可用于间接寻址,MOVCA,A+DPTR,Rn不可作为POP的操作数,XCH必须以A为源操作数,XCHDA,Ri,5算术运算指令包括加、减、乘、除运算;第一操作数一般为A;一般影响标志位CY、AC、OV和P。共24条指令,分成七个小类。一、不带进位加法指令(4条)ADDA,Rn;(A)+(Rn)AADDA,direct;(A)+(direct)AADDA,Ri;(A)+(Ri)AADDA,#data;(A)+#dataA例3-1(A)=0C3H,(R0)=0AAH执行“ADDA,R0”的和为?,标志位CY=?,OV=?,AC=?。OV=C7C6对第6、第7位的进位位C7、C6异或。,6DH,1,1,0,二、带进位加法指令(4条)ADDCA,Rn;(A)+(Rn)+CYAADDCA,direct;(A)+(direct)+CYAADDCA,Ri;(A)+(Ri)+CYAADDCA,#data;(A)+#data+CYA三、带借位减法指令(4条)SUBBA,Rn;(A)-CY-(Rn)ASUBBA,direct;(A)-CY-(direct)ASUBBA,Ri;(A)-CY-(Ri)ASUBBA,#data;(A)-CY-#dataA,注意!,无不带借位的减法指令,例:编写双字节加法指令设一个加数高字节、低字节分别放在片内31H、30H中,另一个加数高字节、低字节分别放在片内41H、40H中,要求其加法结果高、低字节分别放入51H、50H中。试编写该程序。,MOVA,30HADDA,40HMOV50H,AMOVA,31HADDCA,41HMOV51H,A,四、乘除法指令(2条)1、乘法指令(8位无符号数乘法)MULAB;(A)(B)B158,A70说明:若结果的B0,则OV=1,若B=0,则OV=0;CY总是为0。2、除法指令(8位无符号数除法)DIVAB;(A)/(B)的商A,余数B说明:若除数B=0,则OV=1,若B0,则OV=0;CY=0。,举例:1、编程序实现将片内RAM中38H单元的16进制数转换成非压缩BCD码,放在30H、31H、32H中。,程序如下:MOVA,38HMOVB,#10DIVABMOV32H,BMOVB,#10DIVABMOV31H,BMOV30H,A,五、加1指令(5条)INCA;(A)+1AINCRn;(Rn)+1RnINCdirect;(direct)+1directINCRi;(Ri)+1(Ri)INCDPTR;(DPTR)+1DPTR说明:此类指令不影响标志CY、AC和OV,六、减1指令(4条)DECA;(A)-1ADECRn;(Rn)-1RnDECdirect;(direct)-1directDECRi;(Ri)-1(Ri)说明:此类指令不影响标志CY、AC和OV,注意:无DECDPTR指令,七、十进制数调整指令(1条)DAA;把中按二进制相加后的结果调整成按;BCD相加的结果什么是BCD加法?说明:(1)此指令常跟在ADD或ADDC指令之后,将A中的和调整为BCD码,并且ADD或ADDC的两个操作数是BCD码;(2)调整方法:若(A03)9或AC=1,则(A03)+6(A03);若(A47)9或CY=1,则(A47)+6(A47);(3)对标志的影响:若结果A99,则CY=1;不影响OV。,比如:37H+25H=62H,作业:P563.13两个4位BCD码数相加,设被加数和加数分别存于片内RAM的40H41H、45H46H单元中,和数存于50H、51H中(均是低位在前,高位在后),试编写程序。,6逻辑操作指令包括清除、求反、移位、与、或、异或等操作。这类指令一般不影响标志位CY、AC和OV。共24条指令,分成五个小类。一、累加器A清0与取反指令(2条)1、累加器A清0指令CLRA;0A说明:只影响标志位P。2、累加器A取反指令(按位取反)CPLA;(/A)A,相当于0FFH-AA说明:不影响标志位。如:(A)=56HCPLA;结果为0A9H,注意只能以为操作数,二、移位指令(4条)1、累加器A循环左移RLA;2、累加器A循环右移RRA;3、累加器A带进位位循环左移RLCA;4、累加器A带进位位循环右移RRCA;说明:(1)各条指令每次只移动一位;(2)左移一位相当于乘以2;右移一位相当于除以2;(3)带进位移动影响标志位CY和P。,只能以为操作数,三、逻辑“与”指令(6条)ANLA,Rn;(A)(Rn)AANLA,direct;(A)(direct)AANLA,Ri;(A)(Ri)AANLA,#data;(A)#dataAANLdirect,A;(direct)(A)directANLdirect,#data;(direct)#datadirect说明:(1)目的操作数只能是A或者direct;(2)没有ANLdirect,directANLdirect,Rn或ANLdirect,Ri的形式。,(3)前4条指令仅影响标志位P;后两条不影响标志位;(4)与运算常用于使某些位清0。,例1:试编写程序,将片内RAM中45H单元内容的高4位清0。例2:试编写程序,将片外RAM中1045H单元内容的高4位清0。,ANL45H,#0FH,MOVDPTR,#1045HMOVXA,DPTRANLA,#0FHMOVXDPTR,A,四、逻辑“或”指令(6条)ORLA,Rn;(A)(Rn)AORLA,direct;(A)(direct)AORLA,Ri;(A)(Ri)AORLA,#data;(A)#dataAORLdirect,A;(direct)(A)directORLdirect,#data;(direct)#datadirect说明:(1)目的操作数只能是A或者direct;(2)没有ORLdirect,directORLdirect,Rn或ORLdirect,Ri的形式。,(2)前4条指令仅影响标志位P;后两条不影响标志位。(3)或运算常用于使某些位置1。,例1:试编写程序,将片内RAM中45H单元内容的低4位置1。例2:试编写程序,将片外RAM中1045H单元内容的低4位置1。,ORL45H,#0FH,MOVDPTR,#1045HMOVXA,DPTRORLA,#0FHMOVXDPTR,A,五、逻辑“异或”指令(6条)XRLA,Rn;(A)(Rn)AXRLA,direct;(A)(direct)AXRLA,Ri;(A)(Ri)AXRLA,#data;(A)#dataAXRLdirect,A;(direct)(A)directXRLdirect,#data;(direct)#datadirect说明:(1)目的操作数只能是A或者direct;(2)没有XRLdirect,directXRLdirect,Rn或XRLdirect,Ri的形式。(3)用1异或使对应位取反,用0异或使对应位不变,异或运算常用于使某些位取反。,例:试编写程序,将片外RAM中2100H单元内容的奇数位变反,偶数位不变,MOVDPTR,#2100HMOVXA,DPTRXRLA,#10101010BMOVXDPTR,A,7控制程序转移类指令包括无条件转移、条件转移、子程序调用和返回指令等,共17条。只有比较转移指令影响标志位。,1、AJMP绝对转移2、LJMP长转移3、SJMP相对转移4、JMPA+DPTR间接转移,程序,一、无条件转移指令(4条),正常执行,1、短转移(绝对转移)指令AJMPaddr11(字节)举例:AJMPA1.A1:MOVA,#0说明:应用时必须保证目标地址与下一条指令首地址的高5位相同,即目标地址与下一条指令在同一个2KB范围,否则出错。,(PC),2、长转移指令LJMPaddr16;addr16PC(字节指令)如:LJMPNEXTNEXT:,(PC),说明:转移范围是64KB全程序空间任何单元,即目标地址可以是0000HFFFFH任意值。,3、相对转移指令SJMPrel(2字节)如:SJMPNEXTNEXT:说明:应用时应保证目标地址在距离转移指令的下一条指令的-128+127字节距离范围内。例如:SJMP$;无限循环执行本指令,,4、间接转移指令JMPA+DPTR;(A)+(DPTR)PC目的地址为A+DPTR说明:(1)具有多分枝转移功能,即散转功能,又叫散转指令;(2)转移范围:是以DPTR为首地址的256B。,例3-11根据累加器A中的命令键键值,设计命令键操作跳转程序。MOVDPTR,#JPTABJMPA+DPTRJPTAB:AJMPCCS0AJMPCCS1AJMPCCS2:,二、条件转移指令(8条)均为相对寻址方式。1、累加器A为零(非零)转移指令JZrel;当A=0时,转移;当A0时,顺序执行。JNZrel;当A0时,转移;当A=0时,顺序执行。,2、比较转移指令4条,均为三字节指令。一般形式为:CJNE(目的操作数),(源操作数),rel不等则转移,同时置CY,等则顺序执行。(1)CJNEA,direct,rel;若A(direct),则(PC)+relPC,且0CY;;若A#data,则(PC)+relPC,且0CY;;若A#data,则(PC)+relPC,且0CY;;若(Rn)#data,则(PC)+relPC,且0CY;;若(Ri)#data,则(PC)+relPC,且1CY;;若(Ri)=#data,则顺序执行,且0CY。,说明:CY,实际是A-(direct)操作的借位值送CY;CY可以作为进一步操作的依据。如:CJNEA,38H,FIRSTCJNEA,#56H,SECONDCJNER2,#32,THIRDCJNER1,#48H,FOURTH,3、循环转移指令DJNZRn,rel;(Rn)-1Rn;;若(Rn)0,则转移;若(Rn)=0,则结束循环,顺序执行DJNZdirect,rel;(direct)-1direct;;若(direct)0,则转移;若(direct)=0,则结束循环,顺序执行说明:(1)PC的含义同上;(2)Rn、direct相当于控制循环的计数器。,举例:统计片内RAM区的60H70H地址单元中30的个数。,程序:TJ:MOVR2,#10H;计数器MOVR0,#60H;给指针赋初值MOVR3,#0;统计30个数计数器LP1:CJNER0,#30,NEXTINCR3NEXT:INCR0DJNZR2,LP1RET,三、子程序调用和返回指令(3条),CALL指令,执行子程序,RET指令,程序,子程序调用指令可完成保护断点的工作,以便正确返回,ACALL子函数名、LCALL子函数名、RET子程序返回RETI中断子程序返回,三、子程序调用和返回指令(3条)1、短(绝对)调用指令ACALLaddr11说明:要求与绝对调用指令同,即目的地址要与转移指令下一条指令地址在同一个2KB范围,即高5位地址相同。,如:ACALLSUBSUB:RET,2、长调用指令LCALLaddr16说明:转移范围是整个程序存储空间,64KB范围,即目标地址可为0000HFFFFH范围任意值。,如:LCALLSUBSUB:RET,3、返回指令RET:子程序返回指令,与子程序调用指令配合使用;(SP)PC815,(SP)-1SP;(SP)PC07,(SP)-1SPRETI:中断服务子程序返回指令,处于中断服务子程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025呼和浩特市清水河县招聘名校长、名优教师备考考试题库附答案解析
- 2025山东菏泽市曹县城镇公益性岗位招聘(第一批)考试参考题库及答案解析
- 2025年甘肃省陇南市礼县法院面向社会招聘公益性岗位考试模拟试题及答案解析
- 2025云南昆明市西山区妇幼健康服务中心劳务派遣人员招聘1人备考考试试题及答案解析
- 2025年湖南长沙市人力资源和社会保障局招聘1名普通雇员考试参考题库及答案解析
- 供应链管理软件合作开发协议
- 2025重庆工信职业学院招聘31人考试参考题库及答案解析
- 2025上海嘉定区卫生健康系统高层次卫生专业技术人才招聘6人备考练习题库及答案解析
- 语文中考阅读理解答题技巧大全
- 家居智能系统集成设计与安装合同
- 十经络养生法专家讲座
- 2023年重庆大学入学考试英语一本科
- 铁路公司招聘干部试题
- GB/T 1770-2008涂膜、腻子膜打磨性测定法
- 输血申请单规范PDCA
- 第17课-我是浙江人课件
- 税务尽职调查报告(参考)
- 初中七年级上《综合实践》活动课程课件
- 《太阳出来了》课 件课件
- 全屋定制家居整装安装师傅专业安装服务技巧培训指导手册
- 公路桥梁和隧道工程施工安全风险评估讲解(刘兴旺)
评论
0/150
提交评论