您的位置 首页 编程

A51中段和RSEG用法

RSEG是段选择指令,要想明白它的意思就要了解段的意思。段是程序代码或数据对象的存储单位。程序代码放到代码段,数据对象放到数据段。段分

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:

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/258132.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部