MCS-51伪指令
上篇我们讲了汇编指令格式,寻址方式和指令系统分类,这篇我们讲一下单片机伪指令。
伪指令是汇编程序中用于指示汇编程序如何对源程序进行汇编的指令。伪指令不同于指令,在汇编时并不翻译成机器代码,只是会汇编过程进行相应的控制和说明。
伪指令通常在汇编程序中用于定义数据、分配存储空间、控制程序的输入/输出等。在MCS-51系统中,常用的伪指令有7条。接下来我们来一个一个学习。
伪指令
1.ORG伪指令
ORG伪指令称为起始汇编伪指令,常用于汇编语言某程序段的开始或某个数据块的开始。
一般格式为:
[标号:] ORG 16位地址
其标号为可选项。例如:
ORG 0040H
MAIN:
MOV SP,#0DFH
MOV 30H,#00H
此处的ORG伪指令指明后面的程序从0040H单元开始存放。
2.END伪指令
END伪指令称为结束汇编伪指令,用于汇编语言程序段的末尾,指示源程序在END处结束汇编,即便是END后面还有程序,也不做处理。
一般格式为:
END
3.EQU伪指令
EQU伪指令称为赋值伪指令、其一般格式为:
符号名 EQU 项(常数、常数表达式、字符串或地址标号)
EQU的功能是将右边的项赋值给左边。在汇编过程中,遇到EQU定义的符号名,就用其右边的项代替符号名。
注意:EQU只能先定义后使用
例题:EQU应用举例
HOUR EQU 30H ;定义变量HOUR的地址为30H
MINU EQU 31H ;定义MINU的地址为31H
REG EQU R7 ;定义字符串R7
DISP EQU 0800H ;定义变量DISP的地址为0800H
MOV HOUR,#09H ;变量HOUR赋值9
MOV R0,#HOUR ;使变量R0指向30H单元
INC R0 ;指针R0增1
MOV @R0,#25 ;变量MINU赋值25
MOV REG,A ;(A)→R7
LCALL DISP ;调用首地址为0800H处子程序
4.DATA伪指令
DATA伪指令(地址+数据)称为数据地址赋值伪指令。
其一般格式为:
符号名 DATA 常数或常数表达式
DATA的功能与EQU相似,是将右边的项赋值给左边。在汇编过程中遇到DATA定义的符号名,就用其右边的项符号名。该伪指令用于定义片外数据区变量。
与DATA类似的还有一条伪指令XDATA,用于定义片外数据区变量。
注意:DATA可以先定义后使用,当然也可以先使用后定义。
HOUR DATA 30H ;定义变量HOUR的地址为30H
MINU DATA 31H ;定义MINU的地址为31H
MOV HOUR,#09H ;变量HOUR赋值9
MOV R0,#HOUR ;使变量R0指向30H单元
INC R0 ;指针R0增1
MOV @R0,#25 ;变量MINU赋值25
5.BIT指令
BIT伪指令称为位地址符号伪指令。其格式为:
符号名 BIT 位地址
BIT伪指令的功能是把右边的地址赋值给昨天的符号名。位地址可以是前面所述的4中形式的任一种。
例如:
FLAGRUN BIT 00H
FLAGMUS BIT 01H
FLAGKEY BIT 02H
FLAGALAR BIT P1.7
6.DB指令
DB伪指令称为定义字节伪指令。其格式为:
[标号:] DB 项(字节数据、字节数或字符、字符串)
它的功能是从指定单元开始定义(存储)若干个字节的数据或字符、字符串,字符或字符串需要用引号(单引号或双引号皆可)括起来,即用ASCII码表示。其中标号是可选的。
例如:
TABLE: DB 32,24H,'A',"B","EFGH"
7.DW指令
DW伪指令称为定义字伪指令。其格式为:
[标号:] DW 字数据或字数据表
DW伪指令的功能与DB伪指令的相似,是从指定单元开始定义(存储)若干个字数据,每个数据占2个字节,而用DB伪指令定义的数据只占1个字节。其中标号是可选的。
例如:
ORG 1000H
TABLE2: DW 32,24H,1234H
上面这两行程序汇编后,从1000H单元开始,依次存放如下数据:
(1000H)=00H
(1001H)=20H
(1002H)=00H
(1003H)=24H
(1004H)=12H
(1005H)=34H
注意:高字节存放在前面(低地址),低字节存放在后面(高地址)。
汇编语言程序设计
简单程序设计
简单程序是指顺序执行的程序。简单程序从第一条指令开始,依次执行每一条指令,直到程序执行完毕,之间没有任何转移和子程序调用,整个程序只有一个入口和一个出口。
分支程序设计
在许多情况下,程序会根据不同的条件,转向处理不同的处理程序,这种结构的程序称为分支程序。使用条件转移指令、比较转移指令和位条件转移指令,可以实现程序的分支处理。
在汇编语言程序中,分支结构式比较麻烦的,初学时应特别注意。
循环程序设计
循环程序由一下几个部分组成
(1)循环初始化部分
(2)循环体部分
(3)循环结束部分
子程序设计
子程序是指完成某一确定任务,并且能够被其他程序反复调用的程序段。采用子程序,可以简化程序,提高编程效率。
子程序在结构上有一定的要求,编写时需要注意:
(1)子程序第一条指令的地址称为入口地址,该指令前必须要有标号,其标号一般要能够说明子程序的功能。
(2)子程序末尾一定要有返回指令,而调用子程序的指令应该在其他程序中。
(3)在子程序中,要注意保护在主调函数中使用的寄存器和存储单元中的数据,必要时在子程序开始使其进栈保护,在子程序返回前再出栈恢复原来值。
(4)字子程序中,要明确指出“入口参数”和“出口参数”,入口参数就是在调用前需要给子程序准备的数据,出口参数就是程序的返回值。
参数的传递有以下几种方式
(1)通过寄存器R0~R7或累加器A
(2)传递地址。入口参数和出口参数的数据存放在存储器中,使用R0、R1或DPTR传递指向数据的地址。
(3)通过堆栈传递参数
有问题欢迎提出!
相关文章:

