单片机的软件基础:单片机的指令系统

来自:。
4年前
已收藏
收藏
阅读数
109
回复数
0

8051单片机指令系统的111条指令按其功能不同,可分为数据传送类、算术运算类、逻辑运算类、控制转移类和位操作类五大类。 1.数据传送类指令。 数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址。指令执行后,源操作数保持不变,目的操作数为源操作数所替代。 数据传送类指令助记符有:MOV、MOX、MOVC、XCH、XCHD、PUSH、POP、SWAP等。这些数据传送类指令根据其数据传送的方式不同,又可分为内部数据传送、外部数据传送、访问程序存储器、堆栈操作和数据交换5种指令。


(1)内部数据传送指令。 内部数据传送类指令共16条,助记符为MOⅴ,源自英文Move。 1)以累加器A为目的操作数的传送指令。共有4条,例如:
第一条指令的含义:寄存器寻址方式,将寄存器Rn的内容送入累加器A。 第二条指令的含义:直接寻址方式,将地址为 direct存储单元的内容送入累加器A。 第三条指令的含义:寄存器间接寻址方式,寄存器Ri的内容为操作数的地址,将该地址存储单元的内容送入累加器A。 第四条指令的含义:立即寻址方式,将立即数data送入累加器A。
2)以寄存器Rn为目的操作数的传送指令。共有4条,例如:
第一条指令的含义为:立即寻址方式,将立即数data送入Rn。 第二条指令的含义为:直接寻址方式,将地址为 direct存储单元的内容送入寄存器Rn。 第三条指令的含义为:寄存器寻址方式,累加器A中的内容送入寄存器Rn。 第四条指令的含义为:立即寻址方式,将立即数data高8位送入 DPTRH,data低8位送入 DPTRL。
上述5条指令的功能是将源操作数所指定的内容送入 direct所指定的片内存储器单元中。源操作数的寻址方式:第一和第二条为寄存器寻址,第三条为直接寻址,第四条为寄存器间接寻址,第五条是立即寻址。
4)以寄存器间址@Ri为目的操作数的传送指令。共有3条:
上述3条指令的功能是将源操作数所指定的内容送入Ri,Ri中的内容是存储单元的地址。可将Ri看成是一个指针,执行该指令后,Ri即指向地址单元。
(2)外部数据传送指令。 外部数据传送类指令共4条,用于和外部数据存储器之间的数据传送,助记符为MOVX,源自英文 Move External RAM。4条外部数据传送类指令如下:
前两条以8位Ri为间址寄存器,寻址范围为256字节。后两条以16位DPR为间址寄存器,可寻址64KB外部存储器地址。 与外部数据存储器之间的数据传送都应以A作为中介。
(3)访问程序存储器指令。 访问程序存储器指令共两条,用于查询存放在程序存储器中的固定表格和常数,助记符为MOVC,源自英文 Move Code。两条访问程序存储器指令如下:
两条指令均为变址寻址方式,但基址寄存器不同,因此其适应的范围不同。前一条用DPTR作基址寄存器,查表范围达64KB;后一条以PC基址寄存器,它指向当前执行指令的地址,查表范围由A确定,只是该指令后256B的地址空间。 三种传送类指令分别用于三种空间:片内RAM(包括SPR),用MOV指令传送;片外RAM,用MOWX指令传送;程序存储器,用MOVC指令传送。虽然三个不同的存储空间地址是重叠的,但由于传送的指令不同,因而不会出错。
(4)堆栈操作指令。 堆栈是一个按照后进先出原则组织的一段内存区域,系统堆栈还包括指针寄存器(SP),SP始终指向栈顶。堆栈的存储结构操作原理如图3-20所示。
堆栈操作指令共有两条:
PUSH为入栈指令,将指定直接寻址单元中的数据压入堆栈。进栈时,先将SP加1,升高栈顶,再将数据压入(SP指向栈顶)。 POP为出栈指令,将SP所指单元中的数据弹出到指定地址单元中,然后将SP-1,以使SP指向新的栈顶。 堆栈是在调用子程序或中断处理时,用于保存返回地址和断点地址。 当调用子程序或执行中断处理时,在进入子程序或中断处理过程中,通过进栈操作,将通用寄存器原先的内容存入堆栈。而当返回主程序或恢复中断时,通过出栈操作,恢复通用寄存器的值,并将返回地址或断点地址恢复到指令指针寄存器中。
(5)数据交换指令。 8051单片机数据交换指令有字节交换指令(XCH)、半字节交换指令(XCHD)和累加器高低位互换指令(SWAP)。XCH、XCHD和SWAP三个指令助记符分别源自英文Ex-change和 Swap数据交换指令共有五条: 三条字节交换指令为:
第一条字节交换指令为寄存器寻址方式,寄存器Rn与累加器A互换内容。 第二条字节交换指令为寄存器间接寻址方式,寄存器Ri内容为地址的存储单元与累加器A互换内容。 第三条字节交换指令为直接寻址方式, direct为地址的存储单元与累加器A互换内容。 条半字节交换指令为:
该指令为寄存器间接寻址方式,寄存器Ri内容为地址的存储单元与累加器A互换低四位内容,高四位不变。 条累加器高低位互换指令为:
该指令为累加器A的高四位与低四位互换。
2.算术运算类指令。 算术运算类指令共有24条,可以进行加、减、乘、除和十进制调整等运算。指令执行后会影响到PSW(程序状态字)的相关标志位,如进位位Cy、辅助进位位AC溢出位OV和奇偶校对位P等。 算术运算类指令的助记有:ADD、ADDC、SUBB、DA、INC、 DEC MU、DIV等。根据运算方式不同,这些算术运算类指令可分为加法类、减法类、加减1、乘除法类和BCD调整5种指令。 (1)加法指令加法指令有不带进位和带进位两种。不带进位的加法运算指令有4条,使用ADD助记符,源自英文 Addition。带进位的加法运算指令也有4条,使用ADDC助记符,源自英文Add with Carry。 1)不带进位位的加法指令。4条指令为:
ADD指令为8位二进制数加法运算,其中一个加数在A中,另一个由4种寻址方式得到,相加结果送入A。ADD运算结果会影响PSW的Cy、AC、0V等标志位。有进位Cy=1,无进位Cy=0。
2)带进位位的加法指令。4条指令为:
ADDC指令的功能与ADD的区别是相加时再加上Cy位。ADDC运算结果也会影响PSW的Cy、AC、OV等标志位。有进位Cy=1,无进位Cy=0。
2)减法指令。 带借位减法指令共4条,助记符为SUBB,源自英文 Subtract with borrow。4条带借位位的减法指令如下:
上述减法指令是将A中的数减去源操作数所指示的数以及借位位Cy,结果送入A。减法操作对PSW相关位也有影响,有借位时Cy=1,无借位时Cy=0。 8051单片机无不带借位减法指令,若要做不带借位的减法运算,可先将进位清零,再执行减法指令。
(3)加减1指令。 加1指令有5条,使用INC助记符,源自英文 Increase。减1指令有4条,使用DEC助记符,源自英文 Decrease1)加1指令。5条加1指令为:
上述5条INC指令的功能是将指定单元的数加1后再送回该单元。前四条指令为8位加1指令,只有第五条指令为16位加1指令。除第一条会影响PSW的奇偶校验位P,其他的不影响PSW。
2)减1指令。4条减1指令如下:
上述4条DEC指令的功能是将指定单元的数减1,再送入该单元。DEC指令无16位指令,结果不会影响PSW的Cy、AC、OV等标志位。
(4)BCD调整指令。 1)BCD码说明:BCD码( Binary Coded Decimal Code)是用二进制数对十进制数编码常用的8421BDC码是用4位二进制数0000-1001分别表示十进制数0~9,见表3-3。
2)BCD码调整指令的作用。BCD码用4位二进制数表示,有16种状态,余下6种1010~1111在BCD码中为非法码。在BCD码的运算中,当出现非法码时,就必须修正,以确保正确的运算结果。BCD码调整指令的作用是当进行BCD码加法运算时,如果通过二进制数加法运算后出现了非法码,就进行调整,以获得正确的运算结果。
3)BCD码调整指令。BCD码调整指令有1条:
BCD的调整是由计算机内部自动进行的,是执行“DAA”指令的结果。程序设计时,需要在ADD、ADDC指令后加上DA指令。
(5)乘除法指令。 8051单片机乘法指令和除法指令各有1条。乘法指令的助记符为MUL,源自英文Muliply。除法指令的助记符为DV,源自英文、 Divide。 1)乘法指令。1条乘法指令如下:
该指令的功能是:将累加器A和寄存器B中两个8位无符号数相乘,乘积的低8位送A,高8位送B。 乘法指令对PSW的影响:执行指令后,Cy位清零,OV位表示积的大小,乘积大于255,即B≠0,则OV=1;否则OV=0。奇偶标志位P由A中1的个数决定。
2)除法指令。1条除法指令如下:
该指令的功能是:将累加器A和寄存器B中两个8位无符号数相除,商的整数部分送A,余数送B。 除法指令对PSW的影响:执行指令后,对PSW影响与乘法指令相同。当除数为0,即B原=0时,OV=1,表示除法无意义;否则OV=0。
3.逻辑运算类指令。 逻辑运算类指令共有24条,可以进行与、或、非和异或等逻辑运算,还可对A进行清零、取反和移位等操作。这些指令涉及A时,影响奇偶标志位P,但对PSW的进位位Cy(除带Cy移位)、辅助进位位AC和溢出位OV无影响。 各逻辑运算类指令用如下助记符表示:ANL,ORL,XRL,CIR,CPL、RL, RLC RR和RRC。根据运算功能不同,逻辑运算类指令可分为与、或、异或、清零和取反、循环移位5类指令。 (1)逻辑与运算指令。 逻辑与指令共6条,助记符为ANL,源自英文 And Logic。6条与运算指令如下:
前四条A中数与源操作数指定的数按位相与后结果送入A。执行指令后影响奇偶标志位P。后两条直接地址单元中数与源操作数指定的数按位相与后,结果送入直接地址单元中。
(2)逻辑或运算指令。 逻辑或运算指令也有6条,助记符为ORL,源自英文 Or Logic。6条或运算指令如下:
前四条A中数与源操作数指定的数按位相或后结果送入A。执行指令后影响奇偶标志位P;后两条直接地址单元中数与源操作数指定的数按位相或后,结果送入直接地址单元中。
3)逻辑异或指令。 逻辑异或指令使用XRL助记符,源自英文 Exclusive- Or Logic。6条异或指令如下:
前四条A中数与源操作数指定的数按位异或后结果送入A。执行指令后影响奇偶标志位P;后两条直接地址单元中数与源操作数指定的数按位异或后,结果送入直接地址单元中。
(4)清零指令和取反指令。 8051单片机清零指令和取反指令各有1条。清零指令的助记符为CLR,源自英文 Clear。 取反指令的助记符为CPL,源自英文 Complement。
1)清零指令。1条清零指令如下:
该指令的功能是将累加器A置0。执行指令后会影响标志位P。
2)取反指令。1条取反指令如下:
该指令的功能是将累加器A中的内容各位取反,再将结果送入A。
(5)循环移位指令。 8051单片机有4条循环移位指令:循环左移指令RL( Rotate Left)、循环右移指令RR( Rotate Right)、带进位循环左移指令RLC( Rotate Left with Carry)和带进位循环右移指令RRC (Rotate Right with Carry)。
1)循环左移指令。指令如下:
该指令的功能:将累加器A中各位均由低向高移动1位,A7移人A0。循环左移指令示意图如图3-21所示。
2)循环右移指令。指令如下:
该指令的功能:将累加器A中各位均由高向低移动1位,A0移入A7。循环右移指令示意图如图3-22所示。
3)带进位循环左移指令。指令如下:
该指令的功能:将累加器A中各位均由低向高移动1位,A7移入Cy,Cy移人A0。带进位循环左移指令的示意图如图3-23所示。
4)带进位循环右移指令。指令如下:
该指令的功能是:将累加器A中各位均由高向低移动1位,A0移入Cy,Cy移入A7。 带进位循环右移指令示意图如图3-24所示。
4.控制转移类指令。 控制转移类指令共有17条,这类指令通过修改PC的内容来控制程序的执行过程,可提高程序的效率。这些指令除比较转移指令外,一般不影响标志位。 各控制转移类指令用如下助记符表示:LJMP、AJMP、SJMP、JMP、J、JNZ、CJNEDJNE、 LCALL、ACAL、RET、REI和NOP。控制转移类指令也称跳转指令,可改变PC原顺序执行流向,可分无条件转移、条件转移和子程序调用及返回三种。 (1)无条件转移指令。 无条件转移指令共4条:长跳转指令LJMP( Long Jump)、绝对跳转指令AJMP(Absolute Jump)、短跳转指令SJMP( Short Jump)和无条件跳转指令JMP(Jump)。 1)长跳转指令。也称长转移指令,指令如下:
IJMP的功能:将程序跳转到adr16处执行。由于16位目的地址( adder6)的范围为0000H~FFFH,因此,LJMP可以跳转至64KB程序存储器的任意位置。
2)绝对跳转指令。也称绝对转移指令,指令如下:
AJMP跳转指令的功能:将操作数给定11位地址送入PC,取代PC的低11位(PC00),与PC的高5位(PC15-m)一起构成16位目的地址,使程序跳转到该目的地址处执行。11位目的地址( addtr111)的地址范围为2KB,因此,AJMP可以跳转至当前PC的同个2KB区域内,向前或向后转移均可。
3)短跳转指令。指令如下:
SJMP指令的功能:将操作数给定的带符号8位地址+PC,形成新的目的地址,送入PC,使程序跳转到该目的地址处执行。rel的地址范围为-128~128。SJMP执行时,先将PC+2,再加相对地址rel,形成转移目标地址。
4)无条件跳转指令。指令如下:
JMP指令的功能:将DPR中的基址与A中的偏移量相加,形成新的目的地址,送入PC,使程序跳转到该目的地址处执行。JMP也称散转指令,执行后,不改变累加器A和数据指针DPTR的内容,也不影响标志位。
(2)条件转移指令。 条件转移指令是只有当满足条件时,程序才跳转。条件转移指令有:累加器判零条件转移指令J( Jump of Zero)、JNZ( Jump if Not Zero),比较条件转移指令CJNE( CompareJump if Not Equal)和减1条件转移指令DINZ( Decrement, Jump if Not Zero)。
1)判零转移指令。累加器判零条件转移指令有两条:
JZ条件转移指令,若A=0,则程序跳转到偏移地址rel处执行。 JNZ条件转移指令,若A≠0,则程序跳转到偏移地址rel处执行;若A=0,则程序顺序执行。 PC+2是因为这两条指令为2字节指令,跳转是当前PC+rel。因此,无论是跳转还顺序执行下一条指令,均应为PC+2。
2)比较条件转移指令。4条比较条件转移指令如下:
上述4条比较转移指令的功能:当比较结果为相等时,PC+3→PC,程序顺序执行。 第一条指令累加器A与直接地址单元内容不一致时,程序转移至PC+3+rel处执行,且
第二条指令累加器A的内容与立即数不一致时,程序转移至PC+3+rel处执行,且:
第三条指令工作寄存器Rn的内容与立即数不一致时,程序转移至PC+3+rl处执行,且:
第四条指令寄存器Ri中的地址存储单元内容与立即数不一致时,程序转移至PC+3+rel处执行,且:
3)减1条件转移指令。减1条件转移指令有两条:
DJNZ指令功能:将操作数给定的内容减1,再判断其是否为0:若为0,PC+2(2字节指令)或+3(3字节指令),程序顺序进行;若不为0,则程序跳转执行第一条指令工作寄存器Rn-1→Rn:Rn若不为0,则PC+2,再加相对地址rel后送PC,形成转移目标地址,程序跳转至目标地址执行。 第二条指令直接地址单元( direct)-1→( direct),若( direct)不为0,则PC+3,再加相对地址rel后送PC,形成转移目标地址,程序跳转至目标地址执行。
(3)子程序调用及返回指令。 主程序通过调用指令调用子程序,子程序执行完成后,通过返回指令返回到主程序。 调用指令有两条:长调用指令 LCALL( Long subroutine Cal)和短调用指令 ACALL( Absolute subroutine call)。返回指令也有两条:子程序返回指令RET( Return from subrou-tine)和中断返回指令RET( Return from Interruption))长调用指令。指令如下:
该指令执行时先PC+3,获得下一条指令首地址;然后分两次将首地址压入堆栈,先低字节后高字节,且SP内容加2;最后将目标地址addr16送入PC,程序转向执行子程序。 长调用指令中addr16为16位直接地址,其调用的地址范围为64KB。
2)短调用指令。指令如下:
该指令执行时先PC+2,获得下一条指令首地址;然后分两次将首地址压入堆栈,先低字节后高字节,且SP内容加2;最后将目标地址addr11送入PC的低11位,PC高5位不变,形成新的16位地址,程序转向该地址执行子程序。 短调用指令中 addr11为11位直接地址,其调用的地址范围为2KB。
3)子程序返回指令。指令如下:
该指令将堆栈顶部相邻两单元的内容分两次弹出送到PC,且SP内容减2;程序返回到PC值所指向的地址执行,SP则指向栈顶。 RET只能用在子程序的末尾。
4)中断返回指令。指令如下:
该指令将堆栈顶部相邻两单元的内容分两次弹出送到PC,且SP内容减2;程序返回到PC值所指向的地址(中断点)执行,SP则指向栈顶。 RETI只能用在中断服务程序的末尾。执行该指令在程序返回断点地址的同时,会将中断优先级状态信息清除,以保证其他中断请求能得到响应。
5)空操作指令。8051单片机设有1条空操作指令:
该单字节、单周期指令在时间上消耗了12个时钟周期,而CPU不作任何工作,用于等待,执行速度放慢。
5.位操作指令。 在自动控制应用中,通常只需要一位就可满足,若按字节进行操作,就会浪费其他7位存储空间。8051单片机引入位处理机制,硬件结构中设有位处理器(布尔处理器),与之配套的则是位操作指令系统。 位操作类指令的助记符有:MOV、ANL、ORL、CPL、JC、JNC、JB、JNB、JBC、CLR和SETB。根据其功能的不同,位操作类指令可分为位传送、位逻辑运算、位转移控制、位置位与清零4部分位操作类指令。 (1)位传送指令位传送指令的功能是实现位累加器C(PSW中的Cy位与其他位地址之间的数据传送。 位传送指令共两条:
指令中C为进位位Cy的助记符,bit为内RAM中20H~2FH的128个可寻址位和特殊功能寄存器中的可寻址位存储单元。
(2)位逻辑运算指令。 位逻辑运算指令共6条,指令助记符与按字节操作的逻辑运算指令相同。这6条指令如下:
第一条位逻辑与指令是将Cy的内容与直接位地址内容相与,结果送入Cy。 第二条位逻辑与指令是将Cy的内容与直接位地址内容取反后再相与,结果送入Cy。 第三条位逻辑或指令是将Cy的内容与直接位地址内容相或,结果送入Cy。 第四条位逻辑或指令是将Cy的内容与直接位地址内容取反后再相或,结果送入Cy。 第五、第六条位逻辑非指令将Cy、(bit)内容取反。
(3)位转移指令。 位转移控制指令有5条,均为条件转移,分别为:JC( Jump if the Carry flag is set)、JNCJump if the Carry flag is not set) JB (Jump if the Bit is set), JNB( Jump if the Bit is not set)和JBC( Jump if the Bit is set and Clear the bit)。
第一、第二条位转移指令:当条件不满足(Cy=0或1)时,则PC+2送PC,程序顺序执行。 第三、第四条位转移指令:当(bt)=0或1时,则PC+3送PC,程序顺序执行第五条与第三条的区别是,在(bit)=1时程序跳转执行外,(bit)清零。
(4)位置位与位清零指令。 8051单片机位操作的清零和置位指令各有两条:位清零指令的助记符为CLR,源自英文Clear,位置位指令的助记符为SETB,源自英文 Set Bit. 1)位清零指令。两条位清零指令如下:
上述两清零指令的功能是将Cy或bit的内容清零。
2)位置位指令。两条位置位指令如下:
上述两置位指令的功能是将Cy或bit的内容置1。

上一篇下一篇
参与回答(0条评论)
用户头像
上传
用户头像
{{item.nickname}}{{item.pubtime}}回复
回复图片
用户头像
上传
用户头像
{{item1.nickname}}回复 {{item1.othername}} {{item1.pubtime}} 回复
回复图片
用户头像
上传
查看全部回复{{item.replylist_count}}条 查看全部
收起回复 收起全部
{{isLoadList==1?'加载中...':(isLoadList==2&&(list.length <=3||(list.length>3&&!is_hidden))?'没有更多内容了':'查看更多回答')}}
返回顶部

返回顶部