标题:
Keil汇编进阶指南(2) - 段与数据
[打印本页]
作者:
Astrix
时间:
2024-11-28 23:58
标题:
Keil汇编进阶指南(2) - 段与数据
段与数据
在汇编中,没有函数的概念,有的只是段,按照我的习惯,我会直接把一个模块写成一整段,里面可能会有很多函数
正常来说,我们会用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一起写的)
?PR?LCD1602 SEGMENT CODE
复制代码
这样,美妙的开头就写完了
作者:
Astrix
时间:
2024-11-29 00:42
?PR?LCD1602 SEGMENT CODE
RSEG ?PR?LCD1602
复制代码
重新补一下代码
作者:
188610329
时间:
2024-11-29 11:46
你说错了, ORG 位置是相对的,是可以偏移的,并不会打架
RSEG 只是 针对 CSEG , ISEG , XSEG 这些绝对位置而言,起到重定向的目的。因此,相对而言,喜欢用用ORG 来定义 中断向量 而不用CSEG AT 才是最大的问题,需要避免。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1