MCS-51伪指令
上篇我们讲了汇编指令格式,寻址方式和指令系统分类,这篇我们讲一下单片机伪指令。 伪指令是汇编程序中用于指示汇编程序如何对源程序进行汇编的指令。伪指令不同于指令,在汇编时并不翻译成机器代码,只是会汇编过程进行相应的控制…...

vue3 vant4实现抖音短视频功能
文章目录 1. 实现效果2. 精简版核心代码3. 完整功能点(本文章不写,只写核心代码) 1. 实现效果 2. 精简版核心代码 使用的 vue3 vant4组件使用van-swipe进行轮播图切换实现 <template><div :style"{width: width px,overflo…...
C#结合JS实现HtmlTable动态添加行并保存到数据库
目录 需求 效果视频演示 范例运行环境 准备数据源 数据表设计 UI及表结构Json配置 Json数据包提交配置 设计实现 前端UI Javascript 脚本 Jquery引用 C# 服务端操作 小结 需求 在 Web 应用项目中,实现一对多录入的数据管理功能是一项常见的应用。因此…...

Unity Render Streaming 云渲染 外网访问
初版: 日期:2024.5.20 前言:临时思路整理,后期会详细补充 环境: 1. 阿里云服务器 需要安装好nodejs 、npm 2. windows电脑,需安装好 nodejs 、npm 3.Unity 2021.3.15f1 4.Unity Render Streaming …...
美易官方:Copilot全面升级!
Copilot的全面升级,无疑在科技界掀起了一场革命性的浪潮!微软在一夜之间推出的这50余项AI更新,不仅彰显了其在人工智能领域的深厚底蕴,更是让全球用户见证了计算机理解人类能力的一次飞跃。 在微软2024年Build开发者大会的主题演…...
深入了解FreeRTOS:实时操作系统的核心概念和应用
前言: 在当今数字化世界中,嵌入式系统扮演着至关重要的角色,从工业自动化到智能设备,无所不在。而实时操作系统(RTOS)则是这些系统的核心引擎,它们负责管理任务、资源和时间,确保系统…...

