MCS51单片机指令系统P114_第1页
MCS51单片机指令系统P114_第2页
MCS51单片机指令系统P114_第3页
MCS51单片机指令系统P114_第4页
MCS51单片机指令系统P114_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

§3.1指令系统概述§3.2MCS-51指令的寻址方式§3.3MCS-51指令系统介绍下页/sundae_meng●

一台计算机所能执行的全部的指令集合§3.1指令系统概述指令是计算机中具有特定功能的操作命令●程序与程序设计按预定要求编排的指令序列称为程序。编排的过程称为程序设计●指令系统设计一种CPU,一般从设计指令系统开始因而,一种机器的指令系统是机器本身固有的决定了机器的性能用户无法改变,必须继承、学习、掌握、应用上页下页回目录/sundae_meng机器语言:二进制代码,是机器唯一能直接识别、执行的语言。汇编语言:为了记忆和阅读方便,制造商对指令系统每一条指令,都给出了指令助记符。用助记符,操作数,标号编写的程序称为汇编语言源程序。一、汇编语言汇编语言必须翻译成机器语言才能被机器执行●程序设计语言汇编语言:高级语言:符号语言:上页下页回目录如P55,图3-1所示。全是机器码/sundae_meng完成由汇编语言到机器代码的过程叫汇编汇编的方法有两种:自动汇编、手工汇编由机器代码到汇编语言的过程叫反汇编汇编语言源程序机器语言(二进制代码)

汇编

反汇编上页下页回目录MCS-51交叉汇编/sundae_meng二、汇编语言的格式[

标号:]

操作码[操作数]

[;注释]其中除操作码部分是必须的,括号内的区段是任选项。1、标号标号是该指令的符号地址,可根据需要设定必须以字母开始,以“

:”结束,长度不超过8个字符系统中的保留字符不能作标号,如:SFR名、ADD等标号可被其他语句的操作数直接引用源程序中,一个标号只能定义一个语句,不能相重名字保持一义性上页下页回目录一个汇编语句分为四个区段操作码操作码操作码/sundae_meng2、操作码由指令系统的助记符、伪指令助记符组成。操作码是每一句汇编语言所必须的操作码和操作数之间用空格分开3、操作数可为二进制数(B),十进制数(D),十六进制数(H)数字大于9,则数字应以“0”开头,如:#0AFH可以是操作数地址、立即数、标号、表达式如M+3目的操作数和源操作数之间用“,”分开可以是寄存器名如A、B、R、DPTRM标号被定义过的上页下页回目录BinaryDecimalHexadecimal指出该语句的操作性质/sundae_meng4、注释以“

;”开头,是程序员对指令操作的解释,以帮助阅读、理解程序的意义可有可无汇编时对这部分不予处理,不译成任何机器代码可用英语或某种简洁的方式解释指令,或打印程序清单上页下页回目录/sundae_meng三、伪指令伪指令仅在汇编过程中起控制作用不产生可执行目标代码,又称为软指令1、起点指令ORG格式:ORG××××H功能:给程序起始地址或数据块的起始地址赋值例:用法:一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令ORG

8000HSTART:MOVA,#74H

┇;源程序的起始地址为8000H上页下页回目录首地址首地址/sundae_meng2、结束命令END格式:END功能:汇编程序结束标志附在一个源程序的结尾一个源程序只能出现一次END指令3、定义字节命令DB格式:功能:标号:DB

字节常数或字符串(8位)定义字节的内容,汇编程序把DB定义的字节依次存入标号开始的存储单元用法:有定义的内存单元地址项或项表上页下页回目录/sundae_meng例:ORG8000HTAB:

DB45H,73,‘5’,‘A’TAB1:DB101B伪指令ORG定义了数据块TAB的起始地址为8000H伪指令DB定义了8000H~8003单元的内容依次为:(8000H)=45H(8001H)=49H(8002H)=35H(8003H)=41H(8004H)=05HTABTAB1(1)由ORG定义(2)跟在其他源程序之后上页下页回目录/sundae_meng4、定义字命令DW格式:功能:标号:DW字或字表定义若干个字(双字节)例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH汇编后:(8004H)=00H上页下页回目录按顺序存放!/sundae_meng5、定义空间命令DS格式:功能:标号:DS数据或字符及表达式例:(8008H)=30H(8009H)=8AH从指定单元地址开始,由数据或字符及表达式的值来定义应保留的单元数,备用ORG8000HDS08HDB30H,8AH即:8000H~8007H单元保留备用定义空间上页下页回目录/sundae_meng6、等值命令EQU格式:字符名称EQU数据或汇编符号功能:将一个数据或汇编符号赋予标号段规定的字符名称例:ORG8000HAAEQUR6MOV

