汇编语言(STC89C52)

 指令是计算机计算CPU根据人的意图来执行某种操作的命令。一台计算机所执行的全部指令的集合,称为这个CPU的指令系统。而想要使计算机按照人们的要求完成一项工作,就必须让CPU按顺序执行预设的操作,即逐条执行人们编写的指令。这种按照人民要求所编排的序列,称为程序。编写程序的过程叫做程序设计。程序时机语言就是编写程序的一整套规则和方法,是实现人机交互的工具,分为机器语言、汇编语言和高级语言。我们本篇要了解的就是汇编语言。

汇编语言是用助记符、符号和数字等来表示指令的程序语言,相对于机器语言来说,汇编语言容易理解和记忆。接下来让我们一起来学习一下汇编语言格式的基础知识吧。

汇编语言格式

MCS-51汇编语言指令由4部分组成,其一般格式如下:

[标号:]       操作码      [操作数]      [;注释]

格式中的方括号表示可以没有相应部分,可见,可以没有标号、操作数和注释,但至少要有操作码

其操作数最多可以是3项:

[操作数1]   [,操作数2]   [,操作数3]

操作数1常称为目的操作数,操作数2称为源操作数,操作数3多为跳转的目标。

例如:START : MOV       A,#23     ;23H→A

这里“START”为标号,“MOV”是操作码,“A,#23H”是操作数,“23H→A”为注释。

标号是相应指令的标记,便于查找,用于程序入口、循环等。

操作码规定了指令所要执行的操作,由2~5个英文字母表示。例如:MOX,ADD,RRC,JZ等。

操作数指出参与操作的数据来源、操作结果存放的地方以及跳转的目标位置。(操作数可以是一个数(立即数),也可以是数据所在的空间地址,即在执行指令时从指定的空间地址读取或写入数据)

注释主要使程序容易阅读。

上面一堆话看着头大:总结一下就是汇编指令由四个部分:标号、操作码、操作数和注释;操作数是必有的;一般都是操作码和操作数(有时候还会有注释)(例如:MOV A)

操作码和操作数都有对应的二进制代码,指令代码由若干字节组成;根据字节数不同分为:

单字节指令、双字节指令、三字节指令。

1.单字节指令

(1)指令码中隐含着对某个寄存器的操作

例如:"INC A","MUL AB"等指令,只需要一个8个二进制代码就能表示出执行什么操作、操作数是哪个。

比如数据指针增加1指令“INC DPTR”,其二进制指令代码是A3H,格式如下:


                            1            0          1           0           0            0            1            1


(2) 由指令码中的 r  r  r 或 i 指定操作数。

如累加器A向工作寄存器传送数据指令“MOV  Rn,A”,其指令格式为:


                            1            1          1           1           1             r           r            r


 2.双字节指令

用1B表示操作码,另1B表示操作数或操作数所在的地址。

其指令格式:


                 操作码                 立即数或地址


MSC-51共有45条双字节指令。

3.三字节指令

用1B表示操作码,另外2B表示操作数或操作数所在的地址。

其指令格式: 


                  操作码                 立即数或地址              立即数或地址


 上面部分不是很理解的同学不用着急,可以再看一遍熟悉一下,后面多看一些指令会帮助理解一些。接下来我们讲一下寻址方式。

寻址方式

所谓寻址方式,是值CPU寻找参与运算的操作数的方式,或者寻找数据保存位置的方式。这一部分非常重要,大家要认真学习哦。里面的举例如果看不懂的同学先不急,后面会讲到指令系统分类,可以先大致了解一下了之后看最后一部分,然后再回来看这部分的例子哦。

立即寻址

立即寻址也称立即数,它是在指令操作数中直接给出参加运算的操作数,其指令格式如
下:
如:    MOV   A ,  #70H  ;
这条指令的功能是将立即数70H传送到累加器A中。

直接寻址

