单片机原理及应用(陈燕)第3章指令系统.ppt
《单片机原理及应用(陈燕)第3章指令系统.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用(陈燕)第3章指令系统.ppt(90页珍藏版)》请在三一办公上搜索。
1、第3章 AT89S51单片机的 指令系统,1,AT89S51单片机使用MCS-51指令系统。介绍指令系统寻址方式对111条基本指令按功能分类详细讲解。指令-是CPU按照人们的意图来完成某种操作的命令,它以英文名称或缩写形式作为助记符。汇编语言指令-用助记符、符号地址、标号等表示的书写程序的语言。掌握汇编语言指令是程序设计的基础。,内容概要,3.1 指令系统概述简明、易掌握、效率较高的指令系统,复杂指令集。按所占字节分,分三种:(1)单字节指令49条;(2)双字节指令45条;(3)三字节指令17条。按执行时间来分,分三种:(1)1个机器周期(12个时钟振荡周期)的指令64条;(2)2个机器周期指
2、令45条;(3)4个机器周期乘、除指令。12MHz晶振,每个机器周期为1s。AT89S51一大特点是在硬件结构中有一个位处理机,一个处理位变量的指令子集。,3,3.2 指令格式 指令格式:指令的表示方法。指令通常由两部分组成:操作码和操作数。操作码指令进行什么操作。操作数指令操作的对象。可能是一具体数据,也可能是指出到哪里取得数据的地址或符号。指令长度不同,格式也就不同。(1)单字节指令:操作码和操作数同在一个字节中。(2)双字节指令:一个字节为操作码,另一个字节是操作数。(3)三字节指令:操作码占一个字节,操作数占二个字节。,4,3.3 指令系统的寻址方式寻址方式在指令中说明操作数所在地址的
3、方法。一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂。寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内快速地找到指定的地址单元。下面介绍指令系统7种寻址方式。,5,1寄存器寻址方式指令中的操作数为某一寄存器的内容。例如:MOVA,Rn;(Rn)A,n=07把Rn中的源操作数送入到累加器A中。由于指令指定了从寄存器Rn中取得源操作数,所以称为寄存器寻址方式。本寻址方式的寻址范围:(1)4组通用工作寄存区共32个工作寄存器。但只对当前工作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只能是R0R7。(2)部分特殊功能寄存器,如累加器A、寄存器B以及数据指针寄存
4、器DPTR等。,6,2直接寻址方式指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用“direct”表示。例如:MOVA,direct“direct”就是操作数的单元地址。例如:MOVA,40H 表示把内部RAM 40H单元(direct)的内容传送到A。指令中源操作数(右边的操作数)采用的是直接寻址方式。指令中两个操作数都可由直接寻址方式给出。例如:MOVdirect1,direct2具体指令:MOV 42H,62H把片内RAM中62H单元的内容送到片内RAM中的42H单元中。直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式。,7,3.寄存器间接寻址方式寄
5、存器中存的是操作数地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“”。例如:MOV A,Ri;i=0或1其中,Ri的内容为40H,即把内部RAM 40H地址单元中的内容传送给A。,8,4立即数寻址方式直接在指令中给出操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需在操作数前加前缀标志“#”。例如:MOV A,#40H表示把立即数40H送给A,40H这个常数是指令代码的一部分。第一个字节是操作码,第二字节是立即数,就是放在程序存储器内的常数。,9,5基址寄存器加变址寄存器间址寻址方式
6、以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,以两者内容相加形成的16位地址作为目的地址进行寻址。例如指令:MOVCA,A+DPTR 其中,(A)=05H,(DPTR)=0400H,指令执行结果是把程序存储器0405H单元的内容传送给A。本寻址方式的指令有3条:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR前两条指令适用于读程序存储器中固定的数据。,10,例如,将固定的、按一定顺序排列的表格存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应的表格参数。第3条为散转指令,A中内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转。,6相对
7、寻址方式解决程序转移。该寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。转移的目的地址用下式计算:目的地址=转移指令所在的地址+转移指令字节数+rel其中,偏移量rel是带符号8位二进制补码数,128+127。程序转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在128+127之间。,例如,LJMP rel程序要转移到该指令的PC值加3再加上rel的目的地址处。编写程序时,只需在转移指令中直接写要转向的地址标号。例如:LJMP LOOP“LOOP”为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工
8、汇编时,偏移量的值由手工计算。,13,7位寻址方式 对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作。位地址一般以直接位地址给出,位地址符号为“bit”。例如:MOV C,bit 其具体指令:MOV C,40H把位地址为40H的值送到进位位C。由于AT89S51具有位处理功能,可直接对数据位方便地实现置1、清0、求反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,增强了实时性。,14,7种寻址方式已介绍完毕。问题:当一条指令给定后,如何来确定该指令的寻址方式?例如:MOV A,#40H,属于立即数寻址还是寄存器寻址?要看以哪个操作数作为参照系。操作数分
9、为源操作数和目的操作数。对于源操作数“#40H”来说,是“立即数寻址”方式,但对目的操作数“A”来说,是属于“寄存器寻址”方式。一般而言,寻址方式指的是源操作数,所以此例为立即数寻址方式。对指令系统7种寻址方式总结,概括见表3-1。,15,16,表3-1 7种寻址方式及其寻址空间,3.4 AT89S51指令系统分类介绍共111条指令,按功能分为五类:(1)数据传送类(28条)(2)算术运算类(24条)(3)逻辑操作类(25条)(4)控制转移类(17条)(5)位操作类(17条)先简单介绍指令用到的符号。Rn 当前寄存器区的8个工作寄存器R0R7(n=07)。Ri 当前寄存器区中作为间接寻址寄存器
10、的2个寄存器R0、R1(i=0,1)。,17,18,3.4.1 数据传送类指令使用最频繁。一般数据传送类指令的助记符为“MOV”,通用格式如下:MOV,数据传送类指令是把源操作数传送到目的操作数。指令执行之后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属“复制”性质,而不是“搬家”。本类指令不影响标志位:Cy、Ac和OV,但不包括奇偶标志位P。,19,1以累加器为目的操作数的指令MOVA,Rn;(Rn)A,n=07MOVA,Ri;(Ri)A i=0,1MOVA,direct;(direct)AMOVA,#data;#dataA把源操作数内容送累加器A,源操作数有寄存器寻址、直
11、接寻址、间接寻址和立即数寻址等方式,例如:MOVA,R6;(R6)A,寄存器寻址MOVA,R0;(R0)A,间接寻址MOVA,70H;(70H)A,直接寻址MOVA,#78H;78HA,立即数寻址,20,2以Rn为目的操作数的指令MOV Rn,A;(A)Rn,n=07MOV Rn,direct;(direct)Rn,n=07MOV Rn,#data;#dataRn,n=07把源操作数送入当前寄存器区的R0R7中的某一寄存器。3以直接地址direct为目的操作数的指令MOV direct,A;(A)directMOV direct,Rn;(Rn)direct,n=07MOV direct1,di
12、rect2;(direct2)direct1MOV direct,Ri;(Ri)direct,i=0,1MOV direct,#data;#datadirect把源操作数送入直接地址指定的存储单元。direct指的是内部RAM或SFR地址。,21,4以寄存器间接地址为目的操作数的指令MOVRi,A;(A)(Ri),i=0,1MOVRi,direct;(direct)(Ri),i=0,1MOVRi,#data;#data(Ri),i=0,1功能是把源操作数内容送入R0或R1指定的存储单元中。516位数传送指令MOVDPTR,#data16;#data16DPTR 功能是把16位立即数送入DPTR
13、,用来设置数据存储器的地址指针。AT89S51有两个DPTR,通过设置特殊功能寄存器AUXR1中的DPS位来选择。当DPS=1,则指令中的DPTR即为DPTR1,DPTR0被屏蔽,反之亦然。,22,DPTR为16位的数据指针,分为DPH和DPL。操作十分灵活方便。设有两个DPTR后,就可避免频繁的出入堆栈操作。对于所有MOV类指令,累加器A是一个特别重要的8位寄存器,CPU对它具有其他寄存器所没有的操作指令。后面将要介绍的加、减、乘、除指令都是以A作为目的操作数。Rn为所选择的寄存器组中的R0R7,直接地址direct为内部RAM的00H7FH和特殊功能寄存器(地址范围80HFFH)在间接地址
14、中,用R0或R1作为内部RAM的地址指针,可访问内部RAM的00H7FH共128个单元。,6堆栈操作指令内部RAM中设定一个后进先出(LIFO,Last In First Out)的区域,称为堆栈。在特殊功能寄存器中有一个堆栈指针SP,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈操作指令。(1)进栈指令PUSH direct首先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中。例如:当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令PUSHAcc;(SP)+1=61HSP,(A)61HPUSHB;(SP)+1=62HS
15、P,(B)62H结果:(61H)=30H,(62H)=70H,(SP)=62H。,24,(2)出栈指令POPdirect将SP指示的栈顶单元的内容送入direct字节中,SP减1。例如:当(SP)=62H,(62H)=70H,(61H)=30H时,执行指令POP DPH;(SP)DPH,(SP)-1SPPOP DPL;(SP)DPL,(SP)-1SP结果为(DPTR)=7030H,(SP)=60H。,25,7累加器A与外部数据存储器RAM/IO传送指令MOVX A,DPTR;(DPTR)A,读外部RAM/IOMOVX A,Ri;(Ri)A,读外部RAM/IOMOVX DPTR,A;(A)(DP
16、TR),写外部RAM/IO MOVX Ri,A;(A)(Ri),写外部RAM/IOMOV的后面加“X”,表示访问的是片外RAM或I/O口,在执行前两条指令,(P3.7)有效;后两条指令,(P3.6)有效。采用16位的 DPTR间接寻址,可寻址整个64KB片外数据存储器空间,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)进行间接寻址,可寻址片外256个单元的数据存储器。8位地址由P0口输出,锁存在地址锁存器中,然后P0口再作为8位数据口。,26,8查表指令共两条,仅有的两条读程序存储器中表格数据的指令。由于程序存储器只读不写,因此传送为单向,从程序存储
17、器中读出数据到A中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。(1)MOVCA,A+PC以PC作为基址寄存器,A的内容(无符号数)和PC的当前值(下一条指令的起始地址)相加后得到一个新的16位地址,把该地址的内容送到A。,27,例如:当(A)=30H时,执行地址1000H处的指令1000H:MOVCA,A+PC该指令占用一个字节,下一条指令的地址为1001H,(PC)=1001H再加上A中的30H,得1031H,结果把程序存储器中1031H的内容送入累加器A。优点:不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点:表格只能存放在该条查表指令所在地址的+25
18、6个单元之内,表格大小受到限制,且表格只能被一段程序所用。,28,(2)MOVC A,A+DPTRDPTR为基址寄存器,A的内容(无符号数)和DPTR的内容相加得到一个16位地址,把由该地址指定的程序存储器单元的内容送到累加器A。例如:(DPTR)=8100H,(A)=40H,执行指令 MOVC A,A+DPTR将程序存储器中8140H单元内容送入A中。,本指令执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64KB程序存储器空间中任意安排,一个表格可以为各个程序块公用。两条指令的助记符都是在MOV的后面加“C”,是CODE的
19、第一个字母,即表示程序存储器中的代码。执行上述两条指令时,单片机的 引脚信号(程序存储器读)有效,这一点读者要牢记。,30,9字节交换指令XCH A,Rn;(A)(Rn),n=07XCH A,direct;(A)(direct)XCH A,Ri;(A)(Ri),i=0,1这组指令的功能是将累加器A的内容和源操作数的内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等方式。例如:(A)=80H,(R7)=08H,(40H)=F0H(R0)=30H,(30H)=0FH执行下列指令:XCHA,R7;(A)(R7)XCHA,40H;(A)(40H)XCHA,R0;(A)(R0)结果为(A)=
20、0FH,(R7)=80H,(40H)=08H,(30H)=F0H。,31,10半字节交换指令XCHD A,Ri累加器的低4位与内部RAM低4位交换。例如:(R0)=60H,(60H)=3EH,(A)=59H,执行完“XCHD A,R0”指令,则(A)=5EH,(60H)=39H。,3.4.2 算术运算类指令指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较强。算术运算指令都是针对8位二进制无符号数的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。算术运算的结果将使PSW的进位(Cy)、辅助进位(Ac)、溢出(OV)3种标志位置1或清0。但增1和减1指令不
21、影响这些标志。,33,1加法指令4条指令:ADD A,Rn;(A)+(Rn)A,n=07ADD A,direct;(A)+(direct)A ADD A,Ri;(A)+(Ri)A,i=0,1ADD A,#data;(A)+#dataA8位加法指令的一个加数总是来自累加器A,而另一个加数可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到。加的结果总是放在累加器A中。使用本指令时,要注意累加器A中的运算结果对各个标志位的影响:(1)如果位7有进位,则进位标志Cy置1,否则Cy清0。,34,(2)如果位3有进位,辅助进位标志Ac置1,否则Ac(Ac为PSW寄存器中的一位)清0。
22、(3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有进位,则溢出标志位OV置1,否则OV清0。溢出标志位OV的状态,只有带符号数加法运算时才有意义。当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围(-128+127),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。,35,【例3-1】(A)=53H,(R0)=FCH,执行指令ADDA,R0运算式为 结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中1的位数为奇数)。注意:在上面的运算中,由于位6和位7同时有进位,所以标志位OV=0。,36,【例3-2】(A)=
23、85H,(R0)=20H,(20H)=AFH,执行指令ADD A,R0 运算式为 结果:(A)=34H,Cy=1,Ac=1,OV=1,P=1。注意:由于位7有进位,而位6无进位,所以标志位OV=1。,37,2带进位加法指令 特点是进位标志位Cy参加运算,三个数相加。4条指令:ADDC A,Rn;(A)+(Rn)+CA,n=07ADDC A,direct;(A)+(direct)+CAADDC A,Ri;(A)+(Ri)+CA,i=0,1ADDC A,#data;(A)+#data+CA如果位7有进位,则进位标志Cy置“1”,否则Cy清“0”;如果位3有进位,则辅助进位标志Ac置“1”,否则Ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 陈燕 指令系统
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5937864.html