A,AA;AA与R6等值;A(R6)上页下页回目录/sundae_meng例:A10EQU10DELYEQU07EBHMOVA,A10LCALLDELY;A10=10;DELY=07EBH;转向入口地址07EBH使用EQU指令,须先赋值后使用,不能反之上页下页回目录/sundae_meng7、数据地址赋值等值命令DATA格式:字符名称DATA数据或表达式功能:此命令把数据/代码地址赋予标号段所规定的字符名称。定义的字符名称可先使用后定义INDEXJDATA8389HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ这个字符名称的地址为8389H例:上页下页回目录等价于/sundae_mengEQU与DATA的区别(1)DATA与EQU相似,但DATA定义的字符名称,

可先使用后定义,EQU则不能(2)EQU指令可把汇编符号赋给字符名称,

DATA则不能(3)DATA可把表达式的值赋给字符名称,

EQU则不能DATA常在程序中定义数据地址EQU常在程序中定义字符数据上页下页回目录/sundae_meng8、位地址符号命令BIT格式:字符名称BIT位地址功能:把位地址赋予标号段的字符名称A1BITP1.0A2BITP2.0例:;P1.0,P2.0赋予位地址字符名称

A1、A2,在编程时可以直接把

A1、A2当成位地址使用上页下页回目录/sundae_meng汇编程序的操作分两次扫描(汇编)第一次扫描(汇编)检查语法结构,对源程序中的符号、表达式、标号进行定义,处理伪指令,建立符号表上页下页回目录显示ERROR,并提示行号显示ERROR,并提示行号修改!修改!第二次扫描(汇编)汇编成目标代码和汇编程序清单可执行的代码(机器码)/sundae_meng三、MCS-51指令系统的特点1、执行速度快,存储效率高MCS-51指令系统共有111条指令按字节分单字节指令49条双字节指令45条三字节指令17条按周期分单周期指令64条双周期指令45条四周期指令2条设时钟频率为12MHz,则指令执行的时间分别为:1

s

58

2

s

40

4

s

2

占居空间占居时间时空上页下页回目录/sundae_meng硬件由221位构成2、指令易掌握,功能强具有丰富的位操作指令、查表指令、散转指令乘除指令等。构成了完整的指令系统3、适合于控制、智能仪表布尔处理机布尔运算器ALU布尔累加器CY(PSW.7)布尔RAM区共128位布尔I/O口P0~P3口每位都可做布尔I/O口

布尔指令子集17条布尔指令上页下页回目录/sundae_meng四、寻址方式(7种)⑴立即寻址⑵直接寻址⑶寄存器寻址⑷寄存器间接寻址⑸基址寄存器加变址寄存器间接寻址⑹相对寻址⑺位寻址上页下页回目录/sundae_meng五、MCS-51指令分类(5类)⑴数据传送(29条)⑵算术运算(24条)⑶逻辑运算(24条)⑷控制转移(17条)⑸布尔处理(17条)共111条指令上页下页回目录/sundae_meng介绍描述指令符号的意义—当前选中寄存器区的8个工作寄存器(R0~R7)RnRidirect-——8位内部RAM单元地址00H~7FH——专用特殊功能寄存器SFR的地址80H~FFH——立即数(8位)#data#data16——立即数(16位)—当前选中寄存器区中可做间址寄存器的2个工作寄存器(R0、R1)n=0~7i=0、1上页下页回目录P61/sundae_mengaddr16—16位目的地址,用于LCALL、LJMP指令

地址范围64KBROM空间addr11—11位目的地址,用于ACALL、AJMP指令