在直接寻址方式中,指令操作数域给出的是参加运算操作数地址。直接寻址方式只能用来表示特殊功能寄存器、内部数据寄存器和位地址空间。其中特殊功能寄存器和位地址空间只能用直接寻址方式访问。
如:      ANL  70H ,   #48H
表示70H单元中的数与立即数48H相“与”,结果存放在70H单元中。其中70H为直接地
址,表示内部数据存储器RAM中的一个单元。

间接寻址

间接寻址采用R0或R1前添加“@”符号来表示。

例如,假设R1中的数据是40H,内部数据存储器40H单元所包含的数据为55H,那么如下指令:
    MOV        A,  @R1
把数据55H传送到累加器。

寄存器寻址

寄存器寻址是对选定的工作寄存器R7~RO、累加器A、通用寄存器B、地址寄存器和进位C中的数进行操作。其中寄存器R7~RO由指令码的低3位表示,ACC、B、DPTR及进位位C隐含在指令码中。因此,寄存器寻址也包含一种隐含寻址方式。
寄存器工作区的选择由程序状态字寄存器PSW中的RS1、RSO来决定。指令操作数指定的寄存器均指当前工作区中的寄存器。
如:      INC    R0     ;(R0)+1→>R0

表1 低3位操作码与寄存器Rn的关系

低3位r  r  r000001010011100101110111
寄存器RnR0R1R2R3R4R5R6R7

指令寻址

绝对寻址

绝对寻址是在指令的操作数中,直接提供目标位置的地址或地址的一部分。

例如:LJMP   SER_INT_T1    ;无条件跳转到T1中断服务程序SER_INT_T1   

相对寻址

相对寻址是将程序计数器PC中的当前值与指令第二字节给出的数相加,其结果作为转移指令的转移地址。转移地址也称为转移目的地址,PC中的当前值称为基地址,指令第二字节给出的数称为偏移量。由于目的地址是相对于PC中的基地址而言,所以这种寻址方式称为相对寻址。偏移量为带符号的数,所能表示的范围为+127 ~-128。这种寻址方式主要用于转移指令。
如:   JC     80H    ;C=1 跳转
表示若进位位C为0,则程序计数器PC中的内容不改变,即不转移。若进位位C为1,则以PC
中的当前值为基地址,加上偏移量80H后所得到的结果作为该转移指令的目的地址。

变址寻址

在变址寻址方式中,指令操作数指定一个存放变址基值的变址寄存器。变址寻址时,偏移量与变址基值相加,其结果作为操作数的地址。变址寄存器有程序计数器PC和地址寄存器DPTR
如:   MOVC     A, @A+DPTR
表示累加器A为偏移量寄存器,其内容与地址寄存器DPTR中的内容相加,其结果作为操作数的地址,取出该单元中的数送入累加器A。

位寻址

位寻址是指对一些内部数据存储器RAM和特殊功能寄存器进行位操作时的寻址。在进行位操作时,借助于进位位C作为位操作累加器,指令操作数直接给出该位的地址,然后根据操作码的性质对该位进行位操作。位地址与字节直接寻址中的字节地址形式完全一样,主要由操作码加以区分,使用时应注意。
如:    MOV          C, 20H     ;  片内位单元位操作型指令

以上是7种寻址方式

总结一下:

寻址方式操作数寻址空间及范围示例指令
立即数寻址在程序存储空间,随指令读出MOV  A,#46H
直接寻址片内RAM种,低128B和SFRMOV  A,46H
间接寻址

片内RAM:使用@Ri、SP;

范围为256B,不含SFR

片外RAM:使用@Ri、@DPTR;

范围为64KB

MOV      A,@R0

MOVX  @DPTR,A

寄存器寻址使用R0~R7、A、B、C、DPTRMOV  A ,R2
相对寻址操作数是相对地址;在程序存储空间;范围-128~127STMP   LOOP
绝对寻址操作数是目标地址;在程序存储空间;范围为64KB全空间LJMP  SECON
变址寻址

