ch03 寻址与指令_第1页
ch03 寻址与指令_第2页
ch03 寻址与指令_第3页
ch03 寻址与指令_第4页
ch03 寻址与指令_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

概述寻址方式分类指令简介汇编语言的指令行,7MCS-51指令系统简介,7.1.1指令分类33种功能,111条指令按指令字节数分:1字节、2字节、3字节。按指令的机器周期数分类:1、2、4个周期最频繁的指令为单周期,故fosc=12MHz,Tm=1s。1.0MIPS,7.1指令系统概述,指令的类别,类别数据传送类算术运算类逻辑运算类转移操作类布尔指令类,了解指令的:功能类寻址方式差异机器周期,用C51编程不需要直接使用指令,所以以下为了解标号:助记符目的操作数,源操作数;注释或op_codedst,src;comment标号代表指令所在的地址符号地址;助记符操作码目的操作数一般执行后内容改变源操作数执行后一般不改变,7.1.2指令书写格式,寻找操作数(数据,指令的处理对象)的方式寄存器寻址(寄存器操作数)直接寻址立即寻址寄存器间接寻址变址寻址(存储器操作数)寻找目标地址(程序流程控制)的方式相对寻址绝对寻址隐含寻址位寻址,7.1.3寻址方式(AddressingMode),寄存器操作数,寻址范围:(1)4组R0R7共32个工作寄存器(2)寄存器A等。例:MOVA,Rn;(Rn)A,n=07MOVB,A,寄存器寻址(RegistorAddressing),88H,88H,存储器操作数,其地址直接编码到指令中例MOVA,3AH,直接寻址(DirectAddressing),常数操作数编码操作码后面(取指完成,操作数立即得到),有前缀标志“#”。例MOVA,#40H在表示法中,记为#data8位立即数;#datal616位。区别:MOVA,#3AH;立即寻址MOVA,3AH;直接寻址不可以将16位或以上的数据送到8位的寄存器中!,立即寻址(Immediateaddressing),存储器操作数,地址在寄存器中寄存器名加前缀“”标志例MOVA,R0,65H,3AH,65H,3AH,R0,寄存器间接寻址(RegistorIndirectAddressing),基址寄存器:DPTR或PC(含16位地址)变址寄存器:A(含8位地址)两寄存器内容相加,作为16位存储器地址,在代码空间访问操作数(常数)或目标地址(转移)仅有3条这样的指令:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR前两条为查表指令;后一条实现散转(Switch/case)。,基址变址寻址(BasedIndexedAddressing),给出可寻址位的位地址,据此进行位操作。位寻址范围包括:(1)内部RAM中的可位寻址区字节地址20-2FH,128个位,位地址00-7FH(2)SFR的可寻址位字节地址能被8整除,位地址80-FFH例:MOVC,20H例:SETBF0,位寻址(BitAddressing),内部数据传送指令(15条)MOV外部数据传送指令(7条)MOVX堆栈操作指令(2条)PUSH/POP数据交换指令(4条)XCHG执行后,源操作数保持不变基本不影响标志位,例外的是以PSW为dst等,7.2数据传送类指令,MOVA,#data;(A)#dataMOVdirect,#data;(direct)#dataMOVRi,#data;(Ri)#dataMOVRn,#data;(Rn)#dataMOVDPTR,#datal6;(DPTR)#data16,1.立即数为源操作数的传送指令,MOVA,direct;(A)(direct)MOVdirect,A;(direct)(A)MOVA,Ri;(A)(Ri),i取0或1MOVRi,A;(Ri)(A),i取0或1MOVA,Rn;(A)(Rn),n取07MOVRn,A;(Rn)(A),n取07,2累加器A(Rn、RAM、SFR)之间的数据传送,MOVdirect,direct;(direct)(direct)MOVdirect,Ri;(direct)(Ri),i取0或1MOVRi,direct;(Ri)(direct),i取0或1MOVdirect,Rn;(direct)(Rn)MOVRn,direct;(Rn)(direct),n取07,3.RAM,Rn,SFR之间的数据传送,4栈操作指令,进栈指令PUSHdirect;(SP)(SP)+1,(SP)(direct)功能:堆栈指针SP加1,然后将直接地址direct单元的内容送到SP所指向的栈顶。出栈指令POPdirect;(direct)(SP),(SP)(SP)1功能:将SP所指向的堆顶的内容送到直接地址direct指向的单元中,然后堆栈指针SP减1。,1外部RAM的与累加器A之间的数据传送MOVXA,DPTRMOVXDPTR,AMOVXA,RiMOVXRi,A前面两条指令可以访问外部RAM的整个64K空间,地址范围是0000HFFFFH;后两条指令可以访问外部RAM任一页中00HFFH的256个字节,页地址由P2口的锁存器决定。,外部数据传送指令,2外部程序ROM向累加器A传送指令变址寻址,单向传输,专用于查表,又称为查表指令。两种指令的格式为:MOVCA,A+PCMOVCA,A+DPTR,MOV指令数据传送,寻址空间及范围,例:MOVXDPTR,A例:C语言中关键词:idata/xdata/pdata,由C生成的汇编,终究要变成上述指令;,把20H2FH单元中的内容转移到40H4FH单元中MOVR0,#20H;设定源数据块指针MOVR1,#40H;设目的数据块指针MOVR2,#16;数据块长度,10进制LOOP:MOVA,R0;取数MOVR1,A;存数INCR0;指针调整INCR1;指针调整DJNZR2,LOOP;循环控制LOOP是标号,标记循环的开始地址;DJNZ是循环控制指令,后面才讲到。,例,加法ADDADDC减法SUBB十进制调正DAA乘除法MULABDIVAB地址修正指令INCDEC,7.3算术运算类指令,定点运算;字长为8,超过时要用程序实现;乘除靠寄存器搭配;无浮点运算功能;,字长限制运算必须是8位二进制数;结果也是8位二进制数;对PSW中所有标志位产生影响;无符号数、带符号数用同一套指令,但是:按无符号数运算法则影响PSW中的Cy标志位;按带符号数法则影响PSW中的OV标志位的。,加减法指令的特点:,不带进位ADDA,#data;(A)(A)+#dataADDA,direct;(A)(A)+(direct)ADDA,Ri;(A)(A)+(Ri)ADDA,Rn;(A)(A)+(Rn)带进位加法指令ADDCA,#data;(A)(A)+#data+(C)ADDCA,direct;(A)(A)+(dirct)+(C)ADDCA,Ri;(A)(A)+(Ri)+(C)ADDCA,Rn;(A)(A)+(Rn)+(C),加法指令,带借位减法指令,SUBBA,#data;(A)(A)data-(C)SUBBA,data;(A)(A)-(data)-(C)SUBBA,Ri;(A)(A)-(Ri)-(C)SUBBA,Rn;(A)(A)-(Rn)-(C)MCS-51的减法指令只有带借位的一种选择,如果不需要带借位的减法运算,减法指令前增加一条CLRC指令,这条指令的功能是清除进位标志。,加1减1指令,加1指令INCA;(A)(A)+1INCDirect;(direct)(direct)+1INCRi;(Ri)(Ri)+1INCRn;(Rn)(Rn)+1INCDPTR;(DPTR)(DPTR)+1减1指令DECA;(A)(A)-1DECDirect;(direct)(diret)-1DECRi;(Ri)(Ri)-1DECRn;(Rn)(Rn)-1,第一数存于30H和31H地址单元,第二数存于32H和33H地址单元,和存于34H和35H地址单元。数据存储时假定高位在前,低位在后。MOVA,31H;取第1数低位ADDA,33H;加第2数低位MOV35H,A;存和的低位MOVA,30H;取第1数高位ADDCA,32H;带进位加第2数高位MOV34H,A;存和的高位问题:运算的有效性如何判断?,例两个16位数加法,例7-5,多字节加法运算问题:两个8字节无符号数分别存放在内部RAM的30h和38h开始的连续地址单元,且低位在前,高位在后。假定计算结果仍不超过8字节的范围,并要求将结果放在30h开始的连续8个存储单元。试编写该程序段。,MOVB,#8;计数初值MOVR0,#30H;第一操作数起始地址MOVR1,#38H;第一操作数和;结果起始地址CLRC;清除进位位REPEAT:MOVA,R0;取加数到AADDCA,R1;带进位加法MOVR0,A;存结果INCR0;地址调整INCR1;地址调整DJNZB,REPEAT;B内容减1,;若不等于0则跳转,MULAB乘法(B)(A)(B)158(A)(A)(B)70除法DIVAB(A)=(A)/(B)(B)=(A)%(B),无符号整数乘法和除法指令,(16位部分积),(R7)(R5),(16位部分积),(30H)(31H)(32H),24位乘积,+(R6)(R5),(R6)(R7)(R5),例16X8位乘法程序,仿照十进位数竖式乘法,编程如下:MOVA,R7MOVB,R5MULAB;(R7)*(R5)MOV32H,A;部分积的低8位直接保存32H单元MOVR7,B;部分积高位暂存在R7中MOVA,R6MOVB,R5MULAB;(R6)(R5)ADDA,R7;部分积低8位与上次部分积高8位相加MOV31H,A;存中8位字节CLRAADDCA,B;部分积高8位与中8位的进位位相加MOV30H,A;存中8位字节,双操作数逻辑运算与ANL或ORL异XRL单操作数逻辑运算累加器其清零CLRA累加器取反指令NOTA累加器移位指令CPLA找出与C的对应关系,7.4逻辑操作类指令,以直接地址为目的操作数与累加器内容或立即数数按位与运算结果送回直接地址;,以累加器A为目的操作数把累加器A和源地址中操作数按位与运算结果送回累加器A;,逻辑与指令,ANLA,RnANLA,directANLA,RiANLA,#data8ANLdirect,AANLdirect,#data8,7.4.2逻辑或指令、逻辑异或指令,ORA,RnORA,directORA,RiORA,#data8ORdirect,AORdirect,#data8,XRLA,RnXRLA,directXRLA,RiXRLA,#data8XRLdirect,AXRLdirect,#data8,已知:内部RAM30H中有一数(如AAH)现欲令它高4位不变低4位取反,试写出相应指令组。MOVA,#0FH;XRL30H,AC51写成unsignedchardatax_at_0 x30;/说明语句x/执行语句,例,RLA;累加器左环移一位;RLCA;累加器通过C左环移一位;RRA累加器右环移一位;RRCA;累加器通过C右环移一位SWAPA;半字节交换,累加器A移位指令(1字节1周期),1)无条件转移指令2)条件转移指令3)子程序调用和返回指令,7.5控制转移类指令,LJMPaddr16;长转移指令AJMPaddr11;绝对转移指令SJMPrel;相对转移指令,JMPA+DPTR;变址寻址转移指令貌似复杂,在汇编语言程序中,无非以标号代替欲转往的目标而已。本质差异:同样的转移,指令编码长度不同,执行所需要的机器周期不同而已。,无条件转移指令,间接转移指今JMPA+DPTR;(PC)(DPTR)+(A)功能和用法:目标地址由基址+变址获得;习惯上称为间接转移;实现散转,支持C语言中的switch/case选择;高级语言中直接写switch/case,余下的事由编译器做。,(1)累加器A判零转移指令JZrel若(A)=0PCPC+2+REL若(A)0PCPC+2JNZrel若(A)0PCPC+2+REL若(A)=0PCPC+2许多MPU都具有用于判断运算结果是否为零的标志位;但是,MCS-51省略了该标志。它仅凭(A)的内容,不需要运算,就直接用于判别。,条件转移指令,(2)根据进位标志位转移,JCrel;Cy=1时转移:PCPC+2+rel,;Cy=0时顺序执行:PCPC+2JNCrel;C=0时转移:PCPC+2+rel,;Cy=1时顺序执行:PCPC+2,(3)比较条件转移指令CJNEA,direct,rel若(A)=(direct),PCPC+3顺序执行(A)direct,PCPC+3+rel相对转移;并影响Cy标志,供进一步判别(大于小于)。类似的指令还有三条:CJNEA,#data8,relCJNERn,#data8,relCJNERi,#data8,rel,条件转移用于支持if(关系运算)/关系运算的结果是真或假/如果为真else/如果为假,(3)循环控制条件转移指令DJNZRn,rel若Rn-10PCPC+2+relRn-1=0PCPC+2DJNZdirect,reldirect-10PCPC+3+reldirect-1=0PCPC+3循环指令用于支持C的for语句for(起始条件;结束条件;循环控制),例:设主频为12MHz,以汇编语言设计一延时程序实现50ms延时。DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET延时计算:粗略125*2*200=50000uS=50mS仔细计算(125*2+1+2)*200+1+1在调试环境下,能显示所执行程序行、子程序等所费时间。,ACALLaddr11;绝对调用2/2LCALLaddr16;长调用3/2RET;返回指令1/2RETI;中断返回1/2NOP;空操作1/1子程序调用和返回在C语言中称为函数调用和返回。参数可以通过堆栈传递(PC机,ANSIC)或寄存器传递(C51),子程序调用和返回指令,长调用指令,指令格式LCALLaddr16指令功能PCPC+3SPSP+1,(SP)(PC)07SPSP+1,(SP)(PC)815PCaddr16断点地址保存到堆栈,以便返回。,指令格式ACALLaddr11指令功能(PC)(PC)+2SPSP+1,(SP)(PC)07SPSP+1,(SP)(PC)815(PC)010addr11,(PC)1115保持不变只指令编码节约一个字节而已。,绝对调用指令,返回指令RET,RET;(PC815)(SP),(SP)(SP)-1;(PC07)(SP),(SP)(SP)1执行到任一个RET语句,立即返回断点;断点在堆栈

温馨提示

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

评论

0/150

提交评论