51单片机(宏汇编)指令集5

合集下载

51单片机汇编语言指令集

51单片机汇编语言指令集

51汇编语言指令集符号定义表符号含义Rn R0~R7寄存器n=0~7Direct 直接地址,内部数据区的地址RAM(00H~7FH)SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数#data16 16位常数Addr16 16位的目标地址Addr11 11位的目标地址Rel 相关地址bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位指令介绍指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。

51单片机汇编指令详解

51单片机汇编指令详解

51单片机汇编指令详解mcs-51系列单片机指令目录:1、a2、x3、r4、s5、n6、o7、p8、m9、j10、l11、d12、i13、c一、以a结尾的指令存有18条,分别为:acalladdr11adda,rnadda,directadda,@riadda,#dataaddca,rnaddca,directaddca,@riaddca,#dataajmpaddr11anla,rnanla,directanla,@rianla,#dataanldirect,aanldirect,#dataanlc,bitanlc,/bit1、acalladdr11指令名称:绝对调用指令指令代码:{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、adda,rn指令名称:寄存器乘法指令指令代码:28h~2fh指令功能:累加器内容与寄存器内容相加操作内容:a←(a)+(rn),n=0~7字节数:1机器周期;1影响标志位:c,ac,ov3、adda,direct指令名称:轻易串行乘法指令指令代码:25h指令功能:累加器内容与内部ram单元或专用寄存器内容相加操作内容:a←(a)+(direct)字节数:2机器周期:1影响标志位:c,ac,ov4、adda,@ri指令名称:间接串行乘法指令指令代码:26h~27h指令功能:累加器内容与内部ram高128单元内容相乘操作方式内容:a←(a)+((ri)),i=0,1字节数:1机器周期:1影响标志位:c,ac,ov5、adda,#data指令名称:立即数加法指令指令代码:24h指令功能:累加器内容与立即数相乘操作方式内容:a←(a)+data字节数:2机器周期:1影响标志位:c,ac,ov6、addca,rn指令名称:寄存器带进位加法指令指令代码:38h~3fh指令功能:累加器内容、寄存器内容和位次位相乘操作方式内容:a←(a)+(rn)+(c),n =0~7字节数:1机器周期:1影响标志位:c,ac,ov7、addca,direct指令名称:直接寻址带进位加法指令指令代码:35h指令功能:累加器内容、内部ram高128单元或专用寄存器内容与位次位加操作内容:a←(a)+(direct)+(c)字节数:2机器周期:1影响标志位:c,ac,ov8、addca,@ri指令名称:间接串行拎位次乘法指令指令代码:36h~37h指令功能:累加器内容、内部ram低128单元内容及进位位相加操作方式内容:a←(a)+((ri))+(c),i=0,1字节数:1机器周期:1影响标志位:c,ac,ov9、addca,#data指令名称:立即数带位次乘法指令指令代码:34h指令功能:累加器内容、立即数及进位位相加操作内容:a←(a)+data+(c)字节数:2机器周期:1影响标志位:c,ac,ov10、ajmpaddr11指令名称:绝对迁移指令指令代码:{a10,a9,a8,00001},a[7:0]指令功能:构造目的地址,实现程序转移。

51系列单片机指令表

51系列单片机指令表
直接寻址单元送累加器A
E5direct
2
1
MOVdirect.A
累加器A送直接寻址单元
F5direct
2
I
MOVRn.#data
立即数送寄存器
78~7Fdata
2
I
MOVdirect,#data
立即数送直接寻址单元
75directdata
3
2
MOV@Ri,#data
立即数送内部RAM单元
76~77data
2
1
MOVdirect,Rn
寄存器送直接寻址单元
88~8Fdireci
2
2
MOVRn.direct
直接寻址单元送寄存器
A8~AFdirect
2
2
MOVdirect.@Ri
内部RAM单元送直接寻址单元
86~87direct
2
2
MOV@Ri,direct
直接寻址单元送内部RAM单元
A6-A7direct
DOdireci
2
2
PUSHdirect
直接寻址单元压入栈顶
COdirect
2
2
算术运算类指令
指令
功能简述
指令代码
字节

T
ADDA,Rn
累加器A加寄存器
28-2F
1
1
ADDA.@Ri
累器A加内部RAM单元
26-27
1
I
ADDA.direct
照加器A加直接寻址单元
25direct
2
1
ADDA.#data
盛加器A与寄存器交换
C8~CF
1
1
XCHA,@Ri

51单片机指令总结

51单片机指令总结

51单片机指令总结51单片机是一种经典的单片机型号,由英特尔公司推出。

它是一种基于哈佛结构的8位单片机,具有强大的功能与广泛的应用领域,包括嵌入式系统、自动控制、仪器仪表、通信等等。

51单片机的指令集是其核心功能之一,本文将对51单片机的指令进行详细总结。

1.数据传送指令:用于数据在寄存器之间的传递,包括MOV、XCH、PUSH、POP等指令。

MOV指令用于将数据从一个寄存器传送到另一个寄存器,XCH指令用于交换两个寄存器的值,PUSH和POP指令用于将数据从寄存器压入堆栈或从堆栈弹出。

2.算术指令:用于进行算数运算,包括ADD、SUB、MUL、DIV等指令。

ADD指令用于两个操作数相加,SUB指令用于两个操作数相减,MUL指令用于两个操作数相乘,DIV指令用于两个操作数相除。

3.逻辑指令:用于进行逻辑运算,包括AND、OR、XOR、NOT等指令。

AND指令用于进行按位与运算,OR指令用于进行按位或运算,XOR指令用于进行按位异或运算,NOT指令用于进行按位非运算。

4.跳转指令:用于控制程序的跳转,包括JMP、JZ、JC、DJNZ等指令。

JMP指令用于无条件跳转到指定地址,JZ指令用于如果结果为零则跳转,JC指令用于如果进位标志位为1则跳转,DJNZ指令用于如果结果不为零则跳转。

5.输入输出指令:用于与外部设备进行数据的输入与输出,包括IN、OUT指令。

IN指令用于从指定的端口读取一个字节数据,OUT指令用于向指定的端口写入一个字节数据。

6.中断指令:用于处理中断事件,包括EI、DI、INT等指令。

