- 26
- 0
- 约1.75千字
- 约 2页
- 2015-07-22 发布于河北
- 举报
汇编语言段和 RSEG 用法
2012-04-10 10:12 81 人阅读 评论(0) 收藏 举报
RSEG 是段选择指令,要想明白它的意思就要了解段的意思。
段是程序代码或数据对象的存储单位。程序代码放到代码段,数据对象放到数据段。段分两
种,一是绝对段,一是再定位段。绝对段在汇编语言中指定,在用L51 联接的时候,地址
不会改变。用于如访问一个固定存储器的i/o,或提供中断向量的入口地址。而再定位段的地
址是浮动的。它的地址有L51 对程序模块连接时决定,C51 对源程序编译所产生的段都是再
定位段,它都有段名和存储类型。绝对段没有段名。
说了这么多,大家可能还是不明白段是什么意思。别急,接着往下看。
例如,你写用C 写了一个函数 void test_fun(void) { …} , 存在test.c 中,用编译器编译以
后. SRC FILE 中看到:
?PR?test_fun?TEST SEGMENT CODE //(函数放到代码段中)
写这个函数体的时候: RSEG ?PR?test_fun?TEST //选择已定位的代码段为当前段
test_fun:
……//代码
所以函数的表达模式是这样: ?PR?函数名?文件名
而函数名又分: 1:无参函数 ?PR?函数名?文件名
2:有参函数 ?PR?_函数名?文件名
3:再入函数 ?PR?_?函数名?文件名
又例如 你定义了全局变量 unsigned char data temp1,temp2; unsigned char xdata temp3;
在test.c 文件中,编译器会为每个文件分0 到多个全局数据段,相同类型的全局变量被存到
同一段中。所以上面会编译成如下:
RSEG ? DT? TEST
. temp1: DS 1
. temp2: DS 1
;
RSEG ?XD? TEST
. temp3: DS 1
//下面是各个类型的数据全局段的表示
?CO? 文件名 //常数段
?XD? FILE_NAME //XDATA 数据段
?DT? FILE_NAME //DATA 数据段
?ID? FILE_NAME //IDATA…..
?BI? FILE_NAME // BIT …..
?BA? FILE_NAME //BDATA….
?PD? FILE_NAME //PDATA…..
看到这里大家应该明白段的意思了吧。也许你会问,这有什么作用哪?它就是用在当你需要
用汇编语言写一部份程序的时候,把汇编写的函数放在这个问件中,改名xxx.a51,按上面的
规则写。
编译就好。
既然知道了段的意思,现在我们回到SEG 的用法上来。
A51 中有两种段选择指令 : 再定位段选择指令 和 绝对段选择指令. 它们用来选择当前段
是再定位段还是绝对段。使用不同的段选择指令,将使程序定位在不同的地址空间之内。
1: 再定位段的选择指令是: RSEG 段名
它用来选择一个在前面已经定义过的再定位段作为当前段。
用法就像我们上面的例子,先申明了一个函数段,后面写这个函数段。
2: 绝对段选择指令
CSEG [AT 绝对地址表达式] //绝对代码段
DSEG [AT 绝对地址表达式] // 内部绝对数据段
XSEG [AT 绝对地址表达式] //外部绝对数据段
ISEG [AT 绝对地址表达式] // 内部间接寻址绝对数据段
BSEG [AT 绝对地址表达式] //绝对位寻址段
它们的用法我举一个例子:
例如我们写串口中断程序,起始地址是0x23.就这样写
CSEG AT 0X23
LJMP serialISR
RSEG ?PR?serialISR?TEST
. serialISR:
您可能关注的文档
最近下载
- 电子病历系统应用水平四级实证材料通用模板(基本项部分)(2022版).doc VIP
- 实施指南《GB_T37306.1-2019金属材料疲劳试验变幅疲劳试验第1部分:总则、试验方法和报告要求》实施指南.docx VIP
- 中药生产监督管理专门规定-培训.pptx VIP
- 大学在线开放课程建设实施方案.docx VIP
- 电子病历系统应用水平四级实证材料通用模板(选择项部分)(2024版).doc VIP
- 北师大版六年级数学下册第一单元《圆柱与圆锥》课件.pptx VIP
- PEP人教版小学英语四年级下册阅读理解练习36篇.pdf VIP
- 2025年云南省中考数学——26题二次函数降次幂精选题35道.docx VIP
- 《化妆品中凝血酸(氨甲环酸)的测定 高效液相色谱法》.pdf VIP
- 厂房建设投资估算表.xls VIP
原创力文档

文档评论(0)