地址范围2KBROM空间relDPTR—数据地址指针,可做16位间址寄存器bit—内RAM或SFR中的直接位寻址—8位带符号的偏移量,用于SJMP和所有的条件转移指令中范围-128~127上页下页回目录/sundae_mengA—累加器B—专用寄存器,用于MUL和DIV指令C—位累加器(PSW.7),进位/借位标志@—间址或基址寄存器前缀如@Ri,@A+DPTR/—位操作的前缀,表示对该位操作数取反(X)—X中的内容((X))—由X寻址的单元中的内容箭头左边的内容被箭头右边的内容所代替@DPTR,@A+PC上页下页回目录/sundae_meng§3.2MCS-51指令的寻址方式用何种方式寻找指令的操作数或指令的执行地址1、立即寻址寻址空间:指令形式:操作码立即数程序存储器指令的操作数存放在程序存储器中操作数紧跟操作码OP后面立即寻址:在哪里?用何种方式寻找OP#dataImmediateAddressing上页下页回目录指令的寻址方式:指令的寻址方式:/sundae_mengMOVA,#30H;A#30H例1:操作码立即数PCPCPC74H30HROM××A30HMOVDPTR,#8000H;DPTR#8000H例2:操作码PCPCPC立即数的高8位立即数的低8位DPHDPLPC80H00H90H80HROM00H

上页下页回目录/sundae_meng2、直接寻址寻址空间:指令的三种形式:操作码操作数地址在指令中直接给出操作数的真实地址操作码后面紧跟一个实际操作数地址操作码操作数地址立即数操作码源操作数地址目的操作数地址内RAM的低128字节特殊功能寄存器SFR区直接寻址直接寻址是访问SFR的唯一方法DirectAddressing上页下页回目录00H~7FH80H~FFHCPU内部直接间接/sundae_meng“与”上页下页回目录MOVA,30H;A(30H)例1:操作码操作数地址PCPCPCE5H30HROM××A内RAM××30H××ANL30H,#30H;30H(30H)∧#30H

例2:操作码PCPCPC直接地址立即数PC53H30HROM30H××内RAM××30H××ALU“结果”/sundae_meng3、寄存器寻址寻址空间:指令的三种形式:操作码当前选定的寄存器内容就是实际操作数操作码立即数操作码直接地址R0~R7,由RS0、RS1确定寄存器区/4A、B、CY(位),DPTR、ABMOVA,R3;A(R3)

例1:ADDA,R3;A(A)+(R3)例2:寄存器寻址:RegisterAddressing操作数隐含操作数显然隐含寻址上页下页回目录/sundae_meng4、寄存器间接寻址寻址空间:指令的三种形式:操作码操作码立即数操作码直接地址内部RAM(@R0,@R1,SP)外部RAM(@R0,@R1,@DPTR)寄存器间接寻址:指令选定的寄存器内容就是实际的操作数地址RegisterIndirectAddressing上页下页回目录/sundae_mengMOV@R0,A例1:操作码PCPCF6HROMR030H;累加器传送指令内RAM××30HA××××MOVXA,@DPTR例2:操作码PCPCE0HROMDPTR2000H外RAM××2000HA×××ד读”RD“读”上页下页回目录/sundae_meng5、基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址:

以DPTR或PC作基址寄存器,A作变址寄存器两者相加形成操作数地址。寻址空间:程序存储器(@A+DPTR、@A+PC)指令形式:操作码上页下页回目录/sundae_mengMOVCA,@A+DPTR例:操作码PCPCDPTR2400HA

0FH93HROM……××240FH设(A)=0FH(DPTR)=2400H××ALU“读”PSEN“读”MOVCA,@A+DPTR上页下页回目录/sundae_meng6、相对寻址程序存储器寻址空间:指令的三种形式:操作码rel操作码

直接地址rel操作码

