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?_?函数名?文件名
又例如 你定义了全局变量
//test.c
unsigned char data temp1,temp2;
unsigned char xdata temp3; 
在test.c文件中,编译器会为每个文件分0到多个全局数据段相同类型的全局变量被存到同一段中。所以上面会编译成如下:

RSEG ? DT? TEST
.
.
;
RSEG ?XD? TEST
. 

//下面是各个类型的数据全局段的表示
?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:
 

段和RSEG用法的更多相关文章

  1. 汇编语言段和RSEG用法

    RSEG是段选择指令,要想明白它的意思就要了解段的意思.段是程序代码或数据对象的存储单位.程序代码放到代码段,数据对象放到数据段.段分两种,一是绝对段,一是再定位段.绝对段在汇编语言中指定,在用L51 ...

  2. RSEG用法和汇编问号的涵义

    RSEG是段选择指令,要想明白它的意思就要了解段的意思.段是程序代码或数据对象的存储单位.程序代码放到代码段,数据对象放到数据段.段分两种,一是绝对段,一是再定位段.绝对段在汇编语言中指定,在用L51 ...

  3. call,apply,bind的用法

    关于call,apply,bind这三个函数的用法,是学习javascript这门语言无法越过的知识点.下边我就来好好总结一下它们三者各自的用法,及常见的应用场景. 首先看call这个函数,可以理解成 ...

  4. strace命令简单用法

    strace可以显示一个程序经历的系统调用,接收到的信号等信息. 用法: 1.strace -ff -o output programName 将程序programName的写入output文件中,- ...

  5. javascript中call,apply,bind的用法对比分析

    这篇文章主要给大家对比分析了javascript中call,apply,bind三个函数的用法,非常的详细,这里推荐给小伙伴们.   关于call,apply,bind这三个函数的用法,是学习java ...

  6. memset 导致的一个段错误

    原型: void *memset(void *s, int c, size_t n); 解释: memset :是 逐字节 拷贝,即n是指整个变量所占字节,在用于数组时一定要注意n不一定是 数组元素. ...

  7. Keil C51中变量和函数的绝对地址定位问题

    1.变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. unsigned char idata myvar _at_ 0x40;  把变量 myvar 定义在 idata 的 0 ...

  8. OVER 分析函数

    over不能单独使用,要和分析函数:rank(),dense_rank(),row_number(),ntile ,sum(),avg()等一起使用. rank,dense_rank,row_numb ...

  9. (转)浅谈HTML5与css3画饼图!

    神马系饼图? 饼图,大家都应该熟知,在统计数据对比方面,几乎处处用到.如cnzz的统计饼图 从饼图中,很形象地展示了访问者地区的分布,以扇形为块的方式拼成一个大圆. 都使用什么方法实现 目前众多站点制 ...

随机推荐

  1. hdu 1732 Push Box

    http://acm.hdu.edu.cn/showproblem.php?pid=1732 推箱子和游戏规则一样. #include <cstdio> #include <cstr ...

  2. linux下ifconfig, DNS以及route配置

    转载:http://blog.csdn.net/wangjingfei/article/details/5283632/ 熟悉使用ifconfig 会非常方便. ifconfig eth0 新ip 然 ...

  3. 使用jQuery来检测远程图片文件是否存在

    使用jQuery来检测远程图片文件是否存在 最近为我的憨豆人笑园添加图片功能时,遇到了这个问题,用户可以填写一个远程的图片地址,也可以上传一个本地图片.为了不浪费服务器的资源,我们需要在客户端先对用户 ...

  4. 【转】使用vnc连接linux服务器方便hadoop开发调试

    VNC(Virtual Network Computing)它能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上. 类似的软件在Windows服务器中包含的"Terminal Serve ...

  5. WPF页面切换及弹窗

    WPF页面切换及弹窗 结构如图: 效果如图: 代码如下: xaml <Window x:Class="PageChange.MainWindow" xmlns="h ...

  6. Gym Class(拓扑排序)

    Gym Class Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  7. uva 310 L--system(隐式图搜索+字符串处理)

     L-system  A D0L (Deterministic Lindenmayer system without interaction) system consists of a finite ...

  8. Android窗口管理服务WindowManagerService显示窗口动画的原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8611754 在前一文中,我们分析了Activi ...

  9. CSU 1808 地铁

    题意: ICPCCamp 有 n 个地铁站,用 1,2,-,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i 段地铁属于 ci 号线,位于站 ai,bi 之间,往返均需要花费 ti 分钟 ...

  10. 是什么让我想到开发NFinal

    我是从01前开始就接触.net,那时.net还是1.0时代,很多东西都没有.后来.net出了2.0版本.从vs2005开始就使用Webform做网站.当时感觉.net能够拖来拖去,很厉害.参加工作后, ...