基于STC15系列单片机课程中讲到的汇编指令(一)
汇编语言指令格式:
【标号:】 操作码 【第一操作数】【,第二操作数】 【,第三操作数】 【;注释】
实际书写中没有【】
作者本人使用的单片机教材是丁向荣主编的
指令系统中常用符号
#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系列单片机课程中讲到的汇编指令(一)相关推荐
- 基于STC15系列单片机课程中讲到的汇编指令(二)
交换指令 1.字节交换指令 XCH A,Rn ;A的值给Rn,Rn的值给A,具体数学符号不好敲出来,就是交换的意思,有别于赋值 XCH A,@Ri:A的内容和Ri的内容所表示的地址的内容进行交换,和 ...
- ws2812驱动总结(包括对时序的详细分析,代码基于STC15系列单片机)
声明 本文版权归作者bxgj所有,未经作者授权,本文禁止以任何形式在任何平台(包括但不限于各网站.论坛.博客.微博.公众号等)部分或全部地转载,禁止二次修改后声明原创.授权转载内容请注明出处(如作者: ...
- 基于STC15系列单片机的串口中断例程
#include <STC15F2K60S2.H>#define FOSC 12000000 //晶振频率 #define BAUD 9600 //设置波特率unsigned char r ...
- 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
2.2 数码时间显示电路 七段LED数码管是由八个发光二极管构成,通过给其引脚不同的高低电平,从而显出0~9的数字和小数点,本文通过四个一位数码管并联通过P3口当中的P3.0与P3.1与STATIC ...
- 关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法
关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法 最近上网买了一款STC8A8K64S4A12最小系统版学习, ...
- 丁向荣单片机pdf_单片机原理与应用(C语言版)——基于STC15W201S系列单片机 丁向荣 纺著 9787121246357...
第1章 STC15W201S单片机结构与工作原理 1.1 微型计算机结构与单片机 1.1.1 微型计算机的基本结构与工作原理 1.1.2 单片机概述 1.2 STC15W201S单片机结构与工作原理 ...
- STC15系列单片机利用EEPROM统计开机次数
STC15系列单片机利用EEPROM统计开机次数
- STC15系列单片机通过串口多字节数据读写EEPROM操作
STC15系列单片机通过串口多字节数据读写EEPROM操作
- STC15系列单片机EEPROM读写示例
STC15系列单片机EEPROM读写示例
最新文章
- ASP.NET中相对路径的使用总结
- 232/485电平,OC门,OD门,TTL电平,CMOS电平,
- c语言实现结构体变量private,C语言中结构体变量私有化详解
- react学习(19)----可以通过设置默认值去回调
- ruby 数组元素替换_从Ruby中的集合中删除并替换元素
- wdos8系统服务器丢失,win8一键修复丢失DLL,常见dll丢失一键修复办法
- SQL Server删除语句
- hdu 3530 Subsequence 单调队列
- 来自Google的面试题,真的有趣!果然与众不同
- 服务器不稳定补偿,《异化之地》服务器异常怎么解决 服务器不稳定官方补偿...
- 多线程Thread和Runnable
- 用python编程小程序制作_一个非常适合Python新手的编程案例——投票小程序
- 学习日志--1.html
- 使用Navicat复制MySQL数据库
- 如何用wps设计统一的图片背景
- 路由方案之ARouter源码分析
- MMdetection3d环境搭建、使用MMdetection3d做3D目标检测训练自己的数据集、测试、可视化,以及常见的错误
- 在线教育退潮,教育硬件起浪:“老厂”造平板,“大厂”造台灯
- 最有效的方法来增加在Map中的值
- ubuntu中总是提示无法获得锁 (资源暂时不可用) 进程被占用 解决办法
热门文章
- ES性能优化之查询优化笔记(一)
- 史上最全WindowsMac系统各种快捷键大全(1000余个)
- 【MAC M1芯片】PS已解决在M1苹果电脑上出现“闪退”“液化”和WEB等黑屏问题
- 用EXCEL宏编写坐标转换
- 程序员的工资还能高多久?十年后呢?
- python for ArcGIS 绘制北京市板块地图
- 12分钟入门python基础-计算机视觉方向
- 香蕉派 BPI-R2 作为4G多路聚合融合通信应用开发平台
- JavaScrapt朝花夕拾
- python扫描局域网端口和ip_我想用python扫描局域网内的ip和mac地址,需要什么第三方库...