立即数rel相对寻址以当前PC值为基准地址,加上指令的偏移量“rel”,结果为目标地址。rel为有符号补码数,范围:-128~+127一般为双字节或三字节指令RelativeAddressing上页下页回目录寻址指令执行地址目标地址/sundae_mengJNZrel例:;累加器A不等零则转移设:rel=23H2025H2002H2001H2000HROM70H23H下一条指令.......操作码PCPCPC(PC)=2002Hrel=23H修正后转移目标地址D(PC)=2025HPCALU偏移量上页下页回目录(PC)=2002HRel=23H)005202HD=/sundae_meng2025H2112H2111H2110HROMDFHF2H下一条指令.......操作码PCPCPC(PC)=2112Hrel=F2H修正后转移目标地址D(PC)=2104HALU偏移量上页下页回目录例:DJNZR7,rel;(R7)–1不为“0”则转PC2104H指令(PC)=2112HRel=F2H)FF4012HD=/sundae_meng7、位寻址寻址空间:片内RAM的20H~2FH字节地址位地址:00H~7FH请参看图2-15

共128位SFR中12个能被8整除的字节地址位地址请参看图2-16

共93位BitAddressing

以访问触发器的方式,对内部RAM、SFR的位地址空间进行访问,称为位寻址。位地址用于布尔指令。共221位上页下页回目录请参看

P43专为布尔指令设计/sundae_meng寻址方式与相应的寻址空间小结:寄存器R0~R7,A,BCY,DPTR片内内RAM的低128字节特殊功能寄存器SFR直接寻址direct寄存器间址@R0,@R1,SP

@R0,@R1,@DPTR片内RAM、片外RAM与I/O口立即数#data

程序存储器程序存储器基址加变址@A+DPTR,@A+PC程序存储器相对寻址PC+rel位寻址片内RAM20H~2FH部分SFRbit利用的变量

使用的空间方式上页下页回目录P67/sundae_meng3.3指令系统3.3.0指令分类按指令的功能,MCS-51指令系统可分为下列5类:(1)数据传送;(29条)(2)算术运算;(24条)(3)逻辑运算;(24条)(4)位操作;(17条)(5)控制转移。(17条)/sundae_meng3.3.1数据传送类指令(29条)图3–1MCS-51传送指令示意图/sundae_meng表3-2数据传送类指令一览表/sundae_meng表3-2数据传送类指令一览表/sundae_meng1.数据传送到累加器A的指令

MOVA,RnMOVA,directMOVA,@RiMOVA,#data

这组指令的功能是:把源操作数的内容送入累加器A。例如:MOVA,#10H,该指令执行时将立即数10H送入累加器A中。注意:数据传送指令一般不影响状态标志位(PSW:CY,AC,RS1,RS0,OV,P),但累加器A中’1’的个数影响P位。/sundae_meng2.数据传送到工作寄存器Rn的指令

MOVRn,AMOVRn,directMOVRn,#data

这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0确定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOVR0,A,若当前RS1、RS0设置为00(即工作寄存器0区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM00H)单元中。/sundae_meng3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令

MOVdirect,AMOVdirect,RnMOVdirect,direct;功能较强;如:mov02h,03h。但MOVR2,R3在WAVE6000中通不过(mov02h,03h可以)

MOVdirect,@RiMOVdirect,#data;如:MOVSP,#30H

MOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16/sundae_meng比较:8086汇编:MOV[1000H],33H;MOV[1000H],[2000H]

都是不合法的指令。MCS-51汇编:MOV00H,#30H;MOV32H,39H

都是正确的。/sundae_meng例3-3设(70H)=60H,(60H)=20H,P1口为输入口,P1口当前的状态为AAH。分析下面程序的结果。

MOVR0,#70HMOVA,@R0MOVR1,AMOVB,@R1MOV@R0,P1/sundae_meng4.累加器A与外部数据存储器之间的传送指令

MOVXA,@DPTR;读

MOVXA,@Ri;读

MOVX@DPTR,A;写

MOVX@Ri,A;写

注:与外部存储器(数据或程序)或I/O口进行数据传送时,必须经过累加器A

;当访问外部RAM时,只能使用R0、R1及DPTR作为地址指针。/sundae_meng例:将片外RAM120H单元的内容传送到片外RAM

地址为78H的单元。MOVDPTR,#0120HMOVXA,@DPTRMOVR0,#78HMOVX@R0,A例:将片内RAM12H单元的内容传送到片内RAM

地址为78H的单元。MOV78H,12H;外部RAM送累加器A;累加器内容送外RAM/sundae_meng5.堆栈操作指令

PUSHdirectPOPdirect

在MCS-51单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP指出的内部RAM单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减1。/sundae_meng

