第3章指令系统_第1页
第3章指令系统_第2页
第3章指令系统_第3页
第3章指令系统_第4页
第3章指令系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章指令系统3.1概述3.2寻址方式3.3指令系统3.4汇编语言程序设计§3.1概述指令:是CPU根据人的意图来执行某种操作的命令。程序设计语言:是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。§3.1.2指令格式89C51汇编语言指令格式[标号]:操作码[目的操作数][,源操作数][;注释]

MOVA,#34H;将数34h送累加器A符号注释Rn(n=0~7):当前选中的工作寄存器组R0~R7。Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。#data8:8位立即数。#data16:16位立即数。direct:8位片内RAM单元的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。符号注释rel:补码表示的8位地址偏移量。范围:-128~+127D。bit:片内RAM或SFR的直接寻址位地址。@:间接寄存器的符号。/:位操作指令中对该位先取反再参与操作,不影响原值。(×):×中的内容。((×)):×指出的地址单元中的内容。→:指令操作流程方向。§3.2寻址方式什么是寻址方式:如何找到存放操作数的地址,把操作数提取出来的方法。1、7种寻址方式:2、寻址空间及符号注释:1)立即数寻址立即数寻址:指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR

2)直接寻址直接寻址方式:在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。例如:MOVA,3AH;(3AH)→AMOVA,P1;(P1口)→A

或:MOVA,90H;90H是P1口的地址3)寄存器寻址寄存器寻址:由指令指出寄存器组R0~R7中的某一个或其他寄存器(A,B,DPTR等)的内容作为操作数。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口

ADDA,R0;(A)+(R0)→A4)寄存器间接寻址

寄存器间接寻址:操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。规定R0或R1为间接寻址寄存器,它可寻址内部地址RAM低位的128B单元内容。还可采用DPTR作为间接寻址寄存器,寻址外部数据存储器的64KB空间。例如例如:将片内RAM65H单元内容47H送A,可执行指令“MOVA,@R0”。其中R0内容为65H。如图所示:65H47HR0A47H数据存储器地址┋┋65H①②以指令中所指定的R0内容(65H)为指针将片内RAM65H单元内容47H送A5)变址寻址(基址寄存器+变址寄存器间接寻址)变址寻址:以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。采用DPTR或PC为基址寄存器,A的内容为地址偏移量。变址寻址只能访问程序存储器,访问范围为64KB。例如例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如图所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR内容与A的内容之和为程序存储器地址程序存储器内容送A6)相对寻址

相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。相对寻址只出现在相对转移指令中。当前的PC值是指执行完相对指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。目的地址=源地址+相对转移指令字节数+relrel为补码表示的有符号数。7)位寻址位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。概述:单片机指令系统由111条指令组成。其中,单字节指令49条,双字节指令45条,三字节指令17条。从指令执行时间看,单周期指令64条,双周期45条,只有乘、除指令为4个周期。§3.3指令系统指令系统可分为五大类[1]数据传送指令:29条[2]算术运算指令:24条[3]逻辑运算及移位指令:24条[4]控制转移指令:17条[5]位操作指令(布尔操作):17条§3.3.2数据传送指令1.片内数据存储器传送MOV2.片外数据存储器传送MOVX3.程序存储器传送MOVC4.累加器交换XCH、XCHD、SWAP5.堆栈操作PUSH、POPMOV类传送指令主要包括了立即数传送指令、内部RAM单元之间的数据传送指令、累加器数据传送指令。MOV的汇编格式如下:

MOV<目的操作数>,<源操作数>

1.MOV(Move)类传送指令(16条)

(1)源操作数为立即寻址方式的传送指令:源操作数为立即寻址方式的传送指令,简称立即数传送指令。

MOVA,#data;A←dataMOVdirect,#data;(direct)←dataMOVRn,#data;Rn←dataMOV@Ri,#data;(Ri)←dataMOVDPTR,#data16

【例3-1】将立即数A3H送入累加器A。MOVA,#0A3H【例3-2】将立即数76H送入片内30H,可执行以下指令。有以下两种传送方式:MOVA,#76HMOVR0,#30HMOV@R0,A或直接执行MOV30H,#76H

(2)内部RAM单元之间的数据传送指令:内部RAM单元之间数据传送指令有两直接地址之间、直接地址与工作寄存器之间、工作寄存器与直接地址之间、直接地址与间接地址寄存器之间、间接地址寄存器与直接地址之间的传送指令。MOVdirect2,direct1;(direct2)←(direct1)MOVdirect,Rn;(direct)←RnMOVRn,direct;Rn←(direct)MOVdirect,@Ri;(direct)←(Ri)MOV@Ri,direct;(Ri)←(direct)【例3-3】将50H单元的数据直接送入30H,R1内容指定的内部RAM单元的内容送入PSW寄存器,片内RAM60H单元的内容送入R4中,用以下指令完成。MOV30H,50HMOVD0H,@R1;D0H为PSW的单元地址MOVR4,60H【例3-4】将R2中的内容送入P0口MOVP0,R2也可使用MOV80H,R2(3)累加器的数据传送指令。与累加器有关的数据传送指令有:累加器与工作寄存器之间,累加器与直接地址之间、累加器与间接地址寄存器之间的传送MOVA,Rn;A←RnMOVRn,A;Rn←AMOVA,direct;A←(direct)MOVdirect,A;(direct)←AMOVA,@Ri;A←(Ri)MOV@Ri,A;(Ri)←A【例3-5】将R6的内容送入累加器AMOVA,R6【例3-6】将R4清零,可使用以下指令完成MOVA,#00HMOVR4,A(1)使用DPTR进行间接寻址。与DPTR间接寻址有关的指令有以下2条:

MOVXA,@DPTR;A←(DPTR)MOVX@DPTR,A;(DPTR)←A

外部RAM单元只能使用间接寻址方法,分别以DPTR和Ri作为间接地址寄存器。因此MOVX传送类有两组不同的间接寻址指令。2.MOVX(MoveExternal)类传送指令(4条)【例3-7】设某输出设备口地址为8000H,将片内RAM30H单元中的数据输出至该端口,则可用以下指令完成:MOVDPTR,#8000HMOVA,30HMOVC@DPTR,A

【例3-8】将片外RAM3000H单元中的内容送至4000H单元中去,用以下指令完成:MOVDPTR,#3000HMOVXA,@DPTRMOVDPTR,#4000HMOVX@DPTR,A(2)使用Ri进行间接寻址。与Ri间接寻址有关的指令有以下2条:

MOVXA,@Ri;A←(Ri)MOVX@Ri,A;(Ri)←A例3-9】将片外RAM(8FH)中的内容0AH,传送至寄存器R0中,而将R1中的值04H写入片外RAM(90H),执行以下指令完成。MOVR1,#8FH;指向片外8FH单元MOVXA,@R1;将片外8FH单元内容暂存AMOVR0,A;暂存结果送入R0中MOVA,R1;取R1中的内容MOVR1,#90H;指向片外90H单元MOVX@R1,A;04H送入片外90H单元

MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))

MOVC类指令是对程序存储器进行数据传送,因此又称为程序存储器传送指令,由于MOVC类指令通常用于查表,所以也称为查表指令,其表格放在程序存储器中。

3.MOVC(MoveCode)类传送指令(2条)【例3-10】在程序存储器中,从8000H开始存有A~Z的ASCII码,将D的ASCII码取出。8000H:41H;(41H为“A”的ASCII码,存放在8000H单元中)8001H:42H;(42H为“B”的ASCII码,存放在8001H单元中)8002H:43H;(43H为“C”的ASCII码,存放在8002H单元中)8003H:44H;(44H为“D”的ASCII码,存放在8003H单元中)8004H:45H;┋┋设完成此操作的程序存放在4000H开始存储器中。执行以下程序:4000H:MOVA,#03H;A←03H偏移量4002H:MOVDPTR,#8000H;DPTR←8000H4005H:MOVCA,@A+DPTR;取出D的ASCII码送累加器A执行结果:(A)=44H(PC)=4006H

(1)XCH(Exchange)全字节交换

XCHA,Rn;A←→RnXCHA,direct;A←→(direct)XCHA,@Ri;A←→(Ri)

(2)XCHD低半字节交换(Exchangelow-orderDigit)

XCHDA,@Ri;A0-3←→(Ri)0-3

累加器交换指令XCH、XCHD、SWAP,主要是在片内RAM和累加器A之间进行数据的交换。

(3)SWAP高4位与低4位交换

SWAPA;A7~4←→A3~0

4.XCH、XCHD、SWAP类指令(5条)【例3-11】将片内RAM中30H、40H单元的内容互换,并将互换后的40H单元内容存入R0指示的片内RAM单元。

MOVA,30H;30H单元的内容送A中

XCHA,40H;30H单元与40H单元中的内容互换

MOV@R0,A;互换后的结果存入R0指示的单元中

(1)PUSH入栈操作(Pushdirectbyteontostack)

PUSHdirect;SP←SP+1,(SP)←(direct)

(2)POP出栈操作(Popdirectfromstack)

POPdirect;SP←SP-1,(direct)←(SP)

5.PUSH、POP类指令(2条)

【例3-12】设DPTR指向了5000H单元,将其压入堆栈中,然后弹出到片内RAM的50H、51H单元中,用如下指令完成:

MOVDPTR,#5000HPUSHDPLPUSHDPHPOP51H;DPH弹出到51H单元

POP50H;DPL弹出到50H单元§3.3.3算术运算指令算术运算指令用到的助记符有以下3大类加法指令:ADD、ADDC、INC、DA减法指令:SUBB、DEC乘除指令:MUL、DIV算术运算类指令(24条)

——加法指令(8条)

ADDA,Rndirect@Ri#data操作:将两个操作数相加,再把和送到A中。其结果必然影响:进位位C,辅助进位位AC,溢出位OV,奇偶位P,零标志Z。R0=12H,(12H)=78H,A=9AH,C=1执行ADDA,@R0后结果?

10011010+01111000

.....00010010

10011010+01111000+C

.....00010011CC说明:本组指令的功能是同时把源操作数所指出的内容和进位标志未CY都加到累加器A中,结果存放到A中,其余的功能和上面的ADD指令相同。本组指令常用于多字节加法。

【例3-13】有符号数相加,执行以下程序,说明PSW有关标志位的内容。

MOVA,#7AHMOVR0,#65HADDA,R0

01111010A

+)01100101

(R0)

11011111

执行结果:OV=D6CY⊕D7CY=1⊕0=1;说明和产生溢出;PSW的CY=0AC=0OV=1

CLRCMOVA,R4ADDA,R6MOVR4,AMOVA,R5ADDCA,R7MOVR5,A

程序执行时先计算低字节之和:

11111111FFH

+)10101011ABH110101010低字节之和=AAH,CY=1,AC=1,OV=0,然后再计算高字节之和:

1000010185H0100010145H

+)1CY11001011高字节之和=CBH,CY=0,AC=0,OV=0程序执行完后的最后结果:R5R4=CBAAH,CY=0,AC=0,OV=0

【例3-14】在R5R4、R7R6中有两个16位的无符号数,其值分别为85FFH与45ABH,计算两个数的和,结果仍存于R5R4中,并说明PSW中相关位的内容

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论