找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 737|回复: 2
打印 上一主题 下一主题
收起左侧

Keil汇编进阶指南(2) - 段与数据

[复制链接]
跳转到指定楼层
楼主
ID:1080301 发表于 2024-11-28 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
段与数据
在汇编中,没有函数的概念,有的只是段,按照我的习惯,我会直接把一个模块写成一整段,里面可能会有很多函数


正常来说,我们会用ORG开头来写程序,但是这样是极其不规范的,为啥呢,举个例子,你现在有个16k空间写代码,你不确定你的同事写了什么玩意,它好像是在100H写的,嗨,管他呢,我直接在1000H写。啥?前面还有空间没利用?不要了!第三个人一看,欧呦你在1000H写,那我往后,我也不知道你写在哪,那就2500H吧,看我多好,七八个人写完以后,整个code空间碎了吧唧的,这留个500b那边甚至空了2K,好辣,现在开始真正的挑战了,第九个同事要在夹缝中生存了!拼拼凑凑挤出个2K,再来三四个,好了,代码变成了依托不可名状,现在你要改某个东西,动了一两个字节,整个程序轰的一声塌了
正确的做法是什么呢,把这活给该干的程序干,就是BL51
多说无益,上代码
我这里以LCD1602的驱动为例子
首先,我们给这个段起个名字,起个?PR?LCD1602(这个借鉴了C编译器命名标准,你随意,你只要能分出啥是啥就行)
对于C编译器来说?PR?代表程序段,?DT?代表数据段,暂时说这两个,其他的可以自行查看文档
好了,我们可以开始干活了,首先要用到的就是SEGMENT关键字,用法如下
名字 SEGMENT 类型
类型就是这几种

CODE 代码
DATA 数据
IDATA (这个内存有点特别,官方给的是(此内存类中的变量通过寄存器R0或R1访问。))
XDATA 用MOVX的
还有个EDATA,这个仅在NXP 80C51MX有效
BIT 位,顾名思义

写完了这个声明好了这是什么,我们需要开始第一句,也就是代替ORG的RSEG
用法:RSEG 段名字
RSEG就是可重定位段,用来把链接的活给BL51干
特别注意,汇编不分大小写!所以建议你全大写表示这是汇编代码(养成好习惯,后面这玩意要和C一起写的)
  1.         ?PR?LCD1602 SEGMENT CODE
复制代码

这样,美妙的开头就写完了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1080301 发表于 2024-11-29 00:42 | 只看该作者
  1. ?PR?LCD1602 SEGMENT CODE
  2. RSEG ?PR?LCD1602
复制代码

重新补一下代码
回复

使用道具 举报

板凳
ID:624769 发表于 2024-11-29 11:46 | 只看该作者
你说错了, ORG 位置是相对的,是可以偏移的,并不会打架
RSEG  只是  针对 CSEG , ISEG , XSEG  这些绝对位置而言,起到重定向的目的。因此,相对而言,喜欢用用ORG 来定义 中断向量 而不用CSEG AT 才是最大的问题,需要避免。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表