第2章 指令系统 福建专升本电子类复习资料 专升本电子类复习资料_第1页
第2章 指令系统 福建专升本电子类复习资料 专升本电子类复习资料_第2页
第2章 指令系统 福建专升本电子类复习资料 专升本电子类复习资料_第3页
第2章 指令系统 福建专升本电子类复习资料 专升本电子类复习资料_第4页
第2章 指令系统 福建专升本电子类复习资料 专升本电子类复习资料_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

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

文档简介

第2章指令系统及程序设计举例Exit§2.389S51指令系统§2.1汇编语言§2.2寻址方式要求:•掌握MCS-51单片机的寻址方式及各种寻址方式可用的存贮空间。•学会简单的单片机应用程序的设计方法。§2.1汇编语言§2.1.1指令和程序设计语言§2.1.2指令格式BACK§2.1.1指令和程序设计语言指令:是CPU根据人的意图来执行某种操作的命令。程序设计语言:是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。BACK§2.1.2指令格式89S51汇编语言指令格式操作码[目的操作数][,源操作数][;注释]汇编语言指令对应的二进制代码格式单字节指令双字节指令三字节指令BACK单字节指令1、指令码中隐含着对某一种寄存器的操作如:指令“INCDPTR”的指令代码格式为:A3H=101000112、由指令中的rrr三位的不同编码指定某一寄存器如:指令“MOVA,Rn”的指令代码格式为:11101rrrBACK双字节指令用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。格式为:操作码立即数或地址BACK三字节指令一个字节操作码,两个字节操作数。格式为:BACK立即数或地址操作码立即数或地址§2.2寻址方式什么是寻址方式?所谓寻址就是寻找指令中操作数或操作数所在的地址,其目的就是要对操作数进行运算,之后的操作结果根据地址存放在相应的寄存器或存储器单元中。

BACK符号注释Rn(n=0-7):当前选中的工作寄存器组R0-R7。Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。#data:8位立即数。#data16:16位立即数。direct:8位片内RAM单元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:补码表示的8位地址偏移量。范围:-128-+127D。bit:片内RAM或SFR的直接寻址位地址。@:间接寄存器的符号。/:位操作指令中对该位先取反再参与操作,不影响原值。(×):×中的内容。((×)):×指出的地址单元中的内容。→:将左边的内容送于右边的单元。多一个→,则其右边的()少一个。$:当前指令的地址。

BACK寻址方式的种类:

1、寄存器寻址2、直接寻址3、立即数寻址4、寄存器间接寻址5、变址寻址6、相对寻址7、位寻址BACK1、寄存器寻址寄存器寻址:由指令指出寄存器组R0~R7中的某一个或其他寄存器(A,B,DPTR等)的内容作为操作数。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口ADDA,R0;(A)+(R0)→ABACK2、直接寻址直接寻址方式:在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。例如:MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址BACK说明:(1)比较以下三条指令①INCA②INCACC;ACC是SFR中的一个③INC0E0HA、ACC、0E0H是累加器的三种表示形式。①是寄存器寻址;②③是直接寻址,但都表示累加器的内容自加1,即执行结果相同。(2)注意区别字节地址和位地址。如:①MOVA,20H②MOVC,20H;(20H)→Cy①②形式相同,但结果不同,因为①中的20H为字节地址,②中的20H为位地址。

3、立即数寻址立即数寻址:指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR;(DPH)=20H;(DPL)=00H【思考】如下一条指令对否?MOVPC,#2000H

BACK4、寄存器间接寻址

寄存器间接寻址:操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。89S51规定R0或R1为间接寻址寄存器,它可寻址内部地址RAM低位的128B单元内容和片外RAM低256B单元。还可采用DPTR作为间接寻址寄存器,寻址外部数据存储器的64KB空间。堆栈操作指令(PUSH、POP)也属于寄存器间接寻址方式,即把SP作间址寄存器。

