版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章单片机指令系统
3.1汇编语言与指令格式3.2寻址方式3.3指令系统3.1汇编语言与指令格式
一、机器语言、汇编语言和高级语言程序设计语言有3种:1.机器语言:2.汇编语言3.高级语言如:PASCAL、C、FORTRAN、BASIC等
二、指令格式标准格式如下[标号:]操作码[目的操作数][,源操作数][;注释]
阶段指令以8位二进制的字节为单位,分为
1.单字节指令
例如:
CLRA→E4H
2.双字节指令
例如: MOVA,#10H→74H10H
3.三字节指令
例如:MOV40H,#30H→75H40H30H
三、伪指令1、汇编起始/定位指令ORG
指令格式为:ORGnn
2、等值/赋值指令EQU
指令格式:字符名称EQU数字或汇编符号
功能:使指令中的字符名称等价于给定的数字或汇编符号。
例:PA8155EQU8001H3、定义字节指令DB(DefineByte)
[标号:]DB8位二进制数表
功能:把8位二进制数表依次存入从标号开始的连续的存储单元中。
例:ORG1000HBUF1:DB38H,7FH,80HBUF2:DB45H,66H
4、定义字指令DW(DefineWord)
指令格式:[标号:]DW16位数据表例:ORG1500HSTART:MOVA,#20H….ORG1520HTAB:DW1234H,8AH,10
5、汇编结束指令END
指令格式:[标号:]END[地址或标号]
格式中标号以及END后面的地址或标号可有可无。功能:提供汇编结束标志。汇编程序遇到END后就停止汇编,对END以后的语句不予处理,故END应放在程序的结束处。3.2寻址方式
在MCS-51单片机指令系统中,有以下7种寻址方式(一般针对源操作数):(1)立即寻址;(2)直接寻址;(3)寄存器寻址;(4)寄存器间接寻址;(5)基址寄存器加变址寄存器间接寻址;(6)相对寻址;(7)位寻址。
1.立即寻址
例如指令:MOVA,#3AHMOVDPTR,#0DFFFH
3.寄存器寻址
在该寻址方式中,参加操作的数存放在寄存器里。寄存器包括8个工作寄存器R0~R7,累加器A,寄存器B、数据指针DPTR和布尔处理器的位累加器C。
4.寄存器间接寻址
在这种寻址方式中,寄存器的内容为操作数的地址。寄存器间接寻址只能使用寄存器R0、R1作为地址指针,寻址内部RAM区的数据;当访问外部RAM时,可使用R0、R1及DPTR作为地址指针。寄存器间接寻址符号为“@”,
5、变址寻址(基址寄存器加变址寄存器寻址)
这种寻址方式用于访问程序存储器中的数据表格,以DPTR或PC为基址寄存器,以A为变址寄存器,以两者相加形成的16位地址为操作数的地址。
例1:MOVCA,@A+PC;PC(PC)+10100MOVA,#02H0102MOVCA,@A+PCPC0103NOP0104NOP0105DB32H结果把0105H单元的内容32H送到A中。
只能存放在以PC为当前值为起始地址的256B范围内例2:MOVCA,@A+DPTR可以给DPTR赋任意值,可达整个64KB的ROM空间
MOVA,#01HMOVDPTR,#TABLEMOVCA,@A+DPTR….TABLE:DB41HDB42H结果将数据42H送到A中。这两条变址寻址,特别适用于固定在程序存储器中的常数表格进行查表操作,也称查表指令.6.相对寻址
例:指令JZ08H和JZ0F4H表示累加器A为零条件满足后,从源地址(2050H)分别向下、向上转移10个单元。其相对寻址示意如图(a)、(b)所示。这两条指令均为双字节指令,机器代码分别为:60H08H和60HF4H。
图相对寻址示意图(a)指令JZ08H寻址示意图;(b)指令JZF4H寻址示意图
7.位寻址:
可直接对存储单元内部RAM的某位进行操作.操作对象为位寻址区20H~2FH
、
可位操作的SFR
例:MOVC,30H;位地址为30H位(26H.0)中的数送CY.3.3指令系统按指令的功能,指令系统可分为下列5类:(1)数据传送;(2)算术运算;(3)逻辑和移位运算;(4)控制转移(5)位操作;一、数据传送类指令
1.以累加器A为目的操作数的指令
MOVA,Rn;
n=0~7,A←
(Rn)
MOVA,direct;A←
direct为内部RAM或SFR地址MOVA,@Ri;i=0,1,A←
((Ri)MOVA,#data;A←
#data
这组指令的功能是:把源操作数的内容送入累加器A。例如:MOVA,#10H,该指令执行时将立即数10H送入累加器A中。
例:已知累加器A=30H,寄存器R0=30H,内部RAM20H=87H,内部RAM30H=65H,请指出执行以下每条指令后,累加器A内容的变化。(1)MOVA,#20H(2)MOVA,20H(3)MOVA,R0(4)MOVA,@R02.以Rn为目的操作数的指令MOVRn,A;Rn←(A),n=0~7MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←#data
例:已知A=30H,(30H)=40H,判断执行下列指令后,R2寄存器中的内容。(1)MOVR2,A(2)MOVR2,30H(3)MOVR2,#50H3.以直接地址为目的操作数的指令
MOVdirect,A;direct←(A)MOVdirect,Rn;direct←(Rn),n=0~7MOVdirect,@Ri;direct←((Ri)),i=0,1MOVdirect1,direct2;direct1←(direct2)MOVdirect,#data;direct←#data例:设A=30H,R2=40H,R0=70H,(70H)=78H,(78H)=50H,判断执行下列各指令后结果。(1)MOVP1,A(2)MOV70H,R2(3)MOV20H,78H(4)MOV40H,@R0(5)MOV01H,#80H4.以寄存器间接地址为目的操作数指令MOV@Ri,A;((Ri))←
(A),i=0,1MOV@Ri,direct;((Ri))←
(direct)
MOV@Ri,#data;((Ri))←
#data例:书P38设A=50H,(40H)=32H,R0=20H,判执行下列指令后的结果。(1)MOV@R0,A(2)MOV@R0,40H(3)MOV@R0,#33H5.十六位数据传送MOVDPTR,#data16;DPTR←#data16DPTR----数据指针,为SFR中(DPH)、(DPL)
MOVDPTR,#2010H相当于:MOVDPH,#20H
MOVDPL,#10H例:设(20H)=60H,(60H)=50H,(50H)=20H,P1口的内容为B7H,执行下面的程序结果。MOVR0,#20HMOVA,@R0MOVR1,AMOVB,@R1MOV@R0,P16.查表指令
MOVCA,@A+DPTRMOVCA,@A+PC;A((A)+(PC))指向下一条指令的地址。MOVCA,@A+DPTR;A←((A)+(DPTR))例:(DPTR)=0300H,(A)=02HROM中(0302H)=55H执行:MOVCA,@A+DPTR结果:(A)=55H7.A与片外RAM或I/O传送指令MOVXA,@DPTR;A←
((DPTR))地址范围64KMOVXA,@Ri;A←
((Ri))地址范围0~256MOVX@DPTR,A;(DPTR)←(A)MOVX@Ri,A;(Ri)←(A)
8.堆栈操作指令
堆栈操作有进栈和出栈操作,即压入和弹出数据,常用于保存或恢复现场,直接寻址。该类指令共有如下两条指令:
(1)压栈PUSHdirect(SP)←(SP)+1((SP))←(direct)
(2)出栈POPdirect(direct)←((SP))(SP)←(SP)-1
例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则程序段PUSHPSWPUSHACCPUSHDPLPUSHDPH执行后,SP内容修改为64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前,如下程序段(SP保持64H不变)POPDPHPOPDPLPOPACCPOPPSW执行之后,SP内容修改为60H,而64H、63H、62H、61H单元中的内容依次弹出到DPH、DPL、A、PSW中。SP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。9.交换指令
(1)字节交换指令XCHA,Rn;(A)←→(Ri)XCHA,direct;(A)←→(direct)XCHA,@Ri;(A)←→(Ri)例:(A)=80H,(R7)=97H执行:XCHA,R7结果:(A)=97H,(R7)=80H(2)半字节交换指令XCHDA,@Ri;(A)0-3←→((Ri))0-3例:(R0)=60H,(60H)=3EH,(A)=59H执行:XCHDA,@R0结果:(A)=5EH(60H)=39H
例:设(R0)=30H,(30H)=4AH,(A)=28H,则:执行XCHA,@R0;结果为:(A)=4AH,(30H)=28H执行XCHDA,@R0;结果为:(A)=2AH,(30H)=48H执行SWAPA;结果为:(A)=82HA中半字节交换指令SWAPA;(A)0-3←→((A))4-7二、算术操作类指令1.加法指令(Addtion)2.带进位加法指令3.加1指令(Increase)4.十进制调整指令5.带借位减法指令(Subtraction)6.减1指令(Decrease)7.乘法指令(Multiplication)8.除法指令(Division)影响CY、AC、OV标志,加1和减1指令不影响标志
1.加法指令ADDADDA,Rn;
A←(A)+(Rn)ADDA,@Ri;A←(A)+((Ri))ADDA,direct
;A←(A)+(direct)ADDA,#data
;A←(A)+#data2.带进位加法指令(用在多于8位的二进制数的加法)ADDCA,Rn;
A←(A)+(Rn)+(Cy)ADDCA,@Ri;A←(A)+((Ri))+(Cy)ADDCA,direct
;A←(A)+(direct)+(Cy)ADDCA,#data
;A←(A)+#data+(Cy)对标志位的影响与ADD相同,Cy是上一次进位标志,而不是这条相加指令产生的进位例1:书P443-16例2:双字节无符号数加法(R0R1)+(R2R3)→(R4R5)R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节。由于不存在16位数加法指令,所以只能先加低8位,后加高8位,而在加高8位时要连低8位相加时产生的进位一起相加。假设其和不超过16位,其编程如下:MOVA,R1;取被加数低字节ADDA,R3;低字节相加MOVR5,A;保存和低字节MOVA,R0;取高字节被加数ADDCA,R2;两高字节之和加低位进位MOVR4,A;保存和高字节3.加1指令INCA;A←(A)+1INCRn;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri;((Ri))←((Ri))+1INCDPTR;DPTR←(DPTR)+1对标志位不产生影响若:(A)=0FFH,(Cy)=0执行:INCA结果:(A)=00H,(Cy)=0
4.十进制调整指令(对压缩的BCD码调整)
DAA若(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
十进制调整指令是一条对二—十进制的加法进行调整的指令。两个压缩BCD码按二进制相加,必须经过本条指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。由于指令要利用AC、CY等标志才能起到正确的调整作用,因此它必须跟在加法ADD、ADDC指令后面方可使用。
5.带借位减法指令(Subtraction)(1)SUBBA,Rn;A←(A)-(Rn)-(Cy)(2)SUBBA,@Ri;A←(A)-((Ri))-(Cy)(3)SUBBA,direct;A←(A)-(direct)-(Cy)(4)SUBBA,#data;A←(A)-#data-(Cy)(5)对标志位的影响(6)Cy------进位位(7)AC------半进位位(8)OV------溢出位
由于减法指令只有带借位减法指令,因此,若要进行不带借位位的减法操作,需先清借位位,即置CY=0。清CY有专门的指令,它属于位操作类指令CLRC;(CY)←0
例如:设(A)=52H,(R0)=B4H执行指令:CLRC;(CY)←0SUBBA,R0;(A)←(A)-(CY)-(R0)结果为:(A)=9EH,CY=1,AC=1,OV=1,P=1。
6.减1指令(Decrease)
减1类指令共4条,其功能是将操作数指定单元内容减1。DECA ;A-1→A,A中内容减1 DECRn;Rn-1→Rn,Rn中内容减1 DECdirect;(direct)-1→(direct),直接地址中内容减1 DEC@Ri;(Ri)-1→(Ri),Ri间址中的内容减1
7.乘法指令(Multiplication)
MULAB;BA(A)×(B)低8位→A高8位→B
8.除法指令(Division)
DIVAB;(A)÷(B)商→A余数→BA、B中都是无符号整数如果除数B为“0”,OV=1,否则OV=0;进位标志总是清零Cy=0。
三、逻辑运算指令
1.简单逻辑操作指令
CLRA;A←“0”CPLA;A←A例:(A)=3AH,CPLA,(A)=0C5H00111010B→11000101B
2.移位指令
(1)左循环指令(RotateAccumulatorLeft)
RLA
例(A)=6CH=01101100BRLA(A)=11011000B=0D8Ha7←a0Cy
(3)右循环指令(RotateAccumulatorRight)
RRA例(A)=6CH=01101100BRRA(A)=00110110B=36Ha7a0Cy(4)带进位右循环指令(RotateARightwithC)RRCA例(A)=6CH=01101100B,(Cy)=1RRCA(A)=10110110B=0B6Ha7a0Cy3.逻辑与指令(按位操作)ANLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data∧--“与”,“有0即0,全1为1”00000111∧)1111110100000101B=05H4.逻辑或指令ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data∨--“或”,“有1即1,全0为0”00000110∨)0110110101101111B=6FH5.逻辑异或指令XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data--“异或”,“相异为1,相同为0”00000110)0110110101101011B=6BH四、位操作指令(20H~2FH中的128位,可位操作的SFR的位)
1.数据位传送指令MOVC,bit;bit可直接寻址位C←(bit)MOVbit,C;C进位位(bit)←C例:将位地址20H的一位数传送到位地址30H中: MOVC,20H MOV30H,C例:书P57
CLRC;将C=0CLRbitCPLC;将C求反再存入CCPLbit;将bit求反再存入bitSETBC;将C=1SETBbit;(bit)←1例:P1原值00001111BCLRCMOVP1.0,CMOVP1.2,CSETBCMOVP1.4,CMOVP1.6,CP1原值00001111B=0FH现为01011010B=5AH3.位变量逻辑与指令ANLC,bitANLC,bit4.位变量逻辑或指令ORLC,bitORLC,bit
5.位变量条件转移类指令
位条件转移指令是以进位标志CY或者位地址bit的内容作为是否转移的条件,共有5条指令。(1)以CY内容为条件的双字节转换指令
JCrel;若(CY)=1,则(PC)←(PC)+2+rel转移,否则,(PC)←(PC)+2顺序执行JNCrel;若(CY)=0,则(PC)←(PC)+2+rel转移,否则,(PC)←(PC)+2顺序执行
这两条指令常和比较条件转移指令CJNE一起使用,先由CJNE指令判别两个操作数是否相等,若相等就顺序执行;若不相等则依据两个操作数的大小置位或清零CY,再由JC或JNC指令根据CY的值决定如何进一步分支,从而形成三分支的控制模式,如图所示。
图CJNE与JC(或JNC)一起构成三分支模式五、控制转移类指令
1.无条件转移指令(1)短转移AJMPaddr11(PC)←(PC)+2;PC10~PC0←addr10~add0;
PC11~PC15,跳转范围2k
AJMP称为绝对转移指令,双字节指令。它的机器代码是由11位直接地址addr11和指令特有操作码00001,按下列分布组成的:
该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即:a10a9a800001a7a6a5a4a3a2a1a0
PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0(2)长转移LJMPaddr16PC←addr16,跳转范围64k(3)散转JMP@A+DPTRPC←(A)+(DPTR)A取值范围00H~FFH,当DPTR为确定值,根据A的不同值就可以实现多分支转移.(4)相对转移指令
SJMPrelPC←(PC)+2
PC←(PC)+rel
rel--机器码的相对偏移量,为8位补码转移范围:前128~后127字节例:
编程时,可用标号代替转移目的地址,rel交给编译程序计算。SJMPNEXT(或AJMPNEXT,SJMPNEXT) …NEXT:…原地踏步指令的指令: HERE:SJMPHERE常写成:SJMP$
2.条件转移指令(判跳指令)
条件转移指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序继续执行。(1)累加器判零转移指令,这类指令有2条:
JZrel;若(A)=0,则(PC)←(PC)+2+rel若(A)≠0,则(PC)←(PC)+2JNZrel;若(A)≠0,则(PC)←(PC)+2+rel若(A)=0,则(PC)←(PC)+2
(2)比较转移指令
共有4条,其一般格式为:CJNE目的操作数,源操作数,rel这组指令是先对两个规定的操作数进行比较,根据比较的结果来决定是否转移到目的地址。4条比较转移指令如下:CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel若目的操作数=源操作数,则(PC)←(PC)+3;若目的操作数>源操作数,则(PC)←(PC)+3+rel,CY=0;若目的操作数<源操作数,则(PC)←(PC)+3+rel,CY=1;图比较转移指令操作示意图SWAPA;ANLC,bitSP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。(2)长转移LJMPaddr16((SP))←(direct)a7a0否则,(PC)←(PC)+2顺序执行子程序调用及返回指令条件转移指令(判跳指令)MOVDPL,#10H指令格式为:ORGnn若目的操作数<源操作数,则(PC)←(PC)+3+rel,CY=1;这两条变址寻址,特别适用于固定在程序存储器中的常数表格进行查表操作,也称查表指令.A←(A)-((Ri))-(Cy)这组指令是先对两个规定的操作数进行比较,根据比较的结果来决定是否转移到目的地址。例:当P1口输入为3AH时,程序继续进行,否则等待,直至P1口出现3AH。参考程序如下:MOVA,#3AH;立即数3A送AWAIT:CJNEA,P1,WAIT;(P1)≠3AH,则等待
(3)减1不为0转移指令有如下两条:DJNZRn,rel;(Rn)←(Rn)-1若(Rn)=0,则(PC)←(PC)+2否则,(PC)←(PC)+2+relDJNZdirect,rel;(direct)←(direct)-1若(direct)=0,则(PC)←(PC)+3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扬州大学广陵学院《临床技能学》2025-2026学年期末试卷
- 运城师范高等专科学校《口腔诊断学》2025-2026学年期末试卷
- 运城师范高等专科学校《学前教育政策与法规》2025-2026学年期末试卷
- 扬州大学《小儿传染病学》2025-2026学年期末试卷
- 扎兰屯职业学院《婚姻家庭法》2025-2026学年期末试卷
- 长春汽车职业技术大学《分析化学第八版》2025-2026学年期末试卷
- 中国医科大学《旅游管理学》2025-2026学年期末试卷
- 盐城工学院《解剖学基础》2025-2026学年期末试卷
- 2026九年级上新课标创作画主题设计
- 小学品德与社会人教部编版六年级上册《1.感受生活中的法律第1课时》教案
- 有趣的数字0教学课件
- 2025机械组装考试题及答案
- 学会买东西劳动教案
- 陕西省2019-2023年中考满分作文87篇
- 浙江省S9联盟2024-2025学年高一下学期4月期中联考数学试题(解析版)
- 迈克尔希特战略管理课件
- 甲沟炎切开引流术后护理查房
- 劳创造美班会课件
- 绝味食品财务风险的识别与评价研究
- 建筑史与文化遗产保护阅读题或测试卷
- T-CNAS 07-2019 成人肠造口护理
评论
0/150
提交评论