EI指令用于使能中断,DI指令用于禁止中断,INT指令用于产生软件中断。

7.位操作指令:用于对特定位进行操作,包括SETB、CLR、CPL、RL、RR等指令。

SETB指令用于将指定位设置为1,CLR指令用于将指定位清零,CPL指令用于对指定位进行取反操作,RL指令用于循环左移操作,RR指令用于循环右移操作。

MCS-51单片机汇编指令集

MCS-51单片机汇编指令集

MCS-51单片机汇编指令集2009-06-01 13:56MCS-51单片机汇编指令集(1)数据传送类指令(7种助记符)1.MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;2.MOVC(Move Code)读取程序存储器数据表格的数据传送;3.MOVX (Move External RAM) 对外部RAM的数据传送;4.XCH (Exchange) 字节交换;5.XCHD (Exchange low-order Digit) 低半字节交换;6.PUSH (Push onto Stack) 入栈;7.POP (Pop from Stack) 出栈;(2)算术运算类指令(8种助记符)1.ADD(Addition) 加法;2.ADDC(Add with Carry) 带进位加法;3.SUBB(Subtract with Borrow) 带借位减法;4.DA(Decimal Adjust) 十进制调整;5.INC(Increment) 加1;6.DEC(Decrement) 减1;7.MUL(Multiplication、Multiply) 乘法;8.DIV(Division、Divide) 除法;(3)逻辑运算类指令(10种助记符)1.ANL(AND Logic) 逻辑与;2.ORL(OR Logic) 逻辑或;3.XRL(Exclusive-OR Logic) 逻辑异或;4.CLR(Clear) 清零;5.CPL(Complement) 取反;6.RL(Rotate left) 循环左移;7.RLC(Rotate Left throught the Carry flag) 带进位循环左移;8.RR(Rotate Right) 循环右移;9.RRC (Rotate Right throught the Carry flag) 带进位循环右移;10.SWAP (Swap) 低4位与高4位交换;(4)控制转移类指令(17种助记符)1.ACALL(Absolute subroutine Call)子程序绝对调用;2.LCALL(Long subroutine Call)子程序长调用;3.RET(Return from subroutine)子程序返回;4.RETI(Return from Interruption)中断返回;5.SJMP(Short Jump)短转移;6.AJMP(Absolute Jump)绝对转移;7.LJMP(Long Jump)长转移;8C.JNE (Compare Jump if Not Equal)比较不相等则转移;9D.JNZ (Decrement Jump if Not Zero)减1后不为0则转移;10.JZ (Jump if Zero)结果为0则转移;11.JNZ (Jump if Not Zero) 结果不为0则转移;12.JC (Jump if the Carry flag is set)有进位则转移;13.JNC (Jump if Not Carry)无进位则转移;14.JB (Jump if the Bit is set)位为1则转移;15.JNB (Jump if the Bit is Not set) 位为0则转移;16.JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;17.NOP (No Operation) 空操作;(5)位操作指令(1种助记符)1.SETB(Set Bit) 位置1。

51单片机指令表汇总

51单片机指令表汇总

51单片机指令表汇总51 单片机是一种广泛应用于电子工程和嵌入式系统开发的微控制器。

要熟练掌握 51 单片机的编程,了解其指令表是至关重要的。

下面就为大家汇总一下 51 单片机的常见指令。

数据传送类指令MOV 指令:这是最基本的数据传送指令,用于在寄存器之间、寄存器与存储器之间传送数据。

例如,“MOV A, 50H”就是将立即数 50H传送到累加器 A 中。

MOVX 指令:用于在片外数据存储器和累加器 A 之间进行数据传送。

比如“MOVX A, @DPTR”,将片外数据存储器中由数据指针 DPTR 所指定单元的内容传送到累加器 A 中。

MOVC 指令:用于访问程序存储器中的数据表格。

“MOVC A, @A+DPTR”是常见的用法。

算术运算类指令ADD 指令:实现加法运算。

像“ADD A, R0”就是将累加器 A 的内容和寄存器 R0 的内容相加,结果存放在累加器 A 中。

ADDC 指令:带进位加法指令。

考虑了上一次运算产生的进位标志。

SUBB 指令:用于减法运算,并且会考虑借位标志。

逻辑运算类指令ANL 指令:进行逻辑与操作。

例如“ANL A, R0”,将累加器 A 和寄存器 R0 的内容进行逻辑与运算,结果存放在累加器 A 中。

ORL 指令:执行逻辑或操作。

XRL 指令:实现逻辑异或运算。

控制转移类指令JC 指令:若进位标志为 1 则跳转。

JZ 指令:若累加器 A 的内容为 0 则跳转。

LJMP 指令:长跳转指令,可以跳转到 64KB 程序存储器空间的任意位置。

位操作类指令SETB 指令:将指定的位设置为 1。

例如“SETB P10”,将 P1 端口的第 0 位置 1。

CLR 指令:把指定的位清零。

这些只是 51 单片机指令的一部分,实际应用中还有更多的指令和组合使用方式。

在编程时,合理选择和运用这些指令能够实现各种复杂的功能。

比如,通过数据传送指令来初始化变量和读取外部数据;利用算术运算指令进行数值计算;借助逻辑运算指令处理逻辑关系;使用控制转移指令实现程序的分支和循环;运用位操作指令控制单个引脚的状态。

51单片机汇编指令大全

51单片机汇编指令大全

