指令系统.docx
- 文档编号:1042670
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:31
- 大小:723.74KB
指令系统.docx
《指令系统.docx》由会员分享,可在线阅读,更多相关《指令系统.docx(31页珍藏版)》请在冰点文库上搜索。
指令系统
1.机器语言用二进制编码表示每条指令,它是计算机能直接识别和执行的语言。
用机器语言编写的程序称为机器语言程序或指令程序(机器码程序)。
因为机器只能直接识别和执行这种机器码程序,所以又称它为目标程序。
2
汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。
操作码〔目的操作数][,源操作数]例如:
MOVA,#OOH
2.操作码部分规定了指令所实现的操作功能,由2—5个英文字母表示,例如:
JB、MOV、DJNZ、LCALL等。
操作数部分指出了参与操作的数据来源和操作结果存放在什么空间单元。
操作数可以直接是一个数(立即数),或者是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数
3.805l指令系统中,有一字节、两字节或三字节指令。
(1)一字节指令一字节指令中的8位二进制代码既包含操作码的信息,也包含操作数的信息。
如:
INCA
(2)双字节指令用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址:
其指令格式为:
操作码立即数或地址如:
MOVA,#00H(3)三字节指令一个字节操作码,两个字节操作数。
其格式如下:
操作码立即数或地址立即数或地址如:
MOV90H,#00H
4.伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序(机器码),它只是用来对汇编过程进行某种控制。
(1)ORG汇编起始命令格式:
ORG16位地址
其功能是规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址,例如:
ORG2000HSTART:
MOVA,#64H既规定了标号START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。
ORG可以多次出现在程序的任何地方,当它出现时,下一条指令的地址就由此重新定位。
(2)END——汇编结束命令
END命令通知汇编程序结束汇编。
在END之后所有的汇编语言指令均不予以处理。
(3)EQU赋值命令
格式:
字符名称EQU项(数或汇编符号)EQU命令是把“项”赋给“字符名称”,注意这里的字符名称不等于标号(其后没有冒号),其中的项,可以是数也可以是汇编符号。
用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。
因此,它可以是8位的、也可以是16位的。
如:
AAEQUR1;AA就代表了工作寄存器Rl
MOVA,AA;
(4)DATA数据地址赋值命令
格式:
字符名称DATA表达式
(5)DB定义字节命令
格式:
DB〔项或项表]
(6)DW定义字命令
格式:
DW16位数据项或项表
(7)DS定义存储空间命令
格式:
DS表达式
(8)BIT位地址符号命令
格式:
字符名BIT位地址
5.8051单片机寻址方式有七种:
①寄存器寻址②直接寻址③立即数寻址④寄存器间接寻址⑤变址寻址⑥相对寻址⑦位寻址
6.寄存器寻址就是由指令指出寄存器组R0—R7中某一个或其它寄存器(A、B、DPTR等)的内容作为操作数;
7.在指令中直接给出操作数所在存储单元的地址,称直接寻址方式。
此时,指令中操作数部分是操作数所在地址。
在8051中,使用直接寻址方式可访问片内RAM的128个单元以及所有的特殊功能寄存器(SFR)。
对于特殊功能寄存器,既可以使用它们的地址,也可以使用它们的名字。
8.立即数寻址:
指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。
例如:
MOVA,3AH;(3AH)→A
MOVA,#3AH;3AH→A
前者是表示把片内RAM中3AH这个单元的内容送累加器A,而后者则表示把3AH这个数又:
MOVDPTR,#2000H;
9.操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。
8051规定R0或R1为间接寻址寄存器,它可寻址内部RAM低位地址的128字节单元内容。
还可采用数据指针(DPTR)作为间接寻址寄存器,寻址外部数据存储器的64K字节空间,例如,将片内RAM65H单元的内容47H送A,可执行指令:
MOVR0,#65H;R0←65H
MOVA,@R0;A←(65H)
指令的执行过程为:
当程序执行到本指令时,以指令中所指定的工作寄存器R0内容(65H)为指针,将片内RAM65H单元内容47H送累加器A。
10.变址寻址是以某个寄存器的内容为基地址,然后在这个基地址的基础上加上地址偏量形成真正的操作数地址。
8051中采用数据指针DPTR或PC为变址寄存器,地址偏移量是累加器A的内容,以DPTR或PC的内容与累加器A的内容之和作为操作数的l6位程序存储器地址。
在8051中,用变址寻址方式只能访问程序存储器,访问的范围为64KB。
当然,这种访问只能从ROM中读取数据而不能写入。
例如:
MOVCA,@A十DPTR;((A)十(DPTR))→A这种方式多用于查表操作。
11.相对寻址只出现在相对转移指令中。
相对转移指令执行时,是以当前的PC值加上指令中规定的偏移量rel而生成实际的
移地址的,这里所说的PC的当前值是执行完相对转移指令后的PC值。
一般将相对转移指令操作码所在地址称为源地址,转移后的地址称为目的地址,则有:
目的地址=源地址十2(相对转移指令字节数)十rel
例如:
执行指令SJMPrel
12.采用位寻址方式的指令,其操作数将是8位二进制数中的某一位。
在指令中给出的是位地址,即给出片内RAM某一单元中的一位。
位地址在指令中用Bit表示。
例如,CLRbit
8051单片机片内RAM有两个区域可以位寻址,其一是20H一2FH的l6个单元中的128位;其二是字节地址能被8整除的特殊功能寄存器。
在805l中,位地址常用下列两种方式表示:
①直接使用位地址。
对于20H一2FH的16个单元共128位的位地址分布是00H一7FH。
②对于特殊功能寄存器,可以直接使用位地址,又可以直接用寄存器名字加位数表示,如PSW.3等。
13.数据传送类28条
传送数据可在ACC,R0~R7,内部RAM,外部RAM间进行,其中A,R0~R7的操作最多传送类指令不影响PSW(除P位)
14.算术操作类24条加、减、乘、除、增1、减1
影响PSW中的CY、AC、OV、P
不带进位加法4
带进位加法4
带借位减法4
加1指令5
减1指令4
十进制调整指令1
乘除法指令2
加、减法指令(ADDADDCSUBBINCDEC)
无符号数和有符号数由用户自己决定
均以ACC作为目的操作数
带符号数运算时,必须检查溢出位OV
若进行不带进位的减法时,用CLRC,将进位位清零即可。
DAA为十进制调整指令,紧跟加法指令
BCD码减法
求BCD码减数的补数:
9AH-减数被减数加补数结果用十进制加法调整指令
例:
91-36=?
CLRC
MOVA,#9AH
SUBBA,#36H
ADDA,91H
DAA
乘除法指令只能进行无符号的乘除法虽影响0V,但意义不同
MULAB;BA,OV=1表示B≠0
DIVAB;A…B,0V=1,B=0,除法无意义
15.逻辑运算类24条读-修改-写指令
对数据进行逻辑处理
模拟各种硬件电路的逻辑功能
逻辑与ANL
逻辑或ORL
逻辑异或XRL
逻辑移位RRRRCRLRLC
累加器清零与取反CLRCPL
带进位移位和不带进位移位
例M1和M1+1单元存有16位二进制数,试编程将其扩大二倍
CLRC
MOVR1,#M1
MOVA,@R1
RLCA
MOV@R1,A
INCR1
MOVA,@R1
RLCA
MOV@R1,A
16.控制转移指令17条
无条件转移
绝对转移LJMP、AJMP
短转移SJMP
间接转移JMP@A+DPTR
有条件转移JZ、CJNE、DJNZ
子程序调用与返回ACALL、LCALL、RET
中断返回RETI
空操作NOP
MOVR2,#0AH
MOVR0,#40H
CLRA
LOOP:
ADDA,@R0
INCR0
DJNZR2,LOOP
MOVSUM,A
17.位操作指令17条
位传送
MOVBIT,BIT(错误)
位逻辑操作
与ANL、或ORL、取反CPL
位条件转移
JC、JNC、JB、JNB、JBC
位置位,清零(SETB、CLR)
例1将内部数据存储器的60H、61H单元中的连续存放着4位BCD码。
试编写一段程序将这4位BCD码倒序排列
已知外部RAM的3000H开始放一数据区,缓冲区中以回车符0DH结束,编程将正数送入片内RAM以30H开始的正数区,将负数放入以40H开始的负数区
方法1
MOVR0,#30H
MOVR1,#40H
MOVDPTR,#3000H
NEXT:
MOVXA,@DPTR
MOV10H,A
CJNEA,#0DH,END1
SJMPOVER
END1:
ANLA,#10000000B
JZZH
SJMPNEG
ZH:
MOV@R0,10H
INCR0
INCDPTR
SJMPNEXT
NEG:
MOV@R1,10H
INCR1
INCDPTR
SJMPNEXT
OVER:
RET
方法2
MOVR0,#30H
MOVR1,#40H
MOVDPTR,#3000H
NEXT:
MOVXA,@DPTR
CJNEA,#0DH,COMP
SJMPOVER
COMP:
JBACC.7,LOOP
MOVR0,#30HMOV@R0,A
INCR0
INCDPTR
SJMPNEXT
LOOP:
MOV@R1,A
INCR1
INCDPTR
SJMPNEXT
OVER:
RET
18.
19.时钟周期T:
时序中最小的时间单位,由外接晶体或外输入时钟来决定。
其值为石英振荡器频率fosc的倒数。
20.MCS-51单片机的指令系统除了乘、除法指令为四个机器周期外,其余都是单周期和双周期指令
21.指令的字节数:
MCS-51单片机的指令系统有:
单字节(占用1个ROM存储单元—1个字节);双字节(占用2个ROM存储单元—2个字节);三字节指令(占用3个ROM存储单元—3个字节)。
22.
每一个机器周期出现两次ALE信号;
ALE信号对应这从ROM中读指令。
所以在一个机器周期中CPU可以完成两次取指操作;
对于单字节单周期的指令,CPU通过译码后封死PC,取消第二次取指(实际上指令的后半部不做任何工作)。
23.双字节单周期指令时序指令特点:
指令长度为两个字节,并存储在ROM相邻的两个单元中。
要想完整的将这样的指令执行完,必须从ROM中读两次操作码。
24.单字节双周期指令的时序指令特点:
单字节,却需要两个机器周期运行。
如:
INCDPTR
DPTR为两个8位的寄存器,加一时,必须分两步完成.既第一步DPL加一,如果DPL加一有进位则还要进行第二步对DPH加一.
25.
26.
27.数据传送类指令:
完成数据的传送。
【特点】:
①有8位、16位两种传送指令;②除了以累加器A为目标的传送对奇偶位PSW.P有影响外,其余的传送类指令对PSW无影响。
28.算术运算指令:
用于操作数的加、减、乘除运算。
【特点】:
多数情况下:
操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。
29.逻辑操作和循环移位指令:
操作数之间的逻辑加、与、取反和异或等操作。
【特点】:
多数情况下一个操作数在A中,结果也存于A。
移位指令分为左移、右移和带进位和不带进位几种情况。
逻辑类指令基本不影响PSW的内容
30.控制转移类指令:
①无条件转移;②条件转移;③调用和返回。
【特点】:
通过修改程序指针PC的内容,使CPU发生转移,从而改变程序的流向。
这也是唯一一种间接修改程序指针PC的指令。
31.位操作指令:
①位传送:
类似于字节传送,对bit进行传送。
②位置位/复位:
对某一位置一或清零。
③位运算:
对某一位进行逻辑与、或、取反等。
④位控条件转移:
对某一位的状态进行判断,满足条件转移。
【特点】:
按位操作。
指令中所涉及到的地址皆为“位地址”。
这类指令基本不影响PSW的内容。
32.MOV20H,R0;将寄存器R0中的数据送内存20H单元
33.寄存器寻址方式的指令大多是单字节指令。
寄存器的3位代码与操作码OP共同占用一个指令字节。
34.直接寻址的指令长度是两个或三个字节。
当地址恰好在SFR区域时,指令也可以用寄存器名来表示。
提倡使用SFR中寄存器名称来代替直接地址。
INCA寄存器寻址方式(单字节)INCACC直接寻址方式(双字节);INC0E0H直接寻址方式(双字节)。
35.立即数寻址的指令长度为2或3个字节。
36.使用间接寻址时应注意的几个问题:
使用间址指令前,往往要事先为间址寄存器Ri赋初值;只能使用R0、R1作间址寄存器,即Ri(i=0、1);间址可访问片内RAM,也是访问片外RAM唯一的方式。
①对于片内RAM使用Ri寄存器,寻址范围00H~FFH;
MOVA,@Ri访问内部RAM单元
②对片外RAM可以:
使用Ri。
寻址范围为00H~FFH(256字节);
使用DPTR做间址寄存器。
寻址范围为0000H~FFFFH(64K)。
MOVXA,@Ri;访问外RAM单元,范围256字节MOVXA,@DPTR;访问外RAM单元,范围64K字节;
间址方式不能访问SFR单元。
对于SFR只能采用直接寻址的方式访问
37.变址寻址是访问程序存储器ROM中数据的唯一的寻址方式。
变址寻址方式用于查表操作,而数据表是建立在程序存储器ROM中。
38.相对转移(2个或3个字节);绝\对转移(3个字节)。
39.相对寻址①CPU进行地址计算时,PC取值是执行本条转移指令后的地址值。
②偏移量的计算:
rel=目标地址-源地址-2(2字节相对转移指令)或:
rel=目标地址-源地址-3(3字节相对转移指令)结果用补码的形式书写。
为了减少计算量,汇编程序允许使用“符号地址”代替偏移量。
如:
SJMPloop1
汇编程序在汇编时,自动计算rel,并将结果进行替换。
③如果转移地址超过相对寻址的范围(-127~+128)时,在编译时系统会提示出错。
这是编程者常见到问题。
40.
41.MOVR7,#28H;立即数28H送寄存器R7
MOV@R0,#38H;立即数38H送内存20H单元
MOV@Ri,30H;RAM30h内容送Ri指定的RAM单元
42.寄存器间接寻址型传送指令指令特点:
指令中Ri中存放的不是操作数本身,而是操作数在RAM中的地址(i=0、1)。
格式如下:
MOVA,@Ri
MOV@Ri,A
MOVdirect,@Ri
【注意】;Ri中存放操作数的地址是有所选择的,只有非SFR的RAM单元才能使用这种寻址方式。
43.会正确地估计指令的字节。
凡是包含有立即数、直接地址的指令,都应当在原有的基础上加1或2。
44.使用MOVCA,@A+PC指令的特点:
程序与数据表在ROM中的位置是可以浮动的。
只要MOVC指令与表之间的距离不变,则程序可以在ROM中的任意位置上“浮动”,程序具有可修改性;
节省DPTR寄存器;
与使用MOVCA,@A+DPTR指令不同,使用前应当对A中的偏移量加以个“修正值”,修正值的大小为:
MOVC指令与表头之间的字节数;
45.
1,在S2P1时刻,P2口输出外部ROM的高八位地址A15-A8,P0口输出低八位地址A7-A0,这时地址是由程序计数器PC提供的ROM中的指令地址;
2,在ALE的下降沿,P0口的数据(低八位地址)被锁存到74LS373中。
3,在S3P2到S4P1期间,/psen变低电平时,外部程序ROM被选中,ROM输出端的三态门被打开,被选中单元中的指令movca,@a+dptr送到P0口上,且在S4P2时指令经P0口送至CPU的IR中。
4,CPU对指令译码后,在S4P2时进行常数地址计
算并由P0、P2口输出(P0口输出低8位地址00H;P2口输出地址高八位20H)。
5,在S5P2时,ALE将常数地址的低八位00H锁存;
6,在S6P1时,/psen=0,外部ROM被再次选中打开,按照单片机所提供的16位地址,将外部ROM中的常数经P0口在S6P2时刻送入累加器A。
46.
1,在S2P2时,ALE的第一个下降沿将P0口输出的外程序ROM的低八位地址锁存到74LS373锁存器中;
2,在S3P2的Psen为低电平时,选中外ROM,并根据单片机P0、P2口输出的16位地址选中movx指令(单字节),通过P0口送至单片机内部IR中译码.经译码后产生下列的一系列操作;3,CPU将DPTR中的高8位(20H)送P2口输出,低八位(00H)经P0口输出,节在S5P1时ALE第二次下降沿时,将P0口的低八位地址锁存;
4,在第二个机器周期的S1-S3中单片机输出/RD信号(低电平),选中外部RAM,并根据单片机提供的2000H这16位地址中取出数据x.
5,CPU在S2-S3期间,将外部RAM2000H单元送到P0口上的数据送入累加器A中.
上述过程可以分成两个指行的阶段:
1,根据PC所指定的程序存储器的地址,将movx指令从片
外ROM中取出;
2,经译码后将DPTR提供的外数据存储器RAM中的数据
地址取出数据,经P0口送累加器A.
控制信号:
在第一阶段CPU产生/Psen信号用来选通外部程
序存储器ROM;
在第二阶段CPU输出/RD信号(低电平),用来选
通并读取外部数据存储器RAM的数据.
【注意】:
CPU在执行MOVX指令时的2个周期中的第2个机器
周期缺少一个ALE波形。
47.访问外部存储器指令的特点:
使用MOVX或MOVC指令来访问外部存储器;此时,P0、P2作为地址和数据总线;
执行MOVX指令访问RAM时,CPU产生/RD或/WR信号。
因此,/RD、/WR应当与外RAM的读、写控制端连接;
执行MOVC指令访问ROM时,CPU产生/psen信号来选通外ROM。
因此,此信号应当与ROM的片选连接。
48.使用PUSH、POP指令要注意事项
①PUSH、POP指令使用的寻址方式为直接寻址,所以pusha是错误的,应当是pushacc或push0e0h,同理:
pushr0也是错误的应当为:
push00h。
②进栈操作是堆栈向上“生长”的过程,即sp+1;出栈则相反。
③系统上电时,SP=07h。
SP的值可以根据需要进行修改,在确定SP值时要考虑对栈区对数据区的影响,以避免两者冲突。
如:
在程序的初始化时加一条:
MOVSP,#60H
即将堆栈的起始位置上移到RAM的60H单元。
49.数据交换指令
XCHa,Rn;a↔Rn
XCHa,direct;a↔(direct)
XCHa,@Ri;a↔(Ri)
XCHDa,@Ri;a3~0↔(Ri)3~0低四位交换
50.加法指令
(一):
不带进位的加法指令格式:
ADDA,Rn;A+Rn→A
51.ADDA,direct;A+(direct)→A
ADDA,@Ri;A+(Ri)→A
ADDA,#data;A+data→A
【注意】:
1,参加运算的数据都应当是8位的,结果也是8位并影响PSW。
2,根据编程者的需要,8位数据可以是无符号数(0~255),也可以是有符号数(-127~+128)。
3,不论编程者使用的数据是有符号数还是无符号数,CPU都将它们视为有符号数(补码)进行运算并影响PSW。
52.加法指令
(二):
带进位的加法指令格式:
ADDCA,Rn;A+Rn+Cy→A
ADDCA,direct;A+(direct)+Cy→A
ADDCA,@Ri;A+(Ri)+Cy→A
ADDCA,#data;A+data+Cy→A
【注意】:
这里的Cy是指令执行前的Cy;对PSW的影响同ADD指令。
53.加1指令(修改指针专用)INCA;累加器A加一
INCRn;Rn+1→Rn
INCdirect;内存单元数据加一
INC@Ri;内存单元数据加一
INCDPTR;dptr+1→dptr
【注意】:
1,除了第一条对PSW的P有影响外,其余对PSW均无影响。
2,由于上面的原因,INC指令不能作为一般的数据算术运算使用,而常用于修改数据指针等控制、循环语句中使用。
54.1减法指令:
格式:
SUBBA,Rn;A–Rn–Cy→A
SUBBA,direct;A–(direct)–Cy→A
SUBBA,@Ri;A–(Ri)–Cy→A
SUBBA,#data;A–data–Cy→A
1,在单片机内部,减法指令实际上是采用补码的加法实现的。
但要判定减法结果编程者可以按二进制减法法则验证。
2,无论相减两数是无符号数还是有符号数,减法操作总是按有符号数来处理、影响PSW中相关的标志(详见举例)。
3,在MCS-51的指令系统中没有不带Cy的减法,所以在使用SUBB指令前必须使用一条清除Cy的指令:
CLRC。
55.减一指令(修改指针专用)
格式:
DECA;累加器A减一
DECRn;Rn-1→Rn
DECdirect;内存单元数据减一
DEC@Ri;内存单元数据减一
【注意】:
1,除了第一条对PSW的P有影响外,其余对PSW均无影响。
2,由于上面的原因,DEC指令一般不作为数据算术运算使用(因为不能对PSW的OV等位产生影响,它主要用于修改数据指针在循环语句中使用)。
56.十进制调整指令格式:
DAA;若AC=1或A3~0>9,则A+06h→A;若Cy=1或A7~4>9,则A+60h→A
【注意】:
1,DAA指令必须紧跟在加法指令之后;2,DAA指令只适用于加法指令的调整。
57.BCD减法运算:
由于DAA指令只能对BCD码的加法进行调整,所以遇到BCD码的加法时就要将其减法变为加法运算,然后再使用DAA指令进行调整。
减法变加法就是使用BCD码的补码运算法则:
将被减数-减数变为被减数+减数的补码。
减数的补码=BCD码的模-减数
其中BCD码的模为100H=99H+01H=9AH
58.乘法和除法指令格式:
MULAB;a×b=ba(b存高8位,a存低8位)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令系统