BACK例如:将片内RAM65H单元内容47H送A,可执行指令“MOVA,@R0”。其中R0内容为65H。如图所示:65H47HR0A47H数据存储器地址┋┋65H①②以指令中所指定的R0内容(65H)为指针将片内RAM65H单元内容47H送ABACK5、变址寻址(基址寄存器+变址寄存器间接寻址)变址寻址:以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。89S51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。变址寻址只能访问程序存储器,访问范围为64KB。BACK只有两条指令:①MOVCA,@A+PC ;((A)+(PC))→A②MOVCA,@A+DPTR ;((A)+(DPTR))→A

例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如图所示1EH0302HROMDPTRAA02F1H11H1EH+①②DPTR内容与A的内容之和为程序存储器地址程序存储器内容送ABACK6、相对寻址

相对寻址:以程序计数器PC的当前值(指的是从程序存储器中取出转移指令后的PC值,也可以说是正在执行指令的下一条指令的地址)作为基地址,与指令中给出的相对偏移量进行相加,把所得之和作为程序的转移地址。51单片机中的控制转移类指令都属于此种寻址方式。

BACK

如在程序存储器中2000H单元有一条双字节的相对转移指令“SJMP75H”。其操作示意图如图2-5所示。程序存储器2000H、2001H单元的内容80H、75H是“SJMP75H”的机器语言代码。实际编程中偏移量75H用标号表示,省去我们手工计算转移地址的麻烦,如: … SJMPLOOP …LOOP: …

7、位寻址位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。BACK表2-2操作数寻址方式和有关空间BACKBACKMCS-51指令系统可分为五大类

[1]数据传送指令:29条

[2]算术运算指令:24条

[3]逻辑运算及移位指令:24条

[4]控制转移指令:17条

[5]位操作指令(布尔操作):17条Back§2.3.1数据传送指令Back

数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部RAM、寄存器、外部RAM以及程序存储器之间的数据传送。数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变,同时很少的数据传送指令会影响PSW的结果。

Back

1.以累加器A为目的操作数的指令(4条,即4种寻址方式)

2.以寄存器Rn为目的操作数的指令(3条)

3.以直接地址为目的操作数的指令(5条)

4.以间接地址为目的操作数的指令(3条)

5.十六位数据传送指令(1条)

6.查表指令(2条)

7.累加器A与片外RAM传送指令(4条)

8.栈操作指令(二条)

9.交换指令(4条)2.3.1.1内部数据传送指令格式:MOVdst,src ;(src)→dst或者,(dst)=(src)各操作数间传送关系如下图所示。说明:(1)立即数不能作dst。(2)direct可以作dst;direct之间还可以互相传送数据,提高了数据传送的速度和效率。(3)无Rn和Rn之间数据传送的指令。

Back1.以累加器A为目的操作数的指令(4条,即4种寻址方式)例:MOVA,#30H;(A)=30HMOVA,30H;(A)=11HMOVA,@R1;(A)=11HMOVA,R1;(A)=30H

2、以寄存器Rn为目的操作数的指令(3条)Back如:(A)=78H,(R5)=47H,(70H)=F2H,执行指令:MOVR5,A ;(A) R5, (R5)=78HMOVR5,70H;(70H) R5, (R5)=F2HMOVR5,#A3H;A3H R5, (R5)=A3H注意,在89S51指令系统中没有“MOVRn,Rn”传送指令。Back3、以直接地址为目的操作数的指令(5条)Back4、以间接地址为目的操作数的指令(3条)Back5、十六位数据传送指令(1条)这条指令的功能是把16位常数送入DPTR。DPTR由DPH和DPL组成。BackBack【例2-1】已知:Ri=32H,(30H)=AAH,(31H)=BBH,(32H)=CCH,请问执行下列指令后累加器A、50H单元、R6、32H单元和P1口中的内容是什么?MOVA,30H ;A=(30H)=AAHMOV50H,A ;(50H)=(A)=AAHMOVR6,31H ;R6=(31H)=BBHMOVP1,32H ;P1=(32H)=CCHMOV@R1,#30H ;(R1)=(32H)=30HMOVA,@R1 ;A=((R1))=30H所以,(A)=30H,(50H)=AAH,(R6)=BBH,(32H)=30H,(P1)=CCH。

2.3.1.2查表指令(2条)

——ROM的字节传送指令