例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则程序段

PUSHPSWPUSHACCPUSHDPLPUSHDPH执行后,SP内容修改为64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前,如下程序段(SP保持64H不变)/sundae_mengPOPDPHPOPDPLPOPACCPOPPSW执行之后,SP内容修改为60H,而64H、63H、62H、61H单元中的内容依次弹出到DPH、DPL、A、PSW中。

MCS-51提供一个向上升(“向上生长”)的堆栈,因此SP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。/sundae_meng6.程序存储器内容送累加器

MOVCA,@A+PC(PC~固定)

MOVCA,@A+DPTR(DPTR~可变)这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和PC的内容(下一条指令的起始地址)相加后得到一个16位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器和PC的状态,只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的256个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。只读!/sundae_meng

第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个16位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在64KB程序存储器中任意安排,并且一个表格可以为各个程序块所共用。/sundae_meng例题设从程序存储器的TABLE开始存放0~9的平方值,设A中存放0~9间的某数。分析程序:MOVDPTR,#TABLE

MOVCA,@A+DPTR

;改用MOVCA,@A+PC指令行不行?为什么?XCHA,@R0(占1B空间)RET(占1B空间)TABLE:DB0,1,4,9,16,25,36,49,64,81/sundae_meng

7.字节交换指令

XCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri;A0~3@Ri0~3SWAPA;A0~3A4~7

前三条指令是将累加器A的内容和源操作数内容相互交换;后两条指令是半字节交换指令,最后一条指令是将累加器A的高4位与低4位之间进行交换,而另外一条指令是将累加器A的低4位内容和(Ri)所指出的内部RAM单元的低4位内容相互交换。源、目的操作数进行字节交换/sundae_meng例题例:

(A)=80H,(R7)=97H执行:XCHA,R7结果:(A)=97H,(R7)=80H例:将片内RAM60H单元与61H单元的数据交换。

XCH60H,61H←对吗?例:(R0)=60H,(60H)=3EH,(A)=59H执行:XCHDA,@R0结果:(A)=5EH

(60H)=39H/sundae_meng应用举例1MOVP1,#0FEH;11111110B可以使P1.0上的发光二极管点亮MOVP1,#0F0H;11110000B可以使P1口上的上面4个发光二极管点亮P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.75v/sundae_meng8段数码管显示P1.0aP1.1bP1.2cP1.3dP1.4eP1.5fP1.6gP1.7dp5vMOVP1,#00H;显示8.MOVP1,#0F8H;显示7MOVP1,#88H;显示A/sundae_meng应用举例2

一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。/sundae_meng3.3.2算术运算类指令(24条)(除个别INC、DEC指令只影响P位外,其它指令一般都影响标志位。)表3-4算术运算指令/sundae_meng表3-4算术运算指令/sundae_meng表3.3影响标志位的指令注:×表示对该标志位会产生影响,0或1表法对该标志位置0或1/sundae_meng表3.3影响标志位的指令/sundae_meng一、加法指令1.普通加法指令

ADDA,Rn;A(Rn)+(A)ADDA,directADDA,@RiADDA,#data注意:判断无符号数的运算结果是否正确看CY位;判断带符号数的运算结果是否正确看OV位。/sundae_meng例如:+120和

+100之和为220,显然大于127,相加时01111000120(补码,78H)01100100100(补码,64H)11011100220+符号位(最高位)由0变1,两个正数相加结果变负,实际上它是和数的最高位,符号位移入了进位标志,此时位6有进位而位7无进位,置位溢出标志OV,结果溢出。CY=0,DF=1,故OV=1溢出!/sundae_meng

同样,-120和-100相加,结果应为-220,显然小于-128,相加时10001000-120的补码10011100-100的补码+100100100-220的补码

符号位由1变为0,两个负数相加结果变为正数,这是因为符号位移入进位标志,位6无进位而位7有进位,置位溢出标志OV,由此可判断结果溢出。CY=1,DF=0,故OV=1溢出!/sundae_meng2.带进位加法指令

ADDCA,Rn;A(Rn)+(A)+(C)YADDCA,directADDCA,@RiADDCA,#data

这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。/sundae_meng

3.增量指令(除INCA影响P位外,其它不影响任何标志)

