第4章指令系统.docx

上传人:b****1 文档编号:13776158 上传时间:2023-06-17 格式:DOCX 页数:54 大小:94.55KB
下载 相关 举报
第4章指令系统.docx_第1页
第1页 / 共54页
第4章指令系统.docx_第2页
第2页 / 共54页
第4章指令系统.docx_第3页
第3页 / 共54页
第4章指令系统.docx_第4页
第4页 / 共54页
第4章指令系统.docx_第5页
第5页 / 共54页
第4章指令系统.docx_第6页
第6页 / 共54页
第4章指令系统.docx_第7页
第7页 / 共54页
第4章指令系统.docx_第8页
第8页 / 共54页
第4章指令系统.docx_第9页
第9页 / 共54页
第4章指令系统.docx_第10页
第10页 / 共54页
第4章指令系统.docx_第11页
第11页 / 共54页
第4章指令系统.docx_第12页
第12页 / 共54页
第4章指令系统.docx_第13页
第13页 / 共54页
第4章指令系统.docx_第14页
第14页 / 共54页
第4章指令系统.docx_第15页
第15页 / 共54页
第4章指令系统.docx_第16页
第16页 / 共54页
第4章指令系统.docx_第17页
第17页 / 共54页
第4章指令系统.docx_第18页
第18页 / 共54页
第4章指令系统.docx_第19页
第19页 / 共54页
第4章指令系统.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第4章指令系统.docx

《第4章指令系统.docx》由会员分享,可在线阅读,更多相关《第4章指令系统.docx(54页珍藏版)》请在冰点文库上搜索。

第4章指令系统.docx

第4章指令系统

第4章MCS-51指令系统

计算机是高度自动化的机器,它能在程序控制下自动进行运算和事务处理。

整个过程是由CPU中的控制器控制的。

一般情况下,控制器按顺序自动连续地执行存放在存储器中的指令,而每一条指令执行某种操作。

计算机能直接识别的只能是由0和1编码组成的指令,也称为机器语言指令,这种编码称为机器码,由机器码编制的计算机能识别和执行的程序称为目的程序。

4.1概述

单片机的每一条指令包含两个基本部分:

操作码和操作数。

操作码表明指令要执行的操作性质;操作数表明参与操作的数据或数据所存放的地址。

MCS-51机器语言指令根据其指令编码长短的不同有单字节指令、双字节指令和三字节指令三种格式。

1、单字节指令

单字节指令格式由8位二进制编码表示。

有两种形式:

(1)8位全表示操作码。

例如,空操作指令NOP,其机器码为:

00000000

(2)8位编码中包含操作码和寄存器编码。

例如:

MOVA,Rn

这条指令的功能是把寄存器Rn(n=0,1,2,3,4,5,6,7)中的内容送到累加器A中去。

其机器码为:

11101←Rn→

操作码寄存器编码

假设n=0,则寄存器编码为Rn=000(参见指令表),则指令MOVA,R0的机器码为E8H,其中操作11101表示执行把寄存器中的数据传送到A中去的操作。

000为R0寄存器编码。

2、双字节指令

双字节指令格式中,指令的编码由两个字节组成,该指令存放在存储器时需占用两个存储器单元。

例如:

MOVA,#DATA

这条指令的功能是将立即数DATA送到累加器A中去。

假设立即数DATA=85H,则其机器码为:

01110100

第一字节操作码

10000101

第二字节操作数(立即数85H)

3、三字节指令

三字节指令格式中第一个字节为操作码,其后两个字节为操作数。

例如:

MOVdirect,#DATA

这条指令是指立即数DATA送到地址为direct的单元中去。

假设direct=78H,DATA=80H,则MOV78H,#80H指令的机器码为:

01110101

第一字节操作码

01111000

第二字节第一操作数(目的地址)

10000000

第三字节第二操作数(立即数)

用二进制编码表示的机器语言指令由于不便阅读理解和记忆,因此在微机控制系统中采用汇编语言(用助记符和专门的语言规则表示指令的功能和特征)指令来编写程序。

一条汇编语言指令中最多包含四个区段,如下所示:

[标号:

]操作码助记符[目的操作数][,源操作数][;注释]

例如,把立即数F0H送累加器的指令为:

START:

MOVA,#0F0H;立即数F0H→A

标号区段是由用户定义的符号组成,必须用英文大写字母开始。

标号区段可缺省。

若一条指令中有标号区段,标号代表该指令第一个字节所存放的存储器单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。

操作码区段是指令要操作的数据信息。

根据指令的不同功能,操作数可以有三个、两个、一个或没有操作数。