属于变址寻址指令,所查的表格存放在程序存储器中,以DPTR和PC作基地址即起始地址,累加器A为偏移量,分2种:Back基地址寄存器+变址寄存器间接寻址@PC+A(程序存储器0-64K)基地址寄存器+变址寄存器间接寻址@DPTR+A(程序存储器0-64K)A寄存器图2-7程序存贮器传送(查表)例:

执行下面程序段后结果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=((A)+(DPTR))=(200AH)则:(A)=(200AH)=11H例:

所以,最后结果为:(A)=01(R0)=01(PC)=1004Back2.3.1.3外部RAM的字节数据传送指令(4条)——I/O指令Back1.MCS-51没有专门的I/O指令,它只能通过这种方式与外RAM或外设打交道,其中,前两条指令是输入指令,后两条是输出指令。2.外部RAM的数据传送,只能通过累加器A进行。

第2,4两条指令以DPTR为片外数据存储器16位地址指针,寻址范围达64KB。其功能是DPTR所指定的片外数据存储器与累加器A之间传送数据。 第1,3两条指令是用R0或R1作低8位地址指针,由P0口送出,寻址范围是256字节。这两条指令完成以R0或R1为地址指针的片外数据存储器与累加器A之间的传送数据。 上述四条指令的操作如图2-8所示:寄存器寄存器间接寻址

寄存器间接寻址@R1.@R0@DP(外RAM0-255)(外RAM0-64K)图2-8

外部数据存储器传送操作例:若:片内RAM(30H)=01H,片外RAM(30H)=02H,执行下面程序段后的结果如何。Back2.3.1.4栈操作指令(二条)Backdirect应是直接地址。如:正确 错误PUSHACC PUSHAPOPOOH POPR0

例:继续上例:Back

2.3.1.5数据交换指令(5条)Back(1)字节变换指令

例:(2)半字节交换指令Back

SWAPA ;(A0~3)←→(A4~7),A的高低半字节交换注意:1、2两类指令都只影响标志位P,但3指令不影响任何标志位。

(3)累加器半字节交换指令【例】初始时:(A)=34H,(30H)=11H,执行以下程序段:XCHA,30H ;(A)=11H,(30H)=34HMOVR1,#30H ;(R1)=30HXCHA,@R1 ;(A)=34H,(30H)=11HXCHDA,@R1 ;(A)=31H,(30H)=14HSWAPA ;(A)=13H§2.3.2算术运算指令Back算术逻辑运算和移位类指令中,累加器A是最为繁忙的指令,且多为dst。算术运算类指令执行后除了增1、减1指令不影响CY、AC、OV外,其它指令会影响改变它们的值。其操作对象为8位的无符号二进制整数,若对带符号数或多字节二进制数运算,需通过编写程序实现。

Back

1.不带进位加法指令(4条)2.带进位加法指令(4条)3.十进制调整指令(1条)

4.带借位减法指令(4条)5.乘法指令(1条)6.除法指令(1条)7.加1指令(5条)8.减1指令(4条)1、不带进位加法指令(四条)Back例:Back2、带进位加法指令(四条)Back3、十进制调整指令(1条)Back例:设累加器A内容为:01010110B(即为56的BCD码),寄存器R3的内容为01100111B(即67的BCD码),CY内容为1。求执行下列指令后的结果。 ADDCA,R3;

DAA;Back例:有两个BCD码表示的4位十进制数,分别存放在内部数据存储器的50H~51H单元和60H~61H单元,试编写程序求这两个数之和,结果的和存放在40H~41H单元,进位存放在42H单元。解:求两个BCD数之和的运算程序段如下:MOV A,50H ;取第一个数低2位BCD码ADD A,60H ;加第二个数低2位BCD码DA A ;十进制调整MOV 40H,A ;保存结果的低2位MOV A,51H ;取高位BCD码ADDC A,61H ;高位相加DA A ;十进制调整MOV 41H,A ;保存结果的高2位MOV A,#00HADDC A,#00H ;计算进位MOV 42H,A ;保存进位4、带借位减法指令(四条)Back