51汇编指令大全Rn: 表示当前寄存器区的8个工作寄存器R0~R7Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)@: 为间接寄存器或基址寄存器的前缀.Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能寄存器SFR的地址(128~255)或名称,A: 累加器ACC.B: .特殊功能寄存器B,用于MUL和DIV指令中.C: 进位位Cy.#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.#data16: 表示包含在指令中的双字节(16位)立即数.Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.DPTR: 为数据指针,可用作16位的地址寄存器./: 加在位操作的前面,表示对该位进行非运算.bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.“(x): 寄存器或地址单元中的内容.((x)): 有x见解寻址的单元中的内容.<-: 表示将箭头右边的内容传送至箭头的左边.$: 当前指令的地址.单片机指令系统(一) 内部数据传送指令(1) 以累加器A为目的的传送指令:MOV A, #data ;(A)<-dataMOV A, direct ;(A)<-(direct)MOV A, Rn ;(A)<-(Rn)MOV A, @Ri ;(A)<- ((Ri))(2) 以通用寄存器Rn为目的的传送指令:MOV Rn, A ;(Rn)<-(A)MOV Rn, direct ; (Rn)<(direct)-MOV Rn, #data: ; (Rn)<-(data)(3) 以直接地址为目的的传送指令:MOV direct, A ;(direct)<-(A)MOV direct, Rn ; (direct)<-(Rn)MOV direct, direct2 ; (direct)<-(direct2)MOV direct, @Ri ; (direct)<-((Rn))MOV direct, #data ; (direct)<-data(4) 以寄存器间接地址为目的的传送指令:MOV @Ri, A ;((Ri))<-(A)MOV @Ri, direct ;((Ri))<-(direct)MOV @Ri, #data ;((Ri))<-data(二) 数据指针赋值指令(16位数据传送指令)MOV DPTR, #data16;(三) 片外数据传送指令MOVX A, @Ri ;(A)<-((Ri))片外MOVX A, @DPTR ;(A)<-((DPTR))片外MOVX @Ri, A ;((Ri))片外<-(A)MOVX @DPTR, A ;((DPTR))片外<-(A)(四) ROM数据访问指令(查表指令)MOVC A, @A+DPTR ;(A)<-((A)+(DPTR))romMOVC A, @A+PC ;(PC)<-(PC)+1,(A)<-((A)+(PC))rom (五) 堆栈操作指令PUSH direct ;(SP)<-(SP)+1,(SP)<-(direct)堆栈指针先加1,将数据压入栈顶POP direct ;(direct)<-(SP),(SP)<-(SP)-1将数据从栈顶弹出存入direct,SP再减1(六) 数据交换指令(1)整字节(8位)交换指令:XCH A, Rn ;A和Rn中的数互换XCH A, direct ;A和direct单元中的数互换XCH A, @Ri ;A和Ri间址单元中的数互换(2)半字节交换指令:XCHD A, @Ri ;A的低4位Ri间接单元的低4位互换,高4位不动(3)累加器高低半字节交换指令:SWAP A, ;A的高4位(D7~D4)和低4位(D3~D0)互换(七) 加法指令(1)不带Cy加法指令:ADD A, Rn ;(A)<-(A)+(Rn)ADD A, direct ; (A)<-(A)+(direct)ADD A, @Ri ; (A)<-(A)+((Ri))ADD A, #data ; (A)<-(A)+data(2)带进位加法指令:ADDC A, Rn ;(A)<-(A) +Cy+(Rn)ADDC A, direct ; (A)<-(A) +Cy+(direct)ADDC A, @Ri ; (A)<-(A) +Cy+((Ri))ADDC A, #data ; (A)<-(A) +Cy+data(3)加1指令:INC A, ;(A)<-(A)+1INC Rn ;(Rn)<-(Rn)+1INC @Ri ;((Ri))<-((Ri))+1INC direct ;(direct)<-(direct)+1INC DPTR ;(FPTR)<-(DPTR)+1(八) 减法指令(1)带进位减法指令:SUBB A, Rn ;(A)<-(A) -Cy-(Rn)SUBB A, direct ; (A)<-(A) -Cy-(direct)SUBB A, @Ri ; (A)<-(A) -Cy-((Ri))SUBB A, #data ; (A)<-(A) -Cy-data(2)减1指令:DEC A ;(A)<-(A)-1DEC direct ;(direct)<-(durect)-1DEC Rn ;(Rn)<-(Rn)-1DEC @Ri ;((Ri))<-((Ri))-1(九) 乘除指令(1)乘法指令MUL AB ;(B)(A)<-(A)*(B)指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.(2)除法指令DIV AB ;A/B,商存入A,余数存入B指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.(十) 十进制调整指令DA A(十一) 逻辑运算指令(1) 逻辑与运算指令:ANL A, Rn ;(A)<-(A)∧(Rn)ANL A, direct ; (A)<-(A)∧(direct)ANL A, @Ri ; (A)<-(A)∧((Ri))ANL A, #data ; (A)<-(A)∧dataANL direct, A ;(direct)<-(A)∧(direct)ANL direct, #data;(direct<-(direct)∧data(2) 逻辑或运算指令:ORL A, Rn ;(A)<-(A)∨(Rn)ORL A, direct ; (A)<-(A)∨(direct)ORL A, @Ri ; (A)<-(A)∨((Ri))ORL A, #data ; (A)<-(A)∨dataORL direct, A ;(direct)<-(A)∨(direct)ORL direct, #data; (direct)<-(direct)∨data(3) 逻辑异或运算指令:XRL A, Rn ;(A)<-(A)⊙(Rn)XRL A, direct ; (A)<-(A)⊙(direct)XRL A, @Ri ; (A)<-(A)⊙((Ri))XRL A, #data ; (A)<-(A)⊙dataXRL direct, A ;(direct)<-(A)⊙(direct)XRL direct, #data; (direct)<-(direct)⊙data(4) 累加器清0和去反指令CLR A ;(A)<-0 (累加器清0指令)CLR A ;(A)<-(A) (累加器取反指令)(5) 累加器移位指令:不带进位Cy循环左移: RL A ;Dn+1<-Dn,D0<-D7D7D6D5D4D3D2D1D0不带进位Cy循环右移: RR A :Dn+1->Dn,D0<-D7D7D6D5D4D3D2D1D0带进位Cy循环左移: RLC A ;Cy<-D7,Dn+1<-Dn,D0<-CyD7D6D5D4D3D2D1D0带进位Cy循环右移: RRC A ;Cy->D7,Dn+1->Dn,D0->Cy(十二) 控制转移指令[1] 无条件转移指令:(1) 长转移指令LJMP addr16 ;(PC)<-addr16(2) 绝对转移指令AJMP addr11 ;(PC)<-(PC)+2,(PC)10~0<-addr11(3) 短转移指令SJMP rel ;(PC)<-(PC)+2+rel(4) 变址寻址转移指令JMP @A+DPTR ;(PC)<-(A)+(DPTR)[2] 条件转移指令:(1) 累加器判0转移指令:JZ rel ;如果(A)=0,跳转到目标语句,否则顺序执行JNZ rel ;如果(A)≠0,跳转到目标语句,否则顺序执行(2) 比较转移指令:CJNZ A, #data, rel ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ A direct, rel ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行CJNZ Rn #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ @Ri #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行(3) 循环控制转移指令:DJNZ Rn, rel ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行DJNZ firect, rel ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行(十三) 子程序调用和返回指令(1) 绝对调用指令:ACALL addr11(2) 长调用指令:LCALL addr16(3) 返回指令:RET 子程序返回RETI 中断服务程序返回(十四) 空操作指令NOP 空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等(十五) 位操作类指令(1) 位传送指令:MOV C,bit ;(Cy)<-(bit),bit位的状态不变MOV bit,C ; (bit) <- (Cy),Cy位的状态不变(2) 位置位和复位指令:SETB C ;(Cy)<-1SETB bit ;(bit)<-1CLR C ;(Cy)<-0CLR bit ;(bit)<-0(3) 位运算指令:ANL C,bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给Cy ANL C,/bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给CyORL C,bit ;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,结果赋给Cy ORL C,/bit ;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,结果赋给CyCPL C ; (Cy)<-(Cy),Cy位取反CPL bit ;(bit)<-(bit),bit位取反(4) 位测试转移指令:(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;否则顺序执行。

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集
1.MOV
MOV指令把源操作数的值复制到目的操作数。

