这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » A51中 RSEG 的用法

共1条 1/1 1 跳转至

A51中 RSEG 的用法

助工
2015-01-27 22:20:11     打赏
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 数据段

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]