使用@A+PC、@A+DPTR;在程序存储器中;

范围分别在PC之后256B之内和64KB全空间

MOVC  A,@A+DPTR

MOVC  A,@A+PC

位寻址使用位地址;在位寻址空间;范围-128~127SJMP    LOOP

指令中常用符号注释 

Rn:n=0~7,工作寄存器R0~R7。

Ri:i=0、1。可作为地址指针的R0和R1。

#data:8位立即数

#data16:16为立即数

direct:8位片内RAM单元地址

addr16:程序存储空间的16位目的地址,用于LCALL和LJMP指令中

rel:补码形式的8位地址偏移量。

bit:片内RAM或SFR中的直接寻址位地址。

@:间接寻址方式的前缀符号。

(×):表示×中的内容。(地址)

((×)):表示由×中指向的地址单元的内容。(数据)

^:逻辑与

(与逻辑与的形状一样,开口方向相反(键盘没找到那个符号)):逻辑或

→:指令操作流程,将内容送到箭头指向的地方

指令系统分类

数据传送类指令

算术运算指令


逻辑操作类指令


控制转移类指令


布尔变量操作类指令

欢迎大家指出问题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638568.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年5月份最新独角数卡使用USDT详细小白教程

直观配套视频教程 2024年5月份最新独角数卡安装及USDT使用详细小白教程 1、创建服务器 Centos或者Ubuntu2、宝塔面板开心版安装寶塔 Linux 面版 8.0.5 開心版 - 2024年1月12日 - 开心专区 - 异次元 - Powered by Discuz!Centos安装命令(默认安装是 8.0.1 直接在线升…

USB数据恢复软件:轻松找回U盘重要数据!

USB数据丢失的原因 USB数据丢失有一些常见原因,了解这些原因有利于恢复数据。 文件意外删除病毒攻击软件错误未安全弹出USB设备格式化USB设备 顺便一提,如果你通过快捷键“Ctrl D”删除了数据,那你可以从回收站中还原它们。如果你永久删除…

【全开源】国际版JAVA同城服务美容美发到店服务上门服务系统源码支持Android+IOS+H5

一、同城服务新篇章,开启便捷美容美发新时代 随着生活节奏的加快,人们越来越注重便捷与高效的生活方式。为了满足这一需求,我们精心研发了“国际版同城服务美容美发到店服务上门服务系统小程序源码”。这款源码不仅结合了本地化的服务特色&a…

AI大模型探索之路-训练篇25:ChatGLM3微调实战-基于LLaMA-Factory微调改造企业级知识库

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

python:__class_getitem__使用以及cached_property源码分析

python:__class_getitem__使用以及cached_property源码分析 1 前言 Python中如何模拟泛型类型? 当使用类型标注时,使用 Python 的方括号标记来形参化一个 generic type 往往会很有用处。 例如,list[int] 这样的标注可以被用来表…

PointCloudLib 点云半径滤波实现 C++版本

0.展示效果 滤波之前 1.算法原理 半径滤波原理非常直观,主要用于平滑三维点云数据并去除离群点。 设定搜索半径:首先,为每个点设定一个搜索半径r。这个半径定义了该点周围的一个球形区域。计算邻域点数:接着,计算每个点在其搜索半径r内的邻近点的数量。判断与过滤:根据…

MyBatisPlus使用流程

引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency> 版本号根据需要选取 在实体类上加注解声明&#xff0c;表信息 根据数…

YOLOv8_seg的训练、验证、预测及导出[实例分割实践篇]

实例分割数据集链接,还是和目标检测篇一样,从coco2017val数据集中挑出来person和surfboard两类:链接:百度网盘 请输入提取码 提取码:3xmm 1.实例分割数据划分及配置 1.1实例分割数据划分 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按…

【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种+随机抽取10张

背景需求&#xff1a; 中班益智区素材&#xff1a;三角形变魔术 - 小红书自制益智区教玩具&#xff1a;三角形变魔术&#xff0c;共24题 玩法一&#xff1a;根据图示在空白格子里摆放。 玩法二&#xff1a;根据图示在空白格子里用黑笔涂。##自制玩具益智区 #幼儿园益智区 #中班…

SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池&#xff1f; 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…

虹科Pico汽车示波器 | 免拆诊断案例 | 2017款奔驰E300L车行驶中发动机偶尔无法加速

故障现象 一辆2017款奔驰E300L车&#xff0c;搭载274 920发动机&#xff0c;累计行驶里程约为21万km。车主反映&#xff0c;该车行驶中发动机偶尔无法加速&#xff0c;且车辆发闯。 故障诊断 用故障检测仪检测&#xff0c;发动机控制单元&#xff08;N3/10&#xff09;中存储…

2024“电工杯”数学建模A题《园区微电网风光储协调优化配置》思路和代码分享

A 题&#xff1a;园区微电网风光储协调优化配置 这个题目整体就是一个优化问题&#xff0c;可以采用MatlabYalmipGurobi求解器进行求解&#xff0c;持续更新中&#xff0c;敬请关注&#xff01;&#xff01; 园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提…

在未来你将何去何从?

在数字化的浪潮中&#xff0c;信息技术行业无疑是推动全球经济和社会发展的重要动力。随着科技的不断迭代与进步&#xff0c;云计算、大数据、人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、5G通信和区块链等技术已经深入到我们生活的每一个角落&am…

大模型日报|今日必读的 13 篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.MIT新研究&#xff1a;并非所有语言模型特征都是线性的 最近的研究提出了线性表征假说&#xff1a;语言模型通过操作激活空间中概念&#xff08;“特征”&#xff09;的一维表征来执行计算。与此相反&#xff0c;来…

计算机如何将输入文字显示出来的?渲染Image rendering

1.文字渲染的简单理解 渲染图像&#xff0c;可以理解为用cpu/gpu构造出原本不存在的图像。比如输入计算机的英文字符都是ASCII码&#xff0c;而我们在屏幕上看到显示的字符对应的应该是RGB/YUV的像素。计算机把ASCII字符转化成像素的过程就是文字渲染。又比如我们GPU用多个2D图…

BioMistral 7B——医疗领域的新方法,专为医疗领域设计的大规模语言模型

1. 概述 自然语言处理领域正在以惊人的速度发展&#xff0c;ChatGPT 和 Vicuna 等大型语言模型正在从根本上改变我们与计算机交互的方式。从简单的文本理解到复杂的问题解决&#xff0c;这些先进的模型展示了类似人类的推理能力。 特别是&#xff0c;BLOOM 和 LLaMA 等开源模…

【简单介绍下近邻算法】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

案例题(第一版)

案例题目 软件架构设计考点&#xff08;历年必考&#xff09; 软件架构设计通常在每年的第一题&#xff0c;该题必考 必备概念 必备概念即考试必须要默写出来的概念 概念描述软件架构风格是指描述特定软件系统组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组…

力扣刷题---返回word中所有不重复的单词

当需要从一个数据集合中去除重复元素时&#xff0c;set是一个很好的选择。由于其不允许存储重复的元素&#xff0c;因此可以很容易地实现去重功能。这在处理原始数据或进行数据分析时特别有用。 题目&#xff1a; 给定一个字符串数组 words&#xff0c;请返回一个由 words 中所…

表现层框架设计之表现层设计模式_2.MVP模式

1.MVP模式 MVP&#xff08;Model-View-Presenter&#xff09;模式提供数据&#xff0c;View负责显示&#xff0c;Controller/Presenter负责逻辑的处理。MVP是从经典的模式MVC演变而来&#xff0c;它们的基本思想有相通的地方&#xff1a;Controller/Presenter负责逻辑的处理&am…