第3章,指系统.docx

上传人:M****1 文档编号:550830392 上传时间:2023-09-05 格式:DOCX 页数:21 大小:799.49KB
返回 下载 相关 举报
第3章,指系统.docx_第1页
第1页 / 共21页
第3章,指系统.docx_第2页
第2页 / 共21页
第3章,指系统.docx_第3页
第3页 / 共21页
第3章,指系统.docx_第4页
第4页 / 共21页
第3章,指系统.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第3章,指系统.docx》由会员分享,可在线阅读,更多相关《第3章,指系统.docx(21页珍藏版)》请在金锄头文库上搜索。

1、3.1 指令系统概述简明、易掌握、效率较高的指令系统,复杂指令集。按所占字节分,分三种:(1)单字节指令49条;(2)双字节指令45条;(3)三字节指令17条。按执行时间来分,分三种:(1)1个机器周期(12个时钟振荡周期)的指令64条;(2)2个机器周期指令45条;(3)4个机器周期乘、除指令。 12MHz晶振,每个机器周期为1ms。AT89S51一大特点是在硬件结构中有一个位处理机,一个处理位变量的指令子集。3.2 指令格式 指令格式:指令的表示方法。 指令通常由两部分组成:操作码和操作数。 操作码指令进行什么操作。操作数指令操作的对象。可能是一具体数据,也可能是指出到哪里取得数据的地址或

2、符号。指令长度不同,格式也就不同。 (1)单字节指令:操作码和操作数同在一个字节中。(2)双字节指令:一个字节为操作码,另一个字节是操作数。 (3)三字节指令:操作码占一个字节,操作数占二个字节。3.3 指令系统的寻址方式寻址方式在指令中说明操作数所在地址的方法。 一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂。 寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间内快速地找到指定的地址单元。 下面介绍指令系统7种寻址方式。 1寄存器寻址方式指令中的操作数为某一寄存器的内容。例如:MOVA,Rn ;(Rn)A,n =07 把Rn中的源操作数送入到累加器A中。由于指

3、令指定了从寄存器Rn中取得源操作数,所以称为寄存器寻址方式。本寻址方式的寻址范围:(1)4组通用工作寄存区共32个工作寄存器。但只对当前工作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只能是R0R7。(2)部分特殊功能寄存器,如累加器A、寄存器B以及数据指针寄存器DPTR等。 2直接寻址方式指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用“direct”表示。 例如: MOVA,direct “direct”就是操作数的单元地址。例如: MOVA,40H 表示把内部RAM 40H单元(direct)的内容传送到A。指令中源操作数(右边的操作数)采用的是直

4、接寻址方式。指令中两个操作数都可由直接寻址方式给出。例如: MOVdirect1,direct2 具体指令:MOV 42H,62H 把片内RAM中62H单元的内容送到片内RAM中的42H单元中。 直接寻址是访问片内所有特殊功能寄存器的唯一寻址方式。 3. 寄存器间接寻址方式寄存器中存的是操作数地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。 为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“”。 例如:MOV A,Ri ;i=0或1 其中, Ri的内容为40H,即把内部RAM 40H地址单元中的内容传送给A。4立即数寻址方式直接在指令中给出操

5、作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需在操作数前加前缀标志“#”。 例如: MOV A,#40H 第一个字节是操作码,第二字节是立即数,就是放在程序存储器内的常数。 5基址寄存器加变址寄存器间址寻址方式以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,以两者内容相加形成的16位地址作为目的地址进行寻址。例如指令: MOVCA,A+DPTR 其中,(A)=05H,(DPTR)=0400H,指令执行结果是把程序存储器0405H单元的内容传送给A。本寻址方式的指令有3条:MOVCA,A+DPTR MOVCA,A+PC JMPA,A+DPTR 前两条指令适用于读程序存储器中

6、固定的数据。例如,将固 定的、按一定顺序排列的表格存放在程序存储器中,在程序运行中由A的动态参量来确定读取对应的表格参数。第3条为散转指令,A中内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转。 6相对寻址方式解决程序转移。该寻址是以该转移指令的地址(PC值)加上它的字节数,再加上相对偏移量(rel),形成新的转移目的地址,从而程序转移到该目的地址。转移的目的地址用下式计算: 目的地址=转移指令所在的地址+转移指令字节数+rel 其中,偏移量rel是带符号8位二进制补码数,128+127。 程序转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在128+127之

7、间。 例如, LJMP rel 程序要转移到该指令的PC值加3再加上rel的目的地址处。编写程序时,只需在转移指令中直接写要转向的地址标号。 例如: LJMP LOOP “LOOP” 为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工汇编时,偏移量的值由手工计算。7位寻址方式 对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作。 位地址一般以直接位地址给出,位地址符号为“bit”。 例如:MOV C,bit 其具体指令: MOV C,40H 把位地址为40H的值送到进位位C。由于AT89S51具有位处理功能,可直接对数据位方便地实现置1、清0、求反、传送、判跳和