INCAINCRnINCdirectINC@RiINCDPTR

最后一条指令是对16位的数据指针寄存器DPTR执行加1操作,指令执行时,先对低8位指针DPL的内容加1,当产生溢出时就对高8位指针DPH加1,但不影响任何标志。/sundae_meng4.十进制调整指令

DAA

这条指令对累加器A参与的BCD码加法运算所获得的8位结果进行十进制调整,使累加器A中的内容调整为二位压缩型BCD码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。

执行该指令时,判断A中的低4位是否大于9和辅助进位标志AC是否为“1”,若两者有一个条件满足,则低4位加6操作;同样,A中的高4位大于9或进位标志Cy为“1”两者有一个条件满足时,高4位加6操作。例如:有两个BCD数36与45相加,结果应为BCD码81,程序如下:/sundae_mengMOVA,#36HADDA,#45HDAA

这段程序中,第一条指令将立即数36H(BCD码36)送入累加器A;第二条指令进行如下加法:00110110360100010145011110117B0000011006++1000000181得结果7BH;第三条指令对累加器A进行十进制调整,低4位(为0BH)大于9,因此要加6,得调整的BCD码81。/sundae_meng

二、减法指令

1.带进位减法指令

SUBBA,Rn;A(A)-(Rn)-(cy)SUBBA,directSUBBA,@RiSUBBA,#data

这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减,结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位,则进位标志Cy置“1”,否则清“0”;如果位3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”;如位6有借位而位7没有借位,或位7有借位而位6没有借位,则溢出标志OV置“1”,否则清“0”。若要进行不带借位的减法操作,则必须先将Cy清“0”。/sundae_meng例3-12双字节无符号数减法,被减数分别在31H,30H中,减数分别在41H,40H单元中,差存于31H,30H单元中.CLRCMOVA,30HSUBBA,40HMOV30H,AMOVA,31HSUBBA,41HMOV31H,A/sundae_meng

2.减1指令

(除DECA影响P位外,其它不影响任何标志)DECADECRnDECdirectDEC@Ri

注:没有专门的DECDPTR指令,要实现其功能可编程实现。/sundae_meng三.乘法指令(Multiplication)

MULAB;(A)×(B)低8位→A

高8位→B

A、B中都是无符号整数如果积大于255,OV=1,否则OV=0;进位标志总是清零Cy=0。注意P91的例3-13中的:ADDCA,#0指令的用法。/sundae_meng四.除法指令(Division)DIVAB;(A)÷(B)商→A

余数→BA、B中都是无符号整数如果除数B为“0”,OV=1,否则OV=0;进位标志总是清零Cy=0。/sundae_meng3.3.3逻辑运算指令除带进位的循环指令RRC、RLC对标志位有影响外,其它指令不影响标志位。

/sundae_meng/sundae_meng1.简单逻辑操作指令

CLRA;A←“0”CPLA;A←ASWAPA;A0~3A4~7例:(A)=3AH,CPLA,(A)=0C5H00111010B→11000101B

(A)=3AH,SWAPA,(A)=0A3H注:指令SWAP,也可看成一个4位循环移位指令,不影响标志位。/sundae_meng2.

循环指令(1)、左循环指令(RotateAccumulatorLeft)

RLA;左移1位例(A)=6CH=01101100BRLA(A)=11011000B=0D8Ha7←a0

C/sundae_meng(2)、带进位左循环指令(RotateAccumulatorLeftthroughCarryflag)

RLCA;左移1位,对标志位CY有影响例(A)=6CH=01101100B,(C)=1RLCA(A)=11011001B=0D9H,(C)=0a7←a0

C/sundae_meng

(3)、右循环指令(RotateAccumulatorRight)

RRA;右移1位例(A)=6CH=01101100BRRA(A)=00110110B=36Ha7a0

C/sundae_meng(4)、带进位右循环指令(RotateARightwithC)RRCA;右移1位,对标志位CY有影响例(A)=6CH=01101100B,(C)=1RRCA(A)=10110110B=0B6H,(C)=0a7a0

C

这组指令除了带进位标志位的移位指令外,其它都不影响Cy,AC,OV等标志。/sundae_meng3.

