第三章MCS51指令系统Word文档下载推荐.docx
- 文档编号:20343027
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:27
- 大小:25.78KB
第三章MCS51指令系统Word文档下载推荐.docx
《第三章MCS51指令系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第三章MCS51指令系统Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
(2)双字节指令:
一个字节为操作码,另一个字节是操作数。
(3)三字节指令:
操作码占一个字节,操作数占二个字节。
其中操作数既可能是数据,也可能是地址。
3.3指令系统的寻址方式
寻址方式就是在指令中说明操作数所在地址的方法。
共7种寻址方式。
1.寄存器寻址方式
操作数在寄存器中
MOVA,Rn;
(Rn)→A,n=0~7
表示把寄存器Rn的内容传送给累加器A
寻址范围包括:
(1)4组通用工作寄存区共32个工作寄存器。
(2)部分特殊功能寄存器,例如A、B以及数据指针寄存器DPTR等。
2.直接寻址方式
操作数直接以单元地址的形式给出:
MOVA,40H
寻址范围:
(1)内部RAM的128个单元
(2)特殊功能寄存器。
除了以单元地址的形式外,还可用寄存器符号的形式给出。
例如:
MOVA,80H与MOVA,P0是等价的。
3.寄存器间接寻址方式
寄存器中存放的是操作数的地址
在寄存器的名称前面加前缀标志“@”
访问内部RAM或外部数据存储器的低256个字节时,只能采用R0或R1作为间址寄存器。
MOVA,@Ri;
i=0或1
其中Ri中的内容为40H,把内部RAM40H单元内容送A。
寻址范围:
(1)访问内部RAM低128个单元,其通用形式为@Ri
(2)对片外数据存储器的64K字节的间接寻址,例如:
MOVXA,@DPTR
(3)片外数据存储器的低256字节
例如:
MOVXA,@Ri
(4)堆栈区
堆栈操作指令PUSH(压栈)和POP(出栈)使用堆栈指针(SP)作间址寄存器
4.立即寻址方式
操作数在指令中直接给出,需在操作数前面加前缀“#”。
MOVA,#40H
5.基址寄存器加变址寄存器间址寻址方式
本寻址方式是以DPTR或PC作基址寄存器,以累加器A作为变址寄存器。
指令MOVCA,@A+DPTR其中A的原有内容为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。
说明:
(1)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到64KB。
(2)本寻址方式的指令只有3条:
MOVCA,@A+DPTR
MOVCA,@A+PC
JMP@A+DPTR
6.位寻址方式
MCS-51有位处理功能,可以对数据位进行操作,例如:
MOVC,40H
是把位40H的值送到进位位C。
(1)内部RAM中的位寻址区。
位有两种表示方法,例如,40H;
另一种是单元地址加上位,例如,(28H).0,指的是28H单元中的最低位。
它们是等价的。
(2)特殊功能寄存器中的可寻址位
可寻址位在指令中有如下4种的表示方法:
a.直接使用位地址。
例如PSW.5的位地址为0D5H。
b.位名称的表示方法。
PSW.5是F0标志位,可使用F0表示该位。
c.单元地址加位数的表示方法。
例如:
(0D0H).5。
d.特殊功能寄存器符号加位数的表示方法。
例如:
PSW.5。
7.相对寻址方式
在相对寻址的转移指令中,给出了地址偏移量,以“rel”表示,即把PC的当前值加上偏移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址+转移指令的字节数
+rel
偏移量rel是一带符号的8位二进制数补码数。
范围是:
–128~+127
向地址增加方向最大可转移(127+转移指令字节)个单元地址,向地址减少方向最大可转移(128-转移指令字节)个单元地址。
7种寻址方式及寻址空间,见表3-1(P43)。
3.4MCS-51指令系统分类介绍
111条指令,按功能分类,可分为下面5大类:
(1)数据传送类(28条)
(2)算术操作类(24条
(3)逻辑运算类(25条)
(4)控制转移类(17条)
(5)位操作类(17条)
指令中符号的意义:
Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)。
Ri当前选中的寄存器区中可作间接寻址寄存器的2个寄存器R0、R1(i=0,1)。
Direct直接地址,即8位的内部数据存储器单元或特殊功能寄存器的地址。
#data包含在指令中的8位立即数。
#data16包含在指令中的16位立即数。
rel相对转移指令中的偏移量,为8位的带符号补码数
DPTR数据指针,可用作16位的数据地址寄存器。
bit内部RAM或特殊功能寄存器中的直接寻址位。
C(或Cy)进位标志位或位处理机中的累加器。
addr1111位目的地址
addr1616位目的地址
@间接寻址寄存器前缀,如@Ri,@A+DPTR
(X)X中的内容。
((X))由X寻址的单元中的内容。
→箭头右边的内容被箭头左边的内容所取代。
3.4.1数据传送类指令
使用最频繁的一类指令,通用格式:
MOV<
目的操作数>
,<
源操作数>
属“复制”性质,而不是“搬家”
数据传送类指令不影响标志位,Cy、Ac和OV,但不包括奇偶标志位P。
1.以累加器为目的操作数的指令
MOVA,Rn;
(Rn)→A,n=0~7
MOVA,@Ri;
((Ri))→A,i=0,1
MOVA,direct;
(direct)→A
MOVA,#data;
#data→A
MOVA,R6;
(R6)→A,寄存器寻址
MOVA,70H;
(70H)→A,直接寻址
MOVA,@R0;
((R0))→A,间接寻址
MOVA,#78H;
78H→A,立即寻址
2.以Rn为目的操作数的指令
MOVRn,A;
(A)→Rn,n=0~7
MOVRn,direct;
(direct)→Rn,n=0~7
MOVRn,#dat;
#data→Rn,n=0~7
功能:
是把源操作数的内容送入当前一组工作寄存器区的R0~R7中的某一个寄存器。
3.以直接地址direct为目的操作数的指令
MOVdirect,A;
(A)→direct
MOVdirect,Rn;
(Rn)→direct,n=0~7
MOVdirect1,direct2;
MOVdirect,@Ri;
((Ri))→direct
MOVdirect,#data;
#data→direct
把源操作数送入直接地址指出的存储单元。
direct指的是内部RAM或SFR的地址。
4.以寄存器间接地址为目的操作数的指令
MOV@Ri,A;
(A)→((Ri)),i=0,1
MOV@Ri,direct;
(direct)→((Ri))
MOV@Ri,#data;
#data→((Ri))
5.16位数传送指令
MOVDPTR,#data16;
#data16→DPTR
唯一的16位数据的传送指令,立即数的高8位送入DPH,立即数的低8位送入DPL。
6.堆栈操作指令
MCS-51内部RAM中可以设定一个后进先出(LIFO-LastInFirstOut)的区域称作堆栈.
堆栈指针SP指出堆栈的栈顶位置。
(1)进栈指令
PUSHdirect
先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。
当(SP)=60H,(A)=30H,(B)=70H时,
执行:
PUSHACC;
(SP)+1=61H→SP,(A)→61H
PUSHB;
(SP)+1=62H→SP,(B)→62H
结果:
(61H)=30H,(62H)=70H,(SP)=62H
(2)出栈指令
POPdirect
SP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1.
例如:
当(SP)=62H,(62H)=70H,(61H)=30H,
POPDPH;
((SP))→DPH,(SP)-1→SP
POPDPL;
((SP))→DPL,(SP)-1→SP
(DPTR)=7030H,(SP)=60H
7.累加器A与外部数据存储器传送指令
MOVXA,@DPTR;
((DPTR))→A,读外部RAM/IO
MOVXA,@Ri;
((Ri))→A,读外部RAM/IO
MOVX@DPTR,A;
(A)→((DPTR)),写外部RAM/IO
MOVX@Ri,A;
(A)→((Ri)),写外部RAM/IO
读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。
注意:
RD*或WR*信号有效。
采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。
采用Ri(i=0,1)间接寻址,可寻址片外256个单元的数据存储器。
Ri内容由P0口输出。
8位地址和数据均由P0口输出,可选用其它任何输出口线来输出高于8位的地址(一般选用P2口输出高8位的地址)。
MOV后“X”表示单片机访问的是片外RAM存储器或I/O。
8.查表指令
共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。
(1)MOVCA,@A+PC
以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。
注意:
PSEN*信号有效。
(A)=30H,执行地址1000H处的指令
1000H:
MOVCA,@A+PC
本指令占用一个字节,执行结果将程序存储器中1031H的内容送入A。
优点:
不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。
缺点:
表格只能存放在该条查表指令后面的256个单元之内,表格的大小受到限制,且表格只能被一段程序所利用。
(2)MOVCA,@A+DPTR
以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.
例如(DPTR)=8100H(A)=40H执行指令
MOVCA,@A+DPTR
本指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64K程序存储器中任意安排,一个表格可以为各个程序块公用。
两条指令是在MOV的后面加C,“C”是CODE的第一个字母,即代码的意思。
9.字节交换指令
XCHA,Rn
XCHA,direct
XCHA,@Ri
(A)=80H,(R7)=08H,(40H)=F0H
(R0)=30H,(30H)=OFH
执行下列指令:
XCHA,R7;
(A)与(R7)互换
XCHA,40H;
(A)与(40H)互换
XCHA,@R0;
(A)与((R0))互换
(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H
10.半字节交换指令
XCHDA,@Ri
累加器的低4位与内部RAM低4位交换。
(R0)=60H,(60H)=3EH,(A)=59H
执行完XCHDA,@RO指令,则(A)=5EH,(60H)=39H。
3.4.2算术操作类指令
单字节的加、减、乘、除法指令,都是针对8位二进制无符号数。
执行的结果对Cy、Ac、OV三种标志位有影响。
但增1和减1指令不影响上述标志。
1.加法指令
共有4条加法运算指令:
ADDA,Rn;
(A)+(Rn)→A,n=0~7
ADDA,direct;
(A)+(direct)→A
ADDA,@Ri;
(A)+((Ri))→A,i=0,1
ADDA,#data;
(A)+#data→A
一个加数总是来自累加器A,而另一个加数可由不同的寻址方式得到。
结果总是放在A中。
使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响:
(1)如果位7有进位,则置“1”进位标志Cy,否则清“0”Cy
(2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac(Ac为PSW寄存器中的一位)
(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV。
溢出标志位OV的状态,只有在带符号数加法运算时才有意义。
当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围
例(A)=53H,(R0)=FCH,执行指令
ADDA,R0
结果:
(A)=4FH,Cy=1,Ac=0,OV=0,P=1
上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。
例(A)=85H,(R0)=20H,(20H)=AFH,执行指令:
ADDA,@R0
结果:
(A)=34H,Cy=1,Ac=1,OV=1,P=1
由于位7有进位,而位6无进位,所以标志位OV=1
2.带进位加法指令
标志位Cy参加运算,因此是三个数相加。
共4条:
ADDCA,Rn;
(A)+(Rn)+C→A,n=0~7
ADDCA,direct;
(A)+(direct)+C→A
ADDCA,@Ri;
(A)+(Ri)+C→A,i=0,1
ADDCA,#data;
(A)+#data+C→A
例:
(A)=85H,(20H)=FFH,Cy=1,执行指令:
ADDCA,20H
结果为:
(A)=85H,Cy=1,Ac=1,OV=0,P=1(A中1的位数为奇数)
3.增1指令
5条增1指令:
INCA
INCRn;
n=0~7
INCdirect
INC@Ri;
i=0,1
INCDPTR
不影响PSW中的任何标志。
第5条指令INCDPTR,是16位数增1指令。
指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,并不影响标志Cy的状态。
4.十进制调整指令
用于对BCD码十进制数加法运算结果的内容修正。
指令格式:
DAA
两个BCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩BCD码的和数。
二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。
(a)3+6=90011+0101=1001运算结果正确
(b)7+8=150111+1000=1111运算结果不正确
(c)9+8=171001+1000=00001C=1结果不正确
二进制数加法指令不能完全适用于BCD码十进制数的加法运算,对结果作有条件的修正——十进制调整
出错原因和调整方法:
BCD码只用了了其中的10个,6个没用到的编码。
(1010,1011,1100,1101,1110,1111)为无效码
凡结果进入或者跳过无效码编码区时,其结果就是错误的。
调整的方法是把结果加6调整,即所谓十进制调整修正。
修正方法应是:
(a)累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正。
(b)累加器高4位大于9或进位位Cy=1,则进行高4位加6修正。
(c)累加器高4位为9,低4位大于9,则高4位和低4位分别加6修正。
具体是通过执行指令:
DAA来自动实现的。
例(A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。
执行指令:
ADDA,R5
由于高、低4位分别大于9,所以要分别加6进行十进制调整对结果进行修正。
结果为:
(A)=23H,Cy=1
可见,56+67=123,结果是正确的。
5.带借位的减法指令
4条指令:
SUBBA,Rn;
(A)-(Rn)-Cy→A,n=0~7
SUBBA,direct;
(A)-(direct)-Cy→A
SUBBA,@Ri;
(A)-((Ri))-Cy→A,i=0,1
SUBBA,#data;
(A)-#data-Cy→A
从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。
如果位7需借位则置“1”Cy,否则清“0”Cy;
如果位3需借位则置“1”Ac,否则清“0”Ac;
如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。
例(A)=C9H,(R2)=54H,Cy=1,执行指令:
SUBBA,R2
结果:
(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位)
6.减1指令
4条指令:
DECA;
(A)-1→A
DECRn;
(Rn)-1→Rn,n=0~7
DECdirect;
(direct)-1→direct
DEC@Ri;
((Ri))-1→(Ri),i=0,1
减1指令不影响标志位。
7.乘法指令
MULAB;
A×
B→BA
如果积大于255,则置“1”溢出标志位OV
8.除法指令
DIVAB;
A/B→A(商),余数→B
如果B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。
3.4.3逻辑运算指令
1.简单逻辑操作指令
(1)CLRA
功能是累加器A清“0”。
不影响Cy、Ac、OV等标志。
(2)CPLA
功能是将累加器A的内容按位逻辑取反,不影响标志。
2.左环移指令
RLA
功能是累加器A的8位向左循环移位,位7循环移入位0,不影响标志。
3.带进位左环移指令
RLCA
功能是将累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响其它标志。
4.右环移指令
RRA
功能是累加器A的内容向右环移一位,Acc.0移入Acc.7,不影响其它标志。
5.带进位环移指令
RRCA
这条指令的功能是累加器A的内容和进位标志Cy一起向右环移一位,Acc.0进入Cy,Cy移入Acc.7。
6.累加器半字节交换指令
SWAPA
将累加器A的高半字节(Acc.7~Acc.4)和低半字节(Acc.3~Acc.0)互换。
例(A)=0C5H,执行指令:
(A)=5CH
7.逻辑与指令
ANLA,Rn;
(A)∧(Rn)→A,n=0~7
ANLA,direct;
(A)∧(direct)→A
ANLA,#data;
(A)∧#data→A
ANLA,@Ri;
(A)∧((Ri))→A,i=0~1
ANLdirect,A;
(direct)∧(A)→direct
ANLdirect,#data
;
(direct)∧#data→direct
例(A)=07H,(R0)=0FDH,执行指令:
ANLA,R0
(A)=05H
8.逻辑或指令
ORLA,Rn;
(A)∨(Rn)→A,n=0~7
ORLA,direct;
(A)∨(direct)→A
ORLA,#data;
(A)∨data→A
ORLA,@Ri;
(A)∨((Ri))→A,i=0,1
ORLdirect,A;
(direct)∨(A)→direct
ORLdirect,#data
;
(direct)∨#data→direct
例(P1)=05H,(A)=33H,执行指令
ORLP1,A
结果:
(P1)=37H
9.逻辑异或指令
XRLA,Rn;
(A)⊕(Rn)→A
XRLA,direct;
(A)⊕(direct)→A
XRLA,@Ri
(A)⊕((Ri))→A,i=0,1
XRLA,#data;
(A)⊕#data→A
XRLdirect,A
(direct)⊕(A)→direct
XRLdirect,#data
(direct)⊕#data→direct
例(A)=90H,(R3)=73H执行指令:
XRLA,R3
(A)=E3H
3.4.4控制转移类指令
1.无条件转移指令
AJMPaddrll
2K字节范围内的无条件跳转指令,64K程序存储器空间分为32个区,每区2K字节,转移的目标地址必须与AJMP下一条指令的地址的高5位地址码A15~A11相同。
执行指令时,先PC加2,然后把addrll送入PC.10~PC.0,PC.15~PC.11保持不变,程序转移到目标地址。
本指令是为能与MCS-48的JMP指令兼容而设的。
2.相对转移指令
SJMPrel
实现的程序转移是双向的。
在编写程序时,直接写上要转向的目标地址标号就可以。
LOOP:
MOVA,R6
┇
SJMPLOOP
┇
程序在汇编时,由汇编程序自动计算和填入偏移量。
手工汇编时,偏移量rel的值则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 MCS51 指令系统