格式如下:
MOV dest,src
dest :用于存储源操作数值的目的操作数。

src :用于取源操作数值的源操作数。

MOV指令可以把源操作数的值复制到目的操作数里,其中它的源操作数和目的操作数可以是内存单元,寄存器或立即数。

2.MVI
MVI指令把单字节立即数的值复制到其中一寄存器或内存单元。

格式如下:
MVI dest,data
dest :用于存放单字节立即数值的目的操作数。

data :用于取立即数值的立即数。

MVI指令可以把数据(data)复制到dest所指向的存储单元。

它的目的操作数可以是内存单元或寄存器,源操作数只能是8位立即数。

3.LXI
LXI指令可以把16位数据装载到左边和右边双字节寄存器中。

格式如下:
LXI rp,data
rp :用接受16位数据的双字节寄存器,它可以是BC,DE,HL或SP。

data :用于取16位立即数的立即数。

LXI指令可以把16位立即数data复制到双字节寄存器rp里。

4.LDA
LDA指令可以把存储单元中的数据装载到A寄存器中,格式如下:
LDA addr
addr :用于取存储单元数据值的存储单元地址。

LDA指令可以把存储单元addr中的数据复制到A寄存器中。

5.STA
STA指令可以把A寄存器的值存入指定的存储单元中,格式如下:
STA addr。

51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结数据传输指令一.片内RAM数据传输指令1.以累加器A为目的操作数的指令:MOV A , RnMOV A , directMOV A , @RiMOV A , #data2.以寄存器Rn为目的操作数的指令:MOV Rn , AMOV Rn ,directMOV Rn ,data3.以直接地址为目的操作数的指令:MOV direct ,AMOV direct ,RnMOV direct1 ,derect2MOV direct ,@RiMOV direct ,#data4.间接地址为目的操作数的指令:MOV @Ri ,AMOV @Ri ,directMOV @Ri ,#data5.十六位数据传送指令:MOV DPTR , #data16二.累加器A与片外RAM数据传送指令:MOVX A ,@RiMOVX A , @DPTRMOVX @Ri ,AMOVX @DPTR ,A三.查表寻址:MOVC A ,@A+DPTR (先PC←(PC)+1,后A←((A)+(DPTR)))+MOVC A ,@A+PC (先PC←(PC)+1,后A←((A)+(PC)))四.交换指令:1.字节交换指令:XCH A ,RnXCH A ,directXCH A ,@Ri2.半字节交换指令:XCHD A ,@Ri3.累加器半字节交换指令:SWAP A五.栈操作指令:1.PUSH(入栈指令)PUSH direct2.POP(出栈指令)POP direct算术运算指令:一.加法减法指令:1.加法指令:ADD A ,RnADD A ,directADD A ,@RiADD A ,#data2.带进位加法指令:ADDC A ,Rn A←(A)+(Rn)+CYADDC A ,direct A←(A)+(direct)+CYADDC A ,@Ri A←(A)+((Ri))+CYADDC A ,#data A←(A)+(data)+CY3.带借位减法指令:SUBB A ,Rn A←(A)-CY-(Rn)SUBB A ,direct A←(A)-CY-(direct)SUBB A ,@Ri A←(A)-CY-((Ri))SUBB A ,#data A←(A)-CY-#data二.乘法除法指令:1.乘法指令:MUL AB BA←(A) ×(B)高字节放在B中,低字节放在A中2.除法指令:DIV AB A←(A) ÷(B)的商,(B) ←(A) ÷(B)的余数三.加1减1指令:1.加1指令:INC A A←(A)+1INC Rn Rn←(Rn)+1INC direct direct←(direct)+1INC @Ri (Ri) ←((Ri))+1INC DPTR DPTR←(DPTR)+12.减1指令:DEC ADEC RnDEC directDEC @Ri四.十进制调制指令:DA A 调整累加器A的内容为BCD码逻辑操作指令:一.逻辑与、或、异或指令:1.逻辑与指令:ANL A ,RnANL A ,directANL A ,@RiANL A ,#data2.逻辑或这令:ORL A ,RnORL A ,directORL A ,@RiORL A ,#dataORL direct ,AORL direct ,#data3.逻辑异或指令:XRL A ,RnXRL A ,directXRL A ,@RiXRL A ,#dataXRL direct ,AXRL direct ,#data二.清零、取反指令:1.累加器A清零指令:CRL A2.累加器A取反指令:CPL A三.循环位移指令:1.累加器A循环左移指令:RL A2.累加器A循环右移指令:RR A3.累加器A连同进位位循环左移指令:RLC A4. 累加器A连同进位位循环右移指令:RRC A控制转移指令:一.无条件转移指令:1.绝对转移指令:AJMP addr11 (先PC+2,然后将addr11的低十位传给PC,PC的高六位不变)2.长转移指令:LJMP addr16 (用addr16的值替换PC的值)3.相对转移(短转移)指令:SJMP rel(带符号的偏移字节数)(PC+2,再加rel赋值给PC)4.间接转移指令:JMP @A+DPTR (A)+(DPTR) →(PC)二.条件转移指令:1.累加器判零转移指令:JZ rel 先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序执行JNZ rel 先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执行2.比较转移指令:CJNE 目的操作数,源操作数,relCJNE A,direct,rel 先PC+3传回PC,再比较目的操作数和原操作数CJNE A,#data,rel 目>源时,程序转移,PC+rel传回PC且CY=0CJNE Rn,#data,rel 目=源时,程序顺序执行CJNE @Ri,#data,rel 目<源时,程序转移,PC+rel传回PC且CY=13.减一非0指令:DJNZ Rn,rel 先PC\+2,Rn-1,当Rn为0时程序顺序执行,否则PC+rel传回PCDJNZ direct,rel 先PC+3,direct-1,direct为0时程序顺序执行,否则PC+rel 传回PC二.子程序调用、返回指令:1.绝对调用指令ACALL:ACALL addr11 先PC+2,SP+1将PC的低八位存入SP;SP+1,将PC的高八位存入SP。