逻辑与指令ANLA,RnANLA,directANLA,#dataANLA,@RiANLdirect,AANLdirect,#data∧--“与”,“有0即0,全1为1”00000111∧)1111110100000101B=05HX∧0=0;X∧1=XX∧X=X/sundae_meng4.

逻辑或指令ORLA,RnORLA,directORLA,#dataORLA,@RiORLdirect,AORLdirect,#data∨--“或”,“有1即1,全0为0”00000110∨)0110110101101111B=6FHX∨0=X;X∨1=1X∨X=X/sundae_meng5.逻辑异或指令XRLA,RnXRLA,directXRLA,#dataXRLA,@RiXRLdirect,AXRLdirect,#data

--“异或”,“相异为1,相同为0”00000110

)0110110101101011B=6BHX⊕0=XX⊕1=XX⊕X=0/sundae_meng例(A)=01××××××B,×表示随机状态,为1或0,执行下述一组指令执行后A的值如何?XRLA,#0C0H ;将累加器A的内容D7、D6取反01××××××

ORLA,#03H ;将累加器A的内容D1、D0置111000000

(C0H)

ANLA,#0E7H ;将累加器A的内容D4、D3清010××××××

00000011

(03H)

10××××1111100111(E7H)

10×00×11

解:执行上述指令后,(A)=10×00×11B。习题1:如何将累加器A中的数据高4位清0,低位不变?

习题2:如何将寄存器R2中的数据奇数位取反,偶数位不变?1、ANLA,#0FH2、XRLR2,#10101010B/sundae_meng3.3.4控制转移指令(17条)单片机有一定的智能作用,主要是控制转移类指令的功劳。由于该类指令用于控制程序的走向,所以其作用必然是在程序存贮器的空间内。/sundae_meng表3-7控制转移指令/sundae_meng一、无条件转移指令1.(绝对)短跳转指令(2字节指令)AJMPaddr11

;PC←addr11,跳转范围2k

(211=2K)这是2KB范围内的无条件跳转指令,执行该指令时,先将PC+2(因该指令是2个字节的指令),然后将addr11送入PC10~PC0,而PC15~PC11保持不变。这样得到跳转的目的地址。需要注意的是,目标地址与AJMP后面一条指令的第一个字节必须在同一个2KB区域的存储器区内。例:判断下列指令是否正确?(1)、地址指令

0345HAJMP0123H(2)、2567HAJMP29ABH(1).(PC+2)=0347H二进制码为:0000001101000111B0123H二进制码为:0000000100100011B(2).(PC+2)=2569H二进制码为:0010010101101001B29ABH二进制码为:0010100110101011B解:/sundae_meng2.长跳转指令(3字节指令)

LJMPaddr16;PC←addr16,跳转范围64k

执行该指令时,将16位目标地址addr16

装入PC,程序无条件转向指定的目标地址。转移的目标地址可以在64KB程序存储器地址空间的任何地方,不影响任何标志。3.散转指令(间接跳转指令)(1字节指令)

JMP@A+DPTR;PC←((A)+(DPTR))

执行该指令时,把累加器A中的8位无符号数与数据指针中的16位数相加,结果作为下条指令的地址送入PC,不改变累加器A和数据指针DPTR的内容,也不影响标志。利用这条指令能实现程序的散转。/sundae_meng4.相对转移指令(与转移指令所在的位置有关)(2字节指令)

SJMPrel;PC←(PC)+2,PC←(PC)+rel

执行该指令时,先将PC+2,再把指令中带符号的偏移量加到PC上,得到跳转的目标地址送入PC。rel--机器码的相对偏移量,为8位补码,转移范围:前128~后127字节。

rel=(目的地址-转移指令地址-转移指令字节数)补=(目的地址-PC当前值)补。注:编程时,可用标号代替转移目的地址,rel交给编译程序计算,注意转移范围。例(1):

SJMPNEXT(或AJMPNEXT,SJMPNEXT)

…NEXT:…例(2):原地踏步指令的指令:

HERE:SJMPHERE常写成:SJMP$;($~地址计算器的值,为正在汇编的指令的地址)/sundae_meng

二、条件转移指令

JZrel;(A)=0转移

JNZrel;(A)≠0转移这类指令是依据累加器A的内容是否为0的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的256

