<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
自制单片机学习查询资料
指令解析篇
姓 名:谢 军
班 级: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 <位地址>
功能:位定义指令,可为位地址赋字符名称。
伪指令不是控制单片机操作的指令,因此笔试可执行指令。它只是在机器自动把源程序翻译成机器语言时,必须为汇编程序提供辅助信息的一些指令。
8、逻辑运算类指令
指令格式:RLC A
功能:累加器带进位标志左循环移位指令,属于算数类指令,字节数为1,周期数为1。
说明:A是累加器,为特殊功能寄存器(SFR)中的一个;C为进位标志位;该指令执行一次,其累加器中的8个位加上C位共9位,依次左移一次,即A中的1位→2位,2位→3位,3位→4位…8位→C位。
指令格式:RL A
功能:累加器左循环移位指令,属于逻辑运算类指令,字节数为1,周期数为1。
说明:功能与RLC A 指令类似,只是不带C标志位移位。
指令格式:RRC A
功能:累加器带进位标志右循环移位指令,属于逻辑运算类指令,字节数为1,周期数为1。
说明:功能与RLC A指令类似,只是移位方向为右。
指令格式:RR A
功能:累加器右循环移位指令,属于逻辑算数类指令,字节数为1,周期数为1。
说明:功能与RRC A指令类似,只是不带C标志位移位。
指令格式:CPL A
功能:对累加器各位取反操作指令,属于逻辑算数类指令,可表示为A→A。字节数为1,周期数为1。
说明:如A中各位值是11001100B,CPL A执行后,其A中的各位值是00110011B,每个位的值都与原来的值相反。
指令格式:CPL C
功能:对C取反指令,属于位操作类指令,表示C→C。字节数为1,周期数为1。
说明:若果C位原值为0,则取反操作后为1,同理,C为1时,取反操作后,C为0。
指令格式: CPL bit
功能:对直接寻址位取反指令,属于位操作类指令,表示为bit→bit。字节数为2,周期数为1。
说明:如果bit位原值为0,取反操作后,bit为1;同理,如果bit为1时,取反操作后,bit为1。
指令格式:CLR A
功能:对累加器清零指令,属于逻辑算数类指令,可表示为0→A;字节数为1,周期数为1。
说明:前面学习过的CLR指令只能对位进行操作,在这里当对A进行操作时,可以同时对A中的8个位进行清零操作。
指令格式:ANL A,#data
功能:累加器逻辑与立即数指令,属于逻辑运算类指令,可表示为A?data→A。字节数为2,周期数为1。
说明:?表示逻辑“与”。与运算的规则是:1?1=1,0?1=0,1?0=0,即两数有“0”则为0.该指令的作用是累加器A中的数与立即数,与的结果送入A。
指令格式:ANL A,direct
功能:累加器逻辑与直接寻址单元指令,属于逻辑运算类指令,可表示为A?(direct)→A。字节数为2,周期数为1。
说明:该指令的作用是累加器中的数与直接寻址单元中的数,与的结果送入A。
指令格式:ANL A,Rn
功能:累加器逻辑与工作寄存器指令,属于逻辑运算类指令,可表示为A?Rn→A为。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数与工作寄存器中的数,与的结果送入A。
指令格式:ANL A,@Ri
功能:累加器逻辑与寄存器间址单元指令,属于逻辑运算类指令,可表示为A?(Ri)→A为。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数与寄存器间址单元中的数,与的结果送入A。
指令格式:ANL direct,A
功能:直接寻址单元中的逻辑数与累加器指令,属于逻辑运算类指令,可表示为(direct)?A→A。字节数为2,周期数为1。
说明:该指令的作用是直接寻址单元中的数与累加器中的数,与的结果送入A。
指令格式:ANL direct,#data
功能:直接寻址单元中的数据逻辑与立即数指令,属于逻辑算术运算类指令,可表示为(direct)?data→(direct)。字节数为3,周期数为1。
说明:该指令的作用是直接寻址单元中的数语立即数,与的结果送入直接寻址单元。
指令格式:XRL A,#data
功能:累加器逻辑异或立即数指令,属于逻辑运算类指令,可表示为A+data→A。字节数为2,周期数为1。
说明:+是逻辑运算“异或”。异或运算的规则是:1+1=0,0+0=0,0+1=1,1+0=1,即两数相同为0,两数相异为1,与0异或值不变,与1异或值变反。该指令的作用是累加器中的数异或立即数,异或的结果送入A。
指令格式:XRL A,direct
功能:累加器逻辑异或直接寻址单元指令,属于逻辑运算类指令,可表示为A+(direct)→A。字节数为2,周期数为1。
说明:该指令的作用是累加器中的数异或直接寻址单元中的数,异或的结果送入A。
指令格式:XRL A,Rn
功能:累加器逻辑异或工作寄存器指令,属于逻辑运算类指令,可表示为A+Rn→A。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数异或工作寄存器中的数,异或的结果送入A。
指令格式:XRL A,@Ri
功能:累加器逻辑异或寄存器间址单元指令,属于逻辑运算类指令,可表示为A+(Ri)→A。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数异或寄存器间址单元中的数,异或的结果送入A。
指令格式:XRL direct,A
功能:直接寻址单元逻辑异或累加器指令,属于逻辑运算类指令,可表示为(direct)+A→(direct)。字节数为2,周期数为1。
说明:该指令的作用是直接寻址单元中的数异或累加器中的数,异或的结果送入直接寻址单元。
指令格式:XRL direct,#data
功能:直接寻址单元逻辑异或立即数指令,属于逻辑运算类指令,可表示为(direct)+data→(direct)。字节数为3,周期数为1。
说明:该指令的作用是直接寻址单元中的数异或立即数,异或的结果送入直接寻址单元。
指令格式:ORL A,#data
功能:累加器逻辑或立即数指令,属于逻辑运算类指令,可表示为A?data→A。字节数为2,周期数为1。
说明:?表示逻辑“或”。或运算的规则:1?1=1,0?1=1,1?0=1,0?0=0即两数有1则为1;该指令的作用是累加器中的数或立即数,或的结果送A。
指令格式:ORL A,direct
功能:累加器逻辑或直接寻址单元指令,属于逻辑运算类指令,可表示为A?(direct)→A。字节数为2,周期数为1。
说明:该指令的作用是累加器中的数或直接寻址单元中的数,或的结果送入A。
指令格式:ORL A,Rn
功能:累加器逻辑或工作寄存器指令,属于逻辑运算类指令,可表示为A?Rn→A。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数或工作寄存器中的数,或的结果送A。
指令格式:ORL A,@Ri
功能:累加器逻辑或寄存器间址单元指令,属于逻辑运算类指令,可表示为A?(Ri)→A。字节数为1,周期数为1。
说明:该指令的作用是累加器中的数或寄存器间址单元中的数,或的结果送入A。
指令格式:ORL direct,A
功能:直接寻址单元逻辑或累加器指令,属于逻辑运算类指令,可表示为(direct)?A→(direct)。字节数为2,周期数为1。
说明:该指令的作用是直接寻址单元中的数或累加器中的数,或的结果送入直接寻址单元。
指令格式:ORL direct,#data
功能:直接寻址单元逻辑立即数指令,属于逻辑运算类指令,可表示为(direct)?data→(direct)。字节数为3,周期数为1。
说明:该指令的作用是直接寻址单元中的数或立即数,或的结果送入直接寻址单元。
9、数据传送类指令
指令格式:MOV A,#data
功能:立即数送累加器传送指令,属于数据传送类指令,可表示为data→A;字节数为2,周期数为1。
说明:data为一个8位立即数(取值范围为0到255);该指令执行后,将data送到A累加器中。
指令格式:MOV A,direct
功能:将地址为direct单元中的数据送到累加器中的传送指令,属于数据传送类指令,可表示为(direct)→A。字节数为2,周期数为1。
指令格式:MOV direct,A
功能:将累加器中的数据送到直接寻址单元中的指令,属于数据传送类指令,可表示为A→(direct);字节数为2,周期数为1。
指令格式:MOV A,Rn
功能:将寄存器中的数据送到累加器中的指令,属于数据传送类指令,可表示为Rn→A。字节数为1,周期数1。
指令格式:MOV Rn,A
功能:将累加器中的数据送到寄存器中的指令,属于数据传送类指令,可表示为Rn→A。字节数为1,周期数为1。
注意:MCS-51系列单片机为8位机,所以这里的A、Rn、direct、#data等均为8位,特殊说明的除外。
10、位操作类指令
指令格式:JB bit,rel
功能:直接寻址位为1转移指令,属于位操作类指令,可表示为bit=1,PC+3+rel=PC。字节数为3,周期数为2。
说明:该指令执行后,若bit=1则程序转移到后面的标号处去执行(在实际中rel往往用一个标号来表示);若bit=0则顺序执行下一条指令。该指令实质上是一个对位值进行判断的条件转移指令。
指令格式:JNB bit,rel
功能:直接寻址位为0转移指令,属于位操作类指令,可表示为bit=0,PC+3+rel=PC。字节数为3,周期数为2。
说明:该指令执行后,若bit=0,则程序转移到后面的标号处去执行;若bit=1,程序则顺序执行下一条指令。
指令格式:JBC bit,rel
功能:直接寻址位为1转移并清零该位指令,属于为操作指令,可表示为若bit=1,则0→bit,PC+3+rel=PC。字节数为3,周期数为2。
说明:该指令执行后,若bit=1,则将bit清零的同时,程序转移到后面的标号处去执行;若bit=0,程序则顺序执行下一条指令。
指令格式:JC rel
功能:C位为1转移指令,属于为操作类指令,可表示为C=1,PC+2+rel=PC。字节数为2,周期数为2。
说明:指令执行后,若C=1,则程序转移到后面的标号处去执行;若C=0,程序则顺序执行下一条指令。
指令格式:JNC rel
功能:C位为0转移指令,属于为操作类指令,可表示为C=0,PC+2+rel=PC。字节数为2,周期数为2。
说明:该指令执行后,若C=0,则程序转移到后面的标号处去执行;若C=1,程序则顺序执行下一条指令。
指令格式:ANL C,bit(/bit)
功能:C逻辑与直接寻址(反)指令,属于位操作类指令,可表示为Cy?(bit)(/bit)→Cy。字节数为2,周期数为2。
说明:该指令的作用是进位标志位中的数与直接寻址位中的(反)数,与的结果送入Cy。
指令格式:ORL C,bit(/bit)
功能:C逻辑或直接寻址(反)指令,属于位操作类指令,可表示为Cy?(bit)(/bit)→Cy。字节数为2,周期数为2。
说明:该指令的作用是进位标志位中的数与或接寻址位中的(反)数,或的结果送入Cy。
11、算术运算指令
指令格式:INC Rn
功能:寄存器加1指令,属于算术类指令,可表示为Rn+1→Rn。字节数为1,周期数为1。
说明:Rn为工作寄存器,其中n=0~7。该指令执行后,Rn中的值自动加1。
指令格式:INC A
功能:累加器加1指令,属于算术类指令,表示为A+1→A。字节数为1,周期数为1。
说明:该指令执行后A中的值自动加1。
指令格式:INC direct
功能:直接寻址单元加1指令,属于算术类指令,表示为direct)+1→(direct)。字节数为2,周期数为1。
说明:direct表示直接寻址单元的地址,(direct)表示这个地址单元中的内容;该指令执行后,这个地址单元中的内容自动加1。
指令格式:INC @Ri
功能:内部RAM单元加1指令,属于算数运算类指令,表示为(Ri)+1→(Ri)。字节数为1,周期数为1。
说明:i取值为0或1,所以Ri只能是R0或R1。@Ri为间接地址,即Ri中存放的数是一个地址,该指令执行后,间接地址中的内容加1。如R0中的值为20H,地址为20H单元中的值为55H,则执行INC @R0后,地址20H单元中的内容变为56H。
指令格式:INC DPTR
功能:数据指针加1指令,属于算术运算类指令,表示为DPTR+1→DPTR。字节数为1,周期数为2。
说明:DPTR为MCS-51系列单片机中唯一一个十六位特殊功能寄存器,又称数据指针;该指令执行后,DPTR中的值自动加1。
指令格式:DEC A
功能:累加器减1指令,属于算术运算类指令,表示为A-1→A。字节数为1,周期数为1。
说明:该指令执行后,A中的值自动减1。
指令格式:DEC Rn
功能:寄存器减1指令,属于算术运算类指令,表示为Rn-1→Rn。字节数为1,周期数为1。
说明:该指令执行后,Rn中的值自动减1。
指令格式:DEC direct
功能:直接寻址单元减1指令,属于算数运算类指令,表示为(direct)-1→(direct)。字节数为2,周期数为1。
说明:该指令执行后,这个地址单元中的内容自动减1。
指令格式:DEC @Ri
功能:内部RAM单元减1指令,属于算术运算类指令,表示为(Ri)-1→(Ri)。字节数为1,周期数为1。
说明:该指令执行后,间接地址中的内容减1。如R0中的值为20H,地址20H单元中的值是55H,则执行DEC @Ri后,地址单元20H单元中的内容变为54H。
指令格式:DIV AB
功能:累加器A除以寄存器B指令,属于算术运算类指令,表示A/B=A…B,字节数为1,周期数为4。
说明:无符号八位数相除,商的整数部分放在A中,商的余数部分放在B中。
指令格式:MUL AB
功能:累加器A乘以寄存器B指令,属于算术运算类指令,表示为A×B→BA;字节数为1,周期数为4。
说明:无符号八位数相乘,其十六位的积的低八位字节部分放在A中,高八位字节放在B中。
指令格式:ADD A,direct
功能:累加器加直接寻址单元指令,属于算术运算类指令,可表示为A+(direct)→A。字节数为2,周期数为1。
说明:累加器A中的内容与直接寻址单元direct中的内容相加,其和送入累加器A中。
指令格式:ADD A,#data
功能:累加器加立即数指令,属于算术运算指令,可表示为A+data→A。字节数为2,周期数为1。
说明:累加器A中的内容与寄存器Rn中的内容相加,其和送入累加器A中。
指令格式:ADD A,Rn
功能:累加器寄存器指令,属于算术运算类指令,可表示为A+Rn→A。字节数为1,周期数为1。
说明:累加器A中的内容与寄存器Rn中的内容相加,其和送入累加器A中。
指令格式:ADD A,@Ri
功能:累加器加寄存器间址单元中的内容指令,属于算术运算类指令,可表示为A+(Ri)→A。字节数为1,周期数为1。
说明:累加器A中的内容与寄存器间址单元中的内容相加,其和送入累加器A中。
指令格式:ADDC A,direct
功能:累加器加直接寻址单元和进位标志指令,属于算术运算类指令,可表示为A+(direct)+Cy→A。字节数为2,周期数为1。
说明:累加器A 中的内容与直接寻址单元direct及Cy中的内容相加,其和送入累加器A中。
指令格式:ADDC A,#data
功能:累加器加立即数和进位标志指令,属于算术运算类指令,可表示为A+data→A。字节数为2,周期数为1。
说明:累加器A中的内容与立即数data及Cy中的内容相加,其和送入累加器A中。
指令格式:ADDC A,Rn
功能:累加器加寄存器和进位标志指令,属于算术运算类指令,可表示为A+Rn+Cy→A。字节数为1,周期数为1。
说明:累加器A中的内容与寄存器Rn及Cy中的内容相加,其和送入累加器A中。
指令格式:ADDC A,@Ri
功能:累加器加寄存器间址单元中的内容和进位标志指令,属于算术运算类指令,可表示为A+Rn+Cy→A。字节数为1,周期数为1。
说明:累加器A中的内容与寄存器间址单元及Cy中的内容相加,其和送入累加器A中。
指令格式:SUBB A,direct
功能:累加器减直接寻址单元和进位标志指令,属于算术运算类指令,可表示为A-Rn-Cy→A。字节数为2,周期数为1。
说明:累加器A中的内容减直接寻址单元direct及Cy中的内容,其差送入累加器A中。
指令格式:SUBB A,#data
功能:累加器减立即数和进位标志指令,属于算术运算类指令,可表示为A-data-Cy→A。字节数为2,周期数为1。
说明:累加器A中的内容减立即数data及Cy中的内容,其差送入累加器A中。
指令格式:SUBB A,Rn
功能:累加器减寄存器和进位标志指令,属于算术运算类指令,可表示为A-Rn-Cy→A。数为1,周期数为1。
说明:累加器A中的内容减寄存器Rn及Cy中的内容,其差值送如累加器A中。
指令格式:SUBB A,@Ri
功能:累加器减寄存器间址单元中的内容和进位标志指令,属于算术运算类指令,可表示为A-(Ri)-Cy→A。字节数为1,周期数为1。
说明:累加器A中的内容减寄存器间址单元及Cy中的内容,其差值送如累加器A中。
指令格式:DA A
功能:十进制调整指令,属于算术运算类指令。字节数为1,周期数为1。
说明:将A中的二进制相加的和调整成BCD码。计算机进行二进制加法,其和也为二进制。如果是十进制加法(即BCD码相加),要得到正确的十进制的结果,就必须对和进行十进制调整(即BCD码调整)。例如:十进制的56+17=73。当用BCD码按二进制进行运算时,56H+17H=6DH,这个6DH不是正确的十进制结果;要得到正确结果,就必须对A中的6DH进行十进制调整,即DA A;此时,A中的至就自动调整成73H,即正确的和73(BCD码)。
注:以上的加、减运算指令会影响程序状态寄存器SPW的P、OV、Cy、AC四个测试标志位的值。
12、MOVX指令
MOVX指令的功能是实现片外数据存储器(或扩展I/O口)与累加器A之间的数据传送。这组指令有下面4条:
指令格式:MOVX A,@DPTR
功能:将外部数据存储器或I/O端口的数据传送到累加器A中,属于数据传送类指令,可表示为(A)←((DPTR)),字节长度为1,周期数为2。
说明:DPTR内存储16位的外部数据存储器或I/O端口的地址。
指令格式:MOVX @DPTR,A
功能:将累加器A的数据传送到外部数据存储器或I/O端口,属于数据传送类指令,可表示为((DPTR))←(A)。字节长度为1,周期数为2。
说明:DPTR内存储16位的外部数据存储器或I/O端口的地址。
指令格式:MOVX A,@Ri
功能:将外部数据存储器或I/O端口的数据传送到累加器A中,属于数据传送类指令,可表示为(A)←((Ri)),字节长度为1,周期数为2。
说明:Ri内存储8位的外部数据存储器或I/O端口的地址,i的值为0或1,只有R0与R1可以作为间接地址寄存器。
指令格式:MOVX @Ri,A
功能:将累加器A的数据送到外部数据存储器或I/O端口,属于数据传送类指令,可表示为(Ri)←((A))。字节长度为1,周期数为2。
说明:Ri内存储8位的外部数据存储器或I/O端口的地址,i的值为0或1,只有R0与R1可以作为间接地址寄存器。
注意:由于片外扩展的RAM和I/O口是统一编址的,共同使用64KB的空间,所以由指令本身看不出是对片外RAM还是扩展I/O口进行操作,而是由硬件的地址分配来定。
文章评论(0条评论)
登录后参与讨论