以累加器为目的操作数的指令

MOV A,Rn

MOV

A,direct

MOV

A,@Ri

MOV A,#data

第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。

下面我们通过一些例子加以说明:

MOV A,R1

;将工作寄存器R1中的值送入A,R1中的值保持不变。

MOV A,30H

;将内存30H单元中的值送入A,30H单元中的值保持不变。

MOV A,@R1

;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送

入A中。

MOV A,#34H

;将立即数34H送入A中,执行完本条指令后,A中的值是34H。

以寄存器Rn为目的操作的指令

MOV

Rn,A

MOV Rn,direct

MOV

Rn,#data

这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

以直接地址为目的操作数的指令

MOV direct,A 例: MOV

20H,A

MOV direct,Rn MOV

20H,R1

MOV direct1,direct2 MOV

20H,30H

MOV direct,@Ri MOV

20H,@R1

MOV direct,#data MOV

20H,#34H

以间接地址为目的操作数的指令

MOV @Ri,A 例:MOV

@R0,A

MOV @Ri,direct MOV

@R1,20H

MOV @Ri,#data MOV

@R0,#34H

十六位数的传递指令

MOV DPTR,#data16

8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH(083H),低8位送入DPL(082H)。例:MOV

DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOV

DPH,#35H,MOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。

累加器A与片外RAM之间的数据传递类指令

MOVX

A,@Ri

MOVX

@Ri,A

MOVX #9;

A,@DPTR

MOVX

@DPTR,A

说明:

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

2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只提供低8位地址。因为有时扩展的外部RAM的数量比较少,少于或等于256个,就只需要提供8位地址就够了。

3)使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。

例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。

MOV DPTR,#0100H

MOVX

A,@DPTR

MOV

DPTR,#0200H

MOVX

@DPTR,A

程序存储器向累加器A传送指令

MOVC

A,@A+DPTR

本指令是将ROM中的数送入A中。本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格(类似C语言中的指针)

说明:

此条指令引出一个新的寻址方法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。

1)查找到的结果被放在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这句话了,我们

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

c51单片机汇编语言指令,51单片机汇编指令详解相关推荐

  1. C语言sfr指令,51单片机的指令和sfr汇总.pdf

    51单片机的指令和sfr汇总 51 单片机编程备忘录 一.指令 51 系列的指令说复杂也不复杂,说简单吧,也比较繁琐讨厌.总体上,可以分为7 个大类,如下表. 序号 大类 子类 说明 1 辅助 伪指令 ...

  2. C51汇编语言寻址方式,单片机学习:51单片机寻址方式详解

    原标题:单片机学习:51单片机寻址方式详解 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8 ...

  3. c51单片机的语言,51单片机,stm32,arduino都是用什么语言进行编程的?

    51单片机,STM32单片机用汇编或者C语言,现在基本都用C语言编程,Arduino有自己的编程环境,用户也是用C语言编程. 51单片机的编程 51单片机进入中国比较早,在早前用汇编编程比较多,我在上 ...

  4. 单片机位寻址举例_单片机学习:51单片机寻址方式详解

    51单片机是对所有兼容Intel 8031指令系统的单片机的统称.该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8031单片机取得了长足的发展,成为了应用最广 ...

  5. 从51单片机白痴到51单片机高手的快速成长

    从51单片机白痴到51单片机高手的快速成长 推荐一个不错的51单片机学习视频教程(高清晰版本)电驴下载   也可以用迅雷下载 飞龙教程------51单片机 需要更多单片信息请与我联系 飞龙QQ:90 ...

  6. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

  7. 51单片机串口通信发送以及接收代码详解2

    #include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...

  8. 单片机-bmp280大气压强与温度传感器使用详解

    单片机-bmp280大气压强与温度传感器使用详解" 转载: https://blog.csdn.net/sunshinebooming/article/details/79637822 最近 ...

  9. c语言 定时器作用,单片机定时器的作用及使用方法详解

    单片机定时器的作用及使用方法详解 单片机定时器在单片机的功能是很重要的,它一般被用作定时功能,来做定时检测.定时响应和定时控制,并且可以产生毫秒宽的脉冲信号来驱动步进电机.计时和计数的最终功能是通过计 ...

  10. AT89C51单片机流水灯c语言程序及详解(扫盲教程)

    AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...

最新文章

  1. AI大师张钹领衔,清华AI研究院推出知识计算开放平台
  2. ccls提示找不到文件
  3. Linux常用指令收集
  4. SuperSocket源码解析之开篇 (转)
  5. 【Step1】【二分图匹配】poj 1274-The Perfect Stall
  6. 轻轻一扫立刻扣款,付款码技术原理大揭秘 | 原力计划
  7. Prototype库终于有了文档了
  8. 凯立德地图导航2020年最新版_曾是导航领域“领头羊”的凯立德,如今为何岌岌可危?...
  9. Java集合系列总结
  10. 魔兽世界模型文件.m2 在D3D下的渲染
  11. c安卓开发视频教程!我把所有Android第三方库整理成了PDF,醍醐灌顶!
  12. Linux下ppp拨号+电信3G模块
  13. vue的App.vue
  14. element实现form表单动态添加email效果
  15. python 求x的 n次方
  16. SecurityContextHolder.getContext().getAuthentication()正常请求有时候获取authentioncation为空异常问题
  17. 医院医生护士都不愿说的医学小常识,我终于查齐了。留着以后自己学习。什么都有...
  18. mysql 慢日志 逻辑读_运维日记| MySQLOracle深度解析之一:逻辑读
  19. 像搭积木一样建设的校园网
  20. Struts2自定义类型转换器

热门文章

  1. arping命令解析
  2. Matlab 2010b再次打开安装问题
  3. Mac 配置MySQL环境变量
  4. PS制作一寸带白框的证件照
  5. 前端js使用jszip实现文件压缩功能
  6. 五年高考三年模拟暗部软件库_BIM软件-关于Lumion的这些,你真的了解了吗?
  7. CCNA考试题库中英文翻译版及答案12
  8. dsf5.0 element ui表单相关验证
  9. 遥感原理与应用【Ⅱ】
  10. GET 和 POST 的区别