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单片机汇编指令表

指令说明 (数据传递类指令) 寄存器传送到累加器 直接地址传送到累加器 累加器传送到外部RAM(8 地址) 立即数传送到累加器 累加器传送到寄存器 直接地址传送到寄存器 累加器传送到直接地址 寄存器传送到直接地址 直接地址传送到直接地址 累加器传送到直接地址 间接RAM 传送到直接地址 立即数传送到直接地址 直接地址传送到直接地址 直接地址传送到间接RAM 立即数传送到间接RAM 16 位常数加载到数据指针 代码字节传送到累加器 代码字节传送到累加器 外部RAM(8 地址)传送到累加器 外部RAM(16 地址)传送到累加器 累加器传送到外部RAM(8 地址) 累加器传送到外部RAM(16 地址) 直接地址压入堆栈 直接地址弹出堆栈 寄存器和累加器交换 直接地址和累加器交换 间接RAM 和累加器交换 间接RAM 和累加器交换低4 位字节 (算术运算类指令) 累加器加1 寄存器加1 直接地址加1 间接RAM 加1 数据指针加1 累加器减1 寄存器减1 直接地址减1 间接RAM 减1 累加器和B 寄存器相乘 累加器除以B 寄存器 累加器十进制调整 寄存器与累加器求和 直接地址与累加器求和 间接RAM 与累加器求和 立即数与累加器求和 寄存器与累加器求和(带进位) 直接地址与累加器求和(带进位) 间接RAM 与累加器求和(带进位) 立即数与累加器求和(带进位) 累加器减去寄存器(带借位) 累加器减去直接地址(带借位) 累加器减去间接RAM(带借位) 累加器减去立即数(带借位)
序号
助记符 MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOVC MOVC MOVX MOVX MOVX MOVX PUSH POP XCH XCH XCH XCHD INC INC INC INC INC DEC DEC DEC DEC MUL DIV DA ADD ADD ADD ADD ADDC ADDC ADDC ADDC SUBB SUBB SUBB SUBB A,Rn A,direct A,@Ri A,#data Rn,A Rn,direct Rn,#data direct,Rn direct,direct direct,A direct,@Ri direct,#data @Ri,A @Ri,direct @Ri,#data DPTR,#data16 A,@A+DPTR A,@A+PC A,@Ri A,@DPTR @Ri,A @DPTR,A direct direct A,Rn A, direct A, @Ri A, @Ri A Rn direct @Ri DPTR A Rn direct @Ri AB AB A A,Rn A,direct A,@Ri A,#data A,Rn A,direct A,@Ri A,#data A,Rn A,direct A,@Ri A,#data
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单片机指令助记

RETI 中断返回 1 24
AJMP addr11 绝对短转移 2 24
LJMP addr16 长转移 3 24
SJMP rel 相对转移 2 24
JMP @A+DPTR 相对于DPTR的间接转移 1 24
控制转移指令共有17条,可分为“无条件转移指令” “有条件转移指令” “子程序调用指令” 及 “返回指令”。
5、布尔变量操作类指令
助记符 功能说明 字节数 振荡周期
CLR地址位 2 12
SETB C 置进位位 1 12
DEC Rn 寄存器减1 1 12
DEC direct 直接地址单元内容减1 2 12
DEC @Ri 间接RAM内容减1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器进行十进制转换 1 12
RRC A 累加器带进位循环右移 1 12
SWAP A 累加器半字节交换 1 12
4、控制转移类指令
助记符 功能说明 字节数 振荡周期
ACALL addr11 绝对短调用子程序 2 24
LACLL addr16 长调用子程序 3 24
MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24
MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24
MOV direct,#data8 8位立即数送入直接地址单元 3 24
MOV @Ri,A 累加器内容送入间接RAM单元 1 12
如果左边的数(A,Rn,@Ri)大或者等于右边的数(direct,#date8),则CY=0;否则CY=1)
MCS-51系列单片机指令快速记忆方法(简介)chinaben

MCS-51系列单片机指令快速记忆方法(简介)一、助记符号的记忆方法1 表格列举法把44个指令助记符按功能分为五类,每类列表记忆。
此处从略,请读者自己总结。
2 英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。
例如:增量INC-Inc remect减量DNC-D ecrement短转移SJMP-S hort j ump 长转移LJMP-L ong j ump比较转移CJNE-C ompare j ump n ot e quality绝对转移AJMP-A bsolute j ump空操作NOP-N o op eration交换XCH-E xch ange加法ADD-Add ition乘法MUL-Mul tiplication除法DIV-Div ision左环移RL-R otate l eft进位左环移RLC-R otate l eft c arry右环移RR-R otate r ight进位右环移RRC-R otate r ight c arry3 功能模块记忆法单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。
这样,化整为零,各个击破,实现快速记忆。
1)数据传送组。
2)加减运算组MOV 内部数据传送ADD 加法MOVC 程序存储器传送ADDC 带进位加法MOVX 外部数据传送SUBB 带进位减法3)逻辑运算组。
4)子程序调用组。
ANL 逻辑与LCALL 长调用ORL 逻辑或ALALL 绝对调用XRL 逻辑异或RET 子程序返回二、指令的记忆方法1 指令操作数的有关符号MCS-51的寻址方式共有六种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址。
我们必须掌握其表示的方法。
1)立即数与直接地址。
#data8表示八位立即数,#data16表示是十六位立即数,data或direct表示直接地址。
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系列单片机指令快速记忆法.

