MCS-51指令详解
- 格式:docx
- 大小:30.54 KB
- 文档页数:37
一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。
在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。
但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。
所以现在基本上都不会直接使用机器语言来编写单片机的程序。
最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
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位地址。
MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1、ACALL addr11指令名称:绝对调用指令指令代码:{A10,A9,A8,10001},A[7:0]指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数: 2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn), n=0~7字节数: 1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数: 2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数: 2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C), n=0~7字节数: 1机器周期:1影响标志位:C,AC,OV7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数: 2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数: 2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:{A10,A9,A8,00001},A[7:0]指令功能:构造目的地址,实现程序转移。
MCS--51单片机指令一、数据传送类指令1、内部数据存储器间数据传送指令MOV A,#dataMOV A,directMOV A,RnMOV A,@RiMOV Rn,#dataMOV Rn,directMOV Rn,AMOV direct,#dataMOV direct,AMOV direct,RnMOV direct,@RiMOV direct,directMOV @Ri,#dataMOV @Ri,AMOV @Ri,direct2、以DPTR为目的的MOV DPRT,#data 163、访问片外RAMMOVX A,@DPTRMOVX A,@RiMOVX @DPTR,AMOVX @Ri,A4、访问片外ROMMOVC A,@A+DPTR ;(A) ←((A)+(DPTR))MOVC A,@A+PC ;(PC) ←(PC)+1,(A) ←((A)+(PC))5、数据交换指令XCH A,direct ;(A) ↔(direct)XCH A,@Ri ;(A) ↔((Ri))XCH A,Rn ;(A) ↔(Rn)XCHD A,@Ri ;(A3~0)↔ ((Rn)3~0)SWAP A ;(A7~4)↔ (A3~0)6、堆栈操作类指令PUSH direct ;(SP)←(SP)+1,(SP)←(direct)POP direct ;(direct)←(SP),(SP)←(SP)-1二、算术运算类指令1、加法指令ADD A,#dataADD A,directADD A,@RiADD A,Rn2、带进位加法指令ADDC A,#data ;(A)←(A)+(CY)+#dataADDC A,directADDC A,@RiADDC A,Rn3、带借位减法SUBB A,#data ;(A)←(A)-(CY)-#dataSUBB A,directSUBB A,@RiSUBB A,Rn4、加1、减1指令INC AINC directINC @RiINC RnINC DPRTDEC ADEC directDEC @RiDEC Rn5、乘、除法指令乘法指令MUL AB ;(B)←((A)×(B))15~8,(A)←((A)×(B))7~0(CY)←0除法指令DIV AB ;(A)←(A)÷(B)之商,(B)←(A)÷(B)之余数(CY)←0,(OV)←06、十进制调整指令DA A ;若(A)3~0>9或(AC)=1,则(A)3~0←(A)3~0+06H;若(A)7~4>9或(CY)=1,则(A)7~4←(A)7~4+06H三、逻辑运算及移位类指令1、逻辑“与”运算指令ANL direct,AANL direct,#dataANL A,#dataANL A,directANL A,@RiANL A,Rn2、逻辑“或”运算指令ONL direct,AONL direct,#dataONL A,#dataONL A,directONL A,@RiONL A,Rn3、逻辑“异或”运算指令XNL direct,AXNL direct,#dataXNL A,#dataXNL A,directXNL A,@RiXNL A,Rn4、累加器A清零与取反指令CLR A ;(A)←00HCPL A ;(A)←(Ᾱ)5、移位指令RL A ;(A n+1)←(A n),(A0)←(A7)RLC A ;(A n+1)←(A n),(CY)←(A7),(A0)←(CY)RR A ;(A n)←(A n+1),(A7)←(A0)RRC A ;(A n)←(A n+1),(CY)←(A0),(A7)←(CY)四、控制转移类指令1、无条件转移指令LJMP addr16AJMP addr11SJMP relJMP @A+DPTR2、条件转移指令1)累加器判零转移指令JZ rel ;若(A)=0,则跳转JNZ rel ;若(A)≠0,则跳转2)比较转移指令CJNE A,#data,relCJNE A,direct,relCJNE @Ri,#data,relCJNE Rn,#data,rel若目的操作数=源操作数,则执行下一条指令若目的操作数>源操作数,则跳转,CY=0若目的操作数<源操作数,则跳转,CY=13)减1条件转移指令DJNZ direct,rel ;(direct)←(direct)-1若(direct)=0,则执行下一条指令否则,跳转DJNZ Rn,rel ;(Rn)←(Rn)-1若(Rn)=0,则执行下一条指令否则,跳转3、子程序调用及返回指令LCALL addr16ACALL addr11RETRETI4、空操作指令NOP五、位操作类指令1、位传送指令MOV C,bitMOV bit,C2、位置位指令CLR bit ;(bit)←0CLR C ;(CY)←0SETB bit ;(bit)←1SETB C ;(CY)←13、位逻辑指令ANL C,bitANL C,/bitORL C,bitORL C,/bitCPL bitCPL C4、位条件转移指令1)、以CY内容为条件的双字节双周期转换指令JC rel;若(CY)=1,则转移否则,顺序执行JNC rel;若(CY)=0,则转移否则,顺序执行2)、以位地址内容为条件的三字节双周期转移指令JB bit,rel;若(bit)=1,则转移否则,顺序执行JNB bit,rel;若(bit)=0,则转移否则,顺序执行JBC bit,rel;若(bit)=1,则转移,(bit)←0否则,顺序执行。
MCS-51单⽚机的指令MCS-51单⽚机的指令⼀.数据传送类指令(29条).1 通⽤传送指令(16条)格式:MOV ⽬的操作数,源操作数功能:把第⼆操作数指定的字节内容传送到第⼀操作数指定的单元中。
不影响源操作数内容,不影响别的寄存器和标志。
根据⽬的操作数的不同,通⽤传送指令⼜分为以下⼏种类型:1.1 以累加器A为⽬的操作数的传送类指令(4条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式MO V A, direct ;(A)←(direct)直接寻址MO V A, @Ri ;(A)←((Ri))寄存器间接寻址MO V A, Rn ;(A)←(Rn)寄存器寻址MO A, #data ;(A)←data ⽴即寻址V这类指令的功能是将源操作数送到⽬的操作数A中。
指令执⾏后的结果:除了奇偶标志P始终跟踪A中数据的奇偶性外,不影响PSW中的其他标志位。
1.2 以Rn为⽬的操作数的传送类指令(3条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式MOVRn, A ;(Rn)←(A) 寄存器寻址MO V Rn, direct ;(Rn)←(direct)其中,Rn是R0,…,R7中的任意⼀个。
例1 若(A)=20H,则执⾏指令MOV R3, A后,(R3)=20H。
注意:Rn寄存器之间不能直接传送数据。
如指令“MOV R1, R7”是错误的。
该类指令执⾏后,不影响PSW中的标志位。
1.3. 以直接地址directX为⽬的操作数的传送类指令(5条)指令助记符及功能说明如下:⽬的操作数源操作数功能说明源操作数寻址⽅式M OV directX, A ;(directX)←(A)寄存器寻址M directX, Rn ;(directX)←寄存器寻址OV (Rn)M OV directX, directY ;(directX)←(directY)直接寻址M OV directX, @Ri ;(directX)←((Ri))寄存器间接寻址M OV directX, #data ;(directX)←data⽴即寻址这类指令的功能是把源操作数的内容送到直接地址directX中去。
MCS-51单片机汇编指令详解以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。
第二条指令中,direct 就是指的直接地址,而第三条指令中,就是我们刚才讲过的。
第四条指令是将立即数data送到A中。
下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。
MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。
MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。
如执行命令前R1中的值为20H,则是将20H单元中的值送入A 中。
MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。
以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。
其中高8位送入 DPH(083H),低8位送入DPL(082H)。
例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
MCS-51指令系统概述1. 引言MCS-51指令系统是一种被广泛使用的8位微控制器指令集架构。
它是Intel公司于1980年代开发的,旨在满足各种嵌入式系统的需求。
MCS-51指令系统提供了丰富的指令集,包括数据操作、控制流程和I/O操作等指令,可用于开发各种应用。
2. 指令格式MCS-51指令系统的指令由不同长度的操作码组成,通常包括一个或多个操作数。
以下是MCS-51指令系统的指令格式:[操作码] [操作数1] [操作数2]其中,操作码表示要执行的操作,操作数用于指定相关数据或地址。
3. 数据操作指令MCS-51指令系统提供了丰富的数据操作指令,方便对数据进行加载、存储和处理。
以下是一些常用的数据操作指令:•MOV:将一个操作数的值复制到另一个操作数。
•ADD:将两个操作数相加,并将结果存储在目标操作数中。
•SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目标操作数中。
•INC:将操作数的值加1。
•DEC:将操作数的值减1。
4. 控制流程指令MCS-51指令系统提供了各种控制流程指令,用于实现条件和无条件的控制流程。
以下是一些常用的控制流程指令:•JMP:无条件跳转到指定的地址。
•JZ:如果零标志位被设置,那么跳转到指定的地址。
•JC:如果进位标志位被设置,那么跳转到指定的地址。
•CALL:调用一个子程序,并将返回地址存储在堆栈中。
5. I/O操作指令MCS-51指令系统提供了丰富的I/O操作指令,用于控制外设设备的输入和输出。
以下是一些常用的I/O操作指令:•MOV:将一个操作数的值复制到特殊功能存放器或外设设备存放器。
•IN:将外设设备的数据读取到存放器中。
•OUT:将存放器的值输出到外设设备。
6. 中断处理MCS-51指令系统支持中断处理,用于实现实时响应和异步事件的处理。
中断处理机制允许在程序的任意位置响应外部或内部的中断请求。
通过使用中断向量表和相关中断效劳程序,可以在发生中断时自动跳转到指定的中断处理程序。
MCS-51指令详解说明:为了使MCS-51单片机初学者快速入门,迅速掌握单片机指令含意、操作码、操作数及;对应地址,汇编语言怎样编写等,现按指令操作码按顺序编写,可对照本公司编写的<<MCS-51八位高档单片计算机及其应用>>一书第145页指令手册查看,更详细资料请阅第四章 MCS-51指令系统" 及第124页指令系统摘要。
并在仿真器上装入;JJM.HEX文件,并对有关单元置数,用单步(F8)验证其正确性及其运行结果。
ORG 0000HNOP ;空操作指令AJMP L0003 ;绝对转移指令L0003: LJMP L0006 ;长调用指令L0006: RR A ;累加器A内容右移(先置A为88H)INC A ; 累加器A 内容加1INC 01H ;直接地址(字节01H)内容加1INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1;(设R0=02H,02H=03H,单步执行后02H=04H)INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1;(设R1=02H,02H=03H,单步执行后02H=04H)INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少)INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用S0019: LCALL S001C ;长调用S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0;单步执行后查A和C内容为多少)DEC A ;A的内容减1DEC 01H ;直接地址(01H)内容减1DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1DEC R0 ; R0内容减1DEC R1 ; R1内容减1DEC R2 ; R2内容减1DEC R3 ; R3内容减1DEC R4 ; R4内容减1DEC R5 ; R5内容减1DEC R6 ; R6内容减1DEC R7 ; R7内容减1JB 20H,L002D;如果位(20H,即24H的0位)为1则转移L002D: AJMP L0017 ;绝对转移RET ;子程序返回指令RL A ;A左移ADD A,#01H ;A的内容与立即数(01H)相加ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加 ADD A,R0 ; A的内容与寄存器R0的内容相加ADD A,R1 ; A的内容与寄存器R1的内容相加ADD A,R2 ; A的内容与寄存器R2的内容相加ADD A,R3 ; A的内容与寄存器R3的内容相加ADD A,R4 ; A的内容与寄存器R4的内容相加ADD A,R5 ; A的内容与寄存器R5的内容相加ADD A,R6 ; A的内容与寄存器R6的内容相加ADD A,R7 ; A的内容与寄存器R7的内容相加JNB 30H,L0041 ;直接位(30H)为0相对转移L0041: ACALL S0100 ;绝对调用RETI ;中断返回指令RLC A ;带进位位左移ADDC A,#02H ;A带进位位与立即数(#02H)相加ADDC A,02H ; A带进位位与直接地扯(02H内容)相加ADDC A,@R0 ; A带进位位与R0间扯内容相加 ADDC A,@R1 ; A带进位位与R1间扯内容相加 ADDC A,R0 ; A带进位位与R0内容相加ADDC A,R1 ; A带进位位与R1内容相加ADDC A,R2 ; A带进位位与R2内容相加ADDC A,R3 ; A带进位位与R3内容相加ADDC A,R4 ; A带进位位与R4内容相加ADDC A,R5 ; A带进位位与R5内容相加ADDC A,R6 ; A带进位位与R6内容相加ADDC A,R7 ; A带进位位与R7内容相加 JC L0095 ;进位为1转移NOPAJMP L0017 ;绝对转移ORL 02H,A ;直接地址内容与A或ORL 02H,#02H ; 直接地址内容与立即数或 ORL A,#44H ;A与立即数或ORL A,02H ; A与直接地址内容或ORL A,@R0 ; A与R0间址内容或ORL A,@R1 ; A与R1间址内容或 ORL A,R0 ; A与R0内容或ORL A,R1 ; A与R1内容或ORL A,R2 ; A与R2内容或ORL A,R3 ; A与R3内容或ORL A,R4 ; A与R4内容或ORL A,R5 ; A与R5内容或ORL A,R6 ; A与R6内容或ORL A,R7 ; A与R7内容或JNC L0017 ;进位为0转移ACALL L0017 ;绝对调用ANL 02H,A ; 直接地址与A与ANL 02H,#02H ; 立即数与直接地址与 ANL A,#02H ; A与立即数与ANL A,02H ;A与直接地址与ANL A,@R0 ; A与R0间址与ANL A,@R1 ; A与R1间址与ANL A,R0 ; A与R0与ANL A,R1 ; A与R1与 ANL A,R2 ; A与R2与 ANL A,R3 ; A与R3与 ANL A,R4 ; A与R4与 ANL A,R5 ; A与R5与 ANL A,R6 ; A与R6与 ANL A,R7 ; A与R7与 JZ L0084 ;A为零转移L0084: AJMP L0017 ;绝对转移XRL 01H,A ;直接地址与A异或XRL 02H,#01H ; 直接地址与立即数异或 XRL A,#01H ;A与立即数异或XRL A,01H ; A与直接地址异或XRL A,@R0 ; A与R0间址址异或XRL A,@R1 ; A与R1间址址异或XRL A,R0 ; A与R0异或XRL A,R1 ; A与R1异或XRL A,R2 ; A与R2异或XRL A,R3 ; A与R3异或XRL A,R4 ; A与R4异或L0095: XRL A,R5 ; A与R5异或XRL A,R6 ; A与R6异或XRL A,R7 ; A与R7异或JNZ L0084 ;A不为零转L009A: ACALL L0084 ;绝对调用ORL C,01H ;直接位或到进位JMP @A+DPTR;相对于DPTR间接转MOV A,#01H ;立即数送AMOV 01H,#02H ;立即数送直接地址 MOV @R0,#01H ;立即数送间址R0 MOV @R1,#02H ; 立即数送间址R1 MOV R0,#01H ; 立即数送R0MOV R1,#01H ; 立即数送R1MOV R2,#01H ; 立即数送R2MOV R3,#01H ; 立即数送R3MOV R4,#01H ; 立即数送R4MOV R5,#01H ; 立即数送R5MOV R6,#01H ; 立即数送R6MOV R7,#01H ; 立即数送R7SJMP L00BA ;短转移L00BA: AJMP L0095 ;绝对转移ANL C,02H ;直接地址与进位与ORG 00C0H ;MOV 02H,01H ;直接地址送直接地址 MOV 01H,@R0;间址R0送直接地址MOV 01H,@R1; 间址R1送直接地址 MOV 01H,R0 ; R0送直接地址MOV 01H,R1 ; R1送直接地址MOV 01H,R2 ; R2送直接地址MOV 01H,R3 ; R3送直接地址MOV 01H,R4 ; R4送直接地址MOV 01H,R5 ; R5送直接地址MOV 01H,R6 ; R6送直接地址MOV 01H,R7 ; R7送直接地址NOPMOV DPTR,#1234H;建立数据指针地址为1234HACALL L00BA ;绝对调用MOV 03H,C ;进位送03H位(即20H的03位)MOVC A,@A+DPTR ;由A+DPTR寻扯的程序存贮器字节送A SUBB A,#01H ;A减去立即数和进位位SUBB A,02H ; A减去直接地址内容和进位位SUBB A,@R0 ; A减去R0间接RAM和进位位SUBB A,@R1 ; A减去R1间接RAM和进位位SUBB A,R0 ; A减去R0和进位位 SUBB A,R1 ; A减去R1和进位位 SUBB A,R2 ; A减去R2和进位位 SUBB A,R3 ; A减去R3和进位位 SUBB A,R4 ; A减去R4和进位位 SUBB A,R5 ; A减去R5和进位位 SUBB A,R6 ; A减去R6和进位位 SUBB A,R7 ; A减去R7和进位位 ORL C,/00H ;直接位的反或到进位AJMP L0084 ;绝对转移MOV C,03H ;直接位数送进位INC DPTR ;数据指针加1MUL AB ;A乘以BNOP ;A5H为二字节空操作指令NOPMOV @R0,05H ;直接字芯送R0间接RAM MOV @R1,05H ; 直接字芯送R1间接RAM MOV R0,05H ; 直接字芯送R0MOV R1,05H ; 直接字芯送R1S0100: MOV R2,05H ; 直接字芯送R2 MOV R3,05H ; 直接字芯送R3MOV R4,05H ; 直接字芯送R4MOV R5,05H ; 直接字芯送R5MOV R6,05H ; 直接字芯送R6MOV R7,05H ; 直接字芯送R7ANL C,/04H ; 直接位的反与到进位 ACALL S0100 ;绝对调用CPL 04H ;直接位取反CPL C ;进位取反CJNE A,#01H,L0139 ;立即数与A比较,不相等则转移CJNE A,01H,L0139 ; 直接字节与A比较,不相等则转移CJNE @R0,#01H,L0139 ; 立即数与R0间接RAM比较,不相等则转移 CJNE @R1,#01H,L0139 ; 立即数与R1间接RAM比较,不相等则转移 CJNE R0,#01H,L0139 ; 立即数与R0比较,不相等则转移CJNE R1,#01H,L0139 ; 立即数与R1比较,不相等则转移CJNE R2,#01H,L0139 ; 立即数与R2比较,不相等则转移CJNE R3,#01H,L0139 ; 立即数与R3比较,不相等则转移 CJNE R4,#01H,L0139 ; 立即数与R4比较,不相等则转移 CJNE R5,#01H,L0139 ; 立即数与R5比较,不相等则转移 CJNE R6,#01H,L0139 ; 立即数与R6比较,不相等则转移 CJNE R7,#01H,L0139 ; 立即数与R7比较,不相等则转移 PUSH 00H ;直接字节进栈,SP加1L0139: AJMP L0084 ;绝对转移CLR 04H ;直接位清零CLR C ;清零进位SWAP A ;A左环移四位(A的二个半字节交换) XCH A,05H ;交换A和直接字节XCH A,@R0 ; 交换A和R0间接RAMXCH A,@R1 ; 交换A和R1间接RAMXCH A,R0 ; 交换A和R0XCH A,R1 ; 交换A和R1XCH A,R2 ; 交换A和R2XCH A,R3 ; 交换A和R3XCH A,R4 ; 交换A和R4XCH A,R5 ; 交换A和R5XCH A,R6 ; 交换A和R6XCH A,R7 ; 交换A和R7POP 00H ;直接字节出栈,SP减1ACALL L0139 ;绝对调用SETB 03H ;置位直接位SETB C ;置位进位DA A ;A的十进制加法调熊DJNZ 01H,L0139 ;直接字节减1,不为零则转移XCHD A,@R0 ;交换A和R0间接RAM的低4位 XCHD A,@R1 ; 交换A和R1间接RAM的低4位L0158: DJNZ R0,L0139 ; R0减1,不为零则转移 DJNZ R1,L0158 ; R1减1,不为零则转移DJNZ R2,L0158 ; R2减1,不为零则转移DJNZ R3,L0158 ; R3减1,不为零则转移DJNZ R4,L0158 ; R4减1,不为零则转移DJNZ R5,L0158 ; R5减1,不为零则转移DJNZ R6,L0158 ; R6减1,不为零则转移DJNZ R7,L0158 ; R7减1,不为零则转移MOVX A,@DPTR ;外部数据(16位地址)送AL0169: NOPAJMP L0139 ;绝对转移MOVX A,@R0 ;R0间址即外部数据(8位地址)送A MOVX A,@R1 ; R1间址即外部数据(8位地址)送A CLR A ;清零AMOV A,05H ;直接字节送AMOV A,@R0 ;R0间接RAM送AMOV A,@R1 ; R1间接RAM送A MOV A,R0 ; R0送AMOV A,R1 ; R1送AMOV A,R2 ; R2送AMOV A,R3 ; R3送AMOV A,R4 ; R4送AMOV A,R5 ; R5送AMOV A,R6 ; R6送AMOV A,R7 ; R7送AMOVX @DPTR,A ;A送外部数据(16位地址)NOPACALL L0169 ;绝对调用MOVX @R0,A ;A送R0间址即外部数据(8位地址) MOVX @R1,A ; A送R1间址即外部数据(8位地址) CPL A ;A取反MOV 05H,A ;A送直接字节MOV @R0,A ; A送R0间址即间接RAMMOV @R1,A ; A送R1间址即间接RAMMOV R0,A ; A送R0 MOV R1,A ; A送R1 MOV R2,A ; A送R2 MOV R3,A ; A送R3 MOV R4,A ; A送R4 MOV R5,A ; A送R5 MOV R6,A ; A送R6 MOV R7,A ; A送R7 END1的汇编控制指令详细列表8051 INSTRUCTION SET1.Arithmetic operations:Mnemonic Byte Cyc ADD A,@Ri 1 1ADD A,Rn 1 1ADD A,direct 2 1ADD A,#data 2 1ADDC A,@Ri 1 1ADDC A,Rn 1 1ADDC A,direct 2 1 8051的汇编控制指令,占用字节,执行周期列表2.Logical opreations:ANL A,@Ri 1 1XRL A,@Ri 1 1ANL A,Rn 1 1XRL A,Rn 1 1ANL A,direct 2 1XRL A,direct 2 1ANL A,#data 2 1XRL A,#data 2 1ANL direct,A 2 1ADDC A,#data 2 1 SUBB A,@Ri 1 1 SUBB A,Rn 1 1SUBB A,direct 2 1 SUBB A,#data 2 1 INC A 1 1INC @Ri 1 1INC Rn 1 1INC DPTR 1 1INC direct 2 1INC direct 2 1DEC A 1 1DEC @Ri 1 1 XRL direct,A 2 1 ANL direct,#data 3 2 XRL direct,#data 3 2 ORL A,@Ri 1 1CLR A 1 1ORL A,Rn 1 1CPL A 1 1ORL A,direct 2 1RL A 1 1ORL A,#data 2 1RLC A 1 1ORL direct,A 2 1RR A 1 1DEC Rn 1 1DEC direct 2 1MUL AB 1 4DIV AB 1 4DA A 1 18051的汇编控制指令,占用字节,执行周期列表3.Data transfer:Mnemonic Byte CycMOV A,@Ri 1 1MOV DPTR,#data16 3 2MOV A,Rn 1 1 ORL direct,#data 3 2RRC A 1 1SWAP A 1 18051的汇编控制指令,占用字节,执行周期列表4.Boolean variable manipulation:Mnemonic Byte CycCLR C 1 1ANL C,bit 2 2SETB C 1 1ANL C,/bit 2 2CPL C 1 1ORL C,bit 2 2MOVC A,@A+DPTR 1 2MOV A,direct 2 1MOVC A,@A+PC 1 2 MOV A,#data 2 1MOVX A,@Ri 1 2MOV @Ri,A 1 1MOVX A,@DPTR 1 2 MOV @Ri,direct 2 2MOVX @Ri,A 1 2MOV @Ri,#data 2 1MOVX @DPTR,A 1 2 MOV Rn,A 1 1PUSH direct 2 2 CLR bit 2 1ORL C,/bit 2 2SETB bit 2 1MOV C,bit 2 1CPL bit 2 1MOV bit,C 2 28051的汇编控制指令,占用字节,执行周期列表5.Program and machine control:Mnemonic Byte CycNOP 1 1JZ rel 2 2MOV Rn,direct 2 2POP direct 2 2MOV Rn,#data 2 1 XCH A,@Ri 1 1MOV direct,A 2 1XCH A,Rn 1 1MOV direct,@Ri 2 2XCH A,direct 2 1MOV direct,Rn 2 2XCHD A,@Ri 1 1MOV direct,direct 3 2 MOV direct,#data 3 2 RET 1 2JNZ rel 2 2RETI 1 2JC rel 2 2ACALL addr11 2 2 JNC rel 2 2AJMP addr11 2 2JB bit,rel 3 2LCALL addr16 3 2 JNB bit,rel 3 2LJMP addr16 3 2 JBC bit,rel 3 2SJMP rel 2 2CJNE A,direct,rel 3 2JMP @A+DPTR 1 2 CJNE A,#data,rel 3 2DJNZ Rn,rel 2 2CJNE @Ri,#data,rel 3 2DJNZ direct,rel 3 2CJNE Rn,#data,rel 3 2。