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

基于Keil a51汇编 —— 程序模板文件以及规则

程序模板文件

下面的代码模板包含有关如何编写自己的程序集模块的指南和提示。此模板文件模板。A51 在文件夹 \C51\ASM 中提供。

$NOMOD51                ; 禁用预定义的 8051 寄存器
#include <reg52.h>      // 包含头文件;
;根据需要更改小写名称。
;该汇编模板让你了解如何使用 A251/A51汇编器。 您不必以这种方式构建每个模块,这只是举例说明。
;除了文件末尾的 END 语句外,所有条目都是可选的。
;如果使用此模板,请确保删除任何未使用的段声明、以及未使用的变量空间和汇编指令。
;本文件无法提供 A251/A51 汇编程序的所有可能用途。;
; Module name (模块名)
;
NAME            module_name  ;通用汇编文件名;
; 在这里,您可以导入其他模块的符号。
;
EXTRN   CODE   (code_symbol)    ; 可以是code 段或者带有code指令的函数入口声明EXTRN   DATA   (data_symbol)    ; data数据声明EXTRN   BIT    (bit_symbol)     ; Bit 位声明EXTRN   XDATA  (xdata_symbol)   ; XDATA 数据声明EXTRN   NUMBER (typeless_symbol);  使用EQU or SET定义的声明;
; 可以一次性定义多个声明
;
EXTRN   CODE (sub_routine1, sub_routine2), DATA (variable_1);
; 在列表文中强制分页
;
$EJECT;
; 声明此处的符号可供其他模块使用
;
PUBLIC  data_variable
PUBLIC  code_entry
PUBLIC  typeless_number
PUBLIC  xdata_variable
PUBLIC  bit_variable;
; 可以一次性定义多个声明
;
PUBLIC  data_variable1, code_table, typeless_num1, xdata_variable1;
; Put the STACK segment in the main module.
;
?STACK          SEGMENT IDATA           ; 在IDATA ram中定义StackRSEG    ?STACK          ; 切换到?STACKDS      5               ;  保留5个STACK空间$EJECT;
; 将段落和变量声明放在此处
;;
; DATA SEGMENT(数据段) DATA RAM 中的预留空间 如果不使用,则删除该数据段。
;
data_seg_name   SEGMENT DATA            ; 声明在DATA RAM中的全局变量数据. RSEG    data_seg_name   ;  切换至该段
data_variable:  DS      1               ;  定义变量data_variable并申请1个字节空间
data_variable1: DS      2               ;  定义变量data_variable1并申请2个字节数组;
; DATA SEGMENT(数据段) DATA RAM 中的预留空间 如果不使用,则删除该数据段。
;
data_seg_name   SEGMENT DATA    OVERLAYABLE        ; 声明在DATA RAM中的局部变量数据. RSEG    data_seg_name   ;  切换至该段
data_variable:  DS      1               ;  定义变量data_variable并申请1个字节空间
data_variable1: DS      2               ;  定义变量data_variable1并申请2个字节数组
;
; XDATA SEGMENT 在 XDATA RAM 中预留空间 如果不使用,则删除该段。
;
xdata_seg_name  SEGMENT XDATA           ; 声明XDATA RAM段.RSEG    xdata_seg_name  ;  切换至该段
xdata_variable: DS      1               ; 
xdata_array:    DS      500             ;  定义变量xdata_array并申请500个字节数组;
; INPAGE XDATA SEGMENT 在 XDATA RAM 页面中保留空间(页面大小:256 字节)
; INPAGE 段适用于 @R0 寻址方法。
; 无用则删除
;
page_xdata_seg  SEGMENT XDATA INPAGE  RSEG    xdata_seg_name  
xdata_variable1:DS      1             ;
; ABSOLUTE XDATA SEGMENT 在 XDATA RAM 中保留绝对地址空间。
; ABSOLUTE 段对内存映射 I/O 非常有用。
;XSEG    AT 8000H        ; 定位到位于XDATA 中8000H的地址
XIO:            DS      1              
XCONFIG:        DS      1             ;
;BIT SEGMENT 保留 BIT RAM 中的空间 如果未使用,则删除该段。
;
bit_seg_name    SEGMENT BIT         RSEG    bit_seg_name   
bit_variable:   DBIT    1               ; 申请1Bit的位空间给bit_variable
bit_variable1:  DBIT    4     ;
; 在此处添加常量(无类型)数字。
;
typeless_number    EQU     0DH               
typeless_num1       EQU     typeless_number(8)     $EJECT;
;提供一个 LJMP,以主模块中的复位地址(地址 0)为起点
; 您可以将这种样式用于中断服务例程。
;CSEG    AT      0       ; 代码初始0地址LJMP    start         ;
; CODE SEGMENT(代码段) 在 CODE ROM 中为汇编指令预留空间。
;
code_seg_name   SEGMENT CODERSEG    code_seg_name  USING   0               ;  使用寄存器bank0start:          MOV     SP,#?STACK 1    ; 赋值指针;
;在此处插入您的汇编程序。 注意,下面的代码是非功能性的。
;ORL     IE,#82H         ; enable interrupt system (timer 0)SETB    TR0             ; enable timer 0
repeat_label:   MOV     A,data_symbolADD     A,#typeless_symbolCALL    code_symbolMOV     DPTR,#xdata_symbolMOVX    A,@DPTRMOV     R1,APUSH    AR1CALL    sub_routine1POP     AR1ADD     A,R1JMP     repeat_labelcode_entry:     CALL    code_symbolRET                                           ;程序结束code_table:     DW      repeat_labelDW      code_entryDB      typeless_numberDB      0
$EJECT;
; 要包含中断服务例程,请向 ISR 提供一个 LJMP跳转到中断服务程序
;CSEG    AT  0BH         ; 0BH   timer0中断入口LJMP    timer0int;
; 定义中断服务代码段
;
int0_code_seg   SEGMENT CODE         RSEG    int0_code_seg  USING   1               ; 使用寄存器bank1timer0int:      PUSH    PSWMOV     PSW,#08H        ; register bank 1PUSH    ACCMOV     R1,data_variableMOV     DPTR,#xdata_variableMOVX    A,@DPTRADD     A,R1MOV     data_variable1,ACLR     AADD     A,#0MOV     data_variable1+1,APOP     ACCPOP     PSWRETI;
; END必须有
;END             ; 文件结束