说明:51系列单片机没有不带借位的减法指令。那么对于单字节的减法指令怎么处理这种情况呢?可用“CLRC”清Cy,即Cy=0,类似于不带借位。(2)减法指令结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。

例:设(A)=0C9H,(R2)=54H,Cy=1。

执行指令“SUBBA,R2”的结果如何?Back5、乘法指令(1条)

单字节四周期指令,操作数均为8位无符号整数。

该指令若乘积大于0FFH,则OV置1,否则OV清0。Cy位总是被清0。该操作也影响标志位P。

Back6、除法指令(1条)

单字节四周期指令,操作数均为8位无符号整数。

Back若除数(B)=00H,则结果无法确定,则OV置1。

CY总是被清0。该操作也影响标志位P。

7、加1指令(5条)Back8、减1指令(4条)Back§2.3.3逻辑操作指令Back

1.简单操作指令(2条)

2.移位指令(4条)

3.逻辑“与”指令(6条)

4.逻辑“或”指令(6条)

5.逻辑“异或”指令(6条)Back1.简单操作指令(2条)Back(1)累加器A清0指令(2)累加器A取反指令Back【思考】编程序段,实现功能:对30H单元中的数X求补并保存在原单元。

2.移位指令(4条)Back(1)累加器A循环左移指令(2)累加器A循环右移指令

(3)累加器A连同进位位循环左移指令 RLCA;(4)累加器A连同进位位循环右移指令 RRCA;Back3.逻辑“与”指令(6条)Back

这组指令中前四条指令是将累加器A的内容和操作数所指出的内容按位进行逻辑“与”,结果存放在A中。前四条指令的操作影响标志位P。

后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行逻辑“与”,结果存入直接地址单元中。若直接地址正好是I/O端口,则为“读——改——写”操作。Back应用:可以使目的操作数清零或保留其中有用的位,如ANLdst,80H【思考】将41H(ASCII码值)的高4位清零,低4位不变,何法?MOV A,#41HANL A,#0FH或MOVdirect,#0FH4.逻辑“或”指令(6条)Back这组指令的功能是将两个指定的操作数按位进行逻辑“或”。前四条指令的操作结果存放在累加器A中,操作影响标志位P;后两条指令的操作结果存放在直接地址单元中。应用:对RAM存储器单元或A中的数的某些位置“1”,而其余位不变。Back5.逻辑“异或”指令(6条)Back这组指令的功能是将两个指定的操作数按位进行“异或”。前四条指令的结果存放在累加器A中,操作影响标志位P;后两条指令的操作结果存放在直接地址单元中。“异或”原则:相同为0,不同为1。应用:对RAM存储器单元或A中的数的某些位变反,而其他位不变,如#0FH前四位不变。Back上述逻辑操作类指令归纳如图。例:拆字程序:在内部RAM40H单元保存有以压缩BCD码表示的2位十进制数,编程将它们拆开,分别保存在内部RAM的41H、42H单元。程序如下:MOV A,40H ;压缩BCD码送累加器ANL A,#0FH ;高4位清0,保留低4位MOV 41H,A ;保存低4位BCD码MOV A,40H ;取数据MOV A,#0F0H ;低4位清0,保留高4位SWAP A ;高低位交换MOV 42H,A ;保存高4位BCD码

§2.3.4控制程序转移类指令

1.无条件转移指令(4条)

2.空操作指令(1条)

3.条件转移指令(8条)

4.调用和返回指令Back

Back1、无条件转移指令(4条)Back(1)短(绝对)转移指令

Back

这条指令提供了11位地址,可在2K范围内无条件转移到由a10-a0所指出的地址单元中。因为指令只提供低11位地址,高5位为原PC11-15位值,因此,转移的目标地址必须在AJMP指令后面指令的第一个字节开始的同一2K字节范围内。Back

(2)长转移指令BackBackORG0000H ;开机后(PC)=0000HLJMP0F80H已知某单片机监控程序始地址为0F80H,请问可用什么办法可使单片机开机后自动执行该监控程序。(3)相对转移(短转移)指令BackSJMPrel;

0000rel

(相对地

温馨提示

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

评论

0/150

提交评论