8、逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,增强了实时性。 7种寻址方式已介绍完毕。 问题:当一条指令给定后,如何来确定该指令的寻址方式?例如: MOV A,#40H,属于立即数寻址还是寄存器寻址? 要看以哪个操作数作为参照系。 操作数分为源操作数和目的操作数。对于源操作数“#40H”来说,是“立即数寻址”方式,但对目的操作数“A”来说,是属于“寄存器寻址”方式。 一般而言,寻址方式指的是源操作数,所以此例为立即数寻址方式。对指令系统7种寻址方式总结,概括见表3-1。表3-1 7种寻址方式及其寻址空间序号 寻址方式 寻址空间 1 寄存器寻址 R0R7、A、B、C(位)、DPTR等 2

9、 直接寻址 内部128字节RAM、特殊功能寄存器 3 寄存器间接寻址 片内数据存储器、片外数据存储器 4 立即数寻址 程序存储器中的立即数 5 基址寄存器加变址寄存器间 接寻址 读程序存储器固定数据和程序散转 6 相对寻址 程序存储器相对转移 7 位寻址 内部RAM中的可寻址位、SFR中的可寻址位 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)。 direct 直接地址,即8位内部数据存储器单元或特殊功能寄存器的地址。#data 指令中的8位立即数。 #data16 指令中的16位立即数。 rel 偏移量,8位的带符号补码数。 DPTR 数据指针,可用作16位数据存储器单元地址的寄存器。 bit 内部RAM或特殊功能寄存器中的直接寻址位。 C或Cy 进位标志位或位处理机中的累加器。 addr11 11位目的地址。 addr16 16位目的地址。 间接寻址寄存器前缀,如Ri,A+DPTR。 () 表示地址单元或寄存器中的内容。() 表示以单元或寄存器中的内容作为地址间接寻址单元

11、的内容。箭头右边的内容被箭头左边的内容所取代。 3.4.1 数据传送类指令使用最频繁。一般数据传送类指令的助记符为“MOV”,通用格式如下: MOV , 数据传送类指令是把源操作数传送到目的操作数。指令执行之后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属“复制”性质,而不是“搬家”。本类指令不影响标志位:Cy、Ac和OV,但不包括奇偶标志位P。 1以累加器为目的操作数的指令MOVA,Rn; (Rn)A,n =07 MOVA, Ri ; (Ri)A i =0,1 MOVA,direct ; (direct)A MOVA,#data ; #dataA把源操作数内容送累加器A,源

12、操作数有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式,例如:MOVA,R6;(R6)A,寄存器寻址MOVA,R0;(R0)A,间接寻址MOVA,70H ;(70H)A,直接寻址MOVA,#78H;78HA,立即数寻址2以Rn为目的操作数的指令MOV Rn ,A ;(A)Rn ,n =07 MOV Rn ,direct ;(direct)Rn ,n =07 MOV Rn ,#data;#dataRn ,n =07 把源操作数送入当前寄存器区的R0R7中的某一寄存器。3以直接地址direct为目的操作数的指令MOV direct,A ; (A)direct MOV direct,Rn ; (R

13、n)direct,n =07 MOV direct1,direct2 ;(direct2)direct1 MOV direct,Ri ; (Ri)direct,i =0,1 MOV direct,#data ; #datadirect 把源操作数送入直接地址指定的存储单元。direct指的是内部RAM或SFR地址。4以寄存器间接地址为目的操作数的指令MOVRi,A;(A)(Ri), i=0,1 MOVRi,direct ;(direct)(Ri),i=0,1 MOVRi,#data ;#data(Ri), i=0,1 功能是把源操作数内容送入R0或R1指定的存储单元中。516位数传送指令MOV

14、DPTR,#data16;#data16DPTR 功能是把16位立即数送入DPTR,用来设置数据存储器的地址指针。 AT89S51有两个DPTR,通过设置特殊功能寄存器AUXR1中的DPS位来选择。当DPS=1,则指令中的DPTR即为DPTR1,DPTR0被屏蔽,反之亦然。 DPTR为16位的数据指针,分为DPH和DPL。操作十分灵活方便。设有两个DPTR后,就可避免频繁的出入堆栈操作。 对于所有MOV类指令,累加器A是一个特别重要的8位寄存器,CPU对它具有其他寄存器所没有的操作指令。后面将要介绍的加、减、乘、除指令都是以A作为目的操作数。 Rn为所选择的寄存器组中的R0R7,直接地址direct为内部RAM的00H7FH和特殊功能寄存器(地址范围80HFFH) 在间接地址中,用R0或R1作为内部RAM的地址指针,可访问内部RAM的00H7FH共128个单元。6堆栈操作指令内部RAM中设定一个后进先出(LIFO,Last In First Out)的区域,称为

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号