SEGMENT段名命名规

?存储器类型区分符?<函数名>?模块名 SEGMENT [段类型]
例:

 ?PR ? FUNCTION_NAME ? MODULE_NAME Segment  Code

全局变量与局部变量申明

全局变量

?存储器类型区分符? 模块名 SEGMENT 段类型 , 例:

 ?DT ? MAIN     SEGMENT DATA 

局部变量

  • 局部数据段的声明形式为:? 储存器类型区符?函数名?模块名 SEGMENT 段类型 OVERLAYABLE
  • 其中储存器类型的确定与全局数据段中的规则相同。当汇编程序按照C编译器编译的代码规则编写连接器将能对程序数据段进行覆盖分析。声明中的“OVERLAYABLE”标志就是用来打开段的覆盖属性,允许连接器进行覆盖分析。没有这个属性则段中的变量将一直占用这些空间,这样会降低储存器利用效率。
 ?DT ? main ? MAIN     SEGMENT DATA  OVERLAYABLE

类型列表:

段前缀C51存储类型汇编语言段类型说明
?PR?programCODE可执行程序代码代码
?CO?codeCODE程序存储区的常数数据
?BI?bitBIT内部数据区的位寻址数据
?BA?bdataBDATA内部数据区的可位寻址数据
?DT?dataDATA内部数据区 (SMALL存储模式)
?FD?farfar存储区(RAM空间)
?FC?const farFAR存储区(ROM空间)
?ID?idaraIDATA间接寻址内部数据区
?PD?pdataXDATA INPAGE外部数据区的分页数据 (COMPACT存储模式)
?XD?xdataXDATAXDATA存储区(ram空间,LARGE存储模式)
?XC?const xdataCODEXDATA存储区(rom空间)

相关文章:

基于Keil a51汇编 —— 程序模板文件以及规则

程序模板文件 下面的代码模板包含有关如何编写自己的程序集模块的指南和提示。此模板文件模板。A51 在文件夹 \C51\ASM 中提供。 $NOMOD51 ; 禁用预定义的 8051 寄存器 #include <reg52.h> // 包含头文件; ;根据需要更改小写名称。 ;该汇编模板让你…...

案例研究 | 玉湖冷链基于JumpServer实现管理安全一体化

玉湖冷链&#xff08;中国&#xff09;有限公司&#xff08;以下简称为玉湖冷链&#xff09;是玉湖集团旗下的冷链食品供应链企业。依托自有的国际高标数智化冷链园区产业集群&#xff0c;玉湖冷链提供一站式国内外代采、仓干配物流解决方案、全链路创新金融支持、高品质生活办…...

JavaEE初阶学习:HTTP协议和Tomcat

1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…...

ASEMI整流桥GBU810参数,GBU810封装

编辑-Z GBU810参数描述&#xff1a; 型号&#xff1a;GBU810 最大直流反向电压VR&#xff1a;1000V 最大工作峰值反向电压VRWM&#xff1a;700V 最大平均正向电流IF&#xff1a;8A 非重复正向浪涌电流IFSM&#xff1a;200A 操作和储存温度范围TJ ,TSTG&#xff1a;-55 t…...

docker应用记录总结

一、前言 docker这类部署工具&#xff0c;久而久之不使用非常容易忘记&#xff0c;甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结&#xff0c;纯属是温故知新。 二、docker部署应用 1、docker印象 docker首先让我想到的是是虚拟化技术&…...

Jenkins 添加节点Node报错JNI error has occurred UnsupportedClassVersionError