上例中操作数区段包含两个操作数A和#0F0H,它们之间由逗号分隔开。

其中第二个操作数为立即数F0H,它是用十六进制数表示的以字母开头的数据,为区别于操作数区段出现的字符,故以字母开始的十六进制数据前面都要加0,把立即数F0H写成0F0H(这里H表示此数为十六进制数,若用二进制,则用B表示,十进制用D或省略)。

操作数表示参加操作的数的本身或操作数所在的地址。

注释区段可缺省,对程序功能无任何影响,只用来对指令或程序段作简要的说明,便于它人阅读,在调试程序时也会带来很多方便。

值得注意的是,汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫做汇编。

汇编有两种方式:

机器汇编和手工汇编。

机器汇编是用专门的汇编程序,在计算机上进行翻译;手工汇编是编程员把汇编语言指令通过查指令表逐条翻译成机器语言指令。

现在主要使用机器汇编,但有时也用到手工汇编。

4.2寻址方式

在带有操作数的指令中,数据可能就在指令中,,也有可能在寄存器或存储器中,甚至在I/O口中。

对这此设备内的数据要正确进行操作就要在指令中指出其地址,寻找操作数地址的方法称为寻址方式。

寻址方式的多少及寻址功能强弱是反映指令系统性能优劣的重要。

MCS-51指令系统的寻址方式有下列几种:

①立即寻址

②直接寻址

③寄存器寻址

④寄存器间接寻址

⑤基寄存器加变址寄存器间接寻址

⑥相对寻址

下面逐一介绍各种寻址方式。

1、立即寻址

立即寻址方式是操作数包含在指令字节中,指令操作码后面字节的内容就是操作数本身,汇编指令中,在一个数的前面冠以"#"符号作前缀,就表示该数为立即寻址。

例如:

机器码助记符注释

7470MOVA,#70H;70H→A

指令功能是将立即数70H送入累加器A,这条指令为双字节指令,操作数本身70H跟在操作码74H后面,以指令形式存放在程序存储器内。

在MCS-51指令系统中还有一条立即数为双字节的指令:

机器码助记符注释

908200MOVDPTR,#8200H;82H→DPH,00H→DPL

这条指令存放在程序存储器中占三个存储单元

请注意,在MCS-51汇编语言指令中,#data表示8位立即数,#data16表示16位立即数,立即数前面必须有符号“#”,上述两例写成一般格式为:

MOVA,#data

MOVDPTR,#data16

2、直接寻址

在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。

直接寻址方式中操作数存储的空间有三种:

1部数据存储器的低128个字节单元(00H~7FH)

例如:

MOVA,70H;(70H)→A

指令功能是把内部RAM70H单元中的内容送入累加器A。

⑵位地址空间

例如:

MOVC,00H;直接位00H内容→进位位

⑶功能寄存器

特殊功能寄存器只能用直接寻址方式进行访问。

例如:

MOVIE,#85H;立即数85H→中断允许寄存器IE。

IE为特殊功能寄存器,其字节地址为A8H。

一般在访问SFR时,可在指令中直接使用该寄存器的名字来代替地址。

3、寄存器寻址

由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。

寄存器寻址按所选定的工作寄存器R0~R7进行操作,指令机器码的低3位的八种组合000,001,…,110,111分别指明所用的工作寄存器R0,R1,…,R6,R7。

如:

MOVA,Rn(n=0~7),这8条指令对应的机器码分别为E8H~EFH。

例如:

INCR0;(R0)+1→R0

指令功能是对寄存器R0进行操作,使其内容加1。

4、寄存间接寻址

由指令指出某一个寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。

这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址,寄存器起地址指针的作用,寄存器间接寻址用符号“@”表示。

寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00H~FFH)中的数据。

寄存器间接寻址也适用于访问外部RAM,此时可使用R0,R1或DPTR作为地址指针。

例如:

MOVA,@R0;((R0))→A

指令功能是把R0所指出的内部RAM单元中的内容送累加器A。

若R0内容为60H,而内部RAM60H单元中的内容是3BH,则指令MOVA,@R0的功能是将3BH这个数送到累加器A,如下图所示:

5、

基址寄存器加变址寄存器间接寻址

这种寻址方式用于访问程序存储器中的数据表格,它把基址寄存器(DPTR或PC)和变址寄存器A的内容作为无符号数相加形成16位的地址,访问程序存储器中的数据表格。

例如:

MOVCA,@A+DPTR;((DPTR)+(A))→A

MOVCA,@A+PC;((PC)+(A))→A

