第四章80C51系列单片机指令系统.docx
- 文档编号:23708156
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:18
- 大小:34.86KB
第四章80C51系列单片机指令系统.docx
《第四章80C51系列单片机指令系统.docx》由会员分享,可在线阅读,更多相关《第四章80C51系列单片机指令系统.docx(18页珍藏版)》请在冰豆网上搜索。
第四章80C51系列单片机指令系统
第四章80C51系列单片机指令系统
4·180C51系列中所有单片机是否使用完全相同的指令系统?
答:
80C51系列单片机以MCS一51系列的8051为基核,采用CHMOS工艺,其指令系统与MCS一51单片机的指令系统完全相同。
但是在一些非总线型的产品中,由于引脚的减少,不能扩展外部数据存储器,MOVX类的指令是无效的;相应的,也不能扩展外部程序存储器,ACALL、LCALL、AJMP及LJMP类的指令的使用也将受到限制。
4·2区别CPU时存中的时钟周期、节拍(相)、状态周期、机器周期、指令周期。
答:
80C51有内部时钟振荡器,在振荡器外部引脚XTAL2、XTALl上并联石英谐振器和振荡
电容后产生单片机的基本时钟频率fosc.。
fosc.是单片机时序状态的基础。
时钟周期:
基本时钟频率fosc.,其振荡周期为Tosc.,也称时钟周期。
状态周期:
由两个时钟周期Tosc构成一个状态周期Ts。
节拍:
一个状态周期里将两个Tosc分成Pl、P2节拍(或相)。
机器周期:
6个状态周期Ts为一个机器周期Tw。
机器周期是指令周期的基本单位。
指令周期:
完成一条指令操作需要的机器周期数,称为指令周期。
80C51系列中通常有单周期指令、双周期指令及四周期指令等。
4·3请区别汇编指令、指令代吗、指令周期、指令长度(字节教)。
答:
汇编指令:
是指令系统最基本的书写方式,它由助记符、目的操作数、源操作数构成。
格式
如下:
助记符目的操作数,源操作数;(注释)
指令代码:
是程序指令的二进制数字表示方法,是在程序存储器中存放的数据形式。
指令周期:
是指完成一条指令操作需要的机器周期数。
指令长度:
是指指令代码所占的字节数,有单字节指令、双字节指令和三字节指令。
无论是单字节、双字节还是三字节指令,第1个字节代码为操作码,它表达了指令的操作功能;第2、3个字节则为操作数,可以是地址或立即数。
4·480C51指令系统中有哪些寻址方式?
相应的寻址空间在何处?
请举一例说明。
答:
1.80C51指令系统的寻址万式
80C51指令系统中有寄存器寻址、直接寻址、间接寻址、立即寻址、位寻址、基址变址寻址和相对寻址七种寻址方式。
(1)寄存器寻址方式
80C51中所有的工作寄存器R0~R7和SFR都是可寻址寄存器。
在寄存器寻址操作中,
这些寄存器都以寄存器名作指令操作数。
在寄存器寻址方式的操作指令中,寄存器内容作为操作数,可以是源操作数或目的操作
数。
例如:
INCDPTR;DPTR寄存器内容加1
MOVA,R7;工作寄存器R7内容送累加器A中
DIVAB;A内容除以B寄存器内容
XCHA,R6;A内容与R6内容交换
(2)直接寻址方式
直接寻址方式的操作指令直接把地址作为操作数来运行,既可作源操作数,也可作目的操作数。
如:
MOV30H,40H;把片内存储器40H单元的内容送入
;30H单元
MOVR6,DPH;寄存器DPH的直接寻址,将DPH
;中的内容送入R6
(3)间接寻址方式
间接寻址寄存器有Ri(i=0、1)和DPTR。
间接寻址时,在间接寻址寄存器标记前加@符
号。
间接寻址时,寄存器的内容是操作数的地址。
●通过@Ri可以对片内数据存储器的00H~FFH单元间接寻址。
如将40H中的内容
送入累加器A申,其间接寻址操作如下:
MOVRl,#40H;用Rl作间接寻址寄存器,给Rl
;赋予地址值
MOVA,@R1;@Rl中内容送人A申
●通过@DPTR对片外数据存储器0000H~FFFFH的间接寻址。
如将A中的内容送
入片外数据存储器385FH单元中,其间接寻址操作如下:
MOVDPTR,#385FH;用DPTR作间接寻址寄存器,给DPTR
;赋以地址值
MOVX@DPTR,A;A中的内容送人片外RAM的385FH
;单元中
(4)位寻址方式
80C51中有完全服务于位寻址操作的布尔指令系统。
为了满足位操作中位状态的缓冲、
传送、运算,将进位位C作为位寻址操作的位累加器。
在位寻址操作中,位单元可以使用地址编号或位地址名。
如:
MOV5FH,C;将进位位C的状态送5FH位地址中
ANLC,5FH;将5FH的位状态与进位位C的状态
;相"与",其结果保留在C中
SETBTR0;将TCON中的TR0置位
CLR8CH;将TCON中的TR0清零,TR0的
;位地址为8CH
(5)立即寻址方式
指令中常常要使用一些常数来参与指令操作,由于这些常数能立即传送或赋值,故称为立即数。
立即数前面必须加"#"标记。
指令中的立即数有8位立即数#data8和16位立即数#datal6。
由于立即数是一个常
数,不是物理空间,故立即数在寻址操作中只能作为源操作数。
如:
MOVA,#40H;立即数40H给A赋值
MOVDPTR,#385FH;立即数385FH给DPTR赋值
ANLA,#55H;A中的数与55H相"与",其结果放在A中
(6)基址变址寻址方式
基址变址寻址方式是以一个基地址加一个变量地址的寻址操作方式。
作为基地址使用的
有PC指针和DPTR地址指针;A作为变量地址使用。
基址变址寻址方式是一种间接寻址方式,基址变址作为间接地址。
采用基址变址寻址操
作的指令只有以下三条,即:
MOVCA,@A+DPTR;查表指令
MOVCA,@A+PC;查表指令
JMP@A+DPTR;散转指令
前两条用于程序存储器的查表操作,后一条则用于程序的分支散转。
(7)相对寻址方式
相对寻址是将程序转移到相对地址的寻址转移操作。
相对寻址中,相对地址rel是一个8位数的地址偏移量,是相对于相对转移指令下一条指令第一个指令代码的地址偏移量。
程序转移的范围为-128~+127,即向前(PC值加大)转移,最大为127个字节,向后转移(PC值减小)可转移128个字节。
相对寻址操作使用在相对转移指令中,如:
DJNZR0,SIN1;工作寄存器R0减1不为零时
;程序转移到SINl标号处
2.80C51指令系统中各寻址方式的寻址空间
80C51指令系统中各寻址方式的寻址空间列入题表3-1中
题表3-180C51指令系统中寻址方式和寻址空间
4·5片内RAM20H~2FH中的128个位地址与直接地址00H~7FH形式充全相同,如何在指令中区分出位寻址操作和直接寻址操作?
答:
虽然,片内RAM20H~2FH中的128个位地址与直接地址00H~7FH形式完全相同,但
是在位寻址操作和直接寻址操作中,这两者的区别是很明显的。
位寻址的操作只适用于下列
位指令,而直接地址操作对这些指令是无效的。
(1)布尔传送指令
MOVC,bit;(C)←(bit)
MOVbit,C;(bit)←(C)
(2)布尔状态控制指令
位清除(CLR)指令:
CLRbit;(bit)←0
位置1(SETB)指令
SETBbit;(bit)←l
位取反(CPL)指令
CPLbit;(bit)←(/bit)
(3)布尔(位)逻辑操作指令
位逻辑"与"(ANL)操作指令
ANLC,bit;(C)←(C)∧(bit)
ANLC,/bit;(C)←(C)∧(/bit)
逻辑"或"(ORL)操作指令
ORLC,bit;(C)←(C)∨(bit)
ORLC,/bit;(C)←(C)∨(/bit)
(4)布尔(位)条件转移指令
判位变量转移指令:
JBbit,rel
JNBbit,rel
4·6什么是源操作数?
什么是目的操作数?
通常在指令中如何加以区分?
答:
操作数是指令操作所需的数据、地址或符号。
由于指令操作时,操作数有"源"和"目的"之分,通常右边操作数为"源"操作数,左边为"目的"操作数。
例如:
MOVA,#40H;把立即数#40H送入累加器A中
80C51指令系统中大多数为两个操作数,少数为一个操作数;在CJNE指令中必须有第三个操作数来表达程序转移的目的地;而个别指令则不需要操作数,如子程序返回RET、中断返回RETI和空操作NOP。
4·7查表指令是在什么空间上的寻址操作?
答:
查表指令MOVC只用于程序存储器的操作,因常数表格都固化在程序存储器中。
4·8在MOVX指令中,@Ri是一个8位地址指针,如何访问片外数据存储器的16往地址空间?
答:
把片外数据存储器的16位地址,分为高8位地址和低8位地址,将低8位地址送入Ri
ai=0,1)中,而将高8位地址通过P2口直接输出,然后执行MOVX指令即可:
MOVP2,#高8位地址
MOVRi,#低8位地址;i=0,1
MOVXA,@Ri;读片外数据存储器
MOVX@Ri,A;写片外数据存储器
4·980C51的指令系统中PSW(程序状态学)起什么作用?
它能反映哪些指令的运行状态?
答:
算术运算指令运行时会产生进位、借位、溢出等状态,这些状态标志存放在程序状态字
(PSW)中。
这些标志位如题表3-2所列。
4·1080C51指令系统中有了长跳转LJMP、长调用LCALL指令,为何还设置了短跳转AJMP、短调用ACALL指令?
在实际使用时应怎样考虑?
答:
长跳转LJMP在64KB范围内转移,而AJMP只能在2KB空间转移。
长调用LCALL调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程
序空间范围的子程序。
但是AJMP、ACALL指令代码长度为2个字节,LJMP、LCALL指令代码长度则为3个字节。
4·11查表指今中都采用了基址变址的寻址方式,在"MOVCA,@A+DPTR"和"MOVCA,@A+PC"中分别使用了DPTR和PC作基址,请问这两个基址代表什么地址?
答:
查表指令都采用基址加变址的间接寻址方式访间表格中的常数。
指令不同,基址和变址
的含义不同。
使用@A十DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址
到被访问字节地址的偏移量。
使用@A+PC基址变址寻址时,PC照例是下条指令首地址,而A则是从下条指令首地
址到常数表格中的被访问字节的偏移量。
4·12在散转指令应用实例中,为什么要将变址寄存器A中的内容(键号)展宽为3个字节?
答:
在16个键的键盘中对应于每个键按下后,键盘处理程序都会有一个相应的键号存放在A中。
设16个键的键号为00H~0FH。
由于每一个键的键操作内容不同,键操作程序长短不一。
因此,设定一个规范长度的入口地址表,表中依次存放16个键的无条件转移指令LJMPKPRGi(i=0~15),由LJMPKPRGi
再转移到相应的键操作程序KPRGi中。
因此,要给每个入口地址展宽为3个字节,以便安放3个字节的LJMP指令。
4·13十进制调整指令DA起什么作用?
用在何处?
答:
在实际应用中,常需使用BCD码加法操作,而80C51指令系统中,只能实现二进制运算,BCD码形式的加运算操作后,其结果常常不再是BCD码的加运算结果,必须进行十进制调整。
十进制调整指令DA就是用于调整的。
例如.98+95=193,而98H+95H=2DHCY=l。
如果按下述指令操作:
MOVA,#98H;BCD(l)码入A
ADDA,#95H;两BCD码相加98H+95H=2DH,CY=l
DAA;十进制调整后(A)=93H,CY=l
未经十进制调整的结果为12DH,十进制调整后为193H。
可以看出,只有经过十进制调整的BCD码加法结果才是正确的。
4·14比较不等转移指令CJNE有哪些扩展功能,如何创造性地使用这些功能?
答:
在比较不等转移指令中,两操作数相比较,不相等时,程序转移到相对地址处。
还可以利用比较不等指令操作时的进位标志,实现两操作数大小的比较转移,即通过两操作数比较大小不同转移到不同的入口处。
如:
CY=l表示第二操作数大于第一操作数;
CY=0表示第一操作数大于第二操作数。
根据CY状态可再实现大小比较的转移。
通过比较不等和大小不同的转移,可以实现数据的界限管理。
如在数据采集系统中,设定正常界限范围,超出该范围的数据作为粗大误差处理。
4·15逻辑操作可以实现哪些状态操作?
这些操作在实际程序中如何应用?
答:
在80C51指令系统中有许多位操作指令,然而,对于不可位寻址的一些字节单元来说,要对其中的多个位状态进行清零、置位、求反、比较时,则求助于逻辑运算指令。
(1)逻辑"与"操作的位屏蔽
逻辑"与"操作具有"遇1保持,遇0为扩的逻辑特点。
在程序中可用于实现位屏蔽(将某
些位清零)的程序操作。
(2)逻辑"或。
操作的置位
逻辑"或"操作具有"遇0保持,遇1置位"的逻辑特点。
在程序中可用于实现字节中的置
位(将某些位置1)操作。
(3)"异或"操作的求反与比较
逻辑"异或"操作具有"遇1取反,遇0保持,相同为0"的逻辑特点。
在程序中可用于字节的取反(将某些位取反)和比较相等的条件转移操作。
4·16请按照图3–2~图3–11给出的指令图解写出相应的汇编指令。
答:
(1)按照图3-2
图3-2的示例图表示了累加器A和工作寄存器Ri间接寻址的指令操作。
助记符为
MOV,操作数A和QRi可互为源、目的操作数,按照汇编指令格式规定,可立即写出它们的2条传送指令,即:
MOV@Ri,A
和MOVA,@Ri
(2)按照图3-3
程序存储器为只读存储器,只能将表格常数读人累加器中,表格常数采用基址变址寻址方式。
指令图解如图3-3所示。
根据指令图解可立即写出以下2条传送指令:
MOVCA,@A+DPTR
这条指令是将基址寄存器DPTR的内容与变址寄存器A的内容相加得地址值,把该地址中的数据送入A中。
MOVCA,@A+PC
这条指令是将基址寄存器PC的内容与变址寄存器A的内容相加得地址值,把该地址中
的数据送入A中。
(3)按照图3-4
片外数据存储器为读、写存储器,与累加器可实现双向操作。
片外数据存储器使用寄存器间接寻址。
指令图解如图3-4所示。
根据指令图解可立即写出以下4条传送指令:
MOVX@DPTR,A;将A中的数写到DPTR指示的片外
;RAM地址中
MOVXA,@DPTR;将DPTR指示的片外RAM地址中的
;数读入A中
MOVX@Ri,A;将A中的数写入Ri指示的片外RAM
;地址中
MOVXA,@Ri;将Ri指示的片外RAM地址中的数
;读入A中
(4)按照图3-5
在80C引单片机内部。
累加器A可以和工作寄存器(Rn)、片内RAM(直接地址direct、间接地址@Ri)、立即数(#data)进行数据传送,而工作寄存器、直接地址、间接地址间也可以直接进行数据传送。
MOV指令图解如图3-5所示。
根据图3-5也能方便地列写出图中的8条指令。
应进一步说明的是:
直接地址direCt为00H~FFH,其中00H~7FH为片内RAM.80H~FFH为SFR。
指令中SFR可写成直接地址direct,也可写成寄存器名。
寄存器@Ri期的间接寻址,其寻址范围也是00H~FFH,其中00H~7FH是80C5l的
片内RAM,但80H一FFH则是80C51片内的扩展RAM。
直接地址(direct)中有一条自传送指令,即:
MOVdirect
(1),direct
(2);将direct(l)中的数送人direct
(2)的
;数据传送指令
应注意,其目的操作数direct
(2)和源操作数direct(l)与规定的指令格式书写相反。
堆栈操作是直接寻址中的特殊传送操作。
压栈、出栈操作的助记符分别为PUSH和
POP。
压栈的同的地址和出栈的源地址都是惟一的堆栈顶部,故汇编指令中只书写一个操作
符,即:
PUSHdirect;将直接地址中的数压入栈顶
POPdirect;将堆顶中的数弹出到直接地址中
直接地址中的内容压入堆栈后,直接地址可挪作它用;出栈时,出栈内容再返回直接地址。
片内工作寄存器、RAM及SFR都是8位单元,而DPTR为16位单元,故#data向
DPTR的传送应使用16位数据,即:
MOVDPTR,#datal6;将一个16位数送入DPTR中
(5)按照图3-6
数据交换的传送操作是指两个数据空间的数据交换操作。
有全交换XCH、半交换XCHD和自交换SWAP,如图3-6所示。
全交换XCH是两个8位物理空间中的数彼此交换。
半交换XCHD是两个8位物理空间中低4位数据彼此交换。
自交换SWAP是自身高4位与低4位数据彼此交换。
根据指令图解图3-6,可立即写出以下5条数据交换指令:
XCHA,Rn;Rn寄存器与A中数据全交换
XCHA,@Ri;Ri间接地址中数据与A中数据全交换
XCHA,direct;直接地址申数据与A中数据全交换
XCHDA,@Ri;Ri间接地址中数据与A中数据半交换
SWAPA;A累加器中数据自交换
(6)按照图3-7
算术运算类指令共23条,有加CADD)、带进位加(ADDC)、带借位减(STTRB)、乘(MUL)、
除(DIV)、加1(INC)和减l(DEC)操作,其指令图解如图3-7所示。
算术运算指令运行时会
产生进位、借位、溢出等状态,这些状态标志存放在程序状态字(PSW)中。
从指令图解中可方便地写出所有的23条指令。
例如:
ADDA,@Ri;@Ri(i=0,1)间接地址中的数与A中的数
;相加,结果在A中,状态标志在PSW中
ADDCA,@Ri
SUBBA,@Ri
ADDA,Rn;Rn(n=0~7)寄存器中的数与A中的数
;相加结果在A中,状态标志在PSW中
ADDCA,Rn
SUBBA,Rn
可以看出,加减算术操作中的结果都在A中,而运算状态则存放在PSW中。
乘(MUD)、除(DIV)指令使用了B寄存器,其书写及操作结果如下:
MULAB
该指令是两个8位元符号数相乘,2个乘数分别放在A、B中,乘积为16位,高8位存A中,低8位存B申,运算状态在PSW中。
DIVAB
该指令是两个8位无符号数相除(A÷B),相除后商在A中,余数在B中,运算状态在
PSW中。
除#data、B外,@Ri、Rn、direct都有加1、减1操作,DPTR只有加1(INC)操作。
(7)按照图3-8
逻辑运算类指令共25条,主要是"与"(ANL)、"或"(ORL)、"异或"(XRL)的逻辑操作和
累加器自身内容的清零(CLR)、求反(CPL)、右移(RR)、带进位位右移(RRC)、左移(RL)、带
进位位左移(RLC)和十进制调整(DA)。
其指令图解如图3-8所示。
图中不包括位操作中的
逻辑运算指令。
根据图中示意,可以很容易写出25条逻辑运算操作指令。
其结果存放地点依箭头所指,
大多在累加器A中,其中直接地址direct中也可以存放操作结果。
如:
ANLA,direct;直接地址direct中的数与A中的数进行
;逻辑"与",其结果在A中
ANLdirect,A;累加器A申的数与直接地址direct中的
;数进行逻辑"与",其结果在direct中
左移(RL、RLC)、右移(RR、RRC)、求反(CPL)、清零(CLR)及十进制调整(DA),只能在累加器中操作,其结果仍在累加器A中。
如:
RLCA;将A中的数连同进位位左移,其结
;果在A及进位位C中
DAA;将A中的BCD码加法运算结果调整
;为十进制,结果在A中
(8)按照图3-9
条件转移有零与非零转移(JZ/JNZ)、减1非零转移(DJNZ)和比较不等转移(CJNE)。
条
件转移均为相对转移,条件符合时转移到相对地址rel指令处。
条件转移指令图解如图3-9
所示。
零与非零转移。
由于只有A才能实现零与非零转移,故指令JZ、JNZ中省略了A标
记,即:
JZrel;A中内容为零时,程序转移到相对地址
;rel处
JNZrel;A中内容不为零时,程序转移到相对地址
;rel处
减1非零转移。
直接地址direct和工作寄存器Rn都可实现减1非零转移,即
DJNZRn,rel;工作寄存器Rn(n=0~7)内容减1不为零
;时,程序转移到相对地址rel处
DJNZdirect,rel;直接地址direct中内容减1不为零时,程序
;转移到相对地址rel处
比较不等转移。
比较不等转移是两个字节数据比较不相等条件下的转移,如图中所
示,可以是累加器A中内容与立即数#data或直接地址direct中的内容相比较,也可以是工
作寄存器Rn和@Ri中的内容与立即数#data的比较。
图中4条比较不等转移指令为:
CJNEA,#data,rel
CJNEA,direct,rel
CJNERn,#data@rel
CJNE@Ri,#data,rel
(9)按照图3-10
位操作指令有12条,包括位传送操作MOV、位逻辑操作ANL、ORL和位状态操作CLR、SETB、CPL。
图3-10为位操作指令图解。
位传送操作MOV。
位传送操作是实现位累加器C与位地址bit之间的位数据双向传
送,即:
MOVC,bit;位地址bit内容传送到C中
MOVbit,C;C中内容传送到位地址bit中
位逻辑操作ANL、ORL。
位逻辑操作是位地址bit中的位状态或位反状态与位累加器
C中的状态进行逻辑"与"、"或"操作,结果在C中,即:
ANLC,bit;bit中位与C中位相"与",结果在C中
ANLC,bit;bit中位状态取反后与C中位相"与",结
;果在C中
ORLC,bit;bit中位与C中位相"或",结果在C中
ORLC,bit;bit中位取反后与C中位相"或",结果在
;C中
位状态操作CLR、SETB、CPL。
位状态操作是位累加器C或位地址中状态的清0、置1和求反操作,即:
CLRC;C中状态清0
SETBC;C中状态置1
CPLC;C中状态求反
CLRbit;bit中状态清0
SETBbit;bit中状态置1
CPLbit;bit中状态求反
(10)按照图3-11
位条件转移指令有5条,其转移条件是C和bit中的位状态,为相对转移。
符合转移条件时,将程序转移到相对地址rel处。
其指令图解如图3-11所示。
JC、JB是"1"状态转移;JNC、JNB是"0"状态转移;JBC是"1"状态转移,但执行该条指令
后bit内容清0;即:
JCrel;C中"1"状态时转移到rel
JNCrel;C中"0"状态时转移到rel
JBbit,rel;bit中"1"状态时转移到rel
JNBbit,rel;bit中"0"状态时转移到reI
JBCbit,ret;bit中"1"状态时转移到rel,且使bit清0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 80 C51 系列 单片机 指令系统