51单片机:8051指令简介

专业课本上包含的指令会比较全面,而在我的这篇博文中不会写的那么全。我只是简单的介绍一些常见的指令,这些指令是我考试内容中必须要掌握的,是我对知识点的一个简单梳理。在开始之前先介绍一些必要的符号意义,这样不至于在指令中看到太过于突兀。

  • Rn 当前寄存器区的寄存器,n的取值可以是0到7,即R0~R7。
  • Ri 当前寄存器区中可以用来间接寻址的寄存器,i的取值为0,1,即R0,R1。
  • direct 直接地址
  • #data 8位立即数
  • #data16 16位立即数
  • DPTR 数据指针
  • @ 间接寻址寄存器的前缀
  • (X) X地址单元的或者寄存器中的内容
  • ((X)) 以X地址单元的或者寄存器中的内容为地址的间接寻址位置的内容

数据传送指令:

传送指令中常用的有MOV,堆栈PUSH\POP操作,累加器与外部数据的传送、查表指令、字节交换。

MOV:

MOV的操作比较好记,也便于理解。根据英语单词move(移动,改变),我们可以知道MOV的作用就是把内容进行转移,至于转移的内容可以是具体的内容,也可以是一个地址,间接实现转移内容。其实不难发现,很多指令根据一些单词很容易记住其作用的,另外汇编语言大小写都可以,根据个人习惯。下面对MOV进行简单介绍:

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

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

MOV A ,Rn ; (Rn) ——>A,把Rn中的内容传给A,寄存器寻址方式
MOV A,@Ri ; ((Ri))——>A,间接寻址方式
MOV A,direct; (direct)——>A,直接寻址方式
例如:MOV A,70H; (70H)——>A ,A中存入地址为70H中的内容
MOV A,#direct; #direct——>A,立即数寻址方式
例如:MOV A,#70H; 70H——>A ,A中的内容为70H

这些指令的目的是把源操作数的内容送到累加器A中,以上四个指令还分别对应着寄存器寻址方式、间接寻址方式、直接寻址方式、立即数寻址方式。

寄存器间接地址为目的操作数的指令

MOV @Ri,A ;(A)——>((Ri))
MOV @Ri,direct ;(direct)——>((Ri))
MOV @Ri,#direct ;#direct——>((Ri))

堆栈操作:

PUSH(进栈指令),首先将栈指针SP加1,然后把内容送到SP所指的地址中

例如:

当(SP)= 60H,(A)= 30H,(B)= 70H,执行下面指令:

PUSH Acc ;(SP) + 1 = 61H ,(A) ——> 61H

PUSH B ;(SP) + 1 = 62H ,(B) ——> 62H

结果:

(61H)= 30H,(62H)= 70H, (SP) = 62H

POP(出栈指令),首先将内容送到SP所指的地址中,然后栈指针SP减1
例如:

当(SP)= 62H,(62H)= 70H,(61H)= 30H时,
执行下面指令:
POP DPH ; ((SP)) = DPH ,SP-1——>SP,DPH=70H
POP DPL ; ((SP)) = DPL ,SP-1——>SP,DPL=30H

结果:

(DPTR)= 7030,(SP) = 60H

累加器A与外部数据存储器传送指令:

MOVX A,@DPTR ;((DPTR))——>A,读取外部存储器中的数据
MOVX @DPTR,A ; (A)——>((DPTR)),把内部数据写入外部

这个地方主要注意区分一下MOV与MOVX,例子的话可以看数据传送片内到片外或者数据传送片外到片内。

查表指令:

这类指令有两条,均是采用基址寄存器加变址寄存器间接寻址方式

  1. MOVC A,@A + PC.指令以PC作为基址寄存器,A中内容与PC中内容相加得到一个新的地址,再把该地址送入A中。
    例如:

当(A) = 30H时,执行1000H处指令
1000H:MOVC A,@A + PC

结果:

把1031H单元的中的内容送入A中,也许会有个疑问,为什么不是1030H单元中的内容送入A中,这是因为这条指令的本身就占了一个单元格,下一条指令的起始地址为1001H,即(PC)= 1001H。

  1. MOVC A,@A + DPTR,该指令以DPTR为基址寄存器。还是以栗子来看怎么运行的:

(DPTR) = 8100H,(A) = 40H,执行指令
MOVC A,@A + DPTR

结果:

把8140H单元内容送入A中。

字节交换指令:

XCH A,Rn;(A)<——>(Rn);

顾名思义,就是把两个不同单元中内容进行交换,完全互换。区别于XCHD A,Rn(半字节交换指令,只进行A中低四位与Rn中高四位互换)。

算术类指令:

加法
ADD A ,B; (A) = (A) + (B) 。
INC A ; 自加1,然后送入A中。
减法
DEC A ; 自减1,然后送入A中。
乘法
MUL AB ; BA = A*B;
除法
DIV AB; A = A/B(商),B = A/B(余数);