A中为无符号数,指令功能是A的内容和DPTR或当前PC的内容相加得到程序存储器的有效地址,把该存储器单元中的内容送到A。

6、相对寻址

这类寻址方式是以当前PC的内容作为基地址,加上指令中给定的偏移量所得结果作为转移地址,它只适用于双字节转移指令。

偏移量是带符号数,在-128~+127范围内,用补码表示。

例如:

JCrel;C=1跳转

第一字节为操作码,第二字节就是相对于程序计数器PC当前地址的偏移量rel。

若转移指令操作码存放在1000H单元,偏移量存放在1001H单元,该指令执行后PC已为1002H。

若偏移量rel为05H,则转移到的目标地址为1007H,即当C=1时,将去执行1007H单元中的指令。

4.3指令系统

MCS-51指令系统有42种助记符代表了33种操作功能,这是因为有的功能可以有几种助记符(例如数据传送的助记符有MOV,MOVC,MOVX)。

指令功能助记符与操作数各种可能的寻址方式相结合,共构成111种指令。

这111种指令中,如果按字节分类,单字节指令49条,双字节指令45条,三字节指令17条。

若从指令执行的时间看,单机器周期(12个振荡器周期)指令64条,双机器周期指令45条,两条(乘、除)四个机器周期指令。

在12MHz晶振的条件下,分别为1,2和4μs。

由此可见MCS-51指令系统具有存储空间效率高和执行速度快的特点。

4.3.1指令分类

按指令的功能,MCS-51指令系统可分为下列五类:

1、数据传送类

2、算术运算类

3、逻辑操作类

4、位操作类

5、控制转移类

下面根据指令的功能特性分类介绍。

在分类介绍之前,先把描述指令的一些符号作简单的说明。

Rn——表示当前工作寄存器区中的工作寄存器,n取0~7,表示R0~R7。

direct——8位内部数据存储单元地址。

它可以是一个内部数据RAM单元(0~127)或特殊功能寄存器地址或地址符号。

@Ri——通过寄存器R1或R0间接寻址的8位内部数据RAM单元(0~255),i=0,1。

#data——指令中的8位立即数。

#data16——指令中的16位立即数。

addR16——16位目标地址。

用于LCALL和LJMP指令,可指向64K字节程序存储器地址空间的任何地方。

addR11——11位目标地址。

用于ACALL和AJMP指令,转至当前PC所在的同一个2K字节程序存储器地址空间内。

rel——补码形式的8位偏移量。

用于相对转移和所有条件转移指令中。

偏移量相对于当前PC计算,在-128~+127范围内取值。

DPTR——数据指针,用作16位的地址寄存器。

A——累加器

B——特殊功能寄存器,专用于乘(MUL)和除(DIV)指令中。

C——进位标志或进位位。

bit——内部数据RAM或部分特殊功能寄存器里的可寻址位的位地址。

——表示对该位操作数取反。

(X)——X中的内容。

((X))——表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用((X))表示。

4.3.2数据传送类指令

数据传送指令一般的操作是把源操作数传送到指令所指定的目标地址,指令执行后,源操作数不变,目的操作数被源操作数所代替。

数据传送是一种最基本的操作,数据传送指令是编程时使用最频繁的指令,其性能对整个程序的执行效率起很大的作用。

在MCS-51指令系统中,数据传送指令非常

表4-1数据转送类指令

指令助记符

(包括寻址方式)

说明

周期数

MOVA,Rn

MOVA,direct

MOVA,@Ri

MOVA,#data

MOVRn,A

MOVRn,direct

MOVRn,#data

MOVdirect,A

MOVdirect,Rn

MOVdirect1,direct2

MOVdirect.,@Ri

MOVdirect,#data

MOV@Ri,A

MOV@Ri,direct

MOV@Ri,#data

MOVDPTR,#data16

MOVCA,@A+DPTR

MOVCA,@A+PC

MOVXA,@Ri

MOVXA,@DPTR

MOVX@Ri,A

MOVX@DPTR,A

PUSHdirect

POPdirect

XCHA,Rn

XCHA,direct

XCHA,@Ri

XCHDA,@Ri

寄存器内容送累加器A←(Rn)

直接寻址字节内容送累加器A←(direct)

间接RAM送累加器A←((Ri))

立即数送累加器A←#data

累加器送寄存器Rn←(A)

直接寻址字节送寄存器Rn←(direct)

立即数送寄存器Rn←#data

累加器送直接寻址字节direct←A

寄存器送直接寻址字节direct←(Rn)

直接寻址字节送直接寻址字节direct1←(direct2)

