下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 8051指令系统

8051指令系统.pdf

8051指令系统

tekom
2010-10-09 0人阅读 举报 0 0 暂无简介

简介:本文档为《8051指令系统pdf》,可适用于IT/计算机领域

单片机指令系统难点•MCS单片机的寻址方式•数据传送指令和算术运算指令的使用•位操作和控制转移类指令的使用要求掌握:•MCS单片机的寻址方式•指令系统的基本格式•指令系统的操作功能了解:•指令系统的基本格式•操作数的使用方法•指令系统的操作过程MCS单片机指令格式计算机的指令系统是表征计算机性能的重要指标每种计算机都有自己的指令系统。MCS单片机的指令系统是一个具有种代码的集合绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质操作数说明参与操作的数据或数据所存放的地址。MCS指令系统中所有程序指令是以机器语言形式表示可分为单字节、双字节、三字节种格式。用二进制编码表示的机器语言由于阅读困难且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS指令系统就是以汇编语言来描述的。表汇编指令与指令代码代码字节指令代码汇编指令指令周期单字节DIVAB四周期单字节AINCDPTR双周期双字节MOVA#H单周期三字节BrelCJNEA#HLOOP双周期一条汇编语言指令中最多包含个区段如下所示:标号:操作码目的操作数源源操作数注释标号与操作码之间“:”隔开操作码与操作数之间用“空格”隔开目的操作数和源源操作数之间有“”分隔操作数与注释之间用“”隔开。标号是由用户定义的符号组成必须用英文大写字母开始。标号可有可无若一条指令中有标号标号代表该指令所存放的第一个字节存储单元的地址故标号又称为符号地址在汇编时把该地址赋值给标号。操作码是指令的功能部分不能缺省。MCS指令系统中共有种助记符代表了种不同的功能。例如MOV是数据传送的助记符。操作数是指令要操作的数据信息。根据指令的不同功能操作数的个数有、、或没有操作数。例如MOVA#H包含了两个操作数A和#H它们之间用“”隔开。注释可有可无加入注释主要为了便于阅读程序设计者对指令或程序段作简要的功能说明在阅读程序或调试程序时将会带来很多方便。寻址方式所谓寻址方式通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式或者说通过什么的方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面MCS单片机有七种寻找方式。立即数寻址立即寻址方式是操作数包括在指令字节中指令操作码后面字节的内容就是操作数本身其数值由程序员在编制程序时指定以指令字节的形式存放在程序存储器中。立即数只能作为源操作数不能当作目的操作数。例如:MOVA#HA←HMOVDPTR#HDPTR←H立即寻址示意图如所示。图立即寻址示意图直接寻址在指令中含有操作数的直接地址该地址指出了参与操作的数据所在的字节地址或位地址。例如:MOVAH把片内RAM字节地址H单元的内容送累加器A中。MOVHA把A的内容传送给片内RAM的H单元中。MOVHH把片内RAM字节地址H单元的内容送到H单元中。MOVIE#H把立即数H送到中断允许寄存器IE。IE为专用功能寄存器其字节地址为AH。该指令等价于MOVAH#H。INCH将地址H单元中的内容自加。图直接寻址方式示意图在MCS单片机指令系统中直接寻址方式可以访问种存储空间:()内部数据存储器的低个字节单元(H~FH)()H~FFH中的(SFR)特殊功能寄存器。这里要注意指令MOVA#H与MOVAH指令的区别后者表示把片内RAM字节地址为H单元的内容传送到累加器(A)。寄存器寻址由指令指出某一个寄存器中的内容作为操作数这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R~R。例如:MOVARnA←(Rn)其中n为~之一Rn是工作寄存器。MOVRnARn←(A)MOVBAB←(A)寄存器寻址方式的寻址范围包括:·寄存器寻址的主要对象是通用寄存器共有组个通用寄存器但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R~R。在使用本指令前需通过对PSW中RS、RS位的状态设置来进行当前寄存器组的选择。·部分专用寄存器。累加器A、B寄存器以及数据指针DPTR等。寄存器间接寻址方式由指令指出某一个寄存器的内容作为操作数这种寻址方式称为寄存器间接寻址。这里要注意在寄存器间接寻址方式中存放在寄存器中的内容不是操作数而是操作数所在的存储器单元地址。寄存器间接寻址只能使用寄存器Ro或Rl作为地址指针来寻址内部RAM(H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM可使用RRl或DPTR作为地址指针。寄存器间接寻址用符号“”表示。例如:MOVR#HR←HMOVARA←((R))MOVARA←((R))指令功能是把Ro或R所指出的内部RAM地址H单元中的内容送累加器A。假定(H)=BH则指令的功能是将BH这个数送到累加器A。例如MOVDPTR#HDPTR←HMOVXA@DPTRA←((DPTR))是把DPTR寄存器所指的那个外部数据存储器(RAM)的内容传送给A假设(H)=H指令运行后(A)=H。同样MOVX@DPTRAMOV@RA也都是寄存器间接寻址方式。寄存器间接寻址方式的示意图如图所示。图寄存器间接寻址方式示意图位寻址MCS单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(H~FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制、逻辑运算操作。例如指令SETBTRTR←CLRH(H)←MOVCH将H位地址的内容传送到位累加器C中ANLCFH将FH位状态与进位位C相与结果在C中基址寄存器加变址寄存器间接寻址这种寻址方式用于访问程序存储器中的数据表格它以基址寄存器(DPTR或PC)的内容为基本地址加上变址寄存器A的内容形成位的地址访问程序存储器中的数据表格。例如MOVCA@ADPTRMOVCA@APCJMP@A+DPTRMOVCAADPTR图变址寻址方式示意图相对寻址相对寻址以程序计数器PC的当前值作为基地址与指令中给出的相对偏移量rel进行相加把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中指令中的相对偏移量是一个位带符号数用补码表示。可正可负转移的范围为~。使用中应注意rel的范围不要超出。例如:JZLOOPDJNERDISPLAY指令系统指令分类MCS指令系统有种助记符代表了种功能指令助记符与各种可能的寻址方式相结合共构成条指令。在这些指令中单字节指令有条双字节指令有条三字节指令有条从指令执行的时间来看单周期指令有条双周期指令有条只有乘法、除法两条指令的执行时间是个机器周期。按指令的功能MCS指令系统可分为下列类:()数据传送类指令(条)()算术运算类指令(条)()逻辑运算及移位类指令(条)()位操作类指令(条)()控制转移类指令(条)在分类介绍指令前先把描述指令的一些符号的意义作一简单介绍。Rn―当前选定的寄存器区中的个工作寄存器R~R即n=~。Ri―当前选定的寄存器区中的个寄存器R、Ri=、。Direct位内部RAM单元的地址它可以是一个内部数据区RAM单元(H~FH)或特殊功能寄存器地址(IO端口、控制寄存器、状态寄存器H~FFH)。#data指令中的位常数。#data指令中的位常数。addr位的目的地址用于LJMP、LCALL可指向KB程序存储器的地址空间。addr位的目的地址用于AJMP、ACALL指令。目的地址必须与下一条指令的第一个字节在同一个KB程序存储器地址空间之内。rel位带符号的偏移量字节用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算在~范围内取值。bit内部数据RAM或特殊功能寄存器中的可直接寻址位。DPTR数据指针可用作位的地址寄存器。A累加器B寄存器用于MUL和DIV指令中。C进位标志或进位位。@间接寄存器或基址寄存器的前缀如@Ri@DPTR。/位操作的前缀表示对该位取反。(X)X中的内容。((X))由X寻址的单元中的内容。←箭头左边的内容被箭头右边的内容所替代。数据传送类指令数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址。指令执行后源操作数保持不变目的操作数为原操作数所替代数据传送类指令用到的助记符有:MOVMOVXMOVCXCHXCHDPUSHPOPSWAP。数据一般传送指令的助记符“MOV”表示格式:MOV目的操作数源操作数功能:目的操作数←(源操作数中的数据)源操作数可以是:A、Rn、direct、Ri、#data目的操作数可以是:A、Rn、direct、Ri数据传送指令一般不影响标志只有一种堆栈操作可以直接修改程序状态字PSW这样可能使某些标志位发生变化。①以累加器为目的操作数的内部数据传送指令MOVARnA←(Rn)MOVAdirectA←(direct)MOVARiA←((Ri))MOVA#dataA←data这组指令的功能是:把源操作数的内容送入累加器A。例如:MOVA#H该指令执行时将立即数H(在ROM中紧跟在操作码后)送入累加器A中。②数据传送到工作寄存器Rn的指令MOVRnARn←(A)MOVRndirectRn←(direct)MOVRn#dataRn←data这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R~R中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS、RS确定可以是H~H、H~FH、H~H、H~FH。例如:MOVRA若当前RS、RS设置为(即工作寄存器区)执行该指令时将累加器A中的数据传送至工作寄存器R(内部RAMH)单元中。③数据传送到内部RAM单元或特殊功能寄存器SFR的指令MOVdirectAdirect←(A)MOVdirectRndirect←(Rn)MOVdirectdirectdirect1←(direct)MOVdirectRidirect←((Ri))MOVdirect#datadirect←#dataMOVRiA(Ri←(A)MOVRidirect(Ri)←(direct)MOVRi#data(Ri)←dataMOVDPTR#dataDPTR←data这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将位的立即数送入数据指针寄存器DPTR中。片内数据RAM及寄存器的数据传送指令MOV、PUSH和POP共条如图所示。图片内RAM及寄存器的数据传送指令④累加器A与外部数据存储器之间的传送指令MOVXADPTRA←(DPTR)MOVXARiA←((Ri))MOVXDPTRA(DPTR)←AMOVXRiA(Ri)←A这组指令是:在累加器A与外部数据存储器RAM单元或IO口之间进行数据传送前两条指令执行时P引脚上输出有效信号用作外部数据存储器的读选通信号后两条指令执行时P引脚上输出有效信号用作外部数据存储器的写选通信号。DPTR所包含的位地址信息由P(低位)和P(高位)输出而数据信息由P口传送P口作分时复用的总线。由Ri作为间接寻址寄存器时P口上分时Ri指定的位地址信息及传送位数据指令的寻址范围只限于外部RAM的低个单元。⑤程序存储器内容送累加器MOVCA@APCMOVCA@ADPTR这是两条很有用的查表指令可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器A的内容作为无符号数和PC的内容(下一条指令的起始地址)相加后得到一个位的地址并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器PC的状态只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条指令后面的个单元之中表格的大小受到了限制而且表格只能被一段程序所利用。第二条指令是以DPTR作为基址寄存器累加器A的内容作为无符号数与DPTR内容相加得到一个位的地址并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关与该指令存放的地址无关因此表格的大小和位置可以在KB程序存储器中任意安排并且一个表格可以为各个程序块所公用。⑥堆栈操作指令PUSHdirectPOPdirect在MCS单片机的内部RAM中可以设定一个先进后出、后进先出的区域称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加然后将直接地址所指出的内容送入SP所指出的内部RAM单元出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元接着将SP的内容减。例如:进入中断服务程序时把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为H。则程序段PUSHPSWPUSHACCPUSHDPLPUSHDPH执行后SP内容修改为H而H、H、H、H单元中依次栈入PSW、A、DPL、DPH的内容当中断服务程序结束之前如下程序段(SP保持H不变)POPDPHPOPDPLPOPACCPOPPSW指令执行之后SP内容修改为H而H、H、H、H单元的内容依次弹出到DPH、DPL、A、PSW中。MCS提供一个向上的堆栈因此SP设置初值时要充分考虑堆栈的深度要留出适当的单元空间满足堆栈的使用。⑦字节交换指令数据交换主要是在内部RAM单元与累加器A之间进行有整字节和半字节两种交换。()整字节交换指令XCHARn(A)'(Rn)XCHAdirect(A)'(direct)XCHARi(A)'((Ri))()半字节交换指令字节单元与累加器A进行低位的半字节数据交换。只有一条指令。XCHDARi()累加器高低半字节交换指令只有一条指令:SWAPA【例】(R)=H(A)=H(H)=FH执行指令:XCHAR(R)=H(A)=FH(H)=HXCHDA@R(R)=H(A)=FH(H)=HSWAPA(A)=H数据交换指令XCH、XCHD、和SWAP共条如图所示。图数据交换指令算术运算类指令算术运算类指令共有条包括加、减、乘、除种基本算术运算指令这种指令能对位的无符号数进行直接运算借助溢出标志可对带符号数进行补码运算借助进位标志可实现多精度的加、减运算同时还可对压缩的BCD码进行运算其运算功能较强。算术指令用到的助记符共有种:ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV。算术运算指令执行结果将影响进位标志(Cy)辅助进位标志(Ac)、溢出标志位(Ov)。但是加和减指令不影响这些标志。对标志位有影响的算术运算指令见表中×表示指令运算的结果使该标志位置位或复位。.加法指令加法指令分为普通加法指令、带进位加法指令和加指令。()普通加法指令ADDARnA←(A)(Rn)ADDAdirectA←(A)(direct)ADDARiA←(A)((Ri))ADDA#dataA←(A)data这组指令的功能是将累加器A的内容与第二操作数相加其结果放在累加器A中。相加过程中如果位(D)有进位则进位标志Cy置“”否则清“”如果位(D)位有进位则辅助进位标志Ac置“”否则清“”。对于无符号数相加若Cy置“”说明和数溢出(大于)。对于带符号数相加时和数是否溢出(大于或小于)则可通过溢出标志OV来判断若OV置为“”说明和数溢出。【例】(A)=HR=H(H)=AFH执行指令:ADDAR结果:(A)=HCy=AC=OV=。对于加法溢出只能发生在两个加数符号相同的情况。在进行带符号数的加法运算时溢出标志OV是一个重要的编程标志利用它可以判断两个带符号数相加和数是否溢出。()带进位加法指令ADDCARnA←(A)(Rn)(Cy)ADDCAdirectA←(A)(direct)(Cy)ADDCARiA←(A)((Ri))(Cy)ADDCA#dataA←(A)data(Cy)这组指令的功能与普通加法指令类似唯一的不同之处是在执行加法时还要将上一次进位标志Cy的内容也一起加进去对于标志位的影响也与普通加法指令相同。【例】(A)=H(H)=FFHCy=执行指令:ADDCAH结果:(A)=HCy=AC=OV=。()增量指令INCAA←(A)INCRnRn←(Rn)INCdirectdirect←(direct)INCRi(Ri)←((Ri))INCDPTRDPTR←(DPTR)这组指令的功能是:将指令中指出的操作数的内容加。若原来的内容为FFH则加后将产生溢出使操作数的内容变成H但不影响任何标志。最后一条指令是对位的数据指针寄存器DPTR执行加操作指令执行时先对低位指针DPL的内容加当产生溢出时就对高位指针DPH加但不影响任何标志。【例】(A)=H(R)=FH(H)=AH(R)=H(H)=H执行如下指令:INCA执行后(A)=HINCR执行后(R)=HINCH执行后(H)=BHINC@R执行后(H)=H()十进制调整指令DAA这条指令对累加器A参与的BCD码加法运算所获得的位结果进行十进制调整使累加器A中的内容调整为二位压缩型BCD码的数。使用时必须注意它只能跟在加法指令之后不能对减法指令的结果进行调整且其结果不影响溢出标志位。执行该指令时判断A中的低位是否大于若满足大于则低位做加操作同样A中的高位大于则高位加操作。例如:有两个BCD数与相加结果应为BCD码程序如下:MOVA#HADDA#HDAA这段程序中第一条指令将立即数H(BCD码H)送入累加器A第二条指令进行如下加法:得结果BH第三条指令对累加器A进行十进制调整低位(为BH)大于因此要加最后得到调整的BCD码。.减法指令()带进位减法指令SUBBARnA←(A)-(Rn)-(Cy)SUBBAdirectA←(A)-(direct)-(Cy)SUBBARiA←(A)-(Ri)-(Cy)SUBBA#dataA←(A)-data-(Cy)这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减结果送回到累加器A中。在执行减法过程中如果位(D)有借位则进位标志Cy置“”否则清“”如果位(D)有借位则辅助进位标志AC置“”否则清“”。若要进行不带借位的减法操作则必须先将Cy清“”()减指令DECAA←(A)-DECRnRn←(Rn)-DECdirectdirect←(direct)-DECRi(Ri)←((Ri))-这组指令的功能是:将指出的操作数内容减。如果原来的操作数为H则减后将产生溢出使操作数变成FFH但不影响任何标志。.乘法指令乘法指令完成单字节的乘法只有一条指令:MULAB这条指令的功能是:将累加器A的内容与寄存器B的内容相乘乘积的低存放在累加器A中高位存放于寄存器B中如果乘积超过FFH则溢出标志OV置“”否则清“”进位标志Cy总是被清“”。【例】(A)=H(B)=AH执行指令:MULAB结果:(B)=H(A)=H(即乘积为H)Cy=OV=。.除法指令除法指令完成单字节的除法只有一条指令:DIVAB这条指令的功能是:将累加器A中的内容除以寄存器B中的位无符号整数所得商的整数部分放在累加器A中余数部分放在寄存器B中清进位标志Cy和溢出标志OV为“”。若原来B中的内容为则执行该指令后A与B中的内容不定并将溢出标志置“”在任何情况下进位标志Cy总是被清“”。算术运算类指令包括:ADD、ADDC、SUBB、MUL、DIV、INC、DEC和DA如图所示。图算术运算类指令逻辑运算指令逻辑运算指令共有条分为简单逻辑操作指令、逻辑与指令、逻辑或指令和逻辑异或指令。逻辑运算指令用到的助记符有CLR、CPL、ANL、ORL、XRL、RL、RLC、RR、RRC。.简单逻辑操作指令CLRA对累加器A清“”CPLA对累加器A按位取反RLA累加器A的内容向左循环移位RLCA累加器A的内容带进位标志向左循环移位RRA累加器A的内容向右循环移位RRCA累加器A的内容带进位标志向右循环移位循环左移指令示意图:RLA循环右移指令示意图:RRA带进位的循环左移指令示意图:RLCA带进位的循环右移指令示意图:RRCA这组指令的功能是:对累加器A的内容进行简单的逻辑操作除了带进位的移位指令外其他都不影响Cy、AC、OV等标志。示意图可以帮助我们进一步理解循环移位指令。.逻辑与指令ANLARnA←(A)∧(Rn)ANLAdirectA←(A)∧(direct)ANLARiA←(A)∧((Ri))ANLA#dataA←(A)∧dataANLdirectAdirect←(direct)∧(A)ANLdirect#datadirect←(direct)∧data这组指令的功能是:将两个操作数的内容按位进行逻辑与操作并将结果送回目的操作数的单元中。【例】(A)=H(R)=AH执行指令:ANLAR结果:(A)=H.逻辑或指令ORLARnA←(A)∨(Rn)ORLAdirectA←(A)∨(direct)ORLARiA←(A)∨((Ri))ORLA#dataA←(A)∨dataORLdirectAdirect←(direct)∨(A)ORLdirect#datadirect←(direct)∨data这组指令的功能是:将两个操作数的内容按位进行逻辑或操作并将结果送回目的操作数的单元中。【例】(A)=H(P)=H执行指令:ORLPA结果:(A)=FH.逻辑异或指令XRLARnA←(A)⊕(Rn)XRLAdirectA←(A)⊕(direct)XRLARiA←(A)⊕((Ri))XRLA#dataA←(A)⊕dataXRLdirectAdirect←(direct)⊕(A)XRLdirect#datadirect←(direct)⊕data这组指令的功能是:将两个操作数的内容按位进行逻辑异或操作并将结果送回目的操作数的单元中。图逻辑运算类指令控制转移类指令控制转移指令共有条不包括按布尔变量控制程序转移指令。其中有K范围的长调用、长转移指令KB范围的绝对调用和绝对转移指令有全空间的长相对转移和一页范围内的短相对转移指令还有多种条件转移指令。由于MCS提供了较丰富的控制转移指令因此在编程上相当灵活方便。这类指令用到的助记符共有种:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。无条件转移指令()绝对转移指令AJMPaddr这是KB范围内的无条件跳转指令执行该指令时先将PC然后将addr送入PC~PC而PC~PC保持不变。这样得到跳转的目的地址。需要注意的是目标地址与AJMP后一条指令的第一个字节必须在同一个KB区域的存储器区域内。这是一条二字节指令其指令格式为:AAAAAAAAAAA操作过程可表示为:PC←(PC)+PC~←addr例如程序存储器的H地址单元有绝对转移指令:HAJMPAH(B)因此指令的机器代码为:程序计数器Pc当前=PC=HH=H取其高位和指令机器代码给出的位地址最后形成的目的地址为:B=AH。()相对转移指令SJMPrel执行指令时先将PC再把指令中带符号的偏移量加到PC上得到跳转的目的地址送入PC。目标地址=源地址rel源地址是SJMP指令操作码所在的地址。相对偏移量rel是一个用补码表示的位带符号数转移范围为当前PC值的~共个单元。若偏移量rel取值为FEH(的补码)则目标地址等于源地址相当于动态停机程序终止在这条指令上停机指令在调试程序时很有用。MCS没有专用的停机指令若要求动态停机可用SJMP指令来实现:HERE:SJMPHERE动态停机(HFEH)或写成:HERESJMP$“$”表示本指令首字节所在单元的地址使用它可省略标号。()长跳转指令LJMPaddrPC←addr执行该指令时将位目标地址addr装入PC程序无条件转向指定的目标地址。转移指令的目标地址可在KB程序存储器地址空间的任何地方不影响任何标志。()间接转移指令(散转指令)JMPADPTRPC←(A)+(DPTR)这条指令的功能是把累加器A中的位无符号数与数据指针DPTR的位数相加(模)相加之和作为下一条指令的地址送入PC中不改变A和DPTR的内容也不影响标志。间接转移指令采用变址方式实现无条件转移其特点是转移地址可以在程序运行中加以改变。例如当把DPTR作为基地址且确定时根据A的不同值就可以实现多分支转移故一条指令可完成多条条件判断转移指令功能。这种功能称为散转功能所以间接指令又称为散转指令。条件转移指令JZrel(A)=转移JNZrel(A)≠转移这类指令是依据累加器A的内容是否为的条件转移指令。条件满足时转移(相当于一条相对转移指令)条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的个字节范围之内(~)。当条件满足时PC←(PC)rel其中(PC)为该条件转移指令的第一个字节的地址。比较转移指令在MCS中没有专门的比较指令但提供了下面条比较不相等转移指令CJNEAdirectrel(A)≠(direct)转移CJNEA#datarel(A)≠data转移CJNERn#datarel(Rn)≠data转移CJNERi#datarel((Ri))≠data转移这组指令的功能是:比较前面两个操作数的大小如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数则进位标志Cy置“”否则清“”但不影响任何操作数的内容。减不为转移指令DJNZRnrelRn←(Rn)-≠转移DJNZdirectreldirect←(direct)-≠转移这两条指令把源操作数减结果回送到源操作数中去如果结果不为则转移。调用及返回指令在程序设计中通常把具有一定功能的公用程序段编成子程序当子程序需要使用子程序时用调用指令而在子程序的最后安排一条子程序返回指令以便执行完子程序后能返回主程序继续执行。()绝对调用指令ACALLaddr这是一条KB范围内的子程序调用指令其指令格式为AAAAAAAAAAA执行该指令时PC←PC+SP←(SP)+(SP)←(PC)~SP←(SP)+(SP)←(PC)~PC~←addr()长调用指令LCALLaddr这条指令无条件调用位于位地址addr的子程序。执行该指令时先将PC以获得下条指令的首地址并把它压入堆栈(先低字节后高字节)SP内容加然后将位地址放入PC中转去执行以该地址为入口的程序。LCALL指令可以调用KB范围内任何地方的子程序。指令执行后不影响任何标志。其操作过程如下:PC←PC+SP←(SP)+(SP)←(PC)~SP←(SP)+(SP)←(PC)~PC~←addr()子程序返回指令RET子程序返回指令是把栈顶相邻两个单元的内容弹出送到PCSP的内容减程序返回PC值所指的指令处执行。RET指令通常安排在子程序的末尾使程序能从子程序返回到主程序。()中断返回指令RETI这是指令的功能与RET指令相类似。通常安排在中断服务程序的最后。()空操作指令NOPPC←PC+空操作也是CPU控制指令它没有使程序转移的功能。只消耗一个机器周期的时间。常用于程序的等待或时间的延迟。图条件转移类指令位操作指令MCS单片机内部有一个性能优异的位处理器实际上是一个一位的位处理器它有自己的位变量操作运算器、位累加器(借用进位标志Cy)和存储器(位寻址区中的各位)等。MCS指令系统加强了对位变量的处理能力具有丰富的位操作指令。位操作指令的操作对象是内部RAM的位寻址区即字节地址为H~FH单元中连续的位(位地址为H~FH)以及特殊功能寄存器中可以进行位寻址的各位。位操作指令包括布尔变量的传送、逻辑运算、控制转移等指令它共有条指令所用到的助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC共种。在布尔处理机中进位标志Cy的作用相当于CPU中的累加器A通过Cy完成位的传送和逻辑运算。指令中位地址的表达方式有以下几种:()直接地址方式:如AH()点操作符方式:如IE()位名称方式:如EX()用户定义名方式如用伪指令BIT定义:WBZDBITEX经定义后允许指令中使用WBZD代替EX以上种方式都是指允许中断控制寄存器IE中的位(外部中断允许位EX)它的位地址是AH而名称为EX用户定义名为WBDZ。①位数据传送指令MOVCbitCy←(bit)MOVbitCbit←(Cy)这组指令的功能是:把源操作数指出的布尔变量送到目的操作数指定的位地址单元其中一个操作数必须为进位标志Cy另一个操作数可以是任何可直接寻址位。②位变量修改指令CLRCCy←CLRbitbit←CPLCCy←(Cy)CPLbitbit←(bit)SETBCCy←SETBbitbit←这组指令对操作数所指出的位进行清“”、取反、置“”的操作不影响其它标志。③位变量逻辑与指令ANLCbitCy←(Cy)∧(bit)ANLCbitCy←(Cy)∧(bit)④位变量逻辑或指令ORLCbitCy←(Cy)∨(bit)ORLCbitCy←(Cy)∨(bit)位操作类指令如图所示。图位操作类指令⑤位变量条件转移指令JCrel若(Cy)=则转移PC←(PC)relJNCrel若(Cy)=则转移PC←(PC)relJBbitrel若(bit)=则转移PC←(PC)relJNBbitrel若(bit)=则转移PC←(PC)relJBCbitrel若(bit)=则转移PC←(PC)rel并bit←这组指令的功能是:当某一特定条件满足时执行转移操作指令(相当于一条相对转移指令)条件不满足时顺序执行下面的一条指令。前面条指令在执行中不改变条件位的布尔值最后一条指令在转移时将bit清“”。图位条件转移指令以上介绍了MCS指令系统理解和掌握本章内容是应用MCS单片机的一个重要前提。【例】指出下列程序段的每条指令的源操作数是什么寻址方式并写出每步运算的结果。(相关单元的内容)设程序存储器(H)=AH:MOVA#FHA=FH立即寻址MOVH#FH(H)=FH立即寻址MOVRAR=FH寄存器寻址MOVR#HR=H立即寻址MOVARA=FH寄存器间接寻址MOVDPTR#HDPTR=H立即寻址MOVA#HA=H立即寻址MOVCAADPTRA=AH基址变址寻址JMPADPTRPC目标=AH基址变址寻址CLRCC=寄存器寻址MOVHC(H)=寄存器寻址【例】用数据传送指令实现下列要求的数据传送。()R的内容输出到R。()内部RAMH单元的内容传送到A中。()外部RAMH单元的内容送到R。()外部RAMH单元的内容送内部RAMH单元。()外部RAMH单元的内容送内部RAMH单元。()程序存储器ROMH单元的内容送R。()ROMH单元的内容送内部RAMH单元。()ROMH单元的内容送外部RAMH单元。()ROMH单元的内容送外部RAMH单元。解:()MOVARMOVRA()MOVAH()MOVR#H或MOVR#HMOVXARMOVXARMOVRAMOVRA()MOVR#H或MOVR#HMOVXARMOVXARMOVHAMOVHA()MOVDPTR#HMOVXAHMOVHA()MOVDPTR#HCLRAMOVCAADPTRMOVRA()MOVDPTR#HCLRAMOVCAADPTRMOVHA()MOVDPTR#HCLRAMOVCAADPTRMOVR#HMOVXRA()MOVDPTR#HCLRAMOVCAADPTRMOVDPTR#HMOVXDPTRAMCS单片机指令格式寻址方式立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址方式 位寻址 基址寄存器加变址寄存器间接寻址 相对寻址指令系统指令分类数据传送类指令算术运算类指令逻辑运算指令控制转移类指令位操作指令

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/21

8051指令系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利