汇编语言指令格式:

【标号:】 操作码 【第一操作数】【,第二操作数】 【,第三操作数】 【;注释】

实际书写中没有【】

作者本人使用的单片机教材是丁向荣主编的

指令系统中常用符号

#data 表示8位立即数,也就是八位二进制常数,即#00H~#0FFH,在单片机C语言中,定义一个数据存储区,有关键字data、xdata。data所在存储区为基本RAM,xdata所在存储区为扩展RAM或外部RAM。

#data16与#data相同,区别就在于表示的数据为16位,即取值范围为#0000H~#0FFFFH

direct:表示片内RAM和特殊功能寄存器的8位直接地址。

在这里,先讲解一下什么是数据,什么是地址。在计算机的世界中,数据与地址都是一串串由0和1构成的数字。为了明确给大家解释一下数据与地址,我在这儿举一个例子。

现在,你正处于某个码头,你现在需要做的是卸货。这会儿,你的工头找到了你,递给了你两张卡片,一张是红色的,上面标着4,写着马铃薯;一张是白色的,上面标着100.,对应着你身后的集装箱。

当然,可能我这个例子举得不贴合实际,有些读者朋友可能也没看明白,但个人能力有限,只能说到这种程度了。无疑,代表马铃薯的数字4是数据,而代表集装箱的数字100是地址,数据是要存在地址里去的。

Rn:n=0~7,表示的是当前工作寄存器组R0~R7。它的地址在00H~07H、08H~0FH、10H~17H、18H~1FH中的一个,具体由PSW程序状态控制字中的RS1、RS0两位表示的00~11选择。

Ri: i=0、1,可作为间接寻址的寄存器,指上述的R0与R1

addr16:16位目的地址,只限于在LCALL和LJMP指令中使用

add11:11位目的地址,只限于在ACALL和AJMP指令中使用

rel:相对转移指令中的偏移量,为补码形式的8位带符号数。为SJMP和所有条件转移指令使用。

DPTR:16位数据指针,用于访问16位的程序存储器或16位数据存储器。

bit:片内RAM(包含部分特殊功能寄存器)中的直接寻址位 /bit:表示对bit取反再参与运算

@:间接寄存器或变址寄存器的前缀。

好了,接下来讲述一下传输数据的三条操作码,MOV,MOVC,MOVX。有什么区别呢,意义上区别不大,同样是传输数据,同样是读写操作,但是就像是此刻我手里有一张纸巾,而我旁边有三个人,递给第一个人是MOV,递给第二个人是MOVC,递给第三个人就是MOVX了。MOV用于片内基本RAM的传输,MOVC(这个C表示的是code,也就是代码的意思),针对的对象是单片机的程序存储器,至于MOVX,这里的X表示的是XRAM(扩展RAM,类似于传统的片外存储器)。

寻址方式

立即寻址

立即寻址就是将前面说了的,8位的或者16位的立即数送入存储单元。eg:MOV DPTR,#1234H 将16位立即数1234H送给16位数据指针,(DPTR)=1234H,括号括起来表示寄存器的内容

寄存器寻址

寄存器寻址就是,指令中给出寄存器名,以寄存器的内容作为操作数。例如:INC  R0  假设这里的Rn为11111110B,则在R0加一后,Rn为11111111B。因为这条语句是一个加一指令嘛,而R0又只是工作寄存器中的一位。

直接寻址

直接寻址:由指令给出操作数所在的地址。例如:MOV A ,3AH  也就是(A)=(3AH),将地址3AH的数据写入到累加器ACC中。也就是说如果地址单元(3AH)存储的数据是1FH的话,那此刻累加器ACC中再写入1FH的内容。

寄存器间接寻址

寄存器间接寻址:在指令中给出的寄存器内容是操作数所在地址,从该地址中取出的才是操作数。例子:MOV  A,@R1  也就是(A)=((R1)),将R1的内容代表的地址的内容送给累加器ACC。比如,此刻(R1)=00H,而(00H)=53H,则(A)=53H。

变址寻址

基址寄存器+变址寄存器间接寻址是以DPTR或PC为基址寄存器,累加器A做变址寄存器,以两者内容内容相加,形成的16位程序存储器地址作为操作数地址。例子 MOVC  A,@A+DPTR   一般使用在读取程序存储器的内容。

相对寻址

以当前PC(程序计数器)值加上指令中给出的地址偏移量rel而形成的实际地址。只出现在相对转移指令中。目的地址=源地址+指令的字节数(2或3)+rel(偏移量)

