收藏 分享(赏)

单片机寻址方式,指令系统教程.ppt

上传人:w89153 文档编号:4612132 上传时间:2019-01-04 格式:PPT 页数:20 大小:572KB
下载 相关 举报
单片机寻址方式,指令系统教程.ppt_第1页
第1页 / 共20页
单片机寻址方式,指令系统教程.ppt_第2页
第2页 / 共20页
单片机寻址方式,指令系统教程.ppt_第3页
第3页 / 共20页
单片机寻址方式,指令系统教程.ppt_第4页
第4页 / 共20页
单片机寻址方式,指令系统教程.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、第三章 指令系统,硅谷芯微技术贡献 网址:www.threeway.cc,本章重点:, 理解指令的6种寻址方式 理解各种类型指令的用法 能读懂简单的程序,3.1 MCS51指令概述,3.1.1 机器指令:用二进制编码表示的,能够被计算机直接识别和执行的语言称为机器语 言,对应的指令成为机器指令。机器指令不需要翻译就可直接运行,是计算 机发展初期使用的。,3.1.2 汇编指令:机器语言的繁杂和不便操作直接催生了汇编指令。汇编语言用助记符、 符号和数字来表示机器指令。它与机器语言指令一一对应,便于理解和记忆。 但是汇编语言并不能直接被机器识别,因此汇编程序在编写好后必须被翻译 成相应的机器语言才能

2、执行,而这些工作是由编译器完成的。,3.1.3 汇编伪指令伪指令和汇编指令属于同一范畴,属于一种符号语言。不同之处在于,汇编指令都有其对应的机器码,而伪指令没有对应的机器码,伪指令的作用在于控制编译器的编译过程。也就是说,汇编指令的实质是对应的机器指令,程序运行过程中才会被执行。而伪指令的实质是编译过程控制语句,编译完成后伪指令就完成使命了,在程序烧录进单片机实际运行过程中并没有伪指令的参与。,3.2 指令的语句结构 MCS-51汇编语言的完整语句结构如图3.1,包括标号、操作码、操作数和注释4部分。其中,操作码和操作数是必选部分,而标号和注释(方括号括起来的部分)是可选项目。,寻址方式,是指

3、指令语句中操作数的解析方式。即,操作数按照什么规则来存取。,3.3 MCS51的6中寻址方式,3.3.1 立即寻址 又叫立即数寻址,是指在指令中直接给出参与运算的数字。为了区别于作为地址的数字,把这种直接使用的数字称为立即数,并在其前面加上#以区别于作为地址的数字。因为立即数本质上即是一个数字,因此其只能作为源操作数而不能作为目的操作数(目的操作数需要的是一个地址)。如: MOV A , #30H ;把#30H复制到A中,3.3.2 直接寻址 操作数来源于直接地址。所谓直接地址,是指RAM区域的一个字 节型地址空间。大多数直接寻址会使用用户RAM区(30H7FH),当位 寻址区(20H2FH)

4、被按字节寻址时,也属于直接寻址范畴。直接寻 址可作为源操作数或目的操作数,当其用作源操作数时,实际作为操 作数的是该地址内存储的数据。如 MOV 30H , #40H MOV A , 30H 第二句中源操作数的30H即为直接寻址,此时实际使用的操作数其 实是存储于30H中的#40H,所以程序执行后A中实际值为#40H。 直接寻址作为目的操作数时,实际指示的是这个地址本身(而不是 地址内的数),因为目的操作数的任务是存储操作后的结果数据,因此 需要的是一个地址(虽然命名为操作数,但实际叫“存储地址”更加确 切)。直接寻址作为目的操作数的一个实例是上面第一句语句中的30H。,3.3.3 寄存器寻址

5、 也叫寄存器直接寻址(以明确区别于寄存器间接寻址),此处的 寄存器指的是工作寄存器R0R7。无论作为源操作数还是目的操作 数,寄存器寻址的特点和直接寻址均很类似。实际上,在内部结构一 节我们已经知道,工作寄存器区和用户RAM区同属于RAM区,在逻辑上 本来就是同级的。 MOV A,R0,3.3.4 寄存器间接寻址 寄存器间接寻址用于源操作数时,语句中的寄存器中取出的不再是操作数,而是操作数的地址,真正的操作数需要用这个地址去寻址RAM区才能得到。同样,寄存器间接寻址用于目的操作数时,实际目的地址不再是语句中的寄存器,而是该寄存器中内容对应的RAM区地址。如图3.2所示,R0寄存器内装入#34H