间接RAM送直接寻址字节direct←((Ri))

立即数送直接寻址字节direct←#data

累加器送片内RAM(Ri)←A

直接寻址字节送片内RAM(Ri)←(direct)

立即数送片内RAM(Ri)←#data

16位立即数送数据指针DPRT←#data16

变址寻址字节送累加器(相对DPTR)A←((A)+(DPTR))

变址寻址字节送累加器(相对PC)A←((A)+(PC))

片外RAM送累加器(8位地址)A←((Ri))

片外RAM(16位地址)送累加器A←((DPTR))

累加器送片外RAM(8位地址)((Ri))←A

累加器送片外RAM(16位地址)((DPTR))←A

直接寻址字节压入栈顶SP←(SP)+1,(SP)←(direct)

栈顶弹至直接寻址字节direct←((SP)),SP←(SP)-1

寄存器与累加器交换(A)←→(Rn)

直接寻址字节与累加器交换(A)←→(direct)

片内RAM与累加器交换(A)←→((Ri))

片内RAM与累加器低4位交换(A)3-0←→((Ri))3-0

1

2

1

2

1

2

2

2

2

3

2

3

1

2

2

3

1

1

1

1

1

1

2

2

1

2

1

1

12

12

12

12

12

24

12

12

24

24

24

24

12

24

12

24

24

24

24

24

24

24

24

24

12

12

12

12

灵活,它可以把数据方便地传送到数据存储器和I/O口中。

数据传送类指令用到的助记符有:

MOV,MOVX,MOVC,XCHD,PUSH,POP。

数据传送类指令源操作数和目的操作数的寻址方式及传送路径如图3-1所示。

数据传送类指令见表4-1。

图4-1MCS-51传送指令示意图

数据传送类指令比较简单,由图4-1和表4-1很容易理解各种指令的功能,故不作详细叙述,下面作一些必要的说明。

最好理解每一条指令的方法是用软件仿真一下,就知道每条指令的意义。

1、以直接地址为目标操作数和源操作数的传送指令

MOVdirect1,direct2;(direct2)→direct1

这是一条三字节指令,指令的第一字节为操作码,第二字节为源操作数的地址,第三字节为目标操作数的地址。

源操作数和目标操作数的地址都以直接地址形式表示,它们可以是内部RAM存储器或特殊功能寄存器。

指令的功能很强,能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM直接数据传送。

例MOVE0H,78H

其中目标操作数地址E0H为累加器的字节地址,源操作数地址78H为内部RAM单元地址,指令的功能是把内部RAM78H单元中的数据传送到累加器ACC中。

指令的机器码为85H,78H,E0H。

2、累加器与外部数据存储器之间数据传送指令

该类指令有下面两组:

⑴、DPTR内部指示外部数据存储器地址

1)外部数据存储器内容送累加器

助记符功能

MOVX A,@DPTRA←((DPTR))

执行这条指令时,P3.7引脚上输出

有效信号,用作外部数据存储器的读选通信号。

DPTR所包含的16位地址信息由P0(低8位)和P2口(高8位)输出,选中单元的数据由P0输入到累加器,P0口作分时复用的总线。

2)累加器内容送外部数据存储器。

助记符功能

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

执行该指令时,P3..6引脚上输出

有效信号,用作外部数据存储器的写选通信号。

DPTR所包含的16位地址住处由P0口(低8位)和P2口(高8位)输出,累加器的内容由P0口输出,P0口作分时复用总线。

⑵、由Ri内容指示外部数据存储器地址

1)外部数据存储器内容送累加器

助记符功能

MOVXA,@RiA←((Ri)+(P2)),i=0,1

执行该指令时,在P3.7引脚上输出

有效信号,用作外部数据存储器的读选通信号。

Ri所包含的低8位地址由P0口输出,而高8位地址由P2口输出。

选中单元的数据由P0口输入到累加器。

例设外部数据存储器2097H单元中内容为80H,在执行下列指令后,则A中的内容为80H。

MOVP2,#20H

MOVR0,#97H

MOVXA,@R0

2)累加器内容送外部数据存储器

助记符功能

MOVX@Ri,A((Ri)+(P2))←(A),i=0,1

执行该指令时,在P3.6引脚上输出

有效信号,用作外部数据存储器的写选通信号。

P0口上分时输出由Ri指定的低8位地址及输入外部数据存储器单元的内容。

高8位地址由P2口输出。

3、程序存储器内容送累加器

这类指令有下列两条,常用于查表

第一条:

助记符功能