逻辑类

ANL : 与逻辑,全1为1,其余为0
ORL :或逻辑,全0为0,其余为1
XRL : 异或逻辑,不同为1,相同为0
RL : 左循环
RR :右循环

跳转类

JNB:内容为0,转移
JB:内容为1,转移
DJNZ:内容减1,不为0转移
CJNZ:比较结果不相等,转移

(参考书籍《单片机原理及应用》)

51单片机:8051指令简介相关推荐

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

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

  2. 51单片机——汇编指令合集

    目录 指令格式 编译语句实例 单片机的寻址方式 立即数(Immediate Constants)寻址方式 直接(Direct Addressing)寻址方式 寄存器(Register Addressi ...

  3. 51单片机汇编指令记忆方法

    虽然现在51单片机一般是用的C语言编程,但是记得当时大学教材还是教的汇编. 本文总结下51单片机的汇编指令,权当是参考,感兴趣的可以了解一下. 学习单片机,除了搞清单片机内部功能.存储空间分配及I/O ...

  4. 51单片机的输入输出简介

    以下是我整理的关于学习51 单片机和使用过程中出现疑问以及32单片机通用IO口的介绍,本人才疏学浅,表达略显粗浅,若有不合理之处,望大家多多指正! 本文参考资料 在采用单片机的I/O口作为输入口或输出 ...

  5. (1)51单片机NOP指令

    提问:什么是NOP指令?干什么用的?单片机程序里执行一条nop指令需要多长时间? (1)一个NOP就是一个机器周期 (2)空指令,延时一个机器周期 (3)这个与单片机型号.指令类型和使用的晶振频率有关 ...

  6. 51单片机(8051系列)最小系统图--内部时钟

    最小系统电路图(无源晶振) 电容的作用 C1,C2:协助晶振起振(一般称为负载电容) 解释: 负载电容的计算公式CL = C1*C2 / (C1+C2) + CS 其中CS为电路板的寄生电容一般取3~ ...

  7. 7-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,用手机TCP调试助手发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8759294.html  如不做任何说明默认最头上的链接为上一篇链接,末尾的链接为下一篇链接 先把源码和资料链接放到这里 链接 ...

  8. 51单片机几种精确延时(包含自动适应主时钟)

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 今天主要介绍软件延时,关于硬件延时,之 ...

  9. 51单片机的几种精确延时

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 今天主要介绍软件延时,关于硬件延时,之 ...

  10. 51单片机,时钟频率,机器周期,与执行指令的时间

    前言 单片机在执行语句时,需要特定的频率或者说"节奏",提供节奏的单元一般有两种:外部晶振以及内部RC震荡.晶振很在开发板上很常见,一般都是8Mhz或者12Mhz的.RC震荡单元我 ...

最新文章

  1. js、jQuery、layer实现弹出层的打开、关闭
  2. MongoDB.Update
  3. 确定Java开发中.jar包的JDK版本
  4. UML建模之时序图(Sequence Diagram)[转]
  5. idea servlet自动配置web.xml_Spring Boot学习04_嵌入式Servlet容器自动配置原理
  6. UPS不间断电源放电时间计算方法
  7. 荣耀鸿蒙价格,荣耀40S秀肌肉,120Hz+双5000万+鸿蒙系统,售价很感人
  8. html语言闪烁特效代码,css3 文字闪烁特效代码
  9. 逻辑回归与线性回归的区别
  10. Android 8.0 安装Google服务
  11. JavaScript基础大总结
  12. 80286计算机配置,电脑的各种配置给详的细解释.doc
  13. html 在行前显示黑点,Word里有些文字行前面有小黑点是怎么回事?
  14. mysql 联合主键 自增_mysal 数据库联合主键自增问题
  15. 交叉网线做法,开发板 PC直连
  16. lightOJ 1278
  17. Vue3源码解析01--Vue3初探
  18. Ackerman阿克曼(单舵轮)前轮驱动并转向移动机器人的建模及控制算法
  19. sass、scss、less区别
  20. 《uniapp遇到的问题》 详情 ------ 编号:001

热门文章

  1. Python登录豆瓣并爬取影评
  2. 思考怎么成为一名合格的技术总监?
  3. 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
  4. 关于电脑突然产生数字文件夹用360删不掉的情况
  5. 今有物不知其数三三数之JAVA_今有物不知其数.三三数之剩二.五五数之剩三.七七数之剩二.问物几何? 题目和参考答案——青夏教育精英家教网——...
  6. pandas学习task11综合任务
  7. 一秒等于多少毫秒_新知|一秒有多长?你以为的“一瞬间”有多快?
  8. Virtualbox win7虚拟机全屏显示
  9. 七大行星排列图片_太阳系八大行星大小及排列顺序
  10. ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015