当前位置: 首页 > news >正文

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. 完整功能点&#xff08;本文章不写&#xff0c;只写核心代码&#xff09; 1. 实现效果 2. 精简版核心代码 使用的 vue3 vant4组件使用van-swipe进行轮播图切换实现 <template><div :style"{width: width px,overflo…...

C#结合JS实现HtmlTable动态添加行并保存到数据库

目录 需求 效果视频演示 范例运行环境 准备数据源 数据表设计 UI及表结构Json配置 Json数据包提交配置 设计实现 前端UI Javascript 脚本 Jquery引用 C# 服务端操作 小结 需求 在 Web 应用项目中&#xff0c;实现一对多录入的数据管理功能是一项常见的应用。因此…...

Unity Render Streaming 云渲染 外网访问

初版&#xff1a; 日期&#xff1a;2024.5.20 前言&#xff1a;临时思路整理&#xff0c;后期会详细补充 环境&#xff1a; 1. 阿里云服务器 需要安装好nodejs 、npm 2. windows电脑&#xff0c;需安装好 nodejs 、npm 3.Unity 2021.3.15f1 4.Unity Render Streaming …...

美易官方:Copilot全面升级!

Copilot的全面升级&#xff0c;无疑在科技界掀起了一场革命性的浪潮&#xff01;微软在一夜之间推出的这50余项AI更新&#xff0c;不仅彰显了其在人工智能领域的深厚底蕴&#xff0c;更是让全球用户见证了计算机理解人类能力的一次飞跃。 在微软2024年Build开发者大会的主题演…...

深入了解FreeRTOS:实时操作系统的核心概念和应用

前言&#xff1a; 在当今数字化世界中&#xff0c;嵌入式系统扮演着至关重要的角色&#xff0c;从工业自动化到智能设备&#xff0c;无所不在。而实时操作系统&#xff08;RTOS&#xff09;则是这些系统的核心引擎&#xff0c;它们负责管理任务、资源和时间&#xff0c;确保系统…...

Spring框架学习笔记(五):JdbcTemplate 和 声明式事务

基本介绍&#xff1a;通过 Spring 框架可以配置数据源&#xff0c;从而完成对数据表的操作。JdbcTemplate 是 Spring 提供的访问数据库的技术。将 JDBC 的常用操作封装为模板方法 1 JdbcTemplate 使用前需进行如下配置 1.1 在maven项目的pom文件加入以下依赖 <dependencies…...

考研计组chap1计算机系统概述

目录 一、计算机发展历程(不考了) 二、计算机硬件的基本组成 3 1.五个部分 &#xff08;1&#xff09;输入设备 &#xff08;2&#xff09;控制器 &#xff08;3&#xff09;运算器 &#xff08;4&#xff09;&#xff08;主&#xff09;存储器 &#xff08;5&#xff0…...

如何使用Python中的生成器

如何使用Python中的生成器 在Python中&#xff0c;生成器是一种特殊的迭代器&#xff0c;它允许你逐个地生成值&#xff0c;而不是一次性地计算并存储所有的值。这对于处理大量数据或者无限序列特别有用&#xff0c;因为它能够节省内存并提高效率。 生成器通常是通过以下两种…...

C语言 读取 MIDI文件头部

在C语言中直接读取MIDI文件并不简单&#xff0c;因为MIDI文件是一种包含音乐事件&#xff08;如音符的开始和结束、控制信号等&#xff09;的二进制格式&#xff0c;而不是像文本文件那样容易解析。不过&#xff0c;你可以通过以下步骤来实现&#xff1a; 了解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.文档管理 软件全套资料包获取方式①&#xff1a;软件项…...

React与Vue的区别?

一、区别: 1. 语法 Vue采用自己特有的模板语法&#xff1b; React是单向的&#xff0c;采用jsx语法创建react元素。 2.监听数据变化的实现原理不同 Vue2.0 通过Object.defineproperty()方法的getter/setter属性, 实现数据劫持, 每次修改完数据会触发diff算法(双端对比) …...

leetcode 2115.从给定原材料中找到所有可以做出的菜

思路&#xff1a;拓补排序&#xff0c;哈希表 在思路上其实很好发现&#xff0c;我们需要有一个明确的做菜顺序&#xff0c;也就是说需要定下来我们根据原材料先做哪些菜&#xff0c;然后做完该做的菜之后&#xff0c;后来又能做哪些菜。 你也发现了&#xff0c;这个顺序其实…...

Opencompass模型评测教程

模型评测 模型评测非常关键&#xff0c;目前主流的方法主要可以概括为主观评测和客观评测&#xff0c;主观评测又可以分为两种形式&#xff1a;人工判断或者和模型竞技场。客观评测一般采用评测数据集的形式进行模型评测。本教程使用Opencompass工具进行对Internlm2-7b模型进行…...

什么是安全测试,如何进行安全测试?

什么是安全测试&#xff1f; 概述 安全测试是一种旨在识别系统、网络或应用程序中的安全漏洞的测试方法。其目标是确保系统能够抵御恶意攻击&#xff0c;保护数据的机密性、完整性和可用性。安全测试通常包括漏洞扫描、渗透测试、代码审计和安全评估等多个方面。 安全测试的…...

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

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名--章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…...

Java入门基础学习笔记41——实体类

实体JavaBean/实体类&#xff1a; 就是一种特殊形式的类。 1&#xff09;这个类中的成员变量都要私有&#xff0c;并且要对外提供相应的getXXX&#xff0c;setXXX的方法。 2&#xff09;类中必须要有一个公共的无参的构造器。其他的构造器可写可不写。 右键菜单中&#xff0…...

【Linux】信号之信号的保存和处理详解

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误或者有写的不好的地方的话&…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...