节点日志 报错信息如下 Error: A JNI error has occurred, please check your installation and try again Exception in thread “main” java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime…...

swift ui 布局 ——Stack(HStack、VStack、ZStack)

一、HStack 水平布局 将其子视图排列在水平线上 import Foundation import SwiftUI struct MyView: View {var body: some View {HStack{Text("text")Image("yuyin").resizable().frame(width: 102,height: 80)}} } 默认子视图是水平中心对齐的,可添加al…...

淘宝天猫商品评论数据接口,淘宝天猫商品评论API接口,淘宝API

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。获取到商品评论数据后&#xff0c;可以对其进行处理…...

C# Onnx GFPGAN GPEN-BFR 人像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace 图像修复 {public partial class Form1 : For…...

ubuntu安装依赖包时显示需要先安装其所需要的各种安装包)apt-get源有问题

最近在崭新的ubuntu上安装g以及一些其他的依赖与工具时遇到以下报错情况&#xff1a; 依赖环环相扣&#xff0c;手动无法解决。 总结&#xff1a; 出现需要很多依赖项的情况是因为软件源中没有可用的依赖项或者依赖项版本不正确。 其实在Ubuntu系统中&#xff0c;使用sudo…...

C/C++之自定义类型(结构体,位段,联合体,枚举)详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 个人主页&#xff1a;点我进入主页 …...

HBase 表如何按照某表字段排序后顺序存储的方法?

首先需要明白HBase表的排序规则&#xff1a; &#xff08;1&#xff09;rowkey排序&#xff08;字典排序&#xff09;——升序 &#xff08;2&#xff09;Column排序&#xff08;字典排序&#xff09;——升序 &#xff08;3&#xff09;时间戳排序——降序 rowkey 字典序排序…...

webrtc用clang编译支持h264,支持msvc调用库

webrtc遇到困扰&#xff1a; 如果msvc编译&#xff0c;ffmpeg编译失败&#xff0c;需要替换ffmpeg库。如果用clang编译&#xff0c;vs或qt调用dll又存在崩溃。 经过反复尝试找到解决方法&#xff1a; 一、编译 1、编译参数 //我得环境配置 set DEPOT_TOOLS_UPDATE0 set DEP…...

迁移学习是什么?

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习方法&#xff0c;它的主要思想是将已经在一个任务上学到的知识迁移到另一个相关或不相关的任务上&#xff0c;以提高目标任务的性能。迁移学习的核心概念是&#xff0c;模型可以通过先前学到的知识来更好地解决…...

哈希的应用--位图和布隆过滤器

哈希的应用--位图和布隆过滤器 位图1. 位图概念2. 位图在实际中的应用3. 位图相似应用给定100亿个整数&#xff0c;如何找到只出现一次的整数&#xff1f;1个文件100亿int&#xff0c;1G内存&#xff0c;如何找到不超过2次的所有整数 布隆过滤器1. 布隆过滤器的提出2. 布隆过滤…...

mac M2芯片在使用Android studio 编译问题bad cpu type in executable android

由于mac的intel芯片的一些指令集没有同步在M1 M2芯片上所以需要做兼容 打开控制台&#xff08;通过访达 - 应用程序 - 实用工具 - 终端 &#xff09; 输入 softwareupdate --install-rosetta 之后在输入 A 就可以了。 原产考地址&#xff1a;硬核&#xff01;在 M1 芯…...

M4Singer ubuntu 22.04 4060ti16g ModuleNotFoundError: No module named ‘gradio‘

故障 Traceback (most recent call last): File "inference/m4singer/gradio/infer.py", line 4, in <module> import gradio as gr ModuleNotFoundError: No module named gradio 解决 (venv3712) (base) yeqiangyeqiang-Default-string:~/Downloa…...

postman 密码rsa加密登录-2加密密码

上一篇讲了获取公钥&#xff0c;将环境准备好之后&#xff0c;在登录接口的Pre-request Scrip 里&#xff0c;使用公钥进行加密后在正常登录。本文采用的方案是使用第三方模块forge.js来实现加密。 1、环境准备好&#xff0c;系统git 和node都OK。下载forge.js git clone htt…...

如何去图片水印?这些方法解决你的问题

当我们希望更新自己的头像时&#xff0c;经常会发现网上有许多精彩的图片&#xff0c;但它们通常带有水印&#xff0c;使我们无法轻松使用这些照片。这个情况大家应该都有遇到过吧&#xff1f;那么&#xff0c;如何去除图片上的水印呢&#xff1f;接下来&#xff0c;我们将分享…...

Qt通过正则表达式筛选出字符串中的手机号

需求 用户需要聊天记录中含有11位的手机号码进行提醒的功能&#xff0c;所以需要在收到聊天消息后匹配查看是否存在手机号。如果找到然后提醒。 分析 主要的需求可以拆分为两点&#xff1a; 筛选出字符串里面的数字字符。通过正则匹配数字字符是否是11位手机号码。 一开始没…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...