51单片机指令集

51单片机指令集

51单片机指令集在嵌入式系统的开发中,51单片机是一种常用的微控制器,其指令集对于程序设计和功能实现具有重要的意义。

本文将介绍51单片机指令集的组成结构、常用指令及其功能,以及应用示例。

一、指令集的组成结构51单片机指令集由多条指令组成,这些指令按照不同的功能进行分类和编码。

常见的指令分类包括数据传送指令、算术逻辑指令、位操作指令、分支指令和中断指令等。

1. 数据传送指令数据传送指令主要用于数据在寄存器和内存之间的传输。

其中包括将数据从一个寄存器传送到另一个寄存器、将数据从内存读取到寄存器中以及将数据从寄存器写入内存等操作。

例如,MOV指令用于将一个寄存器的值传送到另一个寄存器,如MOV A, B表示将寄存器B中的值传送到寄存器A中。

2. 算术逻辑指令算术逻辑指令主要用于进行算术和逻辑运算。

其中包括加法、减法、乘法、除法、逻辑与、逻辑或、逻辑非等操作。

例如,ADD A, B用于将寄存器A和寄存器B中的值相加,并将结果保存在寄存器A中。

3. 位操作指令位操作指令主要用于对寄存器或内存中的位进行操作。

其中包括位与、位或、位翻转、位置1、位清零等操作。

例如,ORL A, #0x0F用于将寄存器A的低4位与0x0F进行按位或运算,结果保存在寄存器A中。

4. 分支指令分支指令主要用于程序的跳转和循环控制。

其中包括无条件跳转、条件跳转、循环指令等。

例如,JMP 2000H用于无条件跳转到地址2000H处执行指令。

5. 中断指令中断指令主要用于处理外部中断信号,进行程序的中断与恢复。

例如,ENI指令用于允许外部中断的响应,而DISI指令用于禁止外部中断的响应。

二、常用指令及其功能1. MOV指令MOV指令用于将数据传送给目标操作数。

可以将立即数、寄存器或内存中的值传送给目标寄存器或内存。

2. ADD指令ADD指令用于将源操作数与目标操作数相加,并将结果保存在目标操作数中。

SUB指令用于将源操作数与目标操作数相减,并将结果保存在目标操作数中。

51单片机汇编指令表

51单片机汇编指令表
MOV
Rn,#data
立即数送入寄存器
8
MOV
direct,A
累加器内容送入直接地址单元
9
MOV
direct,Rn
寄存器内容送入直接地址单元
10
MOV
direct,direct
直接地址单元中的数据送入另一个直接地址单元
11
MOV
direct,@Ri
间接RAM中的数据送入直接地址单元
12
MOV
direct,#data
直接地址单元加1
16
INC
@Ri
间接RAM单元加1
17
DEC
A
累加器减1
18
DEC
Rn
寄存器减1
19
DEC
direct
直接地址单元减1
20
DEC
@Ri
间接RAM单元减1
21
INC
DPTR
地址寄存器DPTR加1
22
MUL
A,B
A乘以B,结果放在A
23
DIV
A,B
A除以B,结果放在A
ห้องสมุดไป่ตู้24
DA
A
累加器十进制调整
12
CJNE
A,#data,rel
累加器与立即数比较,不相等则转移
13
CJNE
Rn,#data,rel
寄存器与立即数比较,不相等则转移
14
CJNE
@Ri,#data,rel
间接RAM单元与立即数比较,不相等则转移
15
CJNE
Rn,rel
寄存器减1,非零转移
16
CJNE
direct,erl
直接地址单元减1,非零转移

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集

51单片机汇编语言指令教程汇集1.MOV指令:MOV指令用于将一个值从一个寄存器或内存位置复制到另一个寄存器或内存位置。

例如,MOVA,将常数10复制到累加器A中。

2.ADD指令:ADD指令用于将两个操作数相加,并将结果保存在目标操作数中。

例如,ADDA,B将寄存器B的值与累加器A的值相加,并将结果保存在累加器A中。

3.SUB指令:SUB指令用于将源操作数减去目标操作数,并将结果保存在目标操作数中。

例如,SUBA,B将寄存器B的值减去累加器A的值,并将结果保存在累加器A中。

4.INC指令:INC指令用于将指定的操作数加1、例如,INCA将累加器A的值加15.DEC指令:DEC指令用于将指定的操作数减1、例如,DECA将累加器A的值减16.JMP指令:JMP指令用于无条件地跳转到指定的地址。

例如,JMP1000h将跳转到地址1000h处执行指令。

9. ACALL指令:ACALL指令用于调用一个子程序,其地址由指令给出,子程序结束后返回到调用指令的下一条指令。

例如,ACALL Subroutine将调用一个名为Subroutine的子程序。

10.RET指令:RET指令用于从子程序返回到调用指令的下一条指令。

例如,RET将从子程序返回。

11.NOP指令:NOP指令用于空操作,即不执行任何操作。

它通常用于延时或填充空白。

以上是一些常用的51单片机汇编语言指令,这些指令可以用于控制I/O口、进行算术运算、执行跳转和调用子程序等。