MOVCA,@A+PCPC←(PC)+1A←((A)+(PC))

这条指令以PC作为基址寄存器,A的内容作为无符号数和PC内容(下一条指令第一字节地址)相加后得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A.

例(A)=30H,执行下列指令

地址指令

1000H:

MOVCA,@A+PC

结果为程序存储器中1031H单元的内容送入A。

这条指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。

缺点是表格只能存放在该条查表指令后面256个单元之内,因此表格大小受到限制,而且表格只能被该段程序所使用。

第二条:

助记符功能

MOVCA,@A+DPTRA←((A)+(DPTR))

这条指令以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。

例(DPTR)=8100H,(A)=40H,执行下列指令

MOVCA,@A+DPTR

结果为程序存储器中8140H单元的内容送入累加器A。

这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。

因此表格大小和位置可在64KB程序存储器中任意安排,一个表格可被各个程序块公用。

4、栈操作指令

在MCS-51内部RAM中可以设定一个后进先出的区域(LIFO),称为堆栈。

在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。

在指令系统中有下列两条用于数据传送的栈操作指令:

⑴、进栈指令

助记符功能

PUSHdirectSP←(SP)+1(SP)←(direct)

这条指令的功能是首先将栈指针SP的内容加1,然后把直接地址指出的单元内容传送到栈指针SP所指的内部RAM单元中。

(SP)=60H,(ACC)=30H,(B)=70H,执行下列指令:

PUSHACC;SP←(SP)+1,即SP←61H,61H←30H

PUSHB;SP←(SP)+1,即SP←62H,62H←70H

⑵、出栈指令

助记符功能

POPdirectdirect←((SP))SP←(SP)-1

这条指令的功能是栈指针SP所指的内部RAM单元内容送入直接地址指出的字节单元中,栈指针SP的内容减1。

例:

(SP)=62H,(62H)=70H,(61H)=30H,执行下列命令

POPDPH;DPH←((SP)),SP←(SP)-1

POPDPL;DPL←((SP)),SP←(SP)-1

结果;(DPTR)=7030H,(SP)=60H

执行POPdirect指令不影响标志,但当直接地址为PSW时,可以使一些标志改变。

这也是通过指令强行修改标志的一种方法。

例:

假设已把PSW的内容压入栈顶,用下列指令修改PSW内容使FO,RS1,RS0均为1,最后用出栈指令把内容送回程序状态字PSW,实现对PSW内容的修改。

MOVR0,SP;取栈指针

ORL@R0,#38H;修改栈顶内容

POPPSW;修改PSW

5、字节交换指令

这组指令的功能是将累加器A的内容和源操作数内容相互交换。

源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。

助记符功能

XCHA,Rn(A)←→(Rn),n=0~7

XCHA,@Ri(A)←→((Ri))i=0,1

XCHA,direct(A)←→(direct)

例(A)=80H,(R7)=08H,执行下列指令:

XCHA,R7;(A)←→(R7)

结果:

(A)=08H,(R7)=80H

6、半字节交换指令

助记符功能

XCHDA,@Ri(A3∽0)

((Ri)3∽0)i=0,1

这条指令将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位不变。

4.3.3算术运算类指令

在MCS-51指令系统中具有单字节的加、减、乘、除法指令(见表4-2),其运算功能比较强。

算术运算指令执行的结果将影响进位(CY)、辅助进位(AC)、溢出标志位(OV)。

但是加1和减1指令不影响这些标志。

对标志位有影响的所有指令列于表4-3中,其中包括一些非算术运算的指令在内。

注意,对于特殊功能寄存器(专用寄存器)字节地址D0H或位地址D0H~D7H进行操作也会影响标志。

由表4-2可知,算术运算类可分为8组。

1、加法指令

ADDA,Rnn=0~7

ADDA,direct

ADDA,@Rii=0,1

ADDA,#data

这组加法指令的功能是把所指出的字节变量加到累加器A上,其结果放在累加器中。

相加过程中如果D7有进位(C7=1),则进位CY置“1”,否则清“0”,如果D3有进位则辅助进位AC置“1”,否则清“0”;如果D6有进位而D7无进位,或者D7有进位D6无进位,则溢出标志OV置“1”,否则清“0”。

源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等寻址方式。

表4-2算术运算类指令

指令助记符

(包括寻址方式)

说明

字节数

周期数

ADDA,Rn

寄存器内容送累加器A←(A)+(Rn)

1

1

ADDA,direct

直接寻址送累加器A←(A)+(direct)

2

1

ADDA,@Ri

间接寻址RAM到累加器A←(A

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2