位寻址

位操作指令中的操作数是位地址。

基于STC15系列单片机课程中讲到的汇编指令(一)相关推荐

  1. 基于STC15系列单片机课程中讲到的汇编指令(二)

    交换指令 1.字节交换指令 XCH  A,Rn ;A的值给Rn,Rn的值给A,具体数学符号不好敲出来,就是交换的意思,有别于赋值 XCH A,@Ri:A的内容和Ri的内容所表示的地址的内容进行交换,和 ...

  2. ws2812驱动总结(包括对时序的详细分析,代码基于STC15系列单片机)

    声明 本文版权归作者bxgj所有,未经作者授权,本文禁止以任何形式在任何平台(包括但不限于各网站.论坛.博客.微博.公众号等)部分或全部地转载,禁止二次修改后声明原创.授权转载内容请注明出处(如作者: ...

  3. 基于STC15系列单片机的串口中断例程

    #include <STC15F2K60S2.H>#define FOSC 12000000 //晶振频率 #define BAUD 9600 //设置波特率unsigned char r ...

  4. 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计

    2.2 数码时间显示电路 七段LED数码管是由八个发光二极管构成,通过给其引脚不同的高低电平,从而显出0~9的数字和小数点,本文通过四个一位数码管并联通过P3口当中的P3.0与P3.1与STATIC ...

  5. 关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法

    关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法 最近上网买了一款STC8A8K64S4A12最小系统版学习, ...

  6. 丁向荣单片机pdf_单片机原理与应用(C语言版)——基于STC15W201S系列单片机 丁向荣 纺著 9787121246357...

    第1章 STC15W201S单片机结构与工作原理 1.1 微型计算机结构与单片机 1.1.1 微型计算机的基本结构与工作原理 1.1.2 单片机概述 1.2 STC15W201S单片机结构与工作原理 ...

  7. STC15系列单片机利用EEPROM统计开机次数

    STC15系列单片机利用EEPROM统计开机次数

  8. STC15系列单片机通过串口多字节数据读写EEPROM操作

    STC15系列单片机通过串口多字节数据读写EEPROM操作

  9. STC15系列单片机EEPROM读写示例

    STC15系列单片机EEPROM读写示例

最新文章

  1. ASP.NET中相对路径的使用总结
  2. 232/485电平,OC门,OD门,TTL电平,CMOS电平,
  3. c语言实现结构体变量private,C语言中结构体变量私有化详解
  4. react学习(19)----可以通过设置默认值去回调
  5. ruby 数组元素替换_从Ruby中的集合中删除并替换元素
  6. wdos8系统服务器丢失,win8一键修复丢失DLL,常见dll丢失一键修复办法
  7. SQL Server删除语句
  8. hdu 3530 Subsequence 单调队列
  9. 来自Google的面试题,真的有趣!果然与众不同
  10. 服务器不稳定补偿,《异化之地》服务器异常怎么解决 服务器不稳定官方补偿...
  11. 多线程Thread和Runnable
  12. 用python编程小程序制作_一个非常适合Python新手的编程案例——投票小程序
  13. 学习日志--1.html
  14. 使用Navicat复制MySQL数据库
  15. 如何用wps设计统一的图片背景
  16. 路由方案之ARouter源码分析
  17. MMdetection3d环境搭建、使用MMdetection3d做3D目标检测训练自己的数据集、测试、可视化,以及常见的错误
  18. 在线教育退潮,教育硬件起浪:“老厂”造平板,“大厂”造台灯
  19. 最有效的方法来增加在Map中的值
  20. ubuntu中总是提示无法获得锁 (资源暂时不可用) 进程被占用 解决办法

热门文章

  1. ES性能优化之查询优化笔记(一)
  2. 史上最全WindowsMac系统各种快捷键大全(1000余个)
  3. 【MAC M1芯片】PS已解决在M1苹果电脑上出现“闪退”“液化”和WEB等黑屏问题
  4. 用EXCEL宏编写坐标转换
  5. 程序员的工资还能高多久?十年后呢?
  6. python for ArcGIS 绘制北京市板块地图
  7. 12分钟入门python基础-计算机视觉方向
  8. 香蕉派 BPI-R2 作为4G多路聚合融合通信应用开发平台
  9. JavaScrapt朝花夕拾
  10. python扫描局域网端口和ip_我想用python扫描局域网内的ip和mac地址,需要什么第三方库...