我的单片机汇编学习.docx
- 文档编号:18530853
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:22
- 大小:22.82KB
我的单片机汇编学习.docx
《我的单片机汇编学习.docx》由会员分享,可在线阅读,更多相关《我的单片机汇编学习.docx(22页珍藏版)》请在冰点文库上搜索。
我的单片机汇编学习
学习单片机内部结构和外部引脚时,要能明确单片机的主要内部结构,包括中央处理器CPU、存储器、定时/计数器、并行输入/输出接口,中断系统以及时钟电路;并且要详细知道个部分又分别由哪些小部分组成,各小部分的详细功能,这是单片机内部结构的基础,也是学习单片机的基础,用好好用功,仔细品味书中的内容,比如说CPU主要由两部分组成,运算器和控制器,而运算器和控制器又分别由许多小部分组成,像运算器又主要由算术/逻辑运算部件ALU,暂存器TMP,累加器ACC,寄存器B,程序状态标志寄存器PSW及布尔处理器(位处理器)等部分组成,而这没一部分吧又分别有什么作用呢,这些都需要详细的了解,所以要想有个好的入门开始,这本章的学习是很重要的。
对于单片机的外部引脚,51单片机采用40引脚双列直插式(DIP)结构,40引脚中包括2个电源引脚,4个控制引脚,2个外界晶体引脚以及32个输入/输出引脚,各引脚的外置(PIN号)及相关功能要熟悉,这里主要知道,在32个输入输出接口中,P3口一般作为第二功能脚使用,这就要求要能掌握P3口各脚的第二功能。
单片机内部存储器的配置,主要有程序存储器和数据存储器,这两种存储器又分别包括片内和片外存储,因此呢,51单片机的存储器一般包括四个物理存储空间。
这里要着重学习数据存储器,在介绍数据存储器时又着重介绍介绍内部数据存储器:
数据存储器由读写存储器RAM组成,用于存储实时输入的数据。
51的存储器分为内部数据存储器和外部数据存储器,最大容量可扩展到64KB,在实际使用时用充分利用内部存储器。
内部存储器又是如何分配单元内存的呢?
这一点很重要,内容也很详细,要能正确区分个部分的使用方法这也有利于在以后学习指令系统时能更方便我们的理解。
单片机的并行I/0接口:
这部分主要介绍单片机与外部电路图的连接方式。
P0口大多数情况作为单片机系统的地址/数据线使用,P1口只能作为I/O接口使用,P2口及可以作为地址总线使用也可以作为I/O接口使用,P3口不但可以作为I/O接口使用,而且还具有第二功能。
单片机的时钟电路和复位电路,主要了解单片机工作的时钟电路的产生以及复位电路的作用与方式。
指令的格式:
操作码,操作数
指令按字节分为单字节指令(49),双字节指令(45)和三字节指令(17)。
单片机指令的寻址方式
寄存器寻址
直接寻址
立即寻址
寄存器间接寻址
変址寻址
位寻址
相对寻址
寄存器寻址
寄存器寻址就是以通用寄存器的内容作为操作数,在指令的助记符中直接以寄存器名字来表示操作数位置。
直接寻址
直接寻址就是在指令中直接给出操作数的地址,此时,指令的操作数部分就是操作数的地址。
立即寻址
立即寻址指令的操作数为一个8位二进制数或是一个16位二进制数,在指令中采用“#”来表示操作码后面的是立即数而不是直接地址。
寄存器间接寻址
寄存器间接寻址是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。
MCS-51规定R2或R1为间接寻址寄存器,它可寻址内部RAM低位地址的128个字节单元内容。
还可采用数据指针(DPTR)作为间接寻址寄存器,寻址外部数据存储器的64字节空间,但不能用本寻址方法寻址特殊功能寄存器。
例如,设将内部RAM的65H单元内容(47H)送A,可执行指令:
MOV A,@R0,其中R0内容为65H。
指令的执行过程为:
当程序执行到本指令时,就以指令中所指定的工作寄存器R0的内容(65H)为指针,将内部数据存储器65H单元的内容(47H)送累加器A。
変址寻址
変址寻址基址寄存器加变址寄存器间接寻址方式,是MCS-51指令集所独有的,它是以程序计数器PC或数据指针DPTR作为基址寄存器,以累加器A作为变址寄存器,这二者内容之和为有效地址。
这种寻址方式特别适用于查表。
DPTR为16位字宽,可指向64K字节的任何单元;@A+PC可指向以PC当前值为起始地址的256字节单元。
位寻址
MCS-51设有独立的位处理器。
进行位处理时,可对内部RAM和特殊功能寄存器的某些位寻址单元进行寻址。
相对寻址
这与典型微计算机的相对寻址相似。
它以PC的当前值为基准,加上指令中给出的相对偏移量(rel)形成有效转移地址。
相对偏移量(rel)是一个带符号的8位二进制数,常以补码的形式出现。
因此,程序的转移范围为:
以PC的当前值为起始地址,相对偏移在+127-128个字节单元之间。
例如执行指令:
JC rel 设 rel=75H,Cy=1 这是一条以Cy为条件的转移指令。
因为JC rel指令是二字节指令,当程序取出指令的第二个字节时,PC的当前值已是原PC+2,由于Cy=1,所以程序转向PC+75H单元去执行
单片机指令分类介绍
一.数据传送类指令(28条)
1.内部RAM之间的数据传递指令。
1)立即寻址
MOVA,#data;A←data
MOVRn,#data;Rn←data
MOV@Ri,#data;(Ri)←data
MOVdirect,#data;direct←data
2)直接寻址
MOVA,direct;A←(direct)
MOVRn,direct;Rn←(direct)
MOV@Ri,direct;(Ri)←(direct)
MOVdirect2direct1,;direct2←(direct)
3)间接寻址
MOVA,@Ri;A←((Ri))
MOVdirect,@Ri;direct←((Ri))
4)寄存器寻址
MOVA,Rn;A←(Rn)
MOVdirect,Rn;direct←(Rn)
MOVRn,A;Rn←(A)
MOVdirect,A;direct←(A)
MOV@Ri,A;(Ri)←(A)
2.涉及外部存储器的数据传送指令
1)16位地址传送指令
MOVDPTR,#data16;其功能是将立即数的高8位送到DPH,立即数的低8位送到DPL。
2)访问外部RAM的指令
为了与访问内部RAM区分开来,这里用MOVX区分,X代表外部的意思
MOVX@Ri,A;(Ri)←(A)
MOVXA,@Ri;A←((Ri))
MOVXA,@DPTR;A←((DPTR))
MOVX@DPTR,A;(DPTR)←(A)
3)外部ROM的指令
外部ROM中的字节传送要用到MOVC,C就是code的缩写,这种指令只有两条,也
称为查表指令
MOVCA,@A+DPTR;A←((A)+(DPTR))
MOVCCA,@A+PC;PC←(PC)+1,A←((A)+(PC))
3.堆栈操作指令
PUSHdirect;SP←(SP)+1,(SP)←(direct)
POPdirect;direct←((SP)),SP←(SP)-1
4.数据交换指令
1)整字节交换指令
XCHA,Rn;(A)←→(Rn)
XCHA,direct;(A)←→(direct)
XCHA,@Ri;(A)←→((Ri))
2)半字节交换指令
XCHDA,@Ri;(A)0~3←→((Ri))0~3
二.算术运算类指令(24条)
1.加法指令
ADDA,Rn;A←(A)+(Rn)
ADDA,direct;A←(A)+(direct)
ADDA,@Ri;A←(A)+((Ri))
ADDA,#data;A←(A)+data
2.带进位的加法指令
ADDCA,Rn;A←(A)+(Rn)+CY
ADDCA,direct;A←(A)+(direct)+CY
ADDCA,@Ri;A←(A)+((Ri))+CY
ADDCA,#data;A←(A)+data+CY
3.带借位的减法指令
SUBBA,Rn;A←(A)-(Rn)-CY
SUBBA,direct;A←(A)-(direct)-CY
SUBBA,@Ri;A←(A)-((Ri))-CY
SUBBA,#data;A←(A)-data-CY
4.加一指令
INCA;A←(A)+1
INCRn;Rn←(Rn)+1
INCdirect;direct←(direct)+1
INC@Ri;(Ri)←((Ri))+1
INCDPTRDPTR←(DPTR)+1
加一指令使所指定的单元内容加1,不影响PSW的标志位。
5.减一指令
DECA;A←(A)-1
DECRn;Rn←(Rn)-1
DECdirect;direct←(direct)-1
DEC@Ri;(Ri)←((Ri))-1
与加一指令一样,减一指令也不影响PSW的标志位。
6.乘法和除法指令
1)乘法指令(单字节四周期指令)
MULAB;A×B=BA
相乘按无符号数进行,两个八位无符号数相乘结果为16为无符号数,它的
高八位存于B寄存器,低八位存于A寄存器。
2)除法指令(单字节四周期指令)
DIVAB;A÷B=A…B
相除之后,商存于累加器A,余数存在寄存器B中。
7.十进制调整指令
DAA
十进制调整指令用于对BCD码十进制数加法运算的结果进行修正。
三.逻辑运算既移位类指令(25条)
1.逻辑与运算指令
ANLA,Rn;A←(A)∧(Rn)
ANLA,direct;A←(A)∧(direct)
ANLA,@Ri;A←(A)∧(Ri)
ANLA,#data;A←(A)∧data
ANLdirect,A;direct←(direct)∧(A)
ANLdirect,#data;direct←(direct)∧data
运算规律:
全1为1;
2.逻辑或运算指令
ORLA,Rn;A←(A)∨(Rn)
ORLA,direct;A←(A)∨(direct)
ORLA,@Ri;A←(A)∨(Ri)
ORLA,#data;A←(A)∨data
ORLdirect,A;direct←(direct)∨(A)
ORLdirect,#data;direct←(direct)∨data
运算规律:
有1出1,全0为0;
3.逻辑异或运算指令
XRLA,Rn;A←(A)⊕(Rn)
XRLA,direct;A←(A)⊕(direct)
XRLA,@Ri;A←(A)⊕(Ri)
XRLA,#data;A←(A)⊕data
XRLdirect,A;direct←(direct)⊕(A)
XRLdirect,#data;direct←(direct)⊕data
4.累加器清零、取反、和半字节交换指令
1)累加器清零指令
CLRA;A←0
2)累加器取反
CPLA;A←A的非
3)半字节交换
SWAPA;(A)4-7←→(A)0-3
5.位移指令
1)循环左移指令
RLA;An+1←An,A0←A7
2)带进位循环左移指令
RLCA;An+1←An,CY←A7,A0←CY
3)循环右移指令
RRA;An←An+1,A7←A0
4)带进位循环右移指令
RRCA;An←An+1,A7←CY,A7←A0
四.控制转移类指令(17条)
1.无条件转移类指令
1)长转移指令
LJMPaddr16;PC←addr16
2)绝对转移指令由PC加2后
AJMPaddr11
指令执行后,首先是PC的内容加2,这里的PC就是指令所在位置的地址,然后
由PC加2后的PC值的高五位和指令中的11位地址addr11构成转移指令。
3)短转移指令
SJMPrel
短转移指令是无条件相对转移指令,而不像前面两条指令是绝对转移指令。
由于
rel是有符号数,因此也可以向前或向后转移,转移的范围为256单元。
4)变址方式的转移指令
JMP@A+DPTR ;PC←(A)+(DPTR)
这条变址方式的转移指令是一条单字节无条件转移指令,转移的地址由累加器A
的内容和数据指针DPTR内容之和来决定,一般是以DPTR的内容为基址,而由A
的值决定具体的转移地址,两者都是无符号数。
2.条件转移指令
1)累加器判0转移指令
JZrel
这条指令的功能是:
若A中的值为0,则转移,若A中的值不为0,则顺序执行
(本指令的下一条指令)。
JNZrel
这条指令的功能是:
若A中的值不为0,则转移,若A中的值为0,则顺序执行
(本指令的下一条指令)。
2)比较转移指令
CJNEA,#data,rel;累加器内容与立即数不等就转移
CJNEA,direct,rel;累加器内容与内部RAM内容不等就转移
CJNERn,#data,rel;工作寄存器内容与累加器不等就转移
CJNE@Ri,#data,rel;内部RAM前128单元内容与立即数不等就转移
3.子程序调用及返回指令
1)绝对调用指令
ACALLaddr11
2)长调用指令
LCALLaddr16
3)返回指令
RET;子程序返回
RETI;中断返回
4.空操作指令
NOP;PC←(PC)+1
五.位操作指令(17条)
1.位传送指令
MOVC,bit;CY←(bit)
MOVbit,C;bit←CY
2.位置位清零指令
CLRC;CY←0
CLRbit;bit←0
SETB;CY←1
SETB;bit←1
3.位运算指令
ANLC,bit;CY←CY∧(bit)
ANLC,/bit;CY←CY∧(/bit)
ANLC,bit;CY←CY∨(bit)
ANLC,/bit;CY←CY∨(/bit)
CPLC;CY←(/CY)
CPLbit;bit←(/bit)
4.位控制转移指令
1)以CY内容为条件的转移指令
JCrel;CY=1时就转移,否则顺序执行
JNCrel;CY=0时就转移,否则顺序执行
2)以位地址内容为条件的转移指令
JBbit,rel;(bit)=1时就转移,否则顺序执行
JNBbit,rel;(bit)=0时就转移,否则顺序执行
JBCbit,rel;(bit)=1就转移,并使bit位清0,否则顺序执行
类别
指令格式
功能描述
字节数
周期
数
据
传
送
类
指
令
MOVA,Rn
寄存器送累加器
1
1
MOVRn,A
累加器送寄存器
1
1
MOVA,@Ri
内部RAM单元送累加器
1
1
MOV@Ri,A
累加器送内部RAM单元
1
1
MOVA,#data
立即数送累加器
2
1
MOVA,direct
直接寻址单元送累加器
2
1
MOVdirect,A
累加器送直接寻址单元
2
1
MOVRn,#data
立即数送寄存器
2
1
MOVdirect,#data
立即数送直接寻址单元
3
2
MOV@Ri,#data
立即数送内部RAM单元
2
1
MOVdirect,Rn
寄存器送直接寻址单元
2
2
MOVRn,direct
直接寻址单元送寄存器
2
2
MOVdirect,@Ri
内部RAM单元送直接寻址单元
2
2
MOV@Ri,direct
直接寻址单元送内部M单元
2
2
MOVdirect2,direct1
直接寻址单元送直接寻址单元
3
2
MOVDPTR,#data16
16位立即数送内部指针
3
2
MOVXA,@Ri
外部RAM单元送累加器(8地址)
1
2
MOVX@Ri,A
累加器送外部RAM单元(8地址)
1
2
MOVXA,@DPTR
外部RAM单元送累加器(16位地址)
1
2
MOVX@DPTR,A
累加器送外部RAM单元(16位地址)
1
2
MOVCA,@A+DPTR
查表数据送累加器(DPTR为基址)
1
2
MOVCA,@A+PC
查表数据送累加器(PC为基址)
1
2
算
术
运
算
类
指
令
XCHA,Rn
累加器与寄存器交换
1
1
XCHA,@Ri
累加器与内部RAM单元交换
1
1
XCHDA,direct
累加器与直接寻址单元交换
2
1
XCHDA,@Ri
累加器与内部RAM单元低4位交换
1
1
SWAPA
累加器高4位与低4位交换
1
1
POPdirect
栈顶弹出指令直接寻址单元
2
2
PUSHdirect
直接寻址单元压入栈顶
2
2
ADDA,Rn
累加器加寄存器
1
1
ADDA,@Ri
累加器加内部RAM单元
1
1
ADDA,direct
累加器加直接寻址单元
2
1
ADDA,#data
累加器加立即数
2
1
ADDCA,Rn
累加器加寄存器和进位标志
1
1
ADDC A,@Ri
累加器加内部RAM单元和进位标志
1
1
ADDC A,#data
累加器加立即数和进位标志
2
1
ADDC A,direct
累加器加直接寻址单元和进位标志
2
1
INC A
累加器加1
1
1
INC Rn
寄存器加1
1
1
INC direct
直接寻址单元加1
2
1
INC @Ri
内部RAM单元加1
1
1
INC DPTR
数据指针加1
1
2
DA A
十进制调整
1
1
SUBB A,Rn
累加器减寄存器和进位标志
1
1
SUBB A,@Ri
累加器减内部RAM单元和进位标志
1
1
SUBB A,#data
累加器减立即数和进位标志
2
1
SUBB A,direct
累加器减直接寻址单元和进位标志
2
1
DEC A
累加器减1
1
1
DEC Rn
寄存器减1
1
1
DEC @Ri
内部RAM单元减1
1
1
DEC direct
直接寻址单元减1
2
1
MUL AB
累加器乘寄存器B
1
4
DIV AB
累加器除以寄存器B
1
4
逻
辑
运
算
类
指
令
ANL A,Rn
累加器与寄存器
1
1
ANL A,@Ri
累加器与内部RAM单元
1
1
ANL A,#data
累加器与立即数
2
1
ANL A,direct
累加器与直接寻址单元
2
1
ANL direct,A
直接寻址单元与累加器
2
1
ANL direct,#data
直接寻址单元与立即数
3
1
ORL A,Rn
累加器或寄存器
1
1
ORL A,@Ri
累加器或内部RAM单元
1
1
ORL A,#data
累加器或立即数
2
1
ORL A,direct
累加器或直接寻址单元
2
1
ORL direct,A
直接寻址单元或累加器
2
1
ORL direct,#data
直接寻址单元或立即数
3
1
XRL A,Rn
累加器异或寄存器
1
1
XRL A,@Ri
累加器异或内部RAM单元
1
1
XRL A,#data
累加器异或立即数
2
1
XRL A,direct
累加器异或直接寻址单元
2
1
XRL direct,A
直接寻址单元异或累加器
2
1
XRL direct,#data
直接寻址单元异或立即数
3
2
RL A
累加器左循环移位
1
1
RLC A
累加器连进位标志左循环移位
1
1
RR A
累加器右循环移位
1
1
RRC A
累加器连进位标志右循环移位
1
1
CPL A
累加器取反
1
1
CLR A
累加器清零
1
1
控
制
类
转
移
指
令
ACCALLaddr11
2KB范围内绝对调用
2
2
AJMP addr11
2KB范围内绝对转移
2
2
LCALL addr16
2KB范围内长调用
3
2
LJMP addr16
2KB范围内长转移
3
2
SJMP rel
相对短转移
2
2
JMP @A+DPTR
相对长转移
1
2
RET
子程序返回
1
2
RET1
中断返回
1
2
JZ rel
累加器为零转移
2
2
JNZ rel
累加器非零转移
2
2
CJNE A,#data,rel
累加器与立即数不等转移
3
2
CJNE A,direct,rel
累加器与直接寻址单元不等转移
3
2
CJNE Rn,#data,rel
寄存器与立即数不等转移
3
2
CJNE @Ri,#data,rel
RAM单元与立即数不等转移
3
2
DJNZ Rn,rel
寄存器减1不为零转移
2
2
DJNZ direct ,rel
直接寻址单元减1不为零转移
3
2
布
尔
操
做
类
指
令
NOP
空操作
1
1
MOV C,bit
直接寻址位送C
2
1
MOV bit,C
C送直接寻址位
2
1
CLR C
C清零
1
1
CLR bit
直接寻址位清零
2
1
CPL C
C取反
1
1
CPL bit
直接寻址位取反
2
1
SETB C
C置位
1
1
SETB bit
直接寻址位置位
2
1
ANL C,bit
C逻辑与直接寻址位
2
2
ANL C,/bit
C逻辑与直接寻址位的反
2
2
ORL C,bit
C逻辑或直接寻址位
2
2
ORL C,/bit
C逻辑或直接寻址位的反
2
2
JC rel
C为1转移
2
2
JNC rel
C为零转移
2
2
JB bit,rel
直接寻址位为1转移
3
2
JNB bit,rel
直接寻址为0转移
3
2
JBC bit,rel
直接寻址位为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 汇编 学习