一个单片机所需履行指令的调集即为单片机的指令系统。单片机运用的机器言语、汇编言语及高档言语,但不论运用是何种言语,终究仍是要“翻译”成为机器码,单片机才干履行之。现在有许多半导体厂商都推出了自己的单片机,单片机种类繁复,种类不计其数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。但不论是运用机器言语、汇编言语仍是高档言语都是运用指令编写程序的。 所谓机器言语即指令的二进制编码,而汇编言语则是指令的标明符号 。在指令的表达式上也不会直接运用二进制机器码,最常用的是十六进制的办法。但单片机并不能直接履行汇编言语和高档言语,都有必要经过汇编器“翻译”成为二进制机器码方能履行,但假设直接运用二进制来编写程序,那将非常不便利,也很难回忆和辨认,不易编写、难于辨读,极易犯错,一同犯错了也适当难查找。所以现在基本上都不会直接运用机器言语来编写单片机的程序。最好的办法便是运用易于阅览和辨认的指令符号来替代机器码,咱们常称这些符号为助记符,用助记符的办法标明的单片机指令便是汇编言语,为便于回忆和阅览,助记符号一般都运用易于了解的英文单词和拼音字母来标明。 每种单片机都有自己共同的指令系统,那么指令系统是开发和出产厂商界说的,如要运用其单片机,用户就有必要了解和遵从这些指令规范,要把握某种(类)单片机,指令系统的学习是有必要的。 MCS-51共有111条指令,可分为5类: [1].数据传送类指令(共29条) [2].管用运算类指令(共24条) [3].逻辑运算及移位类指令(共24条) [4].操控搬运类指令(共17条) [5].布尔变量操作类指令(共17条) 一些特别符号的含义 在介绍指令系统前,咱们先了解一些特别符号的含义,这对往后程序的编写都是适当有用的。 Rn——当时选中的寄存器区的8个作业寄存器R0—R7(n=0-7)。 Ri——当时选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1) direct—内部数据存储单元的8位地址。包括0—127(255)内部存储单元地址和特别功用寄存地址。 #data—指令中的8位常数。 #data16—指令中的16位常数。 addr16—用于LCALL和LJMP指令中的16意图地地址,意图地址的空间为64kB程序存储器地址。 #addr11—用于ACALL和AJMP指令中的11意图地地址,意图地址有必要放在与下条指令第一个字节同一个2kB程序存储器空间之中。 rel—8位带符号的偏移字节,用于一切的条件搬运和SJMP等指令中,偏移字节关于下条指令的第一个字节开端的-128——+127规模内。 @—直接寄存器寻址或基址寄存器的前缀。 /—为操作的前缀,声明对该位操作书取反。 DPTR—数据指针。 bit—内部RAM和特别功用寄存器的直接寻址位。 A—累加器。 B—累加器B。用于乘法和除法指令中。 C—进位标志位。 (x)—某地址单元中的内容。 ((x))—由X寻址单元中的内容。 MCS-51的寻址办法 寻址的“地址”即为操作数地点单元的地址,绝大部分指令履行时都需求用到操作数,那么到哪里去获得操作数呢?最易想到的便是告知CPU操作数地点的地址单元,从那里可获得呼应的操作数,这便是“寻址”之意。MCS-51的寻址办法许多,运用起来也适当便利,功用也很强壮,灵活性强。这便是MCS-51指令系统“好用”的原因之一。下面咱们别离评论几种寻址办法的原理。 [1].直接寻址 指令中操作数直接以单元地址办法呈现,例如: MOV A,68H 这条指令的含义是把内部RAM中的68H单元中的数据内容传送到累加器A中。值得注意的是直接寻址办法只能运用8位二进制地址,因而这种寻址办法仅限于内部RAM进行寻址。低128位单元在指令中直接以单元地址的办法给出。关于特别功用寄存器能够运用其直接地址进行拜访,还能够以它们的符号办法给出,仅仅特别功用寄存器只能用直接寻址办法拜访,而无其它办法。 [2].寄存器寻址 寄存器寻址对选定的8个作业寄存器R0-R7进行操作,也便是操作数在寄存器中,因而指定了寄存器就得到了操作数,寄存器寻址的指令中以寄存器的符号来标明寄存器,例如: MOV A,R1 这条指令的含义是把所用的作业寄存器组中的R3的内容送到累加器A中。 值得一提的是作业状况寄存器的挑选是经过程序状况字寄存器来操控的,在这条指令前,应经过PSW设定当时作业寄存器组。 [3].寄存器直接寻址 寄存器寻址办法,寄存器中寄存的是操作数,而寄存器直接寻址办法,寄存器中寄存的则为操作数的地址,也即操作数是经过寄存器指向的地址单元得到的,这便是寄存器直接寻址称号的由来。 例如指令: MOV A,@R0 这条指令的含义是R0寄存器指向地址单元中的内容送到累加器A中。假设R0=#56H,那么是将56H单元中的数据送到累加器A中。 寄存器直接寻址办法可用于拜访内部RAM或外部数据存储器。拜访内部RAM或外部数据存储器的低256字节时,可经过R0和R1作为直接寄存器。但是有必要指出,内部RAM的高128字节地址与专用积存器的地址是堆叠的,所以这种寻址办法不能用于拜访特别功用寄存器。 外部数据存储器的空间为64kB,这时可选用DPTR作为间址寄存器进行拜访,指令如下: MOVX A,@DPTR 这条指令的含义是与上述相似,不再赘述。 [4].当即寻址 当即寻址便是把操作数直接在指令中给出,即操作数包括在指令中,指令操作码的后边紧跟着操作数,一般把指令中的操作数称为当即数,因而而得名。为了与直接寻址办法相差异,在当即数前加上“#”符号,例如: MOVX A,#0EH 这条指令的含义是将0EH这个操作数送到累加器A中。 [5].变址寻址 变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加构成16位地址构成操作数的实践地址。例如: MOV A,@A+DPTR MOVX A,@A+PC JMP @A+DPTR 在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到拜访的实践地址。其间前两条是程序存储器读指令,后一条是无条件搬运指令。 [6].位寻址 在MCS-51单片机中,RAM中的20H—2FH字节单元对应的位地址为00H—7FH,特别功用寄存器中的某些位也可进行为寻址,这些单元既能够选用字节办法拜访它们,也可选用位寻址的办法拜访它们。 [7].相对寻址 相对寻址办法是为了程序的相对搬运而规划的,其夜里是以PC的内容为基址,加上给出的偏移量作为搬运地址,然后完成程序的搬运。搬运的意图地址可拜见如下表达式: 意图地址=搬运指令地址+搬运指令字接数+偏移量 值得注意的是,偏移量是有正负号之分的,偏移量的取值规模是当时PC值的-128—+127之间。 MCS-51数据传送指令 数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到意图操作数,指令履行完成后,源操作数不变,意图操作数等于源操作数。假设要求在进行数据传送时,意图操作数不丢掉,则不能用直接传送指令,而选用交流型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。 [1]. 以累加器A为意图操作数类指令(4条) 这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、当即数、寄存器和寄存器直接寻址办法: MOV A,data ;(data)→(A) 直接单元地址中的内容送到累加器A MOV A,#data ;#data→(A) 当即数送到累加器A中 MOV A,Rn ;(Rn)→(A) Rn中的内容送到累加器A中 MOV A,@Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A [2]. 以寄存器Rn为意图操作数的指令(3条) 这3条指令的功用是把源操作数指定的内容送到所选定的作业寄存器Rn中。有直接、当即和寄存器寻址办法: MOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 MOV Rn,#data ;#data→(Rn) 当即数直接送到寄存器Rn中 MOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中 [3]. 以直接地址为意图操作数的指令(5条) 这组指令的功用是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、当即、寄存器和寄存器直接4种寻址办法: MOV data,data ;(data)→(data) 直接地址单元中的内容送到直接地址单元 MOV data,#data ;#data→(data) 当即数送到直接地址单元 MOV data,A ;(A)→(data) 累加器A中的内容送到直接地址单元 MOV data,Rn ;(Rn)→(data) 寄存器Rn中的内容送到直接地址单元 MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元 [4]. 以直接地址为意图操作数的指令(3条) 这组指令的功用是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、当即和寄存器3种寻址办法: MOV @Ri,data ;(data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元 MOV @Ri,#data ;#data→((Ri)) 当即数送到以Ri中的内容为地址的RAM单元 MOV @Ri,A ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元 [5]. 查表指令(2条) 这组指令的功用是对寄存于程序存储器中的数据表格进行查找传送,运用变址寻址办法: MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中 MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中 [6]. 累加器A与片外数据存储器RAM传送指令(4条) 这4条指令的作用是累加器A与片外RAM间的数据传送。运用寄存器寻址办法: MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中 MOVX A, @DPTR ;((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中 MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中 MOVX @Ri,A ;(A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中 [7]. 仓库操作类指令(2条) 这4类指令的作用是把直接寻址单元的内容传送到仓库指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只要两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。需求指出的是,单片机开机复位后,(SP)默以为07H,但一般都需求从头赋值,设置新的SP首址。入栈的第一个数据有必要寄存于SP+1所指存储单元,故实践的仓库底为SP+1所指的存储单元。 PUSH data ;(SP)+1→(SP),(data)→(SP) 仓库指针首要加1,直接寻址单元中的数据送到仓库指针SP所指的单元中 POP data ;(SP)→(data)(SP)-1→(SP), 仓库指针SP所指的单元数据送到直接寻址单元中,仓库指针SP再进行减1操作 [8]. 交流指令(5条) 这5条指令的功用是把累加器A中的内容与源操作数所指的数据相互交流。 XCH A,Rn ;(A)←→(Rn)累加器与作业寄存器Rn中的内容交流 XCH A,@Ri ;(A)←→((Ri))累加器与作业寄存器Ri所指的存储单元中的内容交流 XCH A,data ;(A)←→(data)累加器与直接地址单元中的内容交流 XCHD A,@Ri ;(A3-0)←→((Ri)3-0)累加器与作业寄存器Ri所指的存储单元中的内容低半字节交流 SWAP A ;(A3-0)←→(A7-4)累加器中的内容凹凸半字节交流 [9]. 16位数据传送指令(1条) 这条指令的功用是把16位常数送入数据指针寄存器。 MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL MCS-51算术运算指令 算术运算指令共有24条,算术运算主要是履行加、减、乘、除法四则运算。别的MCS-51指令系统中有适当一部分是进行加、减1操作,BCD码的运算和调整,咱们都归类为运算指令。尽管MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但运用进位标志C,则可进行多字节无符号整数的运算。一同运用溢出标志,还能够对带符号数进行补码运算。需求指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状况字)有影响。这在运用中应特别注意。 [1]. 加法指令(4条) 这4条指令的作用是把当即数,直接地址、作业寄存器及直接地址内容与累加器A的内容相加,运算成果存在A中。 ADD A,#data ;(A)+#data→(A) 累加器A中的内容与当即数#data相加,成果存在A中 ADD A,data ;(A)+(data)→(A) 累加器A中的内容与直接地址单元中的内容相加,成果存在A中 ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的内容与作业寄存器Rn中的内容相加,成果存在A中 ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的内容与作业寄存器Ri所指向地址单元中的内容相加,成果存在A中 [2]. 带进位加法指令(4条) 这4条指令除与[1]功用相同外,在进行加法运算时还需考虑进位问题。 ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的内容与直接地址单元的内容连同进位位相加,成果存在A中 ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的内容与当即数连同进位位相加,成果存在A中 ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的内容与作业寄存器Rn中的内容、连同进位位相加,成果存在A中 ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的内容与作业寄存器Ri指向地址单元中的内容、连同进位位相加,成果存在A中 [3]. 带借位减法指令(4条) 这组指令包括当即数、直接地址、直接地址及作业寄存器与累加器A连同借位位C内容相减,成果送回累加器A中。
这儿咱们对借位位C的状况作出阐明,在进行减法运算中,CY=1标明有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数成果为负数,或许从一个负数中减去一个正数成果为正数的过错状况。在进行减法运算前,假设不知道借位标志位C的状况,则应先对CY进行清零操作。 SUBB A,data ;(A)-(data) – (C)→(A) 累加器A中的内容与直接地址单元中的内容、连同借位位相减,成果存在A中 SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的内容与当即数、连同借位位相减,成果存在A中 SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的内容与作业寄存器中的内容、连同借位位相减,成果存在A中 SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的内容与作业寄存器Ri指向的地址单元中的内容、连同借位位相减,成果存在A中 [4]. 乘法指令(1条) 这个指令的作用是把累加器A和寄存器B中的8位无符号数相乘,所得到的是16位乘积,这个成果低8位存在累加器A,而高8位存在寄存器B中。假设OV=1,阐明乘积大于FFH,不然OV=0,但进位标志位CY总是等于0。 MUL AB ;(A)×(B)→(A)和(B) 累加器A中的内容与寄存器B中的内容相乘,成果存在A、B中 [5]. 除法指令(1条) 这个指令的作用是把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。除法运算总是使OV和进位标志位CY等于0。假设OV=1,标明寄存器B中的内容为00H,那么履行成果为不确定值,标明除法有溢出。 DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的内容除以寄存器B中的内容,所得到的商存在累加器A,而余数存在寄存器B中。 [6]. 加1指令(5条) 这5条指令的的功用均为原寄存器的内容加1,成果送回原寄存器。上述说到,加1指令不会对任何标志有影响,假设原寄存器的内容为FFH,履行加1后,成果就会是00H。这组指令共有直接、寄存器、寄存器减间址等寻址办法: INC A ;(A)+1→(A) 累加器A中的内容加1,成果存在A中 INC data ;(data)+1→(data) 直接地址单元中的内容加1,成果送回原地址单元中 INC @Ri ;((Ri))+1→((Ri)) 寄存器的内容指向的地址单元中的内容加1,成果送回原地址单元中 INC Rn ;(Rn)+1→(Rn)寄存器Rn的内容加1,成果送回原地址单元中 INC DPTR ;(DPTR)+1→(DPTR)数据指针的内容加1,成果送回数据指针中 在INC data这条指令中,假设直接地址是I/O,其功用是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这便是“读—批改—写”操作。 [7]. 减1指令(4条) 这组指令的作用是把所指的寄存器内容减1,成果送回原寄存器,若原寄存器的内容为00H,减1后即为FFH,运算成果不影响任何标志位,这组指令共有直接、寄存器、寄存器间址等寻址办法,当直接地址是I/O口锁存器时,“读—批改—写”操作与加1指令相似。 DEC A ;(A)-1→(A)累加器A中的内容减1,成果送回累加器A中 DEC data ;(data)-1→(data)直接地址单元中的内容减1,成果送回直接地址单元中 DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址单元中的内容减1,成果送回原地址单元中 DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的内容减1,成果送回寄存器Rn中 [8]. 十进制调整指令(1条) 在进行BCD码运算时,这条指令总是跟在ADD或ADDC指令之后,其功用是将履行加法运算后存于累加器A中的成果进行调整和批改。 DA A MCS-51逻辑运算及移位指令 逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址办法。这类指令一般不影响程序状况字(PSW)标志。 [1]. 循环移位指令(4条) 这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一同移位。 RL A ;累加器A中的内容左移一位 RR A ;累加器A中的内容右移一位 RLC A ;累加器A中的内容连同进位位CY左移一位 RRC A ;累加器A中的内容连同进位位CY右移一位 [2]. 累加器半字节交流指令(1条) 这条指令是将累加器中的内容凹凸半字节交流,这在上一节中内容已有介绍。 SWAP A ; 累加器中的内容凹凸半字节交流 [3]. 求反指令(1条) 这条指令将累加器中的内容按位取反。 CPL A ; 累加器中的内容按位取反 [4]. 清零指令(1条) 这条指令将累加器中的内容清0。 CLR A ; 0→(A),累加器中的内容清0 [5]. 逻辑与操作指令(6条) 这组指令的作用是将两个单元中的内容履行逻辑与操作。假设直接地址是I/O地址,则为“读—批改—写”操作。 ANL A,data ;累加器A中的内容和直接地址单元中的内容履行与逻辑操作。成果存在寄存器A中。 ANL data,#data ;直接地址单元中的内容和当即数履行与逻辑操作。成果存在直接地址单元中。 ANL A,#data ;累加器A的内容和当即数履行与逻辑操作。成果存在累加器A中。 ANL A,Rn ;累加器A的内容和寄存器Rn中的内容履行与逻辑操作。成果存在累加器A中。 ANL data,A ;直接地址单元中的内容和累加器A的内容履行与逻辑操作。成果存在直接地址单元中。 ANL A,@Ri ;累加器A的内容和作业寄存器Ri指向的地址单元中的内容履行与逻辑操作。成果存在累加器A中。 [6]. 逻辑或操作指令(6条) 这组指令的作用是将两个单元中的内容履行逻辑或操作。假设直接地址是I/O地址,则为“读—批改—写”操作。 ORL A,data ;累加器A中的内容和直接地址单元中的内容履行逻辑或操作。成果存在寄存器A中。 ORL data,#data ;直接地址单元中的内容和当即数履行逻辑或操作。成果存在直接地址单元中。 ORL A,#data ;累加器A的内容和当即数履行逻辑或操作。成果存在累加器A中。 ORL A,Rn ;累加器A的内容和寄存器Rn中的内容履行逻辑或操作。成果存在累加器A中。 ORL data,A ;直接地址单元中的内容和累加器A的内容履行逻辑或操作。成果存在直接地址单元中。 ORL A,@Ri ;累加器A的内容和作业寄存器Ri指向的地址单元中的内容履行逻辑或操作。成果存在累加器A中。 [7]. 逻辑异或操作指令(6条) 这组指令的作用是将两个单元中的内容履行逻辑异或操作。假设直接地址是I/O地址,则为“读—批改—写”操作。 XRL A,data ;累加器A中的内容和直接地址单元中的内容履行逻辑异或操作。成果存在寄存器A中。 XRL data,#data ;直接地址单元中的内容和当即数履行逻辑异或操作。成果存在直接地址单元中。 XRL A,#data ;累加器A的内容和当即数履行逻辑异或操作。成果存在累加器A中。 XRL A,Rn ;累加器A的内容和寄存器Rn中的内容履行逻辑异或操作。成果存在累加器A中。 XRL data,A ;直接地址单元中的内容和累加器A的内容履行逻辑异或操作。成果存在直接地址单元中。 XRL A,@Ri ;累加器A的内容和作业寄存器Ri指向的地址单元中的内容履行逻辑异或操作。成果存在累加器A中。 MCS-51操控搬运指令
操控搬运指令用于操控程序的流向,所操控的规模即为程序存储器区间,MCS-51系列单片机的操控搬运指令相对丰厚,有可对64kB程序空间地址单元进行拜访的长调用、长搬运指令,也有可对2kB字节进行拜访的肯定调用和肯定搬运指令,还有在一页规模内短相对搬运及其它无条件搬运指令,这些指令的履行一般都不会对标志位有影响。 [1]. 无条件搬运指令(4条) 这组指令履行完后,程序就会无条件搬运到指令所指向的地址上去。长搬运指令拜访的程序存储器空间为16地址64kB,肯定搬运指令拜访的程序存储器空间为11位地址2kB空间。 LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址) AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改动 SJMP rel ;(PC)+ 2 + rel→(PC)当时程序计数器先加上2再加上偏移量给程序计数器赋予新值 JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值 [2]. 条件搬运指令(8条) 程序可运用这组丰厚的指令依据当时的条件进行判别,看是否满意某种特定的条件,然后操控程序的转向。 JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则搬运到偏移量所指向的地址,不然程序往下履行 JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则搬运到偏移量所指向的地址,不然程序往下履行 CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则搬运到偏移量所指向的地址,不然程序往下履行 CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于当即数,则搬运到偏移量所指向的地址,不然程序往下履行 CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),作业寄存器Rn中的内容不等于当即数,则搬运到偏移量所指向的地址,不然程序往下履行 CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),作业寄存器Ri指向地址单元中的内容不等于当即数,则搬运到偏移量所指向的地址,不然程序往下履行 DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)作业寄存器Rn减1不等于0,则搬运到偏移量所指向的地址,不然程序往下履行 DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则搬运到偏移量所指向的地址,不然程序往下履行 [3]. 子程序调用指令(1条) 子程序是为了便于程序编写,削减那些需重复履行的程序占用剩余的地址空间而引进的程序分支,然后有了主程序和子程序的概念,需求重复履行的一些程序,咱们在编程时一般都把它们编写成子程序,当需求用它们时,就用一个调用指令使程序按调用的地址去履行,这就需求子程序的调用指令和回来指令。 LCALL addr16 ; 长调用指令,可在64kB空间调用子程序。此刻(PC)+ 3→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr16→(PC),即别离从仓库中弹出调用子程序时压入的回来地址 ACALL addr11 ; 肯定调用指令,可在2kB空间调用子程序,此刻(PC)+ 2→(PC),(SP)+ 1→(SP),(PC7-0)→(SP),(SP)+ 1→(SP),(PC15-8)→(SP),addr11→(PC10-0) RET ; 子程序回来指令。此刻(SP)→(PC15-8),(SP)- 1→(SP),(SP)→(PC7-0),(SP)- 1→(SP) RETI ; 中止回来指令,除具有RET功用外,还具有康复中止逻辑的功用,需注意的是,RETI指令不能用RET替代 [4]. 空操作指令(1条) 这条指令将累加器中的内容清0。 NOP ; 这条指令除了使PC加1,耗费一个机器周期外,没有履行任何操作。可用于短时间的延时 MCS-51布尔变量操作指令 布尔处理功用是MCS-51系列单片机的一个重要特征,这是出于实践使用需求而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。 在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。 已然有布尔处理机功用,所以也就有相应的布尔操作指令集,下面咱们别离议论。 [1]. 位传送指令(2条) 位传送指令便是可寻址位与累加位CY之间的传送,指令有两条。 MOV C,bit ;bit→CY,某位数据送CY MOV bit,C ;CY→bit,CY数据送某位 [2]. 方位位复位指令(4条) 这些指令对CY及可寻址位进行置位或复位操作,共有四条指令。 CLR C ; 0→CY,清CY CLR bit ; 0→bit,清某一位 SETB C ; 1→CY,置位CY SETB bit ; 1→bit,置位某一位 [3]. 位运算指令(6条) 位运算都是逻辑运算,有与、或、非三种指令,共六条。 ANL C,bit ;(CY)∧(bit)→CY ANL C,/bit ;(CY)∧()→CY ORL C,bit ;(CY)∨(bit)→CY ORL C,/bit ;(CY)∧()→CY CPL C ;()→CY CPL bit ;()→bir [4]. 位操控搬运指令(5) 位操控搬运指令是以位的状况作为完成程序搬运的判别条件,介绍如下: JC rel ; (CY)=1搬运,(PC)+2+rel→PC,不然程序往下履行,(PC)+2→PC。
JNC rel ; (CY)=0搬运,(PC)+2+rel→PC,不然程序往下履行,(PC)+2→PC。 JB bit, rel ; 位状况为1搬运。 JNB bit, rel ; 位状况为0搬运。 JBC bit, rel ; 位状况为1搬运,并使该位清“0”。 后三条指令都是三字节指令,假设条件满意,(PC)+3+rel→PC,不然程序往下履行,(PC)+3→PC。 |
51单片机汇编根底
一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要翻译成…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/272615.html