基于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? | program | CODE | 可执行程序代码代码 |
| ?CO? | code | CODE | 程序存储区的常数数据 |
| ?BI? | bit | BIT | 内部数据区的位寻址数据 |
| ?BA? | bdata | BDATA | 内部数据区的可位寻址数据 |
| ?DT? | data | DATA | 内部数据区 (SMALL存储模式) |
| ?FD? | far | far存储区(RAM空间) | |
| ?FC? | const far | FAR存储区(ROM空间) | |
| ?ID? | idara | IDATA | 间接寻址内部数据区 |
| ?PD? | pdata | XDATA INPAGE | 外部数据区的分页数据 (COMPACT存储模式) |
| ?XD? | xdata | XDATA | XDATA存储区(ram空间,LARGE存储模式) |
| ?XC? | const xdata | CODE | XDATA存储区(rom空间) |
相关文章:
基于Keil a51汇编 —— 程序模板文件以及规则
程序模板文件 下面的代码模板包含有关如何编写自己的程序集模块的指南和提示。此模板文件模板。A51 在文件夹 \C51\ASM 中提供。 $NOMOD51 ; 禁用预定义的 8051 寄存器 #include <reg52.h> // 包含头文件; ;根据需要更改小写名称。 ;该汇编模板让你…...
案例研究 | 玉湖冷链基于JumpServer实现管理安全一体化
玉湖冷链(中国)有限公司(以下简称为玉湖冷链)是玉湖集团旗下的冷链食品供应链企业。依托自有的国际高标数智化冷链园区产业集群,玉湖冷链提供一站式国内外代采、仓干配物流解决方案、全链路创新金融支持、高品质生活办…...
JavaEE初阶学习:HTTP协议和Tomcat
1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…...
ASEMI整流桥GBU810参数,GBU810封装
编辑-Z GBU810参数描述: 型号:GBU810 最大直流反向电压VR:1000V 最大工作峰值反向电压VRWM:700V 最大平均正向电流IF:8A 非重复正向浪涌电流IFSM:200A 操作和储存温度范围TJ ,TSTG:-55 t…...
docker应用记录总结
一、前言 docker这类部署工具,久而久之不使用非常容易忘记,甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结,纯属是温故知新。 二、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,可以向淘宝服务器发起HTTP请求,获取商品评论数据。接口返回的数据一般为JSON格式,包含了商品的各种评价信息。获取到商品评论数据后,可以对其进行处理…...
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以及一些其他的依赖与工具时遇到以下报错情况: 依赖环环相扣,手动无法解决。 总结: 出现需要很多依赖项的情况是因为软件源中没有可用的依赖项或者依赖项版本不正确。 其实在Ubuntu系统中,使用sudo…...
C/C++之自定义类型(结构体,位段,联合体,枚举)详解
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 个人主页:点我进入主页 …...
HBase 表如何按照某表字段排序后顺序存储的方法?
首先需要明白HBase表的排序规则: (1)rowkey排序(字典排序)——升序 (2)Column排序(字典排序)——升序 (3)时间戳排序——降序 rowkey 字典序排序…...
webrtc用clang编译支持h264,支持msvc调用库
webrtc遇到困扰: 如果msvc编译,ffmpeg编译失败,需要替换ffmpeg库。如果用clang编译,vs或qt调用dll又存在崩溃。 经过反复尝试找到解决方法: 一、编译 1、编译参数 //我得环境配置 set DEPOT_TOOLS_UPDATE0 set DEP…...
迁移学习是什么?
迁移学习(Transfer Learning)是一种机器学习方法,它的主要思想是将已经在一个任务上学到的知识迁移到另一个相关或不相关的任务上,以提高目标任务的性能。迁移学习的核心概念是,模型可以通过先前学到的知识来更好地解决…...
哈希的应用--位图和布隆过滤器
哈希的应用--位图和布隆过滤器 位图1. 位图概念2. 位图在实际中的应用3. 位图相似应用给定100亿个整数,如何找到只出现一次的整数?1个文件100亿int,1G内存,如何找到不超过2次的所有整数 布隆过滤器1. 布隆过滤器的提出2. 布隆过滤…...
mac M2芯片在使用Android studio 编译问题bad cpu type in executable android
由于mac的intel芯片的一些指令集没有同步在M1 M2芯片上所以需要做兼容 打开控制台(通过访达 - 应用程序 - 实用工具 - 终端 ) 输入 softwareupdate --install-rosetta 之后在输入 A 就可以了。 原产考地址:硬核!在 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加密密码
上一篇讲了获取公钥,将环境准备好之后,在登录接口的Pre-request Scrip 里,使用公钥进行加密后在正常登录。本文采用的方案是使用第三方模块forge.js来实现加密。 1、环境准备好,系统git 和node都OK。下载forge.js git clone htt…...
如何去图片水印?这些方法解决你的问题
当我们希望更新自己的头像时,经常会发现网上有许多精彩的图片,但它们通常带有水印,使我们无法轻松使用这些照片。这个情况大家应该都有遇到过吧?那么,如何去除图片上的水印呢?接下来,我们将分享…...
Qt通过正则表达式筛选出字符串中的手机号
需求 用户需要聊天记录中含有11位的手机号码进行提醒的功能,所以需要在收到聊天消息后匹配查看是否存在手机号。如果找到然后提醒。 分析 主要的需求可以拆分为两点: 筛选出字符串里面的数字字符。通过正则匹配数字字符是否是11位手机号码。 一开始没…...
如何一键完成飞书文档格式转换:3种高效迁移方法指南
如何一键完成飞书文档格式转换:3种高效迁移方法指南 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 想要将飞书文档快速转换为Markdown格式吗?feishu2md项目为您提供了一键…...
如何解决3D视频无法在普通设备播放的难题?VR-Reversal让转换更简单
如何解决3D视频无法在普通设备播放的难题?VR-Reversal让转换更简单 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitco…...
ai全程护航:让快马智能助手帮你搞定proteus安装与初学难题
最近在折腾Proteus仿真软件时,发现从安装到入门会遇到不少"坑"。好在发现了InsCode(快马)平台的AI辅助功能,整个过程变得轻松多了。这里分享下如何用AI搞定Proteus全流程难题的实践心得。 智能安装诊断 第一次安装Proteus时,遇到许…...
保姆级教程:在Windows 11上用VSCode和Conda搞定Depth-Anything-3(含常见报错修复)
Windows 11深度估计实战:VSCodeConda环境下的Depth-Anything-3全流程指南 深度估计作为计算机视觉领域的重要技术,正在自动驾驶、增强现实等场景中发挥关键作用。本文将带你在Windows 11系统上,使用VSCode和Conda搭建Depth-Anything-3开发环境…...
3分钟快速上手!Balena Etcher终极镜像烧录工具完全指南
3分钟快速上手!Balena Etcher终极镜像烧录工具完全指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher Balena Etcher是一款革命性的跨平台镜像烧录工…...
如何快速掌握扩散模型:PyTorch实现的终极指南
如何快速掌握扩散模型:PyTorch实现的终极指南 【免费下载链接】Diffusion-Models-pytorch Pytorch implementation of Diffusion Models (https://arxiv.org/pdf/2006.11239.pdf) 项目地址: https://gitcode.com/gh_mirrors/di/Diffusion-Models-pytorch 想要…...
3步搞定黑苹果配置:OpCore-Simplify自动化EFI构建终极指南
3步搞定黑苹果配置:OpCore-Simplify自动化EFI构建终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置头疼吗&…...
从ImageNet到CV落地:深度解读AlexNet的6个工程优化技巧
从AlexNet到现代CV工程:6个历久弥新的优化策略解析 当AlexNet在2012年ImageNet竞赛中以压倒性优势夺冠时,它带来的不仅是准确率的飞跃,更是一套影响深远的工程实践方法论。十年过去,尽管网络架构已迭代数十代,但AlexNe…...
OpenClaw远程控制方案:通过nanobot实现安全外网访问
OpenClaw远程控制方案:通过nanobot实现安全外网访问 1. 为什么需要远程控制OpenClaw? 上周我需要出差三天,但电脑上运行的OpenClaw自动化任务突然报错。当时我面临两个选择:要么让任务中断三天,要么冒险把本地网关直…...
2026权威评测:毕业论文AIGC降重盘点!免费试用首选
【CSDN极客特稿AI科研生产力专栏】 各位深夜还在实验室和IDE里跑模型、改Paper的硕博兄弟们,见字如面。 把日历翻到2026年,当大语言模型(LLM)的参数量卷上天际的同时,各大高校的“反作弊探测矩阵”也完成了史诗级的底层…...
