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)通过堆栈传递参数

 

有问题欢迎提出! 

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

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

相关文章

java继承使用细节二

构造器 主类是无参构造器时会默认调用 public graduate() {// TODO Auto-generated constructor stub也就是说我这里要用构造器会直接调用父类。它是默认看不到的 ,System.out.println("graduate");} 但当主类是有参构造器如 public father_(int s,doubl…

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

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

Python高效数据分析的综合复习指南【时间处理与机器学习】

五、时间处理 一、时间戳-----Timestamp类型 方法1:使用Timestamp创建 pandas.Timestamp(ts_input, freqNone, tzNone, unitNone, yearNone, monthNone, dayNone, hourNone, minuteNone, secondNone, microsecondNone, tzinfoNone, offsetNone) import pandas a…

微信好友这样打标签更高效!

为什么要做标签管理? ① 通过标签管理,可以清晰的知道每个私域好友的关系程度,如哪些是忠诚客户,哪些是意向客户,哪些是刚加上的客户等等。 这样就知道下一步要怎么操作,做到精细化运营。如忠诚客户跟进维护&#x…

子分支想主分支发起合并请求

请求合并 1.点击 git Web 页右上角打开 Merge requests 进入新页,点击右上角。注意选择要合并的项目 2.左边是源分支,右边是要合并的目标分支。 3.最后点击左下角绿色按钮 4.第一个红框 Assignee,选择要通知去合并的人。第二个红框不动&#…

qt5core.dll怎么下载,qt5core.dll下载安装详细教程

不知道大家有没有遇到过qt5core.dll丢失这个问题?目前这个问题还是比较常见的,一般使用电脑比较多的的人,有很大几率遇到这种qt5core.dll丢失的问题。今天主要针对这个问题,来给大家讲解一下一键修复qt5core.dll的方法。 Qt5Core.…

基于FPGA的函数信号发生器设计

本科时期的一个课设,现在将他分享出来,写了很详细的文章,可以直接拿去使用:设计采用波形查找表和相位累加器的方法实现DDS,查找表的数据位宽为8位,采样点数为4096。波形产生范围是100Hz-20MHz,最…

前端 CSS 经典:SVG 描边动画

1. 原理 使用 css 中的 stroke 属性,用来描述描边的样式,其中重要的属性 stroke-dasharray、stroke-dashoffset。理解了这两个属性的原理,才能理解描边动画实现的原理。 stroke-dasharray:将描边线变成虚线、其中实线和虚线部分…

年轻人逆转生活方式,胰岛功能关键在于饮食与运动的配合!

平常在生活方面,控制好饮食和运动,但是有的年轻人,比如说工作原因,或者是个人喜好等原因,可能饮食他配合不了,这样逆转起来也很困难。 有一个例子,就是那种公交车司机,他的排班就是夜…

C++容器之无序多集(std::unordered_multiset)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 iterators3.4 capacity3.5 find3.6 count3.7 equal_range3.8 emplace3.9 emplace_hint3.10 insert3.11 erase3.12 clear3.13 swap3.14 bucket_count3.15 max_bucket_count3.16 bucket_size3.17 bucket3.18 load_fa…

【正点原子Linux连载】 第四十七章 音频驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

llama3-8b-instruct-262k微调过程的问题笔记(场景为llama论文审稿)

目录 一、环境配置 1.1、模型 1.2、微调环境 1.3、微调数据 二、发现的问题 2.1、过拟合问题 2.2、Qlora zero3 保存模型时OOM问题(已解决) 一、环境配置 1.1、模型 llama3-8b-instruct-262k (英文) 1.2、微调环境 Package Version ------------------…

安全态势管理的六大挑战:态势感知

德迅云安全鉴于如今的安全威胁不断变幻,企业对实施态势管理策略至关重要,可以让安全团队根据需要进行安全策略的动态调整。如果企业在研究构建态势感知管理,需要特别关注以下六个方面的挑战。 如果企业正在使用一个或多个平台,那么…

stm32常用编写C语言基础知识,条件编译,结构体等

位操作 宏定义#define 带参数的宏定义 条件编译 下面是头文件中常见的编译语句,其中_LED_H可以认为是一个编译段的名字。 下面代码表示满足某个条件,进行包含头文件的编译,SYSTEM_SUPPORT_OS可能是条件,当非0时,可以…

小程序-购物车-基于SKU电商规格组件实现

SKU 概念: 存货单位( Stock Keeping Unit ), 库存 管理的最小可用单元,通常称为“单品”。 SKU 常见于电商领域,对于前端工程师而言,更多关注 SKU 算法 ,基于后端的 SKU 数据…

总结 HTTPS 的加密流程

一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥: 密钥是用于加密和解密数据…

VMware安装保姆教程、Docker安装/依赖安装缓慢等问题

常见问题前置: 1、docker依赖安装缓慢,没有走设置的资源库:解决安装docker-ce过慢 Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds‘) 在添加阿里云镜像后安装依旧慢: yum-config-manager --add-repo http://mirrors.aliyun.com/docker…

JavaSE--基础语法(第一期)

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境,并广泛应用于嵌入式系统…

鸿蒙HarmonyOS开发:tabs结合tabContent实现底部tabBar导航栏页面布局

文章目录 一、组件介绍1、Tabs参数属性事件TabsController 2、子组件属性说明 二、基础示例1、基础顶部导航2、效果3、可以滚动导航栏2、效果 三、扩展示例自定义导航栏1、代码2、效果 一、组件介绍 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。Tab…

宝塔面板修改端口后无法登入

今天通过宝塔面板登录腾讯云主机,看到下面的提醒,顺便点进去随便改了个端口 本以为改端口是很简单事情,结果我改完之后面板立马登不上了,接下来我改了登录地址和端口也不行,我以为是防火墙的问题,增加了防火…