个字节范围之内(-128~+127)。当条件满足时,PC←(PC)+N+rel,其中(PC)为该条件转移指令的第一个字节的地址,N为该转移指令的字节数(长度),本转移指令N=2。注:编程时,可用标号代替转移目的地址。

如:JZLOOP/sundae_meng

三、比较转移指令在MCS-51中没有专门的比较指令,但提供了下面4条比较不相等转移指令:CJNEA,direct,relCJNEA,#data,rel;(A)=#data,继续,C←0(A)>#data,转,C←0(A)<#data,转,C←1

特点:(A)只有<#data时,C←1CJNERn,#data,relCJNE@Ri,#data,rel

这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志Cy置“1”,否则清“0”,但不影响任何操作数的内容。如:CJNEA,#78H,LOOP

做减法运算注意:该指令本质上是做减法运算,但不影响原来操作数的值。/sundae_meng

四、减1不为0转移指令DJNZRn,relDJNZdirect,rel;运行后对原来的操作数有影响。这两条指令把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移(转移地址的计算方法同前)。例:延时子程序

delay:MOVR7,#03H;1T

delay0:MOVR6,#19H;1T

delay1:DJNZR6,delay1;2T

DJNZR7,delay0;2TRET;2T

/sundae_meng

地址机器码源程序注释

ORG0000H

;整个程序起始地址0000020030LJMPMAIN;跳向主程序

ORG0030H

;主程序起始地址0030C3MAIN:CLRC;MAIN为程序标号0031E6LOOP:MOVA,@R0003237ADDCA,@R1003308INCR00034D9FBDJNZR1,LOOP;相对转移00368002SJMPNEXT00387803MOVR0,#03H003A18NEXT:DECR0003B80FESJMP$;HERE:SJMPHERE

END;结束标记偏移量的计算/sundae_meng

五、调用及返回指令(保护断点与恢复,自动完成)

在程序设计中,通常把具有一定功能的公用程序段编制成子程序,当主程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。

子程序调用指令(LCALL、ACALL)一定在主程序中,子程序返回指令RET一定在子程序中。/sundae_meng1.绝对调用指令(保护断点,2字节指令)

ACALLaddr11

这是一条2KB范围内的子程序调用指令。所用的子程序的入口地址必须与ACALL下面一条指令的第一个字节在同一个2KB区域的存储器区内。(PC)(PC)+2(SP)(SP)+1((SP))(PC0~7)(SP)(SP)+1((SP))(PC8~15)(PC)addr0~10(PC11~15)保持不变低8位先入,高8位后入/sundae_meng

2.长调用指令

LCALLaddr16

(3字节指令)

这条指令无条件调用位于16位地址addr16的子程序。执行该指令时,先将PC+3以获得下一条指令的首地址,并把它压入堆栈(先低字节后高字节),SP内容加2,然后将16位地址放入PC中,转去执行以该地址为入口的程序。LCALL指令可以调用64KB范围内任何地方的子程序。指令执行后不影响任何标志。低8位先入,高8位后入/sundae_meng3.子程序返回指令(恢复断点)

RET

这条指令的功能是:恢复断点,将调用子程序时压入堆栈的下一条指令的首地址取出送入PC,使程序返回主程序继续执行。

4.中断返回指令

RETI;这条指令的功能与RET指令相似,不同的是它还要清除MCS-51单片机中断响应时所置位的优先级状态触发器。

5.NOP~空操作指令:不进行任何操作,占用1个机器周期,然后继续执行下一条指令。(PC8~15

)((SP))(SP)(SP)-1(PC0~7)((SP))(SP)(SP)-1

高8位先出,低8位后出/sundae_meng例题设执行前(SP)=52H。

…0312H1278PRC:ACALLSUB10314H7489MOVA,#89H…0645HF590SUB1:MOVP1,A…RET(1)、执行指令PRC:ACALLSUB1的结果为:(53H)=14H,(54H)=03H,(PC)=0645H,程序由0645H开始执行。(2)、执行指令RET后:(SP)=52H,(PC)=0314H。程序返回0314H处开始执行。/sundae_meng3.3.5位操

温馨提示

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

评论

0/150

提交评论