单片机信息网:深圳市今科电子有限公司
网站地图 RSS订阅
高级搜索 收藏本站
会员中心 欢迎投稿
首页 | 业界动态 | 解决方案 | 技术文献 | 下载中心 | 单片机学习 | 单片机原理 | 单片机编程 | 单片机设计 | 单片机开发 | 技术专题 | 单片机论坛 |单片机博客| 联系我们
单片机新闻 | 单片机学习 | 单片机编程 | 单片机设计 | 单片机开发 | 单片机原理 | 单片机解密 | 芯片解密 | IC解密 | 单片机方案 | 51单片机 | AVR单片机 | PIC单片机
单片机程序实例大全 | 潜入式系统 | PCB设计 | 单片机资料下载 | 工具/软件下载 | 技术经验分享 | 单片机技术人生 | IC资料下载 | 数字电路 | 模拟电路 | 单片机空间
当前位置:主页>单片机学习>51系列单片机>文章内容
第二十三课:数据传送类指令分析
来源:单片机信息网 作者: 发布时间:2008-03-10 阅读次数: 【大 中 小】【收藏本文】 【打印

第二十三课:数据传送类指令分析


数据传送类指令的通用格式是:

MOV  <目的操作数>,<源操作数>

源操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址direct、间接地址和立即数;

目的操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址direct和间接地址;

 数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C, AC和OV,但可能会对奇偶标志P有影响。

[1]. 以累加器A为目的操作数类指令(4条)
    这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:

MOV  A,direct     ;(data)→(A) 直接单元地址中的内容送到累加器A,direct是直接地址
MOV  A,#data    ;#data→(A) 立即数送到累加器A中
MOV  A,Rn      ;(Rn)→(A) Rn中的内容送到累加器A中,Rn=R1-R7
MOV  A,@Ri     ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A,Ri=R0或R1

下面举个例子跟大家说明:
MOV  A,R1 ;将工作寄存器R1中的值送入到累加器A中,R1中的值保持不变。
MOV  A,50H;将内存50H单元中的值送入到累加器A中,50H单元中的值保持不变。
MOV  A,@R1;先看R1中是什么值,把这个值当做地址,并将这个地址单元中的值送入累加器A中,前面我们已学过,这是寄存器间接寻址方式。

[2]. 以寄存器Rn为目的操作数的指令(3条)
    这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中,源操作数不变。有直接、立即和寄存器寻址方式:

MOV  Rn,data     ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中
MOV  Rn,#data    ;#data→(Rn) 立即数直接送到寄存器Rn中
MOV  Rn,A        ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中

[3]. 以直接地址为目的操作数的指令(5条)
    这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:

