"); //-->
自制单片机学习查询资料
指令解析篇
姓 名:谢 军
班 级:08预备技师电气班
电 话:15882012352
邮 箱:www.15882012352@139.com
Q Q:303058297
世界上最大的敌人不是别人而是自己
1、清零指令
指令格式:CLR bit
功能:位操作指令,实现对直接寻址位清零,可表示为0→bit。字节数为2,周期数为1。
说明:“→”表示数据的流向;该指令是将低电平送到指定的位“bit”;效果相当于对指令的位清零。该指令占用两个字节,执行时间为一个机器周期。
类似的指令还有:CLR C
功能:为操作指令,实现对C位清零,可表示为0→C。字节数为1,周期数为1。
说明:将低电平“0”送到指定的位“C”,C为单片机中的一个进位标志位,效果相当于对指定的进位标志位清零。该指令占用1个字节数,执行时间为1个机器周期。
2、置1指令
指令格式:SETB bit
功能:位操作指令,实现直接对寻址位置位,可表示为1→bit。字节数为2,周期数为1。
说明:将高电平“1”送到指定的位“bit”,效果相当于对指定的位置1(又叫置位)。该指令占用两个字节数,执行时间为1个机器周期。,
类似的指令还有:
指令格式:SETB C
功能:为操作指令,实现对C位置位,可表示为1→C。字节数为1,周期数为1。
说明:将高电平“1”送到指定的位“C”,效果相当于对指定的C置1。该指令占用1个字节数,执行时间为1个机器周期数。
3、MOV指令
指令格式:MOV direct,#data
功能:数据传送指令,实现将立即数送到直接寻址单元,可表示为data→direct;字节数为3,周期数为2。
说明:#data表示#号后面的data是一个8位数据,#data称为立即数;direct是表示数据存储单元的一个地址;此指令是将数据data送到地址为direct的存储单元去。这里的data和direct都是用一个8位二进制数来表示,所以,数据传送类指令中的MOV是用来传送整个字节,而不像CLR和SETB指令对位进行操作。但是位操作类指令也有两条用MOV进行操作的,即MOV C和MOV bit,C。
指令格式:MOV C,bit
功能:位操作指令,实现将直接寻址位的值送到C位,可表示为bit→C;字节数为2,周期数为1。
说明:bit为可直接寻址的位,因为在MCS-51为内核的单片机中,有的存储单元(8个位)可以进行位操作,有的就不能进行位操作。本指令的作用是将bit的值传送到C位上。
指令格式:MOV bit,C
功能:位操作指令,实现将C位的值送到直接寻址位,可表示为C→bit;字节数为2,周期数为1。
说明:本指令的作用是将C的值送到指定的bit位上。
指令格式:MOV DPTR,#data16
功能:16位数据传送指令,属于数据传送类指令,可表示为data16→DPTR。字节数为3,周期数为2。
说明:这条指令是51系列单片机中唯一一条16位数据传送指令,将16位立即数送DPTR。DPTR由DPH和DPL两个8位寄存器组成,DPH存放16位数的高8位,DPL存放16位数的低8位。如:MOV DPTR,#1234H;则(DPH)=12H,(DPL)=34H。
指令格式:MOVC A,@A+DPTR
功能:从程序存储器取数送累加器指令,属于数据传送类指令,可表示为(A+DPTR)→A;字节数为1,周期数为2。
说明:MOVC是从程序存储器ROM中读数的指令,而MOV是从数据存储器RAM中存取数的指令,注意两者的不同。@A+DPTR是一种变址寻址方式,DPTR为基址,A中的数为地址偏移量,两者之和指向一个新地址,源操作数就在这个新地址中。该指令有时候也称为查表指令,被查的数据表格存放在程序存储器中。
从程序存储器ROM中读数的指令还有MOVC A,@A+PC。
指令格式:MOVC A,@A+PC
功能:从程序存储器取数送累加器指令,属于数据传送类指令,可表示为(A+PC)→A。字节数为1,周期数为2。
说明:功能类同MOVC A,@A+DPTR,不同的是基址不一样,一个是以DPTR为基址,一个是以PC为基址。
特别注意:在数据传送类的指令MOV指令是对整个字节数进行传送,而位操作类中的MOV指令是对位的值进行传送。
4、调用指令
指令格式:LCALL addr16
功能:控制转移类指令,是长调用子程序指令,可表示为addr16→PC;字节数为3,周期数为2。
说明:该指令为在程序存储器64KB地址范围内的调用子程序的指令,子程序可在64KB地址空间的任一处。
类似的指令有ACALL addr11
功能:短调用子程序指令,属于控制转移类指令,可表示为addr11→PC;字节数为2,周期数为2。
说明:基本作用同LCALL addr16,只是该指令在2KB的地址范围内调用子程序,即子程序入口地址距当前PC不得超过2KB地址范围。
注:在使用调用子程序指令时,如不清楚地址范围,可以全用LCALL指令,功能是一样的,地址范围是最大的,只是多用一个字节的程序存储空间。而在实际编程时,其子程序的入口地址往往是用一个标号来实现的,而不管它的具体地址值是多少。
5、控制转移指令
指令格式:RET
功能:子程序返回指令,属于控制转移类指令,字节数为1,周期数为2。
说明:每个子程序必须以RET指令结束。其作用是从堆栈中自动取出断点的地址值送到PC,从子程序返回到主程序。
指令格式:Ljmp addr16
功能:长转移指令,属于控制转移类指令,可表示为addr16→PC。字节数为3,周期数为2。
说明:该指令被执行后,其后的addr16地址值送到PC,然后程序跳转到addr16处去执行。跳转范围为64KB程序存储器的全部地址。
类似的指令还有AJMP、SJMP
指令格式:Ajmp addr11
功能:短转移指令,属于控制转移类指令,可表示为addr11→PC。字节数为2,周期数为2。
说明:功能同LJMP,只是用于2KB地址范围内的转移。
指令格式:SJMP rel
功能:无条件转移指令,属于控制转移类指令,可表示为PC+rel→PC。字节数为2,周期数为2。
说明:rel为相对当前地址的用一个有符号字节数表示的偏移量,其偏移范围为-127到+127,转移可以向前转移(目的地址小于当前地址)。也可以向后转移(目的地址大于当前地址)。
注:在使用转移指令时,如不清楚地址范围,可以全用LJMP指令,功能是一样的,地址范围是最大的,只是多占用一个字节的程序存储空间。而在实际编程时,其目的地址(不论是16位,还是11位地址或是rel)往往是用一个标号来实现的,而不用管它的具体地址值是多少。
指令格式:DJNZ Rn,rel
功能:条件转移指令,属于控制转移类指令,可表示为Rn-1→Rn,Rn≠0时,则PC+rel→PC。字节数为2,周期数为2。
说明:该指令是寄存器自动减一不为0转移的指令;Rn为单片机中的工作寄存器(R0到R7)。该指令的作用是先对Rn中的值自动减1,然后判断Rn中的值是否为0?如果为0,程序则顺序执行;如果不为0,程序则转移到目标地址处执行。
类似的指令还有DJNZ。
指令格式:DJNZ direct,rel
功能:条件转移指令,属于控制转移类指令,可表示为(direct)-1→(direct),(direct)≠0时,则PC+rel→PC。字节数为3,周期数为2。
说明:direct是一个8位直接地址,(direct)是表示这个地址中的字节内容(数值);该指令的作用是直接寻址单元内容减1不为0转移,功能同DJNZ Rn,rel指令类似。
指令格式:NOP
功能:空操作指令,属于控制转移类指令。字节数为1,周期数为1。
说明:该指令不进行任何操作,而后执行下一条指令,但占用一个字节和一个机器周期的延时。
指令格式:JMP @A+DPTR
功能:相对长转移指令,属于控制转移类指令,可表示为A+DPTR→PC。字节数为1,周期数为2。
说明:以DPTR为基址,A中的数为地址偏移量,两者之和指向一个新地址,该指令被执行后,程序将转向这个新地址去执行。
指令格式:CJNE Rn,#data,rel
功能:寄存器与立即数不等转移指令,属于控制转移类指令,表示为Rn≠data,则pc+rel→PC;若Rn<data,则1→C,若Rn>data,则0→C。字节数为3,周期数为2。
说明:该指令为条件转移指令,其作用是Rn中的数与data比较,如果Rn=data,顺序执行,否则转移到指定的标号处。
指令格式:CJNE @Ri,#data,rel
功能:寄存器间址中的数与立即数不等转移指令,属于控制转移类指令。表示为若(Ri)≠data,则PC+rel→PC;若(Ri)<data,则1→C。字节数为3,周期数为2。
说明:其作用是(Ri)与data比较,如果(Ri)=data,顺序执行,否则转移到指定的标号处;如果(Ri)<data,则C=1,否则C=0。
指令格式:CJNE A,#data,rel
功能:控制转移类指令;累加器与立即数不等转移,表示为若A≠data,则PC+rel→PC;若A<data,则1→C。字节数为3,周期数为2。
说明:其作用是A中的数与data比较,如果A=data,顺序执行,否则转移到指定的标号处;如果A<data,则C=1,否则C=0。
指令格式:CJNE A,direct,rel
功能:累加器与直接寻址单元中的数不等转移指令,属于控制转移类指令,表示若A≠(direct),则PC+rel→PC;若A<(direct),则1→C。字节数为3,周期数为2。
说明:其作用是A与(direct)比较,如果A=(direct),顺序执行,否则转移到指定的标号处;如果A<(direct),则C=1,否则C=0。
指令格式:JZ rel
功能:累加器为零转移指令,属于控制转移类指令,表示若A=0,则PC+rel→PC。字节数为2,周期数为2。
说明:如果A中的为0,则转移到指定的标号;否则,顺序执行(本指令的下一条指令)。
指令格式:JNZ rel
功能:累加器不为零转移指令,属于控制转移指令,表示若A≠0,则PC+rel→PC。字节数为2,周期数为2。
说明:如果A中的值不为0,则转移到指定的标号;否则,顺序执行。
指令格式:RETI
功能:中断返回指令,属于控制转移类指令。字节数为1,周期数为2。
说明:中断服务程序的结尾必须以RETI指令结束。
6、数据传送指令
指令格式:MOV Rn,#data
功能:立即数送寄存器指令,属于数据传送类指令,其功能可表示为data→Rn,字节数为2,周期数为1。
说明:该指令是将立即数data送寄存器Rn。
指令格式:MOV direct,Rn
功能:寄存器送直接寻址单元指令,属于数据传送类指令,其功能可表示为Rn→(direct)。字节数为2,周期数为2。
说明:该指令是将工作寄存器里的数据送至直接寻址单元。
指令格式:MOV Rn,direct
功能:直接寻址单元送寄存器指令,属于数据传送类指令,其功能可表示为(direct)→Rn。字节数为2,周期数为2。
说明:该指令是将直接寻址单元里的数据送工作寄存器。
指令格式:MOV direct1,direct2
功能:直接寻址单元2送直接寻址单元1指令,属于数据传送类指令,其功能可表示为(direct2)→(direct1);字节数为3,周期数为2。
说明:该指令是将直接寻址单元2里的数据送至直接寻址单元1。
指令格式:MOV A,@Ri
功能:寄存器间址单元送累加器指令,属于数据传送类指令,可表示为(Ri)→A。字节数为1,周期数为1。字节数为2,周期数为1。
说明:Ri为R0或R1;该指令的作用是以Ri中的内容为指定地址去取数送A。
指令格式:MOV @Ri,#data
功能:立即数送寄存器间址单元指令,属于数据传送类指令,可表示为data→(Ri)。
说明:该指令的作用是将立即数送寄存器间址单元。
指令格式:MOV direct,@Ri
功能:寄存器间址单元送直接寻址单元指令,属于数据传送类指令,可表示为(direct)→(Ri)。字节数为2,周期数为2。
说明:该指令的作用是将寄存器间址单元(Ri)的数据送直接寻址单元中。
指令格式:XCH A,Rn
功能:累加器与寄存器交换指令,属于数据传送类指令,可表示为A→Rn。字节数为1,周期数为1。
说明:该指令的作用是将A与Rn中的数据进行相互交换,即A中的内容送Rn,Rn中的内容送A。如A中的数据为22H,R7中的数据为44H,则执行XCH A,R7指令后,A中的数据为44H,R7中的数据为22H。
指令格式:XCH A,direct
功能:累加器与直接寻址单元交换指令,属于数据传送类指令,可表示为A→direct;字节数为2,周期数为1。
说明:该指令的作用是将A与direct中的数据进行交换。
指令格式:XCHD A,@Ri
功能:累加器与寄存器间址单元低4位数据交换指令,属于数据传送类指令,可表示为A0—3←→(Ri)0—3。字节数为1,周期数为1。
说明:该指令的作用是将A与寄存器间址单元中数据的低4位数据进行相互交换。
指令格式:SWAP A
功能:累加器中的高4位与低4位交换指令,属于数据交换传送类指令,可表示为A0—3←→A4—7。
说明:该指令的作用是将A中数的高低半字节进行交换。如A中的数据为48H,进行SWAP A指令后,A中的值为84H。
注:由于MOV在这些指令中最大只能传送一个字节的数,所以传送的最大数不能大于255(十进制)。
指令格式:PUSH direct
功能:直接寻址单元压入栈顶指令,属于数据传送类指令,可表示为SP+1→SP,(direct)→(SP)。字节数为2,周期数为2。
说明:SP为堆栈指针,是特殊功能寄存器中的一个,SP的值指示堆栈开始的RAM地址;PUSH指令的功能是先将堆栈指针SP的内容加1,然后将直接寻址单元中的数压入到SP所指示的单元中去。例如:
MOV A,#55H
MOV SP,#07H
PUSH A
经过汇编后,地址为08H的数据存储单元中的内容为55H。
指令格式:POP direct
功能:栈顶弹出到直接寻址单元指令,属于数据传送类指令,可表示为(SP)→(direct),SP-1→SP。字节数为2,周期数为2。
说明:该指令的作用是先将堆栈指针指示单元的内容弹出传送到直接寻址单元中,然后将SP的值减1并仍指向栈顶。
注:堆栈的实质是数据存储器中的一块区域,其特点是“先入后出,后入先出”。堆栈的起始地址取决于堆栈指针的值,使用堆栈一般需重新设定SP的初值。系统上电或复位时,SP的初始值默认的是07H,习惯上人们常将SP的初始值设定在5FH上。
7、伪指令
起始指令:ORG nn
功能:在机器汇编时,指示此语句后面的程序或数据块以nn为起始地址连续存放在程序存储器中。
说明:nn为起始地址值。
汇编结束指令:END
功能:指示源程序段结束。
说明:通常程序都是以END伪指令作结束指令。
指令格式:<标号:> DB <项或项表>
功能:字节定义指令。该指令的功能是把项或项表的数值存入从标号开始的连续的ROM单元中。其中项或项表是指一个字节、数、字符中以单引号引起来的ASII码字符串。如为数值,其取值范围为00~0FFH,若为字符串,其长度应限制在80个字符内。
指令格式:<标号:> DW <项或项表>
功能:字定义指令。基本含义与DB相同,不同的是DW定义16位数据,每个数据需两个单元存放。高8位数据字节先存入低地址字节中,而低8位数据字节则再存入高地址字节中。
指令格式:<标号:> DS <表达式>
功能:保留字节指令。指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由表达式指定。
指令格式:<标号:> EQU <数或汇编符号>
功能:等值指令。是将操作数段中的地址或数据赋予字符名,表示EQU两边的量等值。
指令格式:字符名称DATA<数或表达式>
功能:数据地址赋值指令。功能与EQU类似,但有3点差异:
1)DATA定义的标识符可以先使用后定义,而EQU必须先定义后使用;
2)EQU可以把一个汇编符号赋给字符名,而DATA只能把数据赋给字符名;
3)DATA可以把一个表达式赋给字符名,只要表达式是可求值的。
指令格式:字符名称 BIT <位地址>
功能:位定义指令,可为位地址赋字符名称。
伪指令不是控制单片机操作的指令,因此笔试可执行指令。它只是在机器自动把源程序翻译成机器语言时,必须为汇编程序提供辅助信息的一
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。