学习并熟练掌握这些指令,对于编写高效的51单片机汇编程序非常重要。

希望本文提供的51单片机汇编语言指令教程能够帮助你入门和掌握51单片机汇编语言的基本知识。

如果你想深入学习51单片机汇编语言,建议参考相关的教材或在线资源,进行更加系统和全面的学习。

51单片机汇编指令表

51单片机汇编指令表

以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。

- MOVC:将数据从外部代码存储器复制到累加器或寄存器。

2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。

- SUB:从累加器中减去另一个寄存器或存储器中的值。

- INC:将累加器或寄存器的值加1。

- DEC:将累加器或寄存器的值减1。

3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。

- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。

- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。

- CPL:对累加器或寄存器中的值进行按位取反操作。

4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。

- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。

5. 跳转指令:
- JMP:无条件跳转到指定的地址。

- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。

- AJMP:绝对跳转,跳转到指定的地址。

- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。

6. 位操作指令:
- SETB:将某个位设置为1。

- CLR:将某个位清零。

- JB:如果某个位为1,则跳转到指定地址。

- JNB:如果某个位为0,则跳转到指定地址。

mcs51单片机指令集

mcs51单片机指令集

一个单片机所需执行指令的集合即为单片机的指令系统。

单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。

现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。

但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。

所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。

在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。

但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。

所以现在基本上都不会直接使用机器语言来编写单片机的程序。

最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。

每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。

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位地址。

51单片机汇编指令表

51单片机汇编指令表

A,direct 直接地址“与”到累加器 A,@Ri 间接RAM“与”到累加器 A,#data 立即数“与”到累加器 direct,A 累加器“与”到直接地址 direct, #data 立即数“与”到直接地址 A,Rn 寄存器“或”到累加器 A,direct 直接地址“或”到累加器 A,@Ri 间接RAM“或”到累加器 A,#data 立即数“或”到累加器 direct,A 累加器“或”到直接地址 direct, #data 立即数“或”到直接地址 A,Rn 寄存器“异或”到累加器 A,direct 直接地址“异或”到累加器 A,@Ri 间接RAM“异或”到累加器 A,#data 立即数“异或”到累加器 direct,A 累加器“异或”到直接地址 direct, #data 立即数“异或”到直接地址 A 累加器清零 A 累加器求反 A 累加器循环左移 A 带进位累加器循环左移 A 累加器循环右移 A 带进位累加器循环右移 A 累加器高、低4 位交换 (控制转移类指令) @A+DPTR 相对DPTR 的无条件间接转移 rel 累加器为0 则转移 rel 累加器为1 则转移 A,direct,rel 比较直接地址和累加器,不相等 A,#data,rel 比较立即数和累加器,不相等转 Rn,#data,rel 比较寄存器和立即数,不相等转 @Ri,#data,rel 比较立即数和间接RAM,不相等 Rn,rel 寄存器减1,不为0 则转移 direct,rel 直接地址减1,不为0 则转移 空操作,用于短暂延时 add11 绝对调用子程序 add16 长调用子程序 从子程序返回 从中断服务子程序返回 add11 无条件绝对转移 add16 无条件长转移 rel 无条件相对转移 (布尔指令) C 清进位位 bit 清直接寻址位 C 置位进位位 bit 置位直接寻址位 C 取反进位位 bit 取反直接寻址位 C,bit 直接寻址位“与”到进位位 C,/bit 直接寻址位的反码“与”到进 C,bit 直接寻址位“或”到进位位 C,/bit 直接寻址位的反码“或”到进 C,bit 直接寻址位传送到进位位 bit, C 进位位位传送到直接寻址 rel 如果进位位为1 则转移 rel 如果进位位为0 则转移

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

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。

单片机指令表汇总

单片机指令表汇总

51单片机指令表汇总51单片机是一种广泛应用的微控制器,其指令集是进行编程的基础。

下面将51单片机的指令表进行汇总,以帮助初学者更好地理解其指令集。

一、数据传输指令1、MOV指令:将源操作数的内容传送到目标操作数。

2、XCH指令:将两个操作数的内容互换。

3、MOVC指令:从外部存储器将数据传送到目标操作数。

4、MOVX指令:将外部存储器中的数据传送到目标操作数。

5、PUSH指令:将数据压入堆栈。

6、POP指令:从堆栈中弹出数据。

二、算术运算指令1、ADD指令:将两个操作数相加,并将结果存放在目标操作数中。

2、SUB指令:从目标操作数中减去源操作数,并将结果存放在目标操作数中。

3、MUL指令:将两个操作数相乘,并将结果存放在目标操作数中。

4、DIV指令:将目标操作数除以源操作数,并将结果存放在目标操作数中。

5、ANL指令:对目标操作数和源操作数进行按位与运算,并将结果存放在目标操作数中。

6、ORL指令:对目标操作数和源操作数进行按位或运算,并将结果存放在目标操作数中。

7、XRL指令:对目标操作数和源操作数进行按位异或运算,并将结果存放在目标操作数中。

8、CPL指令:对目标操作数进行按位取反运算,并将结果存放在目标操作数中。

9、INC指令:将目标操作数加1。

10、DEC指令:将目标操作数减1。

11、ASR指令:将目标操作数右移n位,最高位用符号位补齐。

12、LSR指令:将目标操作数右移n位,最低位用0补齐。

13、ROL指令:将目标操作数循环左移n位,最高位移入最低位。

14、ROR指令:将目标操作数循环右移n位,最低位移入最高位。

单片机汇编指令表一、概述在单片机的世界里,汇编语言扮演着举足轻重的角色。

它是一种低级语言,能够直接与硬件进行交互,提供高效的代码执行效率。

下面,我们将详细列出一些常见的单片机汇编指令,以及它们的功能。

二、指令表1、MOV指令:用于将数据从一个寄存器移动到另一个寄存器。

例如,MOV R1, R2将把 R2的内容移动到 R1中。

51单片机的汇编指令手册-高亮+注释

51单片机的汇编指令手册-高亮+注释