MOV  data,data   ;(data)→(data) 直接地址单元中的内容送到直接地址单元
MOV  data,#data ;#data→(data) 立即数送到直接地址单元
MOV  data,A     ;(A)→(data) 累加器A中的内容送到直接地址单元
MOV  data,Rn    ;(Rn)→(data) 寄存器Rn中的内容送到直接地址单元
MOV  data,@Ri   ;((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元

试比较一下MOV  50H,#60H与MOV  50H,60H的区别

[4]. 以间接地址为目的操作数的指令(3条)
    这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:

MOV  @Ri,data    ;(data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元
MOV  @Ri,#data   ;#data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元
MOV  @Ri,A       ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元

试比较一下MOV R0,20H与MOV  @R0,20H的区别

[5]. 查表指令(2条)
    这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:

MOVC  A,@A+DPTR   ;((A))+(DPTR)→(A) 表格地址单元中的内容送到累加器A中
MOVC  A,@A+PC     ;((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的内容送到累加器A中

本指令是将ROM的数据送入A中,本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。
说明:
1、此条指令引出了一个特殊的寻址方式,即变址寻址,在上节课时我们已进行过讲解,本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起来,就成为要查找单元的地址。
2、查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。
例:有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)
      MOV  DPTR,#TABLE
      MOV  A,R0
      MOVC A,@A+DPTR
TABLE:DB   0,1,4,9,16,25
设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也可以类推
标号的真实含义:从这个地方也可以看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了0,1,4, 9,16,25这几个数据在ROM中存放的起点位置。我们经常看到的指令,如LCALL DELAY指令中,DELAY则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。
可以通过以下的例子再来看看标号的含义:
MOV  DPTR,#100H
MOV  A,R0
MOVC A,@A+DPTR
.....
ORG  0100H
DB   0,1,4,9,16,25
如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。这样应看明白了吧?
那么为什么不这样写程序,要用标号呢?不是增加疑惑吗?
如果这样写程序的话,在写程序时,我们就必须确定这张表格在ROM中的具体的位置,如果写完程序后,又想在这段程序前插入一段程序,那么这张表格的位置就又要改变了,要改为ORG  100H这句话了,我们是经常需要修改程序的,那么麻烦,所以就用标号来替代,只要一编译程序,位置就自动发生变化,我们把这个麻烦的事交给计算机去做了。

[6]. 累加器A与片外数据存储器RAM传送指令(4条)
    这4条指令的作用是累加器A与片外RAM间的数据传送。使用寄存器寻址方式:

MOVX  @DPTR,A    ;(A)→((DPTR)) 累加器中的内容送到数据指针指向片外RAM地址中
MOVX  A, @DPTR   ;((DPTR))→(A) 数据指针指向片外RAM地址中的内容送到累加器A中
MOVX  A, @Ri     ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的内容送到累加器A中
MOVX  @Ri,A      ;(A)→((Ri)) 累加器中的内容送到寄存器Ri指向片外RAM地址中

说明:
1、在89C51中,与外部存储器RAM打交道的只可以是累加器A,所有需要送入外部RAM的数据必须要通过A送出去。而所有要读入外部RAM中的数据也必需要通过A读入。在此我们可以看出外部RAM的区别了。
内部RAM间可以直接进行数据传递,而外部则不行。比如,要将外部RAM中某单元(设为110H单元的数据)送入另外一个单元(设为200H单元),也必须要先将110H单元中的内容读入A,然后再送入200H单元中去。

2、要读写外部的RAM,当然也必须要先知道RAM的地址,在后两条指令中,地址是被地址放在DPTR中的,而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只能提供低8位地址,因为有时扩展的外部RAM的数量比较少,少于或等于256个,就只需提供8位地址就足够了。请大家再复习下我们前面《51单片机的寻址方式》这节课。

3、使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。
例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。
    MOV  DPTR,#0100H
    MOVX A,@DPTR
    MOV  DPTR,#0200H
    MOVX @DPTR,A


[7]. 堆栈操作类指令(2条)
    这4 类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。

PUSH  data   ;(SP)+1→(SP),(data)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中
POP  data    ;(SP)→(data)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作

第一条指令称为推入,就是将direct中的内容送入堆栈中,第二条指令称为弹出,就是将堆栈中的内容送回到direct中,推入指令的执行过程是:首先将P中的值加1,然后把SP中的值当做地址,将direct中的值送入以SP中的值为地址的RAM单元中去。
例:
MOV  SP,#5FH
MOV  A,#100
MOV  B,#20
PUSH ACC
PUSH B
执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元中的值就是100,同样执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后61H单元中的值变为20。
POP指令的执行也是这样的,首先将SP中的值做为地址,并将此地址中的数送到POP指令的那个direct中,然后SP减1。
接上例:
POP  B
POP  ACC
则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后SP减 1,因此本条指令执行完后,SP的值变为60H,然后搪行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。
这有什么意义呢?ACC中的值本来就是100,B中的值本来就是20,是的,在本例中,的确没有意义,但在实际工作中,则在PUSH B后往事要执行其它的指令,而且这些指令会把A中的值,B中的值改掉,所以在程序结束,如果我们要把A和B中的值恢复原值,那么这些指令就没有意义了。
还有一个问题,如果我们不用堆栈,比如说在PUSH  ACC指令处用MOV 60H,A在PUSH  B处用指令MOV  61H,B,然后用MOV  A,60H,MOV  B,61H来替代两处POP指令,不也是一样吗?是的,从结果上看是一样的,但从过程看是不一样的,PUSH和POP指令都是单字节,单周期指令,而 MOV指令则是双字节,双周期指令,更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,而我们在编写子程序,需要保存数据时,通常不采用后面的方法,而是用堆栈的方法来实现。
例:写出以下程序的运行结果
MOV  30H,#12
MOV  31H,#23
PUSH 30H
PUSH 31H
POP  30H
POP  31H
 结果是30H中的值变为23,而31H中的值则变为12。也就是两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反,才能保证数据被送回原位,否则就出错了。
另外特别注意事项:
进行堆栈操作时,我们不能:
PUSH  R0
PUSH  R1
而只能:
PUSH  00H
PUSH  01H
POP也是一样。

[8]. 交换指令(5条)

共2页: 上一页 1 [2] 下一页

上一篇:51单片机的寻址方式   下一篇:第二十四课:算术运算类指令分析

标签:数据传送类 指令 分析 点此搜索本站更多相关信息...搜索更多相关内容..

您可能还感兴趣的内容: 深圳今科电子单片机解密、IC解密服务 今科电子单解机、IC解密业务是怎样的流程?

此页的访问者还关注了下面这些相关资讯


·第二十四课:算术运算类指令分析
·51单片机的寻址方式
·第二十五课:逻辑运算及移位指令分析
·汇编程序的基本结构
·第二十六课:控制转移类指令分析
·汇编语言及汇编过程
·第二十七课:布尔变量操作指令分析
·汇编语言基础
·51单片机的延时及时序分析
·第二十八节:伪指令分析
·基础实验一:一个外部中断实验
·51单片机执行指令的过程
·51单片机的复位
·51单片机的中断系统
·第十三课:51单片机CPU的内部结构
·第十一课:存储器的存储原理
·第十课:编码及译码器工作原理
·第九课:8051单片机的存储器结构
·第八课:8051单片机I/O引脚工作原理
·第七课:51单片机的引脚
·第六课:51单片机的结构及其组成
·第五课:常用逻辑电路
·第四课:计算机中数的表示及运算
·第三课:单片机相关常用名词解释
·第二课:MCS-51单片机简述
·第一课:初识单片机
·MCS51单片机教程 前 言
·基于KEIL 51的单片机开发系统设计
·AT89C2051单片机与MT8880接口设计
·单片机C语言编程应注意的若干问题
·51单片机的串行口扩展方法
·单片机应用产品的PROTEUS设计与仿真
·8051单片机中DPTR的扩展设计
·51单片机整数二一十进制转换的快速算法
·51单片机模拟SPI总线的方法
·51单片机串行通讯中波特率的自动检测
·单片机RTOS随想曲
·单片机键盘输入编程
·51单片机I/O口使用经验
·在C51中变量的空间分配几个方法


版权声明:
( 更多版权详述 | 隐私政策 )

1、凡本网注明“来源:单片机信息网”或“单片机论坛”的文字、图片和音视频作品,版权均属深圳市今科电子有限公司所有,任何媒体、网站或个人未经本网书面授权不得转载、链接、转贴或以其他方式使用;已经本网书面授权的,在使用时必须注明“来源:单片机信息网”或“单片机论坛””。
2、本网未注明“来源:单片机信息网”或“单片机论坛”的作品均为转载稿,本网转载稿件只为传递更多信息,并不意味着认同其观点或真实性。如其他媒体、网站或个人转载使用,必须保留本网注明的“稿件来源”,并自负法律责任。
3、对于单片机信息网通过单片机论坛发布的作品,本网受著作权人委托禁止任何媒体、网站或个人在未经书面授权的情况下转载使用。
4、为维护自身权益、尊重作者版权,单片机信息网特委托深圳市律师协会为本网站法律顾问。对于违反本声明的,单片机信息网律师将依法追究其责任;对于刊载作品涉及版权等问题的,请作者在两周内与网站管理或张朝阳律师联系。
责任编辑:今科电子
双击复制本文网址,发送给您QQ/MSN上的朋友:
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
§最新评论
今科热门解密系列
·PIC芯片DSP系列单片机解密PIC芯
·Freescale单片机解密飞思卡尔芯
·飞思卡尔(Freescale)单片机解密/
·pic18f系列单片机解密
·三星(Samsung)系列单片机极速解
·飞林Feeling芯片系列MCU单片机/I
·MICROCHIP微芯(PIC)系列单片机/M
·单片机破解的常用方法及应对策略
·IC卡预付费电度表的安全及防范技
·单片机解密 单片机解密方法 单片
·PHILIPS系列单片机解密
·独家STC单片机解密
·我对红外遥控信号的解码思路
·51系列单片机解密(数分钟搞定)
·芯片解密业务流程介绍
·单片机解密后提供什么文件?
·单片机解密后为何要提供厂家的专
·芯片是如何被解密的?
·SST系列MCU单片机/IC/芯片解密
·INTEL系列单片机/IC/芯片解密
·ISSI系列MCU单片机IC破解芯片解
·ZILOG系列MCU单片机IC破解芯片解
·MOTOROLA系列MCU单片机IC破解芯
·LG(HYUNDAI系列MCU单片机/IC破
·MCPLD/EPLD系列MCU单片机IC破解
·新茂系列MCU单片机IC破解芯片解
·PHILIPS系列MCU单片机IC破解芯片
·MXIC系列MCU单片机IC破解芯片解
·(ATMEL)51系列MCU单片机IC破解芯
·华邦芯片系列MCU单片机/IC/芯片
·(MICROCHIP)微芯(PIC)系列MCU单
·CYPRESS系列MCU单片机IC破解芯芯
·Sinowealih系列MCU单片机IC破解
·Tenx系列MCU单片机IC破解芯片解
·松翰(SONIX)系列MCU单片机IC破解
·义隆(EMC)系列MCU单片机IC破解
·合泰(HOLTEK)系列MCU单片机IC破
·麦肯(MDT)系列mcu单片机IC破解芯
·今科单片机解密服务
·单片机程序开发
热点技术文章文献
·51单片机模拟SPI总线的方法
·51单片机汇编指令表
·89S51看门狗功能的使用方法
·单片机键盘输入编程
·P1口八个LED灯做三路流水灯实验
·汇编语言及汇编过程
·C语言中嵌入汇编语言集锦
·用C51实现单片机的中文输入法
·51单片机的寻址方式
·第八课:8051单片机I/O引脚工作原
·用DS18B20构成测温系统
·第五课:常用逻辑电路
·基础实验一:一个外部中断实验
·C8051F与80C51系列单片机的不同
·C51串口输出输入函数
·浅析AT89S51与AT89C51单片机的
·C51中断函数
·51单片机I/O口使用经验
·单片机控制步进电机驱动器工作原
·汇编语言基础
·按键控制灯实验
·dsPIC30F6010单片机的原理及应用
·单片机C语言编程应注意的若干问
·节约单片机端口资源的键盘电路
·51单片机的串行口扩展方法
·c51单片机实用通信协议
·单片机硬件系统设计原则
·51单片机多机同步复位电路
·C51单片机入门教程
·汇编程序的基本结构
今科推荐产品
·51系列单片机解密(数分钟搞定)
·今科单片机解密服务
·单片机程序开发
·小家电(厨卫电器)系列产品
·灯饰控制系列产品
·四键遥控器系列产品
·红外遥控器系列产品
相关技术文献资讯
·第二十四课:算术运算类指令分析
·51单片机的寻址方式
·第二十五课:逻辑运算及移位指令
·汇编程序的基本结构
·第二十六课:控制转移类指令分析
·汇编语言及汇编过程
·第二十七课:布尔变量操作指令分
·汇编语言基础
·51单片机的延时及时序分析
·第二十八节:伪指令分析
·基础实验一:一个外部中断实验
·51单片机执行指令的过程
·51单片机的复位
·51单片机的中断系统
·第十三课:51单片机CPU的内部结构
·第十一课:存储器的存储原理
·第十课:编码及译码器工作原理
·第九课:8051单片机的存储器结构
·第八课:8051单片机I/O引脚工作原
·第七课:51单片机的引脚
·第六课:51单片机的结构及其组成
·第五课:常用逻辑电路
·第四课:计算机中数的表示及运算
·第三课:单片机相关常用名词解释
·第二课:MCS-51单片机简述
论坛最新讨论资讯
芯片解密常见问题
· 什么是单片机?
· 单片机要如何加密?
· 单片机芯片是如何被解密的?
· 单片机解密后提供什么文件?
· 芯片解密为何用专用格式文档?
· 芯片解密是怎样的业务流程?
首页 - 隐私政策 - 版权申明 - 网站地图 - 产品中心 - IC解密中心 - 企业文化 - 代理加盟 - 公司简介 - 人才招聘 - 常见问题 - 我要投稿 - 联系我们 - 返回顶部
[单片机信息网] .© 2006-2009 版权所有,严禁非法复制与建立镜像.运营商:[今科电子] 公司地址:中国.深圳/上海 E-Mail:renbangent#126.com sales#techmcu.com(换#为@)
深圳公司 电话热线:+86 0755-82964200 82964201 82964700 传真:+86 0755-82964432 技术支持:13684994966 业务QQ: 501995683 联系人:黄/陈小姐(工程师) 罗先生(高工)
上海公司 电话热线:+86 021-63062380 15001885509   传真:+86 021-63062380-6   技术支持:15001885509 业务QQ:xxxxxxxx   联系人:郑小姐(业务) 陆工(工程师)
Optimized for 1024x768 to Firefox,Opera and MS-IE6 or higher,Template designed by: Berlin Lee.Web Support[FuAn Network] ICP Record No.:07053756 Webmaster