




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章MCS-51的汇编语言指令与程序设计3.1MCS-51指令系统概述3.2MCS-51指令系统的寻址方式3.3MCS-51指令系统的指令3.4伪指令3.5汇编语言程序设计举例
3.1MCS-51指令系统概述
指令就是能完成特定功能的命令。计算机只能直接识别二进制指令。采用二进制指令的计算机语言称为机器语言。由于机器语言不方便人们识别、记忆和使用,因此给每条机器语言指令赋予一个助记符,这就是汇编语言指令。汇编语言指令是机器语言指令的符号化形式,它和机器语言之间是一一对应的,对于不同的计算机,汇编语言是不一样的。
指令系统是指CPU所能执行的各种指令的集合。MCS-51单片机是8位机,可以识别28=256种数据和代码,实际中有255种操作码(代码A5H无对应指令),对应的指令系统可分为5大类,共计111条:从存储时所占的存储器空间的大小上来看,单字节49条,双字节46条,三字节16条;从执行时间上看,指令的运行时间用机器周期度量,其中单周期指令64条,双周期指令45条,4周期指令2条(MUL和DIV)。在所有的指令中,乘、除法指令是单字节4周期的,所以指令的字节数与指令周期不是对等的关系。
程序输入时,可以采用二进制的机器码形式,也可以将其写成十六进制,还可以是指令的“助记符”方式——汇编格式。但是十六进制的指令和汇编指令必须把它们“翻译”为二进制形式的“机器码”后才能为CPU所识别和执行。不论何种语言,指令从结构上看均是“操作码+操作数或操作数地址”的形式。
MCS-51的指令系统按指令功能分为五大类:数据传送类、算术运算类、逻辑运算类、控制转移类和位操作类。 3.2MCS-51指令系统的寻址方式
1.直接寻址
直接寻址是指指令中直接给出了操作数的地址,即指令本身含有操作数的(8位或16位)地址。可以直接寻址的存储器有片内RAM区和特殊功能寄存器SFR区。
采用直接寻址的指令长度是两个或三个字节,其中第一个字节是操作码,而操作数地址占1或2字节。当访问片内RAM低128单元时,直接给出单元地址。当访问SFR时可以直接给出地址,也可以给出寄存器符号。例如,“MOVA,80H”可以写成“MOVA,P0”,后者用SFR中寄存器的名字取代它的物理地址80H。程序设计中提倡用SFR中寄存器的名称来代替直接地址。
2.立即寻址
立即寻址是指指令中直接给出操作数(称为立即数),一般用于为寄存器或存储器赋常数初值。例如,“MOVA,#30H”表示将8位立即数30H送累加器A中;“MOVDPTR,#2000H”表示将16位立即数2000H送DPTR寄存器中。在MCS-51汇编指令中,立即数前面必须加“#”号,以区别立即数和直接地址。
3.寄存器寻址
寄存器寻址是指以寄存器中的内容为操作数,寄存器作为操作数的地址。
寄存器寻址方式的寻址范围包括工作寄存器R0~R7、累加器A、通用寄存器B、数据指针DPTR和程序状态寄存器PSW的进位标示位Cy等。需要注意的是,在使用工作寄存器时,首先要通过程序状态寄存器PSW的RS1RS0来选择当前寄存器组。
4.寄存器间接寻址
寄存器间接寻址是指以指令中给出的寄存器的内容作为操作数的地址。MCS-51的汇编语言指令中,在寄存器前面加上符号“@”来表示寄存器间接寻址。例如,“MOVA,@R0”,设指令执行前A中的值为00H,R0中的值为30H,存储器单元内容如图3.1所示。由于寄存器R0的内容30H是操作数的地址,而30H单元中的值为48H,所以执行指令后,A中的值就变成48H。图3.1寄存器间接寻址示意图
5.变址寻址
变址寻址是指将基址寄存器(DPTR或PC)与变址寄存器(A)的内容相加,结果作为操作数的地址。例如,“MOVCA,@A+DPTR”表示将累加器A和寄存器DPTR的内容相加,相加结果作为操作数的地址,再将该地址中的内容取出来送到累加器A中。
6.相对寻址
相对寻址是指将指令中的地址偏移量与程序计数器PC的当前值相加,其结果作为跳转指令的目的地址。例如,指令“SJMP21H”表示将21H与PC当前的内容相加,结果再送回PC中,成为下一条将要执行指令的地址。设指令“SJMP21H”存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H,再把PC的内容与操作数21H相加,形成目标地址2023H,送回PC,使程序跳转到2023H单元继续执行。在使用相对寻址时需要注意下列两点:
(1)程序计数器PC的当前值是指取完指令之后的值(存放操作数的下一单元),它等于存放转移指令的入口地址加上转移指令所占的字节数,所以目标地址的计算式为:目标地址=转移指令的入口地址+转移指令所占的字节数+偏移量。
(2)指令中偏移量为8位有符号数,以补码形式表示,所以控制程序转移的地址范围为-128~+127,负表示向前转移,正表示向后跳转。
7.位寻址
MCS-51单片机中,操作数不仅可以按字节进行操作,也可以按位进行操作。当把某一位作为操作数时,这个操作数的地址称为位地址。位寻址就是按位寻找操作数或操作数地址的寻址方式。前述6种寻址方式都是按字节进行的寻址操作。
位寻址区包括片内RAM中的两个区域:一个是片内RAM的位寻址区,地址范围是20H~2FH,共占16个RAM单元,位地址为00H~7FH;另一个是有位地址的特殊功能寄存器SFR,在所有21个SFR中有11个寄存器可以位寻址。例如,指令“SETB20H”表示将位地址为20H的位置1。同字节寻址中的直接寻址一样,为了增加程序的可读性,凡SFR中的位地址都可以使用符号地址来替代。例如,指令“SETBP0.1”与“SETB81H”均表示将P0.1口置1。
以上介绍的7种寻址方式的汇总与比较如表3.1所示。表3.1MCS-51的寻址方式及寻址空间
3.3MCS-51指令系统的指令
为了方便指令的学习,下面先说明指令中用到的符号的意义。
(1) Rn和Ri:表示工作寄存器组的8个通用寄存器,n的取值为0~7,表示R0~R7中的一个,i的取值为0和l,表示R0和R1两个寄存器中的一个。
(2) direct:直接地址,片内RAM的8位地址。
(3) #data和 #datal6:包含在指令中的8位或16位常数。
(4) addr11和addr16:表示11位或16位直接地址。
(5) rel:相对寻址中以补码形式表示的8位偏移量,取值范围为-128~+127。
(6) DPTR:数据指针,可用作16位的地址寄存器。
(7) bit:片内RAM或SFR中直接寻址的位地址。
(8) Cy:PSW中的进位标志或进位位。
(9) A和B:表示累加器A和寄存器B。
(10) C:位运算中的累加器。
(11) (X):X中的内容。
(12) ((X)):由X间接寻址的单元中的内容。
(13) @:寄存器间接寻址或变址寻址的前缀。
(14) /:位地址的前缀标志,表示对该位操作数取反,如/bit。
(15) ←:表示将箭头右边的内容传送到左边。
(16) $:当前指令的地址。
MCS-51指令的书写格式为:
标号:操作码操作数或操作数地址1,操作数或操作数地址2;注释
3.3.1数据传送指令
MCS-51单片机数据传送指令的汇编指令格式为
操作码<目的操作数>,<源操作数>
1.内部数据传送指令
内部数据传送指令使用助记符MOV,完成片内数据存储器RAM之间以及片内数据存储器与累加器A之间的数据传送。此指令把16位常数装入数据指针DPTR,即数据高八位送入DPH寄存器,数据低八位送入DPL寄存器。
使用内部数据传送指令时,可以根据实际情况选用恰当的寻址方式。对于上面给出的传送指令,Intel公司在设计MCS-51的硬件时就已经确定下来,编程人员只能像查字典一样去查找、使用,不能根据主观意愿去“创造”指令。使用内部数据传送指令时应注意:一条指令中不能同时出现两个工作寄存器;间址寄存器只能使用R0、R1;SFR区只能直接寻址,不能用寄存器间接寻址。内部数据传送指令的组合关系可用图3.2来表示。图3.2内部数据传送指令的组合
2.外部数据存储器传送指令
外部数据存储器传送指令完成片外数据存储器RAM与累加器A之间的数据传送,使用MOVX作为助记符,片外数据存储器只能采用寄存器间接寻址。外部数据存储器传送指令MOVX共有下列四条:
MOVXA,@DPTR ;A←(DPTR)
MOVX@DPTR,A ;(DPTR)←A
MOVXA,@Ri ;A←(Ri)
MOVX@Ri,A ;(Ri)←A
以DPTR作16位数据指针,可寻片外64KB的RAM空间,以Ri作8位数据指针,可寻片外256B的RAM空间。外部RAM只能通过累加器A进行数据传送。
3.程序存储器传送指令
程序存储器传送指令实现片外程序存储器ROM与累加器A之间的数据传送,使用MOVC作为助记符。片外程序存储器只能用变址寻址方式。程序存储器传送指令MOVC有下列两条:
MOVCA,@A+DPTR ;A←(A+DPTR)
MOVCA,@A+PC ;PC←PC+1,A←(A+PC)
这两条指令通常用于访问表格数据,因此也称为查表指令。第一条指令中,用DPTR作为基地址。使用前,先将数据表的首地址送入DPTR中,累加器A作为偏移量,由两者数据相加得到待查的表中数据地址并取出,查找范围为64KB。第二条指令以程序计数器PC为基地址,但这里的PC值是执行完“MOVCA,@A+PC”后的值,即PC=PC+1,而不是当前的PC,查找范围为当前PC值之后256B。
4.数据交换指令
数据交换指令实现片内RAM区的数据双向传送,包括字节交换和半字节交换两种形式。
(1)字节交换指令:
XCHA,Rn ;A↔Rn
XCHA,@Ri ;A↔(Ri)
XCHA,direct ;A↔direct
这组指令的功能是将累加器A与源操作数的字节内容互换。
(2)半字节交换指令:
XCHDA,@Ri;A0~A3↔(Ri)0~A3
该指令的功能是将Ri间接寻址单元的低4位内容与累加器A的低4位内容互换,而它们的高4位内容均不变。
SWAPA ;A4~A7↔A0~A3
该指令的功能是将累加器A中的高、低4位互换。
5.堆栈操作指令
堆栈是在片内RAM中按“先进后出”原则设置的专用存储区。在MCS-51单片机中,数据的入栈和出栈由堆栈指针SP来管理,SP总是指向栈顶。堆栈操作有下列两条指令:
PUSHdirect;(SP)←(SP)+1,((SP))←(direct)
POPdirect;(direct)←((SP)),(SP)←(SP)-1入栈(PUSH)指令执行后堆栈指针SP上移一个单元,指向栈顶上一个空单元,将直接地址direct单元中的内容送入SP所指示的堆栈单元。
出栈(POP)指令将堆栈指针SP所指向的片内RAM中栈顶的内容送入直接地址direct中,然后堆栈指针下移一个单元,继续指向堆栈的栈顶。
堆栈操作必须是字节操作,且只能直接寻址。
堆栈是用户自己设定的片内RAM中的一块专用存储区,通常用于临时保护数据及程序调用时保护现场和恢复现场。堆栈指针默认指向07H,但这属于工作寄存器区。不能开辟堆栈,堆栈一般开辟在片内RAM的用户RAM区(30H~7FH)。使用时一定先设置堆栈指针,以适应具体编程的需要。3.3.2算术运算指令
1.加法指令
ADDA,Rn ;(A)←(A)+(Rn)
ADDA,direct ;(A)←(A)+(direct)
ADDA,@Ri ;(A)←(A)+((Ri))
ADDA,#data ;(A)←(A)+data
这组指令的功能是将源操作数与目的累加器A中的值相加,相加的结果仍存放在A中。源操作数可以是Rn、Direct、@Ri或立即数,目的操作数是累加器A。
2.带进位加法指令
ADDCA,Rn ;(A)←(A)+(Rn)+(Cy)
ADDCA,direct ;(A)←(A)+(direct)+(Cy)
ADDCA,@Ri ;(A)←(A)+((Ri))+(Cy)
ADDCA,#data ;(A)←(A)+data+(Cy)
这组指令的功能是将源操作数与目的累加器A中的值和当前进位标志Cy的内容相加,相加的结果仍存放在A中。其用法除考虑Cy之外,其余与ADD一样。Cy是下一位进上来的,在计算的末尾。
3.自加1指令
INC Rn ;(Rn)←(Rn)+1
INCdirect ;(direct)←(direct)+1
INC@Ri ;((Ri))←((Ri))+1
INC A ;(A)←(A)+l
INCDPTR ;(DPTR)←(DPTR)+1
这组指令的功能是指令中变量的值自加1,且不影响各个标志位。
4.带借位减法指令
SUBB A,Rn ;(A)←(A)-(Rn)-(Cy)
SUBB A,direct ;(A)←(A)-(direct)-(Cy)
SUBB A,@Ri ;(A)←(A)-(Ri)-(Cy)
SUBB A,#dala ;(A)←(A)-data-(Cy)
带借位减法指令的功能是从A中减去指定的变量和进位标志位Cy,结果存入A中。
5.自减1指令
DEC Rn ;(Rn)←(Rn)-1
DEC direct ;(direct)←(direct)-1
DEC @Ri ;((Ri))←((Ri))-1
DEC A ;(A)←(A)-1
这组指令的功能是指定的变量自减1。
6. BCD码调整指令
DAA
指令“DAA”只能跟在ADD或ADDC加法指令后面,将A中的二进制码自动调整为8421BCD码,用于实现BCD码的加法运算。
调整规则为:
(1)若累加器A的低4位大于9(A~F),或者辅助进位标志位Ac=1,则累加器A的内容加06H。
(2)若累加器A的高4位大于9(A~F),或进位标志位Cy=1,则累加器A的内容加60H。
调整的实质是将十六进制的加法运算转换成十进制。
7.乘法和除法指令
MULAB;A×B=BA
DIVAB;A÷B=A…B
这是MCS-51单片机唯一的一类单字节4周期指令,它的运行时间相当于4条加法指令的运行时间。在乘法指令中,当积超过255时,OV等于1,积的高8位存放在B中,低8位存放在A中,否则,积只放在A中;在除法指令中,当B为0时OV等于1,表示除数为0,除法无意义。3.3.3逻辑运算指令
逻辑运算指令有24条,包括逻辑与、逻辑或、逻辑异或、清0、取反、循环移位等操作。
1.逻辑与指令
ANLA,Rn ;(A)←(A)^(Rn)
ANLA,direct ;(A)←(A)
(direct)
ANLA,@Ri ;(A)←(A)
((Ri))
ANLA,#data ;(A)←(A)
data
ANLdirect,A ;(direct)←(direct)
(A)
ANLdirect,#data ;(direct)←(direct)
(data)
2.逻辑或指令
ORLA,Rn ;(A)←(A)
(Rn)
ORLA,direct ;(A)←(A)
(direct)
ORLA,@Ri ;(A)←(A)
((Ri))
ORLA,#data ;(A)←(A)
data
ORLdirect,A ;(direct)←(direct)
(A)
ORLdirect,#data ;(direct)←(direct)
(data)
3.逻辑异或指令
XRLA,Rn ;(A)←(A)(Rn)
XRLA,direct ;(A)←(A)(direct)
XRLA,@Ri ;(A)←(A)((Ri))
XRLA,#data ;(A)←(A)data
XRLdirect,A ;(direct)←(direct)(A)
XRLdirect,#data ;(direct)←(direct)(data)
4.清零和取反指令
CLRA ;A←0
CPLA ;A←/A
MCS-51系统中只能对累加器A清零和取反。
5.循环移位指令
(1) 8位循环指令:
RLA ;A中的值循环左移一位
RRA ;A中的值循环右移一位
(2) 9位循环指令:
RLCA ;带Cy循环左移一位
RRCA ;带Cy循环右移一位
3.3.4控制转移指令
控制转移指令用于改变程序计数器PC值,以控制程序走向,其作用区域是程序存储器空间。控制转移指令分为无条件转移指令、条件转移指令、调用与返回指令及空操作指令等。
1.无条件转移指令
无条件转移指令实现程序无条件地转移到指定的目标地址去执行。无条件转移指令包括长转移指令、绝对转移指令、短转移指令和间接转移指令。
(1)长转移指令:
LJMPaddr16;(PC)←addr16
程序能跳转到addr16指定的64KB程序存储器空间的任何地址处。
(2)绝对转移指令:
AJMPaddr11;(PC)←(PC)+2,(PC10~0)←addr11
这是一条双字节指令,执行该指令时先将PC加2,使PC指向下一条指令,然后把addr11送入PC10~PC0,PC15~PC11保持不变,程序转移范围为2KB。
MCS-51的ROM是以2KB为一页来划分的,这样4KB的ROM划分成2页,64KB的ROM划分成32页。在执行AJMP指令时,PC的高5位决定了ROM中的页地址,而AJMP指令的低11位地址用来选择页内地址。转移目标必须与AJMP下一条指令的第一个字节在同一个2KB范围内,否则转移将会出现错误。AJMP指令用来实现同一页内2KB范围的转移。
(3)短转移指令:
SJMPrel;(PC)←(PC)+2,(PC)←(PC)+rel
这也是一条双字节指令,执行该指令时先将PC加2,使PC指向下一条指令,然后PC值加上偏移量rel,计算出转移地址。转移范围为-128B~+127B,负数表示向后转移。
(4)间接转移指令:
JMP@A+DPTR;(PC)←(A)+(DPTR)
这是一条单字节指令,转移目标的地址是A中8位无符号数和16位数据指针DPTR相加的结果。
2.条件转移指令
与无条件转移指令不同,条件转移指令仅仅在满足指令中规定的条件时才执行转移,否则程序顺序执行。转移范围是以下一条指令地址为中心的-128B~+127B范围内。
(1)累加器判零转移指令:
JZ rel ;若(A)=0,则(PC)=(PC+2)+rel
;若(A)≠0,则(PC)=(PC)+2
JNZrel ;若(A)≠0,则(PC)=(PC+2)+rel
;若(A)=0,则(PC)=(PC)+2
(2)比较转移指令:
CJNEA,direct,rel
CJNEA,#data,rel
CJNERn,#data,rel
CJNE@Ri,#data,rel
这是一个3字节指令,用于比较源操作数和目的操作数,不相等则转移,相等则顺序继续执行下一条指令。如果目的操作数小于源字节,则Cy置1,否则Cy清0。具体操作过程为:
(目的字节)-(源字节)>0,PC+3+rel→PC,Cy=0
(目的字节)-(源字节)<0,PC+3+rel→PC,Cy=1
(目的字节)-(源字节)=0,PC+3→PC
(3)减1不为0转移指令:
DJNZRn,rel;(Rn)-1,若(Rn)=0,则(PC)←(PC)+2;若(Rn)≠0,则(PC)←(PC)+2+rel
DJNZdirect,rel
这组指令每执行一次,就将指定的Rn或direct的内容减1,再判别其内容是否为0。若不为0,转向目标地址;若为0,程序顺序执行。
3.调用与返回指令
调用与返回指令包括2条子程序调用指令和2条返回指令。
(1)长调用指令:
指令格式:
LCALLaddr16“LCALLaddr16”指令可调用64KB范围内的子程序。“ACALLaddr11”的调用范围是2KB,用法与AJMP类似,调用范围必须与AJMP下一条指令的第一个字节在同一个
2KB范围内。
(3)子程序返回指令:
格式:
RET
操作:
PC15~8←(SP),SP←SP-1;
PC7~0←(SP),SP←SP-1;
指令执行时将子程序调用时入栈的地址出栈,第一次出栈的值送给PC的高8位,第二次出栈的值送给PC的低8位。
(4)中断序返回指令:
格式:
RETI
操作:
PC15~8←(SP),SP←SP-1;
PC7~0←(SP),SP←SP-1;
RETI与RET的区别在于返回主程序后,RETI还要清除相应的中断优先级状态位,使系统响应低优先级的中断。
4.空操作指令
NOP;PC←PC+1
CPU不执行任何实际操作,只是消耗1个机器周期的时间,常用于时间的延迟。3.3.5位操作指令
MCS-51单片机内有一个位处理机,能完成对位地址空间的操作。位操作是针对片内RAM的位寻址区和11个可位寻址的SFR而言的。
1.位传送指令
MOVC,bit ;(C)←(bit)
MOVbit,C ;(bit)←(C)
2.位置位和位清零指令
CLRC ;(Cy)←0
CLRbit ;(bit)←0
SETBC ;(Cy)←1
SETBbit ;(bit)←1
3.位逻辑运算指令
(1)位与:
ANLC,bit ;C←C∧(bit)
ANLC,/bit ;C←C∧/(bit)
(2)位或:
ORLC,bit ;C←C∨(bit)
ORLC,/bit ;C←C∨/(bit)
(3)位取反:
CPLC ;C←/C
CPLbit ;bit←/(bit)
4.位控制转移指令
位控制转移指令包括以Cy内容为条件的转移指令和以位地址内容为条件的转移指令,共5条。
(1)以Cy内容为条件的转移指令:
JCrel ;若Cy=1,则PC←PC+2+rel(跳转);若Cy=0,则PC←PC+2(顺序执行)
JNCrel ;若Cy=0,则PC←PC+2+rel(跳转);若Cy=1,则PC←PC+2(顺序执行)
(2)以位地址内容为条件的转移指令:
JBbit,rel;若(bit)=1,则PC←PC+3+rel(跳转);若(bit)=0,则PC+3→PC(顺序执行)
JNBbit,rel ;若(bit)=0,则PC←PC+3+rel(跳转);若(bit)=1,则PC+3→PC(顺序执行)
JBCbit,rel;若(bit)=1,则PC←PC+3+rel(跳转),bit←0;若(bit)=0,则PC+3→PC(顺序执行) 3.4伪指令
1.设置起始地址伪指令
格式:
ORG16位的地址
ORG(Origin)伪指令放在一段源程序或数据前面,用于规定以下程序块或数据块存放的起始位置。一般源程序的开始都要使用ORG来设置存放程序的起始地址,若没有,则首地址为0000H。不同程序段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林业生物多样性保护与利用合同
- 智能设备维护及检修合同书
- 材料力学教材试题及答案
- 测试结果的分析与应用试题及答案
- 显著提高的公路工程知识积累试题及答案
- 专科化工原理考试题及答案
- 店面整体转让合同协议书
- 2025年工业互联网平台自然语言处理技术在工业互联网平台智能决策支持系统中的应用前景
- 计算机二级MySQL数据库优化策略试题及答案
- 商铺转让定金合同协议书
- 生产良率系统统计表
- 用TOC理论提高生产制造的竞争力课件
- SketchUp (草图大师) 基础培训PPT课件
- 生命线安装方案
- 代理机构服务质量考核评价表
- 浅谈打击乐器在小学低段音乐课堂中的运用
- 电厂保安人员管理制度
- 2018年泸州市生物中考试题含答案
- ge核磁共振机房专用精密空调机技术要求
- 新干县人民医院血液透析治疗患者告知书
- 消防电气检验批质量验收记录表
评论
0/150
提交评论