Spring框架学习笔记(五):JdbcTemplate 和 声明式事务
基本介绍:通过 Spring 框架可以配置数据源,从而完成对数据表的操作。JdbcTemplate 是 Spring 提供的访问数据库的技术。将 JDBC 的常用操作封装为模板方法 1 JdbcTemplate 使用前需进行如下配置 1.1 在maven项目的pom文件加入以下依赖 <dependencies…...

考研计组chap1计算机系统概述
目录 一、计算机发展历程(不考了) 二、计算机硬件的基本组成 3 1.五个部分 (1)输入设备 (2)控制器 (3)运算器 (4)(主)存储器 (5࿰…...
如何使用Python中的生成器
如何使用Python中的生成器 在Python中,生成器是一种特殊的迭代器,它允许你逐个地生成值,而不是一次性地计算并存储所有的值。这对于处理大量数据或者无限序列特别有用,因为它能够节省内存并提高效率。 生成器通常是通过以下两种…...
C语言 读取 MIDI文件头部
在C语言中直接读取MIDI文件并不简单,因为MIDI文件是一种包含音乐事件(如音符的开始和结束、控制信号等)的二进制格式,而不是像文本文件那样容易解析。不过,你可以通过以下步骤来实现: 了解MIDI文件格式&am…...
C# Winform实现五子棋游戏(代完善)
实现了基本的玩法。 BoardController.cs using System;namespace GomokuGame {public class BoardController{private static BoardController instance;private readonly int[,] board;private const int boardSize 15;private BoardController(){board new int[boardSize…...

文档档案管理系统整体建设方案书(实际项目原件word2024)
1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①:软件项…...
React与Vue的区别?
一、区别: 1. 语法 Vue采用自己特有的模板语法; React是单向的,采用jsx语法创建react元素。 2.监听数据变化的实现原理不同 Vue2.0 通过Object.defineproperty()方法的getter/setter属性, 实现数据劫持, 每次修改完数据会触发diff算法(双端对比) …...
leetcode 2115.从给定原材料中找到所有可以做出的菜
思路:拓补排序,哈希表 在思路上其实很好发现,我们需要有一个明确的做菜顺序,也就是说需要定下来我们根据原材料先做哪些菜,然后做完该做的菜之后,后来又能做哪些菜。 你也发现了,这个顺序其实…...

Opencompass模型评测教程
模型评测 模型评测非常关键,目前主流的方法主要可以概括为主观评测和客观评测,主观评测又可以分为两种形式:人工判断或者和模型竞技场。客观评测一般采用评测数据集的形式进行模型评测。本教程使用Opencompass工具进行对Internlm2-7b模型进行…...
什么是安全测试,如何进行安全测试?
什么是安全测试? 概述 安全测试是一种旨在识别系统、网络或应用程序中的安全漏洞的测试方法。其目标是确保系统能够抵御恶意攻击,保护数据的机密性、完整性和可用性。安全测试通常包括漏洞扫描、渗透测试、代码审计和安全评估等多个方面。 安全测试的…...
ros的pcl库中对于自己定义的消息,调用pcl库时总是报错 c++
首先定义自己的消息类型 struct CustomPoint { // 定义点类型结构PCL_ADD_POINT4D; // 该点类型有4个元素float intensity 0.0;uint32_t zone;uint32_t ring;uint32_t sector;EIGEN_MAKE_ALIGNED_OPERATOR_NEW // 确保new操作符对齐操作 } EIGEN_ALIGN16; // 强制SSE对齐POIN…...
DataFrame—数据汇总6
文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...

Java入门基础学习笔记41——实体类
实体JavaBean/实体类: 就是一种特殊形式的类。 1)这个类中的成员变量都要私有,并且要对外提供相应的getXXX,setXXX的方法。 2)类中必须要有一个公共的无参的构造器。其他的构造器可写可不写。 右键菜单中࿰…...

【Linux】信号之信号的保存和处理详解
🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误或者有写的不好的地方的话&…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...