![单片机原理与应用 第三章汇编指令系统_第1页](http://file4.renrendoc.com/view/aaf20987af0a72d3c2ff3adf7da25e67/aaf20987af0a72d3c2ff3adf7da25e671.gif)
![单片机原理与应用 第三章汇编指令系统_第2页](http://file4.renrendoc.com/view/aaf20987af0a72d3c2ff3adf7da25e67/aaf20987af0a72d3c2ff3adf7da25e672.gif)
![单片机原理与应用 第三章汇编指令系统_第3页](http://file4.renrendoc.com/view/aaf20987af0a72d3c2ff3adf7da25e67/aaf20987af0a72d3c2ff3adf7da25e673.gif)
![单片机原理与应用 第三章汇编指令系统_第4页](http://file4.renrendoc.com/view/aaf20987af0a72d3c2ff3adf7da25e67/aaf20987af0a72d3c2ff3adf7da25e674.gif)
![单片机原理与应用 第三章汇编指令系统_第5页](http://file4.renrendoc.com/view/aaf20987af0a72d3c2ff3adf7da25e67/aaf20987af0a72d3c2ff3adf7da25e675.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章汇编指令系统
本章学习目标:
理解汇编语言的一般规则,能够读懂汇编程序,并能够编写简短的程序段。知识要点:
寻址方式;
汇编指令的功能;
汇编指令的典型应用。3.2MCS-51单片机的寻址方式3.1汇编指令格式3.3MCS-51单片机指令功能3.4汇编指令总结汇编语言(AssemblyLanguage)——用助记(字)符代替操作码,用地址符号代替地址码的一种面向机器的程序设计语言;汇编语言优点——代码精炼、执行速度快,但不便于编写较复杂的程序;3.1汇编指令格式指令:使计算机完成基本操作的命令指令系统:全部指令的集合指令的四大功能:说明操作的类型(命令的类型)说明参与运算的数或数所在的地址说明结果所在的地址说明下一条指令所在的地址
MOVA,#1ADDA,#23.1汇编指令格式一条汇编语言指令中最多包含4个区段,其一般格式为:一、指令格式[标号:]操作码[操作数][;注释]START:
MOV
A,#12H;机器码7412H3.1汇编指令格式………….…….0FFFH1000H1001H…….xxHxxHxxH74H12HROMSTART→ ORG1000HSTART:MOVA,#12H;机器码7412H ……举例:⑴标号:称为符号地址,其值对应于指令首字节的存放地址。
用于标识一段程序的开始,为转移指令提供目的地址。
①由用户定义的1~6个英文字母和数字组成②标号必须用冒号“:”与操作码分隔。3.1汇编指令格式①由标准助记字符组成,是指令的必需部分,不可缺少。②51单片机共有42种操作码,不区分大小写。MOV
A,#12H;
move(传送)SETBP1.0 ;setbit(置位)CJNEA,R0,START;compareandjumpifnotequal(比较跳转)举例:⑵操作码:表示指令的操作功能。
[标号:]操作码[操作数][;注释]3.1汇编指令格式①操作数是指令要操作的对象(如地址,寄存器,常数等);②操作数可分为目的操作数和源操作数;MOVA,#03H;A03HADDA,#10H ;A+10H→ACLRA ;A←0RET ;子程序返回举例:⑶操作数:参加操作的数据或数据地址。
[标号:]操作码[操作数][;注释]3.1汇编指令格式①注释是对指令的解释或说明,用以提高程序的可读性;②以英文分号;开始,无需结束符号;③不会形成机器码,可以省略。SETBP1.0 ;P1.0←1CJNEA,R0,START;若A≠R0,转START
举例:⑷注释:指令功能说明。
[标号:]操作码[操作数][;注释]3.1汇编指令格式在指令手册中,每条指令的操作数是以简记符号表示的。二、指令中的简记符号掌握简记符号规则→便于阅读源程序(查指令手册)助记符格式操作MOVA,RnA←(Rn)MOVA,directA←(direct)MOVA,@RiA←((Ri))MOVA,#dataA←data3.1汇编指令格式Rn:当前寄存器组的8个通用寄存器R0~R7(n=0~7)。Ri:当前寄存器组中的2个寄存器R0,R1,
用作间接寻址的寄存器(i=0,1)。direct:
内部RAM的8位地址,指代00H~FFH。#data:
包含在指令中的8位立即数。指代00H~FFH。#data16:包含在指令中的16位立即数。指代0000H~FFFFH。addr16:16位目的地址,64KB存储器空间中的地址。
指代0000H~FFFFH。3.1汇编指令格式addr11:表示11位目的地址,用于2KB范围内的程序跳转。rel:
相对转移指令中的偏移量,为8位符号数。
@:寄存器间接寻址符号。
/:位操作数的前缀,表示对该位状态取反。
(X):某寄存器或某单元中的内容。
((X)):以X单元的内容为地址的存储器单元内容,即(X)做地址
,该地址单元的内容用((x))表示。←:表示将箭尾一方的内容传送至箭头的一方。3.1汇编指令格式3.2MCS-51单片机的寻址方式3.1汇编指令格式3.3MCS-51单片机指令功能3.4汇编指令总结3.2MCS-51指令的寻址方式
寻址方式:寻找操作数地址或指令地址的方式。
寻址方式类型:7种
立即数寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址一、立即寻址立即寻址:将操作数直接编码于指令中。特点:操作数可以从指令中直接取得,速度快。用途:用于对寄存器或存储单元进行初始赋值。立即寻址中的操作数称为立即数,用“#”表示。3.2MCS-51指令的寻址方式例如,指令MOVA,#45H
机器代码74453.2MCS-51指令的寻址方式二、直接寻址直接寻址:在指令中直接给出操作数的字节地址或位地址。适用范围:只能在下述三种地址空间内寻址。(1)特殊功能寄存器(SFR);(2)内部数据存储器RAM的低128个字节;(3)位地址空间。3.2MCS-51指令的寻址方式例如:指令MOVA,45H
机器代码E5453.2MCS-51指令的寻址方式直接地址direct是操作数所在的存储单元地址。直接地址direct可以用两位十六进制表示,也可以用SFR的符号代替。
如:MOVSP,#30H等同于MOV81H,#30H直接寻址方式是访问SFR空间的唯一方式。3.2MCS-51指令的寻址方式三、寄存器寻址寄存器寻址:操作数存于寄存器中,
通常在指令中给出寄存器的编号。特点:指令短,速度快适用范围工作寄存器区中的R0-R7
A(累加器)、B(仅限于乘除法指令)、DPTRC(布尔处理器)3.2MCS-51指令的寻址方式3.2MCS-51指令的寻址方式寄存器寻址:四、寄存器间接寻址将操作数的单元地址存放在特定寄存器中,通常在指令中只给出寄存器的编号,而不是操作数的单元地址。@符号是其标志。特点:指令简洁,便于对连续存放的数据进行处理。特定寄存器:R0,R1:用于访问片上RAM空间DPTR:用于访问外部数据空间SP:用于访问堆栈空间
上述寄存器的作用等同于指针!3.2MCS-51指令的寻址方式3.2MCS-51指令的寻址方式寄存器间接寻址:五、变址寻址操作数的有效地址为基址寄存器与变址寄存器内容之和。基址寄存器:PC(或DPTR),变址寄存器:A
用途
用于查表指令,读取存放于程序空间中的常数表,如函数表,字模表等。3.2MCS-51指令的寻址方式93…5C472000SFRDPHDPLA2047H程序存储器
MOVCA,@A+DPTR
机器代码93执行前:A=47H,DPTR=2000H,(2047H)=5CH执行后:A=5CH。3.2MCS-51指令的寻址方式六、相对寻址用于确定下一条执行指令的入口地址,在指令中给出程序跳转的偏移量rel,用于转移指令中。转移目的地址=PC当前值+rel。rel:8bits符号数3.2MCS-51指令的寻址方式例如:JCrel机器码4016
“40”:操作码“16”:偏移量当前PC值=1002H3.2MCS-51指令的寻址方式七、位寻址在指令中直接给出操作数的位地址特点直接操作单元中的某一个位,方便了程序设计,提高了程序的可读性。适用范围片内RAM区支持位寻址方式的单元,即20H-2FH。SFR中支持位寻址方式的寄存器。3.2MCS-51指令的寻址方式例如: 指令SETB3AH
机器代码D23A
3.2MCS-51指令的寻址方式执行后:27H.2=13AH是单元27H中D2的位地址位地址的表示方法1)直接用两位十六进制来表示,如3AH2)采用单元字节地址加“.”符号的方式,如27H.23)采用SFR名称加“.”符号的方式,如ACC.74)采用位符号的方式,如C,P等。3.2MCS-51指令的寻址方式寻址方式小结3.2MCS-51指令的寻址方式思考:1)访问片上低端RAM区可以使用哪些寻址方式?2)访问SFR区使用哪种寻址方式?3)访问高端RAM区使用哪种寻址方式?3.2MCS-51指令的寻址方式3.2MCS-51单片机的寻址方式3.1汇编指令格式3.3MCS-51单片机指令功能3.4汇编指令总结3.3指令系统寻址方式和指令系统是衡量微型机性能的重要指标。寻址方式越多,指令越丰富,指令执行速度越快,反映该机型的总体功能就越强。指令系统对编程的灵活性、有效性有很大的影响。3.3指令系统单机器周期指令有64条;双机器周期指令有45条;四机器周期指令有2条。MCS-51的指令系统共有111条指令单字节指令49条;双字节指令46条;三字节指令16条。按指令字节长度分:按指令执行的时间分:按功能可分为五类:(1)数据传送类指令;(2)算术运算类指令;(3)逻辑运算类指令;(4)程序控制类指令;(5)位(布尔)操作类指令。指令的表示方法助记符形式、机器码形式学习目标1.掌握指令的功能,学习分析指令功能的方法2.理解指令所涉及的寻址方式,操作数3.了解指令的执行时间和长度4.了解指令对PSW的影响,即对Cy,OV,AC,P的影响3.3指令系统3.3.1数据传送类指令数据传送类指令的作用是什么呢?实现寄存器,数据存储器单元中数据的读写;
实现程序存储器单元中数据的读出。3.3.1数据传送类指令MemoryMap?idata区(00H-FFH)Rn(00H-1FH)data区(00H-7FH)SFR区(A,BDPH,DPL,SP,PSW)code区(0000H-FFFFH)xdata区(0000H-FFFFH)如何实现不同存储空间中数据的传送?类型指令说明助记符执行的操作
片内数据传送累加器A为目的操作数的传送MOVA,RnA←(Rn)MOVA,@RiA←((Ri))MOVA,#dataA←dataMOVA,directA←(direct)工作寄存器Rn为目的操作数的传送MOVRn,ARn←(A)MOVRn,#dataRn←dataMOVRn,directRn←(direct)直接地址direct为目的操作数的传送MOVdirect,A(direct)←(A)MOVdirect,Rn(direct)←(Rn)MOVdirect,@Ri(direct)←((Ri))MOVdirect,#data(direct)←dataMOVdirect2,direct1(direct2)←(direct1)间接地址为目的操作数的传送MOV@Ri,A((Ri))←(A)MOV@Ri,direct((Ri))←(direct)MOV@Ri,#data((Ri))←dataDPTR为目的操作数的传送MOVDPTR,#data16DPTR←data163.3.1数据传送类指令类型指令说明助记符执行的操作
片外RAM数据传送写数据到片外RAMMOVX@Ri,A((Ri))←(A)MOVX@DPTR,A((DPTR))←(A)从片外RAM读数据MOVXA,@Ri(A)←((Ri))MOVXA,@DPTR(A)←((DPTR))ROM访问
MOVCA,@A+PC(A)←((A)+(PC))
MOVCA,@A+DPTR(A)←((A)+(DPTR))数据交换
XCHA,RnA↔Rn
XCHA,@RiA↔((Ri))
XCHA,directA↔(direct)
XCHDA,@RiA0~3
↔((Ri0~3))
SWAPAA0~3↔A4~7堆栈操作
PUSHdirectSP←SP+1,((SP))←direct
POPdirectdirect←((SP)),SP←SP-13.3.1数据传送类指令3.3.1数据传送类指令
MOV[目的操作数],
[源操作数]一、内部8位数据传送指令*立即数不能作目的操作数。
源操作数:指待传送的数据源
目的操作数:指数据源传送到的目的地
3.3.1数据传送类指令1)累加器A为目的操作数的指令(4条)助记符格式操作MOVA,RnA←(Rn)MOVA,directA←(direct)MOVA,@RiA←((Ri))MOVA,#dataA←data433.3.1数据传送类指令累加器A寄存器R0内部RAM40H内部RAM50H40H50H30H10H例:已知相应单元的内容指令结果MOVA,#20H;A20H
A=20HMOVA,40H;A(40H)A=30HMOVA,R0;A(R0)A=50HMOVA,@R0;A((R0)),A(50H)A=10H执行如下操作后443.3.1数据传送类指令累加器A寄存器R0内部RAM40H内部RAM50H40H50H30H10H例:已知相应单元的内容执行如下操作后:MOVA,#20H;,A=20HA20HMOVA,40H;,A=30HA(40H)MOVA,R0;,A=50HA(R0)MOVA,@R0;,A=(50H)=10HA((R0))453.3.1数据传送类指令2)寄存器Rn为目的操作数的指令(3条)助记符格式操作MOVRn,ARn←(A)MOVRn,directRn←(direct)MOVRn,#dataRn←dataMOV
R0,#30H;R0=30HMOVR6,70H;R6=(70H)463.3.1数据传送类指令3)直接地址为目的操作数的指令(5条)助记符格式操作MOVdirect,A(direct)←(A)MOVdirect,Rn(direct)←(Rn)MOVdirect2,direct1(direct2)←(direct1)MOVdirect,@Ri(direct)←((Ri))MOVdirect,#data(direct)←data3.3.1数据传送类指令例:已知(30H)=1FH,(40H)=5FH,执行指令:
MOV30H,#40H;(30H)←40H ;机器代码:753040MOV30H,40H;(30H)←(40H) ;机器代码:854030执行后:(30H)=5FH,(40H)=5FH执行后:(30H)=40H,(40H)=5FH3.3.1数据传送类指令举例:
MOVSP,#30H;SP=30H,給堆指针赋值
MOVPSW,#0001
1000B;选择工作寄存器组3
;RS1=1,RS0=1
3.3.1数据传送类指令4)间接地址为目的操作数的指令(3条)
将累加器A、片内RAM单元内容或立即数传送至R0、R1指向的内部RAM存储单元中。
助记符格式操作MOV@Ri
,A((Ri))←(A)MOV@Ri
,direct((Ri))←(direct)MOV@Ri
,#data((Ri))←data例:分析如下程序段,指出指令执行后20H和21H单元的结果。结果:(20H)=38H,(21H)=48H∵R0=20H∴MOV@R0,#38H等价于MOV20H,#38H3.3.1数据传送类指令MOVR0,#20H;R020H;R0=20HMOV@R0,#38H;((R0))38H;(20H)=38HMOV21H,#48H;(21H)48H;(21H)=48H3.3.1数据传送类指令二、16位数目标地址传送指令MOVDPTR,#data16将16位立即数送入数据指针DPTR,其中高位字节送DPH,低位字节送DPL例:
MOVDPTR,#2068H;机器代码902068指令执行后:DPTR=2068H
DPH=20H,DPL=68H3.3.1数据传送类指令访问片外数据存储器RAM的限制:只能用MOVX指令只能用寄存器间接寻址方式,即@DPTR或@Ri方式只能通过累加器A进行读写三、累加器A与片外数据存储器传送指令助记符格式操作MOVX
A,@RiA←((Ri))MOVX
A,@DPTRA←((DPTR))MOVX
@Ri,A
((Ri))←AMOVX
@DPTR,A
((DPTR))←(A)例:已知(38H)=12H,试分析如下程序段的功能。注意:片内RAM单元与片外RAM单元中的数据不能直接对传。功能:将片内RAM38H单元中的数12H传送到片外RAM的1818H单元中。
能否直接将((DPTR))←((R0)),即MOVX@DPTR,@R03.3.1数据传送类指令MOVR0,#38HMOVDPTR,#1818HMOVA,@R0 MOVX@DPTR,A;R0=38H;DPTR=1818H;A=((R0))=(38H)=12H;((DPTR))=A;(1818H)=12H3.3.1数据传送类指令选用数据指针DPTR间接寻址、可寻址64K字节片外RAM。低8位(DPL)地址由P0口输出;高8位(DPH)地址由P2口输出;形成16位地址总线对片外RAM寻址存储单元。另外,数据也是通过P0口输入/输出的。例:将片外RAM0738H单元内容传送给A。MOVP2,#07HMOVR0,#38HMOVXA,@R0;在MOVXA,@R0指令中,默认使用P2端口传送存储单元的高8位地址,R0中的低8位地址由P0口传送。
在使用此类指令时注意不要忘记对P2端口置值!3.3.1数据传送类指令3.3.1数据传送类指令例:已知A=4EH,R0=10H,(10H)=5FH;
执行指令:XCHA,@R0 结果:A=5FH,(10H)=4EH。四、
交换指令(5条)助记符格式操作XCHA,RnA↔RnXCHA,@RiA↔((Ri))XCHA,directA↔(direct)将累加器A的内容与源操作数所指出的数据互相交换。1)字节交换指令3.3.1数据传送类指令助记符格式操作XCHDA,@RiA3-0↔((Ri)3-0)2.半字节交换指令将累加器A中低4位与Ri间接寻址单元内容的低4位相互交换,而各自的高4位内容不变。3.3.1数据传送类指令
例:已知A=30H,(20H)=07H,执行以下指令
MOVR0,#20HXCHDA,@R0MOV@R0,A;R0=20H;A3-0↔(20H)3-0
,;((R0))=A,(20H)=37H
A=37H,
(20H)=00HA=30H(20H)=07H3.3.1数据传送类指令例:已知A=86H,执行指令,
SWAPA;A=68H
助记符格式操作SWAPAA3-0↔A7-43.累加器A的高4位与低4位内容互换指令将A的高、低两半字节内容相互交换。3.3.1数据传送类指令五、堆栈操作指令助记符格式操作PUSHdirect
SP←SP+1,((SP))←(direct)POPdirect
(direct)←((SP)),SP←SP-1PUSH是进栈指令:首先将堆栈指针SP的内容加1,指向空单元;然后将直接寻址单元中的数据压入到SP所指示的单元中。POP是出栈指令:首先将栈顶SP所指示的单元内容弹出到直接寻址单元中;然后将SP的内容减1,此时SP指向新的栈项。3.3.1数据传送类指令例:设SP=30H,(50H)=80H,指令如下:
PUSH50HPOP40H
8050H…xx40H…SPxx31Hxx30H8050H…XX40H…8031Hxx30HSP;SP=SP+1,SP=31H;((SP))(50H),(31H)=(50H)=80H8050H…8040H…8031Hxx30HSP;(40H)((SP)),(40H)=(31H)=80H;SP=SP-1,SP=30H3.3.1数据传送类指令例:设片内RAM(30H)=55H,(40H)=AAH,程序如下:
MOVSP,#1FH PUSH30H PUSH40H POP30H POP40H程序执行结果:(30H)=AAH,(40H)=55HSP=1FH压入堆栈指令和弹出堆栈指令成对使用后,堆栈指针SP的内容不变。程序功能:通过堆栈操作实现两单元中内容互相交换3.3.1数据传送类指令MCS-51的程序存储器主要用于存放应用程序,但也存放应用程序中必需用的常数(例如表格数据)。MCS-5有两条查表指令,用于从程序存储器中读取数据。六、查表指令助记符格式操作MOVCA,@A+PCPC←PC+1,A←((A)+(PC))MOVCA,@A+DPTRA←((A)+(DPTR))3.3.1数据传送类指令例:字符0-F的ASCII码如下所示,编写指令,求出4的ASCII码,结果存于A中。
MOVA,#04HMOVDPTR,#0203HMOVCA,@A+DPTR;A((A)+(DPTR))执行前:A=04H执行后:A=((A)+(DPTR))=(04H+0203H)=(0207H)=34H
ROM地址数值0212H460211H45......0209H360208H350207H340206H330205H320204H310203H30ASCII表首地址3.3.1数据传送类指令基于DPTR的查表指令
MOVCA,@A+DPTR;A←((A)+(DPTR))
特点:
在64KB程序存储空间内,表格放置位置和大小可以灵活变化。3.3.1数据传送类指令表格位置受限制:数据表必须放置在查表指令之后的256字节范围内。表格大小受限制:不能超过255字节。
基于PC的查表:MOVCA,@A+PC
MOV——片内数据存储单元之间数据的传送
(含片内RAM区,SFR区)
MOVX——片外数据存储单元与A之间的传送
MOVC——程序存储区(含片内和片外)与A之间的数据传送3.3.1数据传送类指令数据传送指令小结3.3.1数据传送类指令MemoryMapidata区(00H-FFH)Rn(00H-1FH)data区(00H-7FH)SFR区(A,BDPH,DPL,SPPSW)code区(0000H-FFFFH)xdata区(0000H-FFFFH)AMOVXMOVCMOVMOV对MOV指令的限制非法指令MOVR1,R2MOVR2,@R03.3.1数据传送类指令3.3.1数据传送类指令数据传送类指令对PSW的影响一般情况下不影响Cy,OV,AC,P标志,但存在以下特例。特例1:目的操作数为A时,影响P标志
如:MOVA,#40H特例2:目的操作数为PSW时,改变PSW中相应标志
如:MOVPSW,#00001000B3.3.1数据传送类指令思考:1.指令的长度与操作数的寻址方式有何关系?2.指令的执行时间与操作数的寻址方式有何关系?3.3.2算术运算类指令算术运算指令共有24条:ADD:加法指令。ADDC:带进位加法,用于多字节加法。SUBB:带借位减法,可用于单字节或多字节减法。MUL/DIV:乘、除法指令,仅适用于无符号数。DA:十进制调整指令,用于BCD码运算。INC/DEC:加一、减一指令。
3.3.2算术运算类指令A必须是目的操作数,源操作数可以有多种形式。一、加法类指令1)加法指令(4条)助记符格式操作ADDA,RnA←A+(Rn)ADDA,directA←A+(direct)ADDA,@RiA←A+((Ri))ADDA,#dataA←A+data3.3.2算术运算类指令例:设A=85H,R0=20H,(20H)=9EH,执行指令,
ADDA,@R0 10000101 +)10011110
00100011
结果:A=23H、CY=1、OV=1、AC=1、P=1。对于无符号数运算:
85H+9EH=133+158=291>255对于符号数运算:
85H+9EH-123-98=-221<-128如何理解运算结果?
结果超出无符号数范围,故Cy=1
结果超出符号数范围,故OV=13.3.2算术运算类指令3.3.2算术运算类指令带进位加法指令常用于多字节加法运算。2)带进位加法指令(4条)助记符格式操作ADDCA,RnA←A+(Rn)+CYADDCA,directA←A+(direct)+CYADDCA,@RiA←A+((Ri))+CYADDCA,#dataA←A+data+CY3.3.2算术运算类指令例:设A=4EH,R0=20H,(20H)=9EH,CY=1,执行指令:ADDCA,@R0。其操作如下:
01001110 10011110 +)1
11101101程序执行结果:A=EDH,CY=0,OV=0AC=1,P=0。3.3.2算术运算类指令
例:
编写代码计算12A4H+0FE7H,结果存放于内部RAM单元
41H和40H,前者存放高位字节。MOVA,#0A4H;被加数低8位→AADDA,#0E7H;加数低8位E7H与A相加,A=8BH,Cy=1MOV40H,A;A→(40H),存低8位结果MOVA,#12H;被加数高8位→AADDCA,#0FH;加数高8位+A+Cy,A=22HMOV41H,A;存高8位运算结果12A40FE7+8B22提示:当立即数以字母A-F开头时,必须用数字0与“#”隔开。3.3.2算术运算类指令
MOV R0,#50H ;设置第一个数地址指针
MOV R1,#52H ;设置第二个数地址指针
MOV A,@R0 ;取低位
ADD A,@R1 ;两数低位相加
MOV @R0,A ;存“和”低位
INC R0 INC R1 MOV A,@R0 ;取高位
ADDC A,@R1 ;两数高位相加
MOV @R0,A ;存“和”高位
SJMP $;踏步指令,动态停机
例:
编写程序,实现两个16位二进制无符号数相加求和,其结果仍为16位。解:设片内RAM50H、51H和52H、53H分别存放两个16位无符号数,要求将和存入50H、51H(低位在前,高位在后)。编写程序如下:问题拓展:
两个16bits数据相加之后,在最高位上产生进位,应该如何修改程序?3.3.2算术运算类指令
将操作数所指定单元的内容加1。3)加1指令(5条)助记符格式操作INCAA←A+1INCRnRn←Rn+1INCdirect(direct)←(direct)+1INC@Ri((Ri))←((Ri))+1INCDPTRDPTR←DPTR+13.3.2算术运算类指令INC指令特点:INC指令不影响Cy、AC、OV标志。除INCA指令外不影响P标志。INCdirect指令的操作对象是IO端口时,
执行的是读-修改-写操作,如INCP1
读:读锁存器,而不是引脚。
修改:加1
写:写入端口锁存器3.3.2算术运算类指令例:R0=30HINCR0;R0=31H,通常用于移动指针INC@R0;((R0))+1((R0)),例:R0=30H,(30H)=00H;(30H)+1(30H),(30H)=01H此处,该指令等同于INC30H指令
;R0内容不变3.3.2算术运算类指令对BCD码加法运算的结果自动进行修改只能跟在ADD和ADDC加法指令之后,不适用于减法A中的二进制码自动调整为BCD码4)二-十进制调整指令助记符格式操作DAA修正BCD码结果例:编写指令,计算两个十进制数38、49的和。
解:38+49=87MOVA,#38H;A=38H(38的BCD码)ADDA,#49H;A=38H+49H=81H,AC=1DAA;A=81H+06H=87H结果:A=87H(87的BCD码)3.3.2算术运算类指令实现了单字节BCD码加法。3.3.2算术运算类指令DAA执行的操作:1)
执行+06H操作,当条件1成立时:A3-0>9或AC=12)
执行+60H操作,当条件2成立时:A7-4>9或CY=13)
执行+66H操作,当条件1,2均成立。3.3.2算术运算类指令MCS-51指令系统中,只有带借位的减法指令在进行单字节减法运算时,应先将进位标志位CY清0。
二、减法类指令1)带借位的减法指令(4条)助记符格式操作SUBBA,RnA←A-(Rn)-CYSUBBA,directA←A-(direct)-CYSUBBA,@RiA←A-((Ri))-CYSUBBA,#dataA←A-data-CY如何实现多字节的减法?3.3.2算术运算类指令
CLR C
;CY清0 MOV A,30H SUBBA,40H;A(30H)-(40H)-CY MOV 50H,A MOV A,31H SUBBA,41H ;A(31H)-(41H)-CY MOV 51H,A MOV A,32H SUBBA,42H ;A(32H)-(42H)-CY MOV 52H,A例:
编写多字节减法运算程序。解:设被减数在片内RAM30H~32H单元中,减数在40H~42H单元中,低位数对应低位地址,高位数对应高位地址,其差值存入50H~52H单元中。如何实现BCD码减法?3.3.2算术运算类指令十进制数:XBCD-YBCD=XBCD+[-YBCD]补数[-YBCD]补数=9AH-YBCD例如:-2BCD的补数=9AH-02H=98H1的BCD码是01H,99的BCD码是99H。01H+99H=9AH9AH是两位BCD码数的模
3.3.2算术运算类指令2)减1指令(4条)助记符格式操作DECAA←A-1DECRnRn←Rn-1DECdirect(direct)←(direct)-1DEC@Ri((Ri))←((Ri))-1除第一条指令影响奇偶标志位外,其余指令操作均不影响PSW标志。与加1指令一样,对并行I/O口的输出内容进行减1操作时,其值将从I/O口的输出锁存器读回,减1后的值仍保存于输出锁存器中,而不是对该输出口的引脚上内容进行减1操作。3.3.2算术运算类指令限定两个8位无符号数相乘。乘积的高8位存于B,低8位存于A。如果乘积大于255(FFH),则溢出标志位OV=1,否则清0,CY总是为0。三、乘法指令助记符格式操作MULABA×B→BA例
:阅读以下程序,说明程序功能。MOV A,#100MOV B,#4MUL AB MOV 30H,A MOV 31H,B ;A←100,A=64H;B←4,B=04H;A×B→BA;(30H)←A;(31H)←B
;B=01H;A=90H;(30H)=90H;(31H)=01H功能:实现两个8位数乘法运算,将乘积的高8位和低8位分别存入片内RAM31H和30H单元。3.3.2算术运算类指令3.3.2算术运算类指令限定两个无符号数的除法。商的整数部分存于A中,余数存于B中。清Cy,OV标志。特例,如果除数为0,则指令执行结果为不定值。这是无意义的,即0不能作除数,此时OV=1。助记符格式操作DIVABA÷B的商→A,余数→B四、除法指令如何利用除法指令将十六进制数转换为BCD码?3.3.2算术运算类指令
A=F8H
=248=2*100+4*10+8
248/100=2…4848/10=4…8AB在计算机中BCD码可以如何存放?3.3.2算术运算类指令02R748R6按压缩BCD码方式020408按非压缩BCD码方式040840SWAPA48ADD3.3.2算术运算类指令如何拼装2个字节?3.3.2算术运算类指令
MOV B,#100 DIV AB ;A中商为百位数
MOV R7,A ;百位数送R7 MOV A,#10 XCH A,B ;B中余数与A中除数10互换
DIV AB ;A中得十位数,B中得个位数
SWAP A ADD A,B ;组合成2位BCD码
MOV R6,A ;十位、个位数送R6 SJMP $例:
编写将累加器A中十六进制数转换成3位BCD码程序,结果的百位数存于R7.十位数和个位数存于R6。(胡-例3.3.7)解:应用除法指令,将待转换的数除以100,得百位数,再将余数除以10,得十位数的余数,即为个位数。编写程序如下:3.3.2算术运算类指令ADD、ADDC、SUBB:
适用于符号数和无符号数的运算。
每次执行后均会刷新Cy,OV,AC,P标志。实现多字节加减法:
使用ADDC和SUBB指令。实现多字节BCD码的加法:
使用ADDC和DA。INC、DEC指令:
不改变Cy,AC的状态,因此不要与DA指令配合使用。算数运算指令小结指令的典型应用加减法(单字节、多字节;符号数、无符号数);BCD码加减法(单字节、多字节);乘除法(单字节无符号数)字节拼装(非压缩BCD码压缩BCD码)3.3.2算术运算类指令3.3.3逻辑运算类指令逻辑运算:逻辑与ANL、逻辑或ORL、逻辑异或XRL
取反CPL、清零CLR循环移位RR、RRC、RL、RLC。3.3.3逻辑运算类指令一、逻辑与指令助记符格式操作ANLA,RnA←A∧RnANLA,directA←A∧(direct)ANLA,@RiA←A∧((Ri))ANLA,#dataA←A∧dataANLdirect,A(direct)←(direct)∧AANLdirect,#data(direct)←(direct)∧data3.3.3逻辑运算类指令例如:已知A=8DH,R0=7EH,执行指令:ANLA,R0
10001101(8DH) ∧)01111110(7EH) --------------------------------- 00001100(0CH)结果:A=0CH。功能:
用ANL指令屏蔽(清零)某些位,即将需屏蔽的位和0相与。3.3.3逻辑运算类指令二、逻辑或指令助记符格式操作ORLA,RnA←A∨RnORLA,directA←A∨(direct)ORLA,@RiA←A∨((Ri))ORLA,#dataA←A∨dataORLdirect,A(direct)←(direct)∨AORLdirect,#data(direct)←(direct)∨data3.3.3逻辑运算类指令例如:已知A=C0H,R0=55H,执行指令ORLA,R0。
11000000(C0H) ∨)01010101
(55H)
-------------------------------- 11010101(D5H)逻辑或指令可以实现置位的功能。同时逻辑或指令也可用于组合信息,如字节拼装。3.3.3逻辑运算类指令助记符格式操作XRLA,RnA←A⊕RnXRLA,directA←A⊕(direct)XRLA,@RiA←A⊕((Ri))XRLA,#dataA←A⊕dataXRLdirect,A(direct)←(direct)⊕AXRLdirect,#data(direct)←(direct)⊕data三、逻辑异或指令3.3.3逻辑运算类指令 例:已知A=A5H,要求对其高4位取反。
执行指令XRLA,#11110000B10100101(A5H)
)11110000(F0H)
-------------------------------01010101(55H)
结果:A=55H。XRL操作可用于对某些位取反。XRL等同于不进位加法。3.3.3逻辑运算类指令五、累加器A取反指令
CPLA ;A←A将累加器A的内容逐位取反。
字节清零、取反操作仅限于A。四、累加器A清零指令
CLRA ;A←0将累加器A的内容清0。3.3.3逻辑运算类指令六、累加器A循环移位指令RL A RR A RLC A RRC A RL/RR:A中内容向左或向右自循环一位。RLC/RRC:将A的内容连同CY循环左移或右移一位。限制:循环指令仅限于A3.3.3逻辑运算类指令如何利用循环移位实现乘2,或除2运算?0000000100000010AA0000010000000010AARLARRA3.3.3逻辑运算类指令问题拓展:多字节数右移一位如何实现?1000000100000010BA0100000010000001BA无符号数右移1位1100000010000001BA符号数右移1位时最高位要补1,保证符号位性质不变!3.3.3逻辑运算类指令逻辑运算指令的小结限制:ANL,ORL,XRL指令第一操作数只能是A,或direct;
第一、第二操作数均不支持间接寻址。RL/RR/RLC/RRC仅仅适用于A。针对字节操作的CLR、CPL指令仅仅适用于A。3.3.3逻辑运算类指令逻辑指令的典型应用对字节中的特定位进行清零、置1,或取反。
字节拼装(非压缩BCD码压缩BCD码)字节移位(单字节、多字节;左移、右移;无符号数、符号数)求补运算(单字节、多字节)如何实现数据单元填充?控制转移类指令属于程序控制指令。
通过改变程序计数器PC中的内容来实现的。作用:
改变程序执行的方向,实现分支结构,或循环结构,
或调用子程序,
或从子程序返回。分类
转移指令、
调用子程序指令、
返回指令。3.3.4控制转移类指令
通过改变PC的内容,以改变正在执行的指令顺序,转向新的地址继续执行下去,从而实现程序分支。3.3.4控制转移类指令一、转移类指令3.3.4控制转移类指令转移指令分类无条件转移SJMP:相对转移,转移范围-128至+127字节AJMP:绝对转移转移范围2KBLJMP:长转移,转移范围64KBJMP@A+DPTR:散转条件转移转移范围,-128至+127字节1)长转移指令(3字节)
LJMP addr16 ;PC←addr16举例2000H:LJMP2100H ;PC=2100H3.3.4控制转移类指令1、无条件转移指令(4条)3.3.4控制转移类指令AJMP2100……xxxx2030Hxx2000H2100H2000H:0010000000000000
2030H:0010000000110000
27FFH:0010011111111111
AJMPaddr11;PC←PC+2,PC.10~PC.0←addr112)绝对转移指令(2字节)举例2030H:AJMP 2100H2031H2032H:0010000000110010
2100H:0010000100000000AJMP指令的转移范围是2KB。要求转移目的地址与AJMP指令的下一条指令位于同一个2KB区域内,即它们的高5位地址相同。3.3.4控制转移类指令限制:3)相对转移指令(2字节)
SJMPrel;PC←PC+2+rel
3.3.4控制转移类指令3.3.4控制转移类指令SJMP指令详解:80FExxxx2000Hxx2001H2002HHERE:SJMP HERE目的地址=PC当前值+rel=2002H+FEH=2000HPC02HFEH+
00H丢弃MCS-51单片机的指令系统中没有停机指令,通常使用SJMP构成踏步指令使程序“原地踏步”,反复执行SJMP指令。
例如: HERE: SJMP HERE或 SJMP $
其中$:符号地址,代表该指令的首地址若有中断发生,或者CPU复位,就可以脱离该状态。3.3.4控制转移类指令4)间接寻址的无条件转移指令
JMP @A+DPTR;PC←(A)+(DPTR)
3.3.4控制转移类指令常用于多分支选择转移,由DPTR内容决定多分支程序转移表的首地址,由A的内容选择其中的某一个分支转移程序(或指令),从而使用一条间接转移指令就可以代替多条转移指令,具有散转功能,因而又称散转指令。变址寻址转移指令与前述两条转移指令的主要区别是:前述两条指令的转移目标地址是在汇编或编程时已确定的;该指令的转移目标地址是在程序运行时动态决定的,它的目标地址是以DPTR的内容为起点的256个字节地址空间范围内的指定地址。3.3.4控制转移类指令JMP @A+DPTR的特点:
例:设A为0~4之间的偶数,执行程序,根据A的内容实现散转。
3.3.4控制转移类指令JMP@A+DPTR
024LOC
OBJ源程序
2000H:XXXXXX MOV DPTR,#JPTBL 2003H:XX JMP @A+DPTR 2004H:XXXX JPTBL: AJMP LABEL0 2006H:XXXX
AJMP LABEL1 2008H:XXXX
AJMP LABEL2 LABEL0:INCA SJMP$……
3.3.4控制转移类指令标号JPTBL,符号地址,其值=2004H,故DPTR=2004HA=2时,PC=(DPTR)+(A)=2004H+02H=2006H;
2.条件转移指令(10条)根据给定的条件进行检测,
若条件得到满足,则程序转向指定的目标地址去执行;
否则,不转移,继续往下执行程序。条件转移指令都是相对转移指令。
其转移的范围是以转移指令的下一条指令的第一个字节地址为起始地址的-128~+127个字节内。3.3.4控制转移类指令条件转移指令JZ/JNZ:测试A的值DJNZ:测试X≠0?CJNE:测试X≠Y?3.3.4控制转移类指令1)累加器A判零转移指令
JZ rel;PC=PC+2,
ifA=0,thenPC=PC+rel JNZ rel;3.3.4控制转移类指令例:测试A的内容是否为0
AGAIN: MOV A,P1;读端口引脚
JZ AGAIN MOV 20H, A;非0则保存数据
3.3.4控制转移类指令P1=0?YN2)比较转移指令(判断X=Y?)
CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel3.3.4控制转移类指令3.3.4控制转移类指令CJNE是三字节指令若第一操作数S1大于或等于第二操作数S2,则CY=0;若第一操作数S1小于第二操作数S2,则CY=1。操作数S1,S2的内容保持不变!2)循环转移指令
DJNZRn,rel;PC=PC+2;RnRn-1,ifRn≠0,thenPC=PC+rel;
DJNZdirect,rel;PC=PC+3;(direct)(direct)-1,if(direct)≠0,thenPC=PC+rel;
3.3.4控制转移类指令指令执行示意图:使用DJNZ指令前,应将循环次数赋值给计数器,即预置到工作寄存器或片内RAM直接地址单元中。3.3.4控制转移类指令3.3.4控制转移类指令 MOV R0, #30H MOV R6, #10
CLR ANEXT: MOV @R0, A INC R0 DJNZ R6, NEXT……程序功能:对片上RAM30H为首地址的10个单元清零。第一次循环:;R0=30H;R6=10;A=0;((R0))A,(30H)=0;R0=31H;R6=R6–1=9,;转NEXT第二次循环;
;(31H)=0;R0=32H;R6=8;转NEXT阅读程序,分析其功能:3.3.4控制转移类指令
MOV R0, #30H MOV R6, #10 CLR ANEXT: MOV @R0, A INC R0
DEC R6
CJNE R6, #0, NEXTCJNE R6,#0,NEXT;当R6≠0时,程序转向NEXT处,否则顺序执行。执行CJNER6,#0,NEXT指令时R6的内容不变!使用CJNE指令可以实现相同功能:二、调用子程序及返回指令1、调用子程序指令(2条)LCALL:长调用,可以调用64KB范围内的子程序ACALL:绝对调用,限定调用2KB范围内的子程序指令执行的操作:1)保存返回地址(保存16位返回地址,通过两次入栈操作实现)2)执行跳转操作,转移到子程序的入口。3.3.4控制转移类指令3.3.4控制转移类指令LCALLaddr16
;PC←PC+3,
;SP←SP+1,((SP))←PC7~0
;SP←SP+1,((SP))←PC15~8
;PC←addr16ACALLaddr11
;PC←PC+2,
;SP←SP+1,((SP))←PC7~0
;SP←SP+1,((SP))←PC15~8
;PC10~0←addr11
2、返回指令(2条)
RET
;PC15~8←((SP)),SP←SP-1
;PC7~0←((SP)),SP←SP-1子程序返回指令。功能:将堆栈内的返回地址送入PC,
使CPU返回到原断点地址处,继续执行原程序。3.3.4控制转移类指令RETI
;PC15~8←((SP)),SP←SP-1
;PC7~0←((SP)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第11章 功和机械能单元检测基础卷(含解析)-八年级物理下册(人教版)
- 哲学与专科的融合
- 独立学习之道
- 印象派艺术漫谈
- 春节环保行动
- 初中生活的新挑战
- 学习策略解析
- 各类申请书格式模板
- 钢包精炼成套设备项目风险识别与评估综合报告
- 初级公司信贷-初级银行从业资格考试《公司信贷》高频考点4
- 国家基本药物知识培训课件
- 新教科版六年级下册科学全册教案
- 妇产科全套课件
- 守门员技术(室内课)-陈凯
- 穴位贴敷的运用课件
- 中心静脉压与有创动脉血压监测护理
- 改革开放三十二年-我的家乡毛概社会实践调查报告重庆大学
- 人教版道德与法治五年级下册全册课件(完整版)
- 临床重点专科建设年度汇报
- 《GMP实务教程》 完整全套教学课件 项目1-14 GMP基础知识-药品生产行政检查
- 装饰定额子目(河南省)
评论
0/150
提交评论