6、,在执行完语句MOV A,R0后,实际取到的操作数是RAM区域的34H地址处的地址(#56H)。符号是间接寻址的标志符,不能省略或者混用。此外,间接寻址寄存器只能使用工作寄存器区的R0或R1,其余R2R7不可使用。(4个区中的R0和R1均可),3.3.5 基址+变址寻址 首先,基址+变址寻址也属于一种间接寻址,即不是直接给出操作数,而是给出操作数的地址。与寄存器间接寻址(操作数地址由工作寄存器给出)不同,基址+变址寻址的操作数地址由两部分给出,分别成为基地址和变地址。典型的基址+变址寻址的实例如: MOVC A,A+DPTR其中,DPTR数据指针内指出基地址,A中存放变地址,A+DPTR共同指

7、出了真实操作数的地址。,3.3.6 位寻址由于51单片机内部包含一个位处理器,因此具有位寻址能力。可以位操作的内容有RAM的位寻址区(20H2FH)、可位寻址的SFR等。MCS-51的指令系统中有专门设置的位寻址指令用于按位操作这些内容。,3.4 常用符号,Rn: 工作寄存器中的寄存器R0、R1R7之一, Ri: 工作寄存器中的寄存器R0或R1 #data: 8位立即数 #data16:16位立即数 direct: 片内RAM或SFR的地址(8位) : 间接寻址寄存器 Bit: 片内RAM或SFR的位地址 addr11: 11位目的地址 addr16: 16位目的地址 rel: 补码形式的8位

8、地址偏移量。偏移范围为-128127 /: 位操作指令中,该位求反后参与操作,不影响该位 X: 片内RAM的直接地址或寄存器 (X): 相应地址单元中的内容 : 箭头左边的内容送入箭头右边的单元内,3.5 指令分类,以下分数据传送类、算术运算类、逻辑运算与移位类、控制转移类 、布尔操作类共5个大类来详细讲解MCS-51的指令系统: 3.5.1.数据传送类助记符:MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP MOV: 将后面的立即数(地址中的数据)放到前面的地址(寄存器)中。MOV R0,R1MOVX:用于片外寻址,由于使用外部存储器技术已经基本被淘汰,在此就不做过多

9、讲解。MOVC:主要用于查表中,是将ROM中的数取出。本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。MOV DPTR,#T_tabMOV A,R0 MOVC A,A+DPTR . T_tab:DB 0,1,4,9,16,25,XCH:用于两个字节型变量互相交换数据。 XCHD:用于两个字节型变量互相交换低4位数据(高4位保持不变)。 SWAP A:指令,用于将A的高4位和低4位互相交换。 PUSH、POP:堆栈操作指令,分别为压栈和弹栈操作。这两句经常用来在进入中断服务程序时保存ACC和PSW,以保证主程序中的ACC和PSW不会被中断服务程序破坏掉。注意压栈和出栈时,先压

10、后出,后压先出。 总结:数据传送类指令结构简单、容易理解,关键在于熟练掌握并应用于各种寻址方式。,3.5.2.算术运算类算术运算主要对8位无符号数;也可用于带符号数运算。包括:加、减、乘、除、加1、减1运算指令影响PSW有关位。,助记符:ADD ADDC INC MUL DASUBB DEC DIVADD: 前后两数相加,和放入前面寄存器。影响进位标志位C。ADDC:前后两数相加再加上进位标志位C的值,和放入前面寄存器。 ADDC往往和ADD配合使用,完成多字节加法。结果对C有影响。INC: 对地址或者寄存器里面的数据进行加一。不影响进位标志位C。SUBB: 前后两数想减再减去C的值,差放入前

11、面寄存器,同ADDC,结果对C有影响。DEC: 对地址或者寄存器里面的数据进行减一。不影响进位标志位。MUL AB:AB两数相乘,积的低八位放入A中,高八位放入B中。DIV AB:AB两数相除,商放入A中,余数放入B中。DA A :十进制调整,可以看成对十六进制数进行十进制运算。如下: MOV A,#49H ;A=49HADD A,#1 ;加一DA A ;A=50H,3.5.3 逻辑运算类,助记符:ANL ORL CPL CLRRR RL RRC RLCANL:前后两数按位相与,结果放入前面寄存器。ORL:前后两数按位相或,结果放入前面寄存器。CPL:对累加器A(bit位地址)数据按位进行取反

12、。CLR:对累加器A(bit位地址)中数据清零。RR: 循环右移。 RRC:带C循环右移。RL: 循环左移。 RLC:带C循环左移。,助记符:LJMP AJMP JMP SJMPJZ JC JBJNZ JNC INBLCALL ACALL RET RETICJNE DJNZ LJMP:无条件跳转,寻址范围64k。 AJMP:无条件跳转,寻址范围2k。 JMP:散转,跳转地址由A+DPTR决定。 SJMP:相对跳转,范围上下128字节。 JZ:A中数据为0跳转,不为0向下执行。 JNZ:与JZ相反。 JC、JB:C、bit位为0向下执行,不为0跳转。JNC、JNB:与JC、JB相反。 LCALL

13、、ACAlL:子程序调用。前者调用范围64k,后者2K。 RET、RETI:前者,子程序返回,与LCALL、ACALL配合使用。后者只用于中断返回。 CJNE:两数相比较相等则向下执行,不等则跳转。同时前面数大于后面数,C=0。后面数大于前面数,C=1。 DJNZ:该数减一是否为0,为零则向下执行,不为0则跳转。 CJNE和DJNZ常用来实现循环程序结构,即是两种最典型的循环结构。,3.5.4 控制转移类,3.5.5.布尔操作类(位操作),助记符:MOV CLR CPL SETBANL ORL JB(JNB) JC(JNC)MOV :对位进行赋值。 CLR : 对该位进行清零。 CPL : 对

14、该位进行取反。 SETB:对该位置1。 ANL: 相与。 ORL: 相或。,3.5.6.伪指令,助记符:ORG CSEG DB EQUEND DSEG DW BIT,ORG伪指令用于指定该指令语句后一段语句生成的机器码在ROM内存储的起始点,每条ORG指令的作用范围为本条语句后面的一条指令开始到下一个ORG指令出现为止。END伪指令为汇编程序结束标志,编译器将无视END后的指令语句。DB、DW伪指令用于在ROM中开辟一些数值区域,DB开辟的数值区域以字节(8bit)为单位,DW开辟的数值区域以双字节(16bit)为单位。EQU指令和DATA指令均用于为内部地址分配一个符号名。不同之处在于:DATA伪指令只能为内部RAM区的一个地址设设置符号名,而EQU作用范围更广。BIT伪指令用于在RAM的位寻址区定义一个位变量,也可以理解为:BIT伪指令为位寻址区的一个位地址分配一个别名。CSEG、DSEG是段定义伪指令。CSEG用于定义一个代码段,DSEG用于指定一个数据段。,将指令练习题在keil编译软件上完成。,3.6 课后练习,谢谢大家,硅谷芯微 技术贡献,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报