51单片机的汇编指令手册1、数据传送类指令:(28条)1 MOV A,Rn ;寄存器内容送入累加器2 MOV A,direct ;直接地址单元中的数据送入累加器3 MOV A,@Ri ;间接RAM 中的数据送入累加器4 MOV A,#data ;立即数送入累加器5 MOV Rn,A ;累加器内容送入寄存器6 MOV Rn,direct ;直接地址单元中的数据送入寄存器7 MOV Rn,#data ;立即数送入寄存器8 MOV direct,A ;累加器内容送入直接地址单元9 MOV direct,Rn ;寄存器内容送入直接地址单元10 MOV direct,direct ;直接地址单元中的数据送入另一个直接地址单元11 MOV direct,@Ri ;间接RAM 中的数据送入直接地址单元12 MOV direct,#data ;立即数送入直接地址单元13 MOV @Ri,A ;累加器内容送间接RAM 单元14 MOV @Ri,direct ;直接地址单元数据送入间接RAM 单元15 MOV @RI,#data ;立即数送入间接RAM 单元16 MOV DRTR,#dat16 ;16 位立即数送入地址寄存器17 MOVC A,@A+DPTR ;以DPTR为基地址变址寻址单元中的数据送入累加器18 MOVC A,@A+PC ;以PC 为基地址变址寻址单元中的数据送入累加器19 MOVX A,@Ri ;外部RAM(8 位地址)送入累加器20 MOVX A,@DPTR ;外部RAM(16 位地址)送入累加器21 MOVX @Ri,A ;累计器送外部RAM(8 位地址)22 MOVX @DPTR,A ;累计器送外部RAM(16 位地址)23 PUSH direct ;直接地址单元中的数据压入堆栈24 POP direct弹栈送直接地址单元25 XCH A,Rn ;寄存器与累加器交换26 XCH A,direct ;直接地址单元与累加器交换27 XCH A,@Ri ;间接RAM 与累加器交换28 XCHD A,@Ri ;间接RAM 的低半字节与累加器交换2、算术操作类指令:(24条)1 ADD A,Rn ;寄存器内容加到累加器2 ADD A,direct ;直接地址单元的内容加到累加器3 ADD A,@Ri ;间接ROM 的内容加到累加器4 ADD A,#data ;立即数加到累加器5 ADDC A,Rn ;寄存器内容带进位加到累加器6 ADDC A,direct ;直接地址单元的内容带进位加到累加器7 ADDC A,@Ri ;间接ROM 的内容带进位加到累加器8 ADDC A,#data ;立即数带进位加到累加器9 SUBB A,Rn ;累加器带借位减寄存器内容10 SUBB A,direct ;累加器带借位减直接地址单元的内容11 SUBB A,@Ri ;累加器带借位减间接RAM 中的内容12 SUBB A,#data ;累加器带借位减立即数13 INC A ;累加器加114 INC Rn ;寄存器加115 INC direct ;直接地址单元加116 INC @Ri ;间接RAM 单元加117 DEC A ;累加器减118 DEC Rn ;寄存器减1 1 1219 DEC direct ;直接地址单元减120 DEC @Rj ;间接RAM 单元减 121 INC DPTR ;地址寄存器DPTR 加 122 MUL AB A ;乘以B,结果放在A23 DIV AB A ;除以B,结果放在A24 DA A ;累加器十进制调整3、布尔变量操作类指令:(17条)1 CLR C ;清进位位2 CLR bit ;清直接地址位3 SETB C ;置进位位4 SETB bit ;置直接地址位5 CPL C ;进位位求反6 CPL bit ;置直接地址位求反7 ANL C,bit ;进位位和直接地址位相“与”8 ANL C,bit ;进位位和直接地址位的反码相“与”9 ORL C,bit ;进位位和直接地址位相“或”10 ORL C,bit ;进位位和直接地址位的反码相“或”11 MOV C,bit ;直接地址位送入进位位12 MOV bit,C ;进位位送入直接地址位13 JC rel ;进位位为1 则转移14 JNC rel ;进位位为0 则转移15 JB bit,rel ;直接地址位为1 则转移16 JNB bit,rel ;直接地址位为0 则转移17 JBC bit,rel ;直接地址位为1 则转移,该位清零4、逻辑操作数指令:(25条)1 ANL A,Rn ;累加器与寄存器相“与”2 ANL A,direct ;累加器与直接地址单元相“与”3 ANL A,@Ri ;累加器与间接RAM 单元相“与”4 ANL A,#data ;累加器与立即数相“与”5 ANL direct,A ;直接地址单元与累加器相“与”6 ANL direct,#data ;直接地址单元与立即数相“与”7 ORL A,Rn ;累加器与寄存器相“或”8 ORL A,direct ;累加器与直接地址单元相“或”9 ORL A,@Ri ;累加器与间接RAM 单元单元相“或”10 ORL A,#data ;累加器与立即数相“或”11 ORL direct,A ;直接地址单元与累加器相“或”12 ORL direct,#data ;直接地址单元与立即数相“或”13 XRL A,Rn ;累加器与寄存器相“异或”14 XRL A,direct ;累加器与直接地址单元相“异或”15 XRL A,@Ri ;累加器与间接RAM 单元单元相“异或”16 XRL A,#data ;累加器与立即数相“异或”17 XRL direct,A ;直接地址单元与累加器相“异或”18 XRL direct,#data ;直接地址单元与立即数相“异或”19 CLR A ;累加器清“0”20 CPL A ;累加器求反21 RL A ;累加器循环左移22 RLC A ;累加器带进位位循环左移23 RR A ;累加器循环右移24 RRC A ;累加器带进位位循环右移25 SWAP A ;累加器半字节交换5、控制转移类指令:(17条)1 ACALL addr11 ;绝对(短)调用子程序2 LCALL addr16 ;长调用子程序3 RET ;子程序返回4 RETI ;中数返回5 AJMP addr11 ;绝对(短)转移6 LJMP addr16 ;长转移7 SJMP rel ;相对转移8 JMP @A+DPTR ;相对于DPTR 的间接转移9 JZ rel ;累加器为零转移10 CJNE rel ;累加器非零转移11 CJNE A,direct,rel ;累加器与直接地址单元比较,不相等则转移12 CJNE A,#data,rel ;累加器与立即数比较,不相等则转移13 CJNE Rn,#data,rel ;寄存器与立即数比较,不相等则转移14 CJNE @Ri,#data,rel ;间接RAM 单元与立即数比较,不相等则转移15 DJNZ Rn,rel ;寄存器减1,非零转移16 DJNZ direct,erl ;直接地址单元减1,非零转移17 NOP ;空操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常量有多种表示形式:二、十、十六进制数和 字符串等
常量及其表示
数据形式 格 式 取值范围 备注
2进制 ********B
0,1
0进制 ******
0, 1,2...9
ห้องสมุดไป่ตู้
****H 0,1...E,F
0CDE3H
符应是0--9
ASCII '**' ASCII 'AD' 使用
示例
10110011B 32768 16进制 最前面一个字
HIGH 高字节分离 ADD A,#HIGH 05E2H
LOW 低字节分离 ADD A,#LOW 77F0H
ASM51汇编器通用伪指令
汇编起始命令
ORG 16位地址 (常数或表达式 )
定义程序/数据的起始地址
ORG $+5
ORG 0008H
汇编结束命令
END
汇编到此结束,其后面的内
运算 操 作 含 义
以ADD为例
+
加操作 ADD A,#RR1+36
-
减操作 ADD A,#RR1-2EH
*
乘操作 ADD A,#RR1*0E3H
/
除操作 ADD A,#RR1/23
MOD 模除 ADD A,#RR1 MOD 12
数值运算
操 作 含 义
以ADD为例
SHR
右移 ADD A,#RR1 SHR 3
格式: 字符名称 BIT 位地址 例如: fire bit p1.0
或者: fire equ p1.0
ASM51汇编伪指令EQU/BIT
TEMP EQU 30H ;定义变量TEMP地址为30H T_MOD EQU 40H ;定义定时器模式控制字常
量=40H EQU之前的字符串可以理解为变量名,也可以理
只有DB命令中
常量及其表示
常量以数值形式直接写在汇编语言的语句中称 为字面常量。
若预先为它定义一个符号名,然后在语句中用 符号名来表示该常量称符号常量。
使用符号常量的优点可改善程序的可读性,它 的定义需要使用伪操作命令“EQU”或“= ” 。
数值运算
汇编语言对常量允许进行算术运算,逻辑运算,分离 运算等三种类型的运算。
解为常量名,只要应用时前面加上“#”就是常量 了!例如: MOV TEMP,#TEMP 这条指令使30H地址内存入30H常数
SHL
左移 ADD A,#RR1 SHL 2
AND
与操作 ADD A,#RR1 AND
10000101B
OR
或操作 ADD A,#RR1 OR
00110000B
数值运算
操作 含义
以ADD为例
XOR 异或操作 ADD A,#RR1 XOR 36H
NOT 非操作 ADD A,#NOT 45H
LAB+3: MOV A,30H LAB USB: MOV A,30H SUBB: MOV A,30H LAB: MOV A,MEN+3 R7: MOV A,30H MOV R7,A+3
SJMP $
常量及其表示
常量,就是在汇编时已经确定的值。 在汇编 语言中,常量主要用作指令性语句中的直接操 作数 ,也可用于存储器操作的组成部分(如位移 量,或者为伪指令中的变量输初值。 )
ABC EQU 30H ABC EQU R7 ABC EQU 3023H ABC EQU DPTR ABC DATA 30H ABC DATA 30+20 ABC DATA R7 ABC DATA SP+20
位变量地址定义
BIT 定义位变量地址,用法与EQU相同。有时 可以用EQU代替。
意义:主程序从地址0000开始,实际又跳转到 0030H开始的主程序。INT0发生中断时,程序从 0003H开始执行,并跳转到INT0SAV程序执行。 T0发生溢出中断时,从000BH开始执行。
这几个地址值是51单片机规定的固定地址,在 “中断系统”中再详细讨论
赋值命令
EQU 赋值命令。定义变量地址或者常数名称。 格式: 字符名称 EQU (数或汇编符号) 赋值后的符号名称可做:数据地址\代码地址\代
ASM51汇编语言格式
【label:】指令助记符 【操作数1】【 ,操作数2】【,操作数3】【注 释】
1. Label: 标号,冒号结尾,表示程序入口。 字母开头,通常少于8个字符。
2. 指令助记符:也可以是伪指令,后面如果有 操作数的话必须有“空格”或“TAB-键” 将其与操作数分开
ASM51汇编语言格式
单片机原理及应用5
51单片机宏汇编和程序结构
51单片机的汇编语言(宏汇编)
只有指令助记符还不能编写出好程序,需要增 添一些“伪指令”。
伪指令用于控制汇编软件如何处理和按什么规 则编译程序。
伪指令不会产生“机器码” 不同的汇编器(仿真器、仿真软件)具有一些
不同的“伪指令”规定。 下面将介绍一些常用的伪指令
1. 操作数1:既是操作对象又是操作结果 2. 如果存在操作数2、3时,需要在前面用逗号隔
开 3. 注释:前面用分号开头(半角字符),后面可以
用中文注释 4. 【】表示不一定存在,不是必须的
ASM51汇编保留字和特殊符号
保留字常指:指令;寄存器名;伪指令, 以及运算符号如:+-×/等,这些字符串 不能用于作为标号、变量等,运算符不能 用于标号、变量当中。
容将被忽略。同时也是程序结束的标志。
ASM51汇编伪指令ORG举例
ORG 0000H AJMP MAIN NOP ORG 0003H LJMP INT0SAV
服务程序 ORG 000BH LJMP T0SAV ORG 0030H
MAIN: 主程序
;跳转到INT0 ;跳转到T0服务程序
ASM51汇编伪指令ORG举例
运算符可以用于操作数中,起到运算作用。 例如:MOV MEM+3,A,意义为:将A的 内容送到MEM之后的第三个存储单元。
符号“$”在转移指令中当作label使用时,表
示转到$符号所在行的前面,例如:
SJMP $ 表示在本行作“死循环”。等效于:
ABC: SJMP ABC
判断下列标号和变量定义是否正确
码地址\立即数\寄存器名 例如:
ABC EQU 30H ABC EQU R7 不能重名定义
赋值命令
DATA 数据地址赋值命令
格式: 字符名称 DATA 表达式
注意: 表达式可求值(数据)
可以后定义先使用
ABC DATA 30H
ABC DATA 30+20
不能重名定义
下面定义是否正确?
相关文档
最新文档