整理单片机111条指令Word格式.docx
《整理单片机111条指令Word格式.docx》由会员分享,可在线阅读,更多相关《整理单片机111条指令Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
如指令“MOVR1,R7”是错误的。
该类指令执行后,不影响PSW中的标志位。
1.3.以直接地址directX为目的操作数的传送类指令(5条)
directX,
(directX)←(A)
(directX)←(Rn)
directY
(directX)←(directY)
(directX)←((Ri))
(directX)←data
这类指令的功能是把源操作数的内容送到直接地址directX中去。
在上述指令中的直接地址单元(directX与directY)是指内部RAM的00H~7FH区域,以及特殊功能寄存器。
例1若(30H)=20H,(R0)=30H,则执行指令MOV90H,@R0的结果为(90H)=20H。
1.4.以寄存器间接地址@Ri为目的操作数的传送类指令(3条)
@Ri,
((Ri))←(A)
((Ri))←(direct)
((Ri))←data
这类指令的功能是将源操作数的内容送到由Ri(R0或R1)的内容所指定的地址中去。
例1若(R0)=50H,(50H)=20H,(A)=10H,则执行指令“MOV@R0,A”后,50H单元的内容由原来的20H变为10H。
1.516位目标地址传送指令(1条)
DPTR,
#data16
(DPTR)←data16
这条指令的功能是:
把16位立即数送入DPTR中。
而16位的数据指针DPTR由DPH与DPL组成,该指令执行后,16位立即数的高8位送入DPH中,低8位送入DPL中。
2外部数据存储器(或I/O口)与累加器A传送指令(4条)
为了区别于以MOV为指令助记符的内部数据传送指令,外部数据存储器传送指令的指令助记符为MOVX。
指令助记符与功能说明如下:
MOVX
@DPTR
(A)←((DPTR))
@DPTR,
((DPTR))←(A)
例1设(P2)=20H,现将A中数据存储到20FFH单元中去。
可用以下程序实现:
MOVR1,#0FFH;
(R1)←0FFH
MOVX@R1,A;
(20FFH)←(A)
也可采用下述程序实现:
MOVDPTR,#20FFH;
(DPTR)←20FFH
MOVX@DPTR,A;
((DPTR))←(A),即(20FFH)←(A)
执行结果是一样的,A中数据都是被存储到外部存储器的20FFH单元中去。
.3程序存储器向累加器A传送数据指令(2条)
MOVC
@A+PC
(A)←((A)+(PC)+1)
变址寻址
@A+DPTR
(A)←((A)+(DPTR))
4数据交换指令(5条)
数据交换指令有两类,分别是:
字节交换指令和半字节交换指令。
4.1.字节交换指令
XCH
(A)
(direct)
((Ri))
间接寻址
(Rn)
上述指令的功能是将累加器A中的内容与源操作数所指定的直接寻址、间接寻址、寄存器寻址的某一单元内容互相交换。
例1设(R1)=30H,(30H)=45H,(A)=7FH,则执行指令:
XCHA,@R1
结果:
(A)=45H,而(30H)=7FH,从而实现了累加器A与内部数据存储器RAM中30H单元的数据交换。
4.2.半字节交换指令
XCHD
该指令是把累加器A的低4位与寄存器Ri间接寻址的内部RAM单元的低4位互换,高4位内容不变。
例1设(30H)=6FH,(R0)=30H,(A)=0F6H,则执行指令:
XCHDA,@Ri
(A)=0FFH,(30H)=66H
数据交换指令除了影响始终跟踪A中数据奇偶性的P标志外,对PSW中其他标志位均无影响。
4.3.累加器A中高四位与低四位交换指令
SWAPA
该指令所执行的操作是累加器A中的高4位与低4位的内容互换,其结果仍存放在累加器A中。
例1设(A)=0A5H(10100101B),则执行指令:
(A)=5AH(01011010B)
.5堆栈操作指令(2条)
堆栈操作指令只有2条,即:
压入(PUSH)和弹出(POP)。
压入指令:
PUSHdirect;
SP←SP+1,((SP))←(direct)
弹出指令:
POPdirect;
((SP))←(direct),SP←SP-1
在MCS-51单片机中,堆栈中的数据是以“先进后出”的结构方式处理的。
入栈操作过程为:
先将堆栈指针SP←SP+1,指向栈顶的上一个空单元,然后再将直接寻址单元direct中的数据传送到SP所指示的地址单元中去。
而出栈操作过程则为:
将堆栈指针SP所指示的栈顶中的数据弹出,传送到直接寻址单元direct中,然后SP←SP-1,形成新的栈顶指针。
它们常被应用在保护现场(即把寄存器的内容暂存在某内存区)和恢复现场的程序中。
例1PUSHA;
保护A中数据
PUSHPSW;
保护标志寄存器中数据
…;
执行服务程序
POPPSW;
恢复标志寄存器中数据
POPA;
恢复A中数据
执行上述程序后,A和PSW寄存器中的内容可得到正确恢复。
二.算术运算类指令(24条)
.1加减运算指令(12条)
1.1加法指令(4条)
ADD
(A)←(A)+data
(A)←(A)+(direct)
(A)←(A)+((Ri))
(A)←(A)+(Rn)
这类指令所完成的操作是把源操作数(立即数、直接地址单元内容、间接地址单元内容、工作寄存器内容)与累加器A的内容相加,将结果保存在累加器A中。
影响程序状态寄存器的AC、CY、OV、P标志位。
例1执行指令:
MOVA,#0A9H
运算结果:
(A)=61H
1.2.带进位加法指令
ADDC
(A)←(A)+data+(C)
(A)←(A)+(direct)+(C)
(A)←(A)+((Ri))+(C)
(A)←(A)+(Rn)+(C)
带进位加法指令与前述加法指令的区别仅为考虑进位位,其他与加法指令相同。
例1设(A)=0AAH,(R0)=55H,C=1,则执行指令:
ADDCA,R0
(A)=00000000B,CY=1
3.带借位减指令
SUBB
(A)←(A)-data-(C)
(A)←(A)-(direct)-(C)
(A)←(A)-((Ri))-(C)
(A)←(A)-(Rn)-(C)
在单字节相减时,为了避免相减后结果出错,必须先清0借位位C。
例1设(40H)=0BAH,(41H)=98H,试编写40H内容减去41H内容后,结果再存入40H单元的程序。
MOVA,40H;
(A)←(40H)
CLRC;
进位位C清0
SUBBA,41H;
(A)←(A)-(41H)-(C)
MOV40H,A;
(40H)←(A)
执行以上程序后,(40H)=22H,CY=0,OV=0。
.2乘除运算指令(2条)
1.乘法指令
MULAB;
(A)←乘积低8位,(B)←乘积高8位
该指令把累加器A与寄存器B中的8位无符号整数相乘,所得到的16位乘积的低8位存放在累加器A中,高8位存放在寄存器B中。
如果二者的乘积大于255(0FFH),则溢出标志位置1,否则清0;
运算结果总使进位标志位CY清0。
例1设(A)=67H(103),(B)=0ADH(173),执行指令:
MULAB
乘积为459BH(17819),(A)=9BH,(B)=45H。
另外:
OV=1,CY=0
2.除法指令
DIVAB;
(A)←商,(B)←余数
该指令是将累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存放在累加器A中,余数存放在寄存器B中。
进位位CY与溢出位OV均清0。
若寄存器B中除数为0,则执行除法指令后,结果为不定值,并使溢出标志位OV置1,但在任何情况下,进位标志CY总清0。
例1设(A)=9AH,(B)=23H,执行指令:
DIVAB
则(A)=04H,(B)=0EH
.3增1减1指令(9条)
1.增1指令
INCA;
(A)←(A)+1
INCdirect;
(direct)←(direct)+1
INC@Ri;
((Ri))←((Ri))+1
INCRn;
(Rn)←(Rn)+1
INCDPTR;
(DPTR)←(DPTR)+1
INC指令把所指出的变量加1,计算结果仍然送回原地址单元。
原来的内容若为0FFH,则加1后将变为00H,运算结果中,只有INCA指令影响P标志位,对其余标志位无任何影响。
该指令使用3种寻址方式:
寄存器寻址,直接寻址、寄存器间接寻址。
例1设(A)=40H,(41H)=29H,则执行下列指令:
INCA;
(A)←40H+1H
INC41H;
(41H)←29H+1H
(A)=41H,(41H)=2AH
2.减1指令
DECA;
(A)←(A)-1
DECdirect;
(direct)←(direct)-1
DEC@Ri;
((Ri))←((Ri))-1
DECRn;
(Rn)←(Rn)-1
DEC指令把所指出的变量减1,计算结果仍然送回原地址单元。
原来的内容若为00H,则减1后将变为0FFH,运算结果中,只有DECA指令影响P标志位,对其余标志位无任何影响。
例1设(R0)=4FH,片内RAM单元(4FH)=40H,(4EH)=00H,执行指令:
DEC@R0;
(4FH)←3FH
DECR0;
(R0)←4EH
(4EH)←0FFH
(R0)=4EH,(4EH)=0FFH,(4FH)=3FH
.4二/十进制调整指令(1条)
DAA
该指令的功能是对累加器A中的“二/十”进制(BCD码)加法结果进行调整。
要保证参加运算的两数为BCD码,在对BCD码进行二进制加法运算(ADD与ADDC指令)后,紧跟着一条“DAA”指令即可。
例1执行下面的指令:
MOVA,#86H
ADDA,#47H
(A)=0CDH,CY=0,AC=0
所得结果并不是BCD码,若接着执行以下指令:
则结果:
(A)=33H,CY=1,AC=1
三.逻辑运算指令(24条)
.1单操作数指令(6条)
1.累加器A清0
指令格式:
CLRA
将00H送入累加器A中。
2.累加器A取反
CPLA
将累加器A中内容取反(将A中内容按位取反,即逻辑非运算)后再送回累加器A中。
例1设(A)=98H,执行指令
CLRA;
(A)←0
CPLA;
(A)←0FFH
(A)=0FFH
3.累加器A内容循环左移一位
RLA
将累加器A中的内容循环左移一位。
即
例1设(A)=10001000,则执行指令“RLA”后,结果:
(A)=00010001
A.环境影响报告表4.累加器A内容带进位位CY循环左移一位
3.完整性原则;
RLCA
将累加器A中的内容与进位标志位CY一起循环左移一位。
即:
例1设(A)=01010101,(CY)=1。
则执行指令“RLCA”后,结果:
(A)=10101011,(CY)=0。
(四)规划环境影响评价的审查5.累加器A内容循环右移一位
(五)安全预评价方法指令格式:
(1)结合评价对象的特点,阐述编制安全预评价报告的目的。
RRA
将累加器A中的内容循环右移一位。
二、环境影响评价的要求和内容
例1设(A)=00010001,则执行指令“RRA”后,结果:
(A)=10001000
综合性规划
(1)土地利用的有关规划;
6.累加器A内容带进位位CY循环右移一位
以森林为例,木材、药品、休闲娱乐、植物基因、教育、人类住区等都是森林的直接使用价值。
《建设项目安全设施“三同时”监督管理暂行办法》(国家安全生产监督管理总局令第36号)第四条规定建设项目安全设施必须与主体工程“同时设计、同时施工、同时投入生产和使用”。
安全设施投资应当纳入建设项目概算。
并规定在进行建设项目可行性研究时,应当分别对其安全生产条件进行论证并进行安全预评价。
RRCA
将累加器A中的内容与进位标志位CY一起循环右移一位。
1.筛选环境影响:
环境影响被筛选为三大类,一类是被剔除、不再作任何评价分析的影响,如内部的、小的以及能被控抑的影响;
另一类是需要作定性说明的影响,如那些大的但可能很不确定的影响;
最后一类才是那些需要并且能够量化和货币化的影响。
例1设(A)=10101011,(CY)=0。
则执行指令“RRCA”后,结果:
(A)=01010101,(CY)=1。
.2双操作数指令(18条)
1.逻辑与指令
逻辑与的规则定义为:
有0出0,全1出1
这类指令格式如下:
目的操作数源操作数
ANLA,Rn;
n=0,…,7
ANLA,direct
ANLA,@Ri;
i=0,1
ANLA,#data
ANLdirect,A
ANLdirect,#data
这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相“与”后,结果再送回目的操作数单元中。
例1设(A)=0C3H,(R3)=0ADH,执行指令“ANLA,R3”。
(A)=81H(10000001B)。
指令执行过程如下:
2.逻辑或指令
逻辑或的规则定义为:
有1出1,全0出0
ORLA,Rn;
ORLA,direct
ORLA,@Ri;
ORLA,#data
ORLdirect,A
ORLdirect,#data
这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相“或”后,结果再送回目的操作数单元中。
例1设(A)=0C3H,(R3)=0ADH,执行指令“ORLA,R3”。
(A)=0EFH(11101111B)。
3.逻辑异或指令
逻辑异或的规则定义为:
同出0,异出1
XRLA,Rn;
XRLA,direct
XRLA,@Ri;
XRLA,#data
XRLdirect,A
XRLdirect,#data
这组指令的功能是将目的操作数单元中的内容与源操作数单元中的内容按位相“异或”后,结果再送回目的操作数单元中。
例1设(A)=0C3H,(R3)=0ADH,执行指令“XRLA,R3”。
(A)=6EH(01101110B)。
四位操作类指令(12条)
指令中可被单片机汇编程序识别的位地址有多种方式:
(1)直接位地址方式:
如D5H。
(2)字节地址位数方式:
如B8.0。
(3)位寄存器的定义名称,如C等。
(4)对于位寻址寄存器,可以用字节寄存器名加位数来表示,二者之间用“.”隔开。
如PSW.3等。
(5)用户定义方式:
如用伪指令:
AAbitPSW.4;
定义后允许用AA代表PSW.4。
.1位数据传送指令
目的操作数源操作数功能说明
MOVC,bit;
(C)←(bit)
MOVbit,C;
指令完成的功能是把第二操作数所指出的布尔变量送到由第一操作数指定的位单元。
其中的一个操作数必为位累加器(进位标志C),另一个可以是任何直接寻址位(bit)。
指令执行的结果不影响其他寄存器或标志。
例1要将20H位的内容传送给23H位,不能直接用“MOV20H,23H”,因为该指令执行的实际是字节传送,若要将20H位的内容传送给23H位,可用下述程序实现:
MOVC,20H;
(C)←(20H)
MOV23H,C;
(23H)←(C)
2位状态控制指令
1.位清0指令
指令格式如下:
CLRC;
(C)←(0)
CLRbit;
(bit)←(0)
以上指令可使直接寻址位(bit)或位累加器C清0,不影响其他标志。
例1片内RAM单元26H的内容为0FFH,执行指令:
CLR32H
(26H)=0FBH(11111011B),其中,32H为26H单元第二位的位地址。
2.位求反指令
CPLC;
(C)←(/C)
CPLbit;
(bit)←(/bit)
以上指令把位累加器C或者直接寻址位(bit)内容取反,不影响其他标志位。
例1执行下面的指令序列:
MOVP1,#2FH;
(P1)←(2FH即00101111B)
CPLP1.0;
P1.0位求反
CPLP1.2;
P1.2位求反
(P1)=2AH(00101010B)。
3.位置1指令
SETBC;
(C)←1
SETBbit;
(bit)←1
以上指令把进位标志C或者任何可直接寻址位(bit)置1,不影响其他标志位。
例1假设进位标志C内容为0,输出口P1原来的内容为0FH(00001111B),则执行下面指令:
SETBC
SETBP1.7
(C)=1,(P1)=8FH(10001111B)。
3位逻辑操作指令
位逻辑操作指令只有两条:
位与,位或。
1.位与指令
ANLC,bit;
(C)←(C)∧(bit)
ANLC,/bit;
(C)←(C)∧(/bit)
位与指令的功能是将直接寻址位的内容或直接寻址位内容取反后(不改变原来位的内容)和位累加器C的内容相与,结果保存在C中。
例1当位地址(2AH)=1,(32H)=1,同时累加器中(ACC.7)=0时,进位位C=1,否则C清0,可编程序如下:
MOVC,2AH;
(C)←(2AH)
ANLC,32H;
(C)←(C)∧(32H)
ANLC,/ACC.7;
(C)←(C)∧(/ACC.7)
2.位或指令
ORLC,bit;
(C)←(C)∨(bit)
ORLC,/bit;
(C)←(C)∨(/bit)
位或指令的功能是将直接寻址位的内容或直