购买单片机的书籍最好是书的前面你能看懂,而书的后面你不懂,若前后都看不懂的书最好先别买,因为这本书短时间内不会对你起多大作用。当然若不是把书当资料查也不必买前后你都懂的书,因为它对你来说有点浅。应以原理书籍为主。其次可以购买一些应用方面的书籍以便参考。
电子技术本身与实验离不开,若光靠看书是很难理解其原理和学会单片机开发的。你应该购置相关单片机的芯片、编程器、实验板,以及开发他的相关软件。并以边看书边实验的方式进行学习其效果将明显好的多!由于初学,不可能购置很多昂贵的设备,建议学习用的单片机芯片其程序储存器是可以反复可擦写的,如AT89C系列或AVR系列。这样,在学习烧写时是无后顾之忧的。
3)逻辑运算组
4)子程序调用组:ANL 逻辑与 LCALL 长调用 ORL 逻辑或 ALALL 绝对调用 XRL 逻辑异或 RET 子程序返回
二、指令的记忆方法
1指令操作数的有关符号
MCS-51的寻址方式共有六种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变 址寻址、相对寻址。我们必须掌握其表示的方法。
专家建议
学单片机之初,你必须懂一些数字电路,若对数字电路中的一般概念都很模糊,最好还是再补习一下再来学单片机。接下来你最好先选一种单片机机种进行学习,因为目前单片机机种较多,其结构和指令均不相同,若这种学两天,那种学两天往往会滩多嚼不烂。这里建议你最好先学8051单片机,因为8051方面的书籍、资料、器材都较多。PIC和AVR以及其它类型的单片机虽有其长处,但现在的书籍、资料以及器件供应并不理想,不太适合初学者选择。若你对这些并不在意的话那选择后者进行学习也未尚不可。
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51 单片机汇编指令集一、数据传送类指令( 7 种助记符)MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q 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 (Decreme nt 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 。
8 种常用伪指令1.ORG 16 位地址;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。
2.[标号:]DB 字节数据项表;将项表中的字节数据存放到从标号开始的连续字节单元中。
例如:SEG:DB 88H,100,“7”,“C”3.[标号:]DW 双字节数据项表;定义16位地址表,16 地址按低位地址存低位字节,高位地址存高位字节。
例如:TAB:DW 1234H,7BH4.名字EQU表达式或名字二表达式;用与给一个表达式赋值或给字符串起名字。
之后名字可用做程序地址,数据地址或立即数地址使用。
名字必须是一字母开头的字母数字串。
例如:COUNT=1或SPACE EQU 10H5.名字DATA直接字节地址;给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。
同一单元可起多个名字。
例如:ERROR DATA 80H6.名字XDATA直接字节地址;给8位外部RAM起个名字,名字规定同DATA伪指令。
例如:IO_PORT XDATA 0CF04H7.名字BIT位指令;给一可位寻址的位单元起个名字,规定同DATA伪指令。
例如:SWT BIT 30H 8.[标号:]END;指出源程序到此结束,汇编对其后的程序语句不予理睬。
源程序只在主程序最后使用一个END。
指令集(111条)六•记忆方法MCS —51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有# data、direct、Rn、@Ri等。
这里先介绍指令助记符及其相关符号的记忆方法。
一、助记符号的记忆方法1表格列举法把44个指令助记符按功能分为五类,每类列表记忆。
此处从略,请读者自己总结。
2 英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。
例如:增量INC —In cremect 减量DNC —Decreme nt短转移SJMP —Short jump 长转移LJMP —Long jump 比较转移CJNE —Compare jump not equality 绝对转移AJMP —Absolute jump 空操作NOP —No operation交换XCH —Exchange 加法ADD —Addition乘法MUL —Multiplication 除法DIV —Division左环移RL —Rotate left 进位左环移RLC —Rotate left carry右环移RR —Rotate right 进位右环移RRC —Rotate right carry3功能模块记忆法单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2〜3组。
这样,化整为零,各个击破,实现快速记忆。
1) 数据传送组。
2)加减运算组MOV内部数据传送ADD加法MOVC程序存储器传送ADDC带进位加法MOVX外部数据传送SUBB带进位减法3)逻辑运算组。
4 )子程序调用组。
ANL逻辑与LCALL长调用ORL逻辑或ALALL绝对调用XRL逻辑异或RET子程序返回二、指令的记忆方法1指令操作数的有关符号MCS —51的寻址方式共有六种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址。
我们必须掌握其表示的方法。
1) 立即数与直接地址。
ata表示八位立即数,# data16表示是十六位立即数,data或direct表示直接地址。
2) Rn(n=0 —7)、A、B、CY、DPTR 寄存器寻址变量。
3) @R0、@R1、@DPTR、SP表示寄存器间址变量。
4) DPTR + A、PC + A表示变址寻址的变量。
5) PC + rel (相对量)表示相对寻址变量。
记住指令的助记符,掌握不同寻址方式的指令操作数的表示方法,为我们记忆汇编指令打下了基础。
MCS —51指令虽多,但按功能可分为五类,其中数据传送类28条,算术运算类24条,逻辑操作类25条,控制转移类17条,布尔位操作类17条。
在每类指令里,根据其功能,抓住其源、目的操作数的不同组合,再辅之以下方法,是完全能记住的。
我们约定,可能的目的操作数按(# data/direct/A/R n/@Ri )顺序表示。
对于MOV指令,其目的操作数按A、Rn、direct、@Ri的顺序书写,则可以记住MOV的15条指令。
例如以累加器A为目的操作数,可写出如下4条指令。
MOV A , # data/direct/A/Rn/@Ri以此类推,写出其它指令。
MOV Rn ,# data/direct/AMOV direct , # data/direct/A/Rn/@RiMOV @Ri ,# data/direct/A2 指令图示记忆法图示记忆法是把操作功能相同或相似、但其操作数不同的指令,用图形和箭头将目的、源操作数的关系表示出来的一种记忆方法。
例如:由助记符MOV、MOVX、MOVC组成的送数组指令,可以用图1、2帮助记忆。
由助记符CJNE形成的四条指令,也可以用图示法表示,如图3。
CJNE A, # data , rel CJNE A , direct, relCJNE @Rn ,# data , rel CJNE @Ri , # data , rel另外,对于由(ANL、ORL、ARL )形成的18条逻辑操作指令,有关A的四条环移指令,也可以用图示法表示,请读者自行画出记忆。
3相似功能归类法在MCS - 51指令中,我们发现部分指令其操作码不同,但功能相似,而操作数则完全一样。
相似功能归类法就是把具有这样特点的指令放在一起记忆,只要记住其中的一条,其余的也就记住了。
如加、减法的十二条指令,与、或、非的十八条指令,现列举如下。
ADD/ADDC/SUBB A , # data/direct/Rn/@RiANL/ORL/XRL A , # data/direct/Rn/@RiANL/ORL/XRL direct , # data/a上述每一排指令,功能相似,其操作数都相同。
其它的如加1(INC)、减1(DEC)指令也可照此办理。
4 口诀记忆法对于有些指令,我们可以把相关的功能用精练的语言编成一句话来记忆。
如PUSHdirect和POP direct这两条指令。
初学者常常分不清堆栈SP的变化情况,为此编成这样一句话:(SP的内容)加1(direct的内容)再入栈,(SP的内容)弹出(到direct单元)SP才减1。
又如乘法指令中积的存放,除法指令中被除数和除数以及商的存放,都可以编成口诀记忆如下。
MUL AB高位积(存于)B,低位积(存于)A。
DIV AB A 除以B,商(存于)A余(下)B。
上面介绍了几种快速记忆单片机指令的方法,希望能起到抛砖引玉的作用,相信读者在学习单片机的过程中能找到适合自己的方法来记忆。
但是,有了好的方法还不够,还需要实践,即多读书上的例题和别人编写的程序,自己再结合实际编写一些程序。
只有这样,才能更好更快地掌握单片机指令系统。