×
单片机 > 单片机程序设计 > 详情

伪指令segment和RSEG和CSEG AT使用

发布时间:2020-08-26 发布时间:
|
SEGMENT     

              用于声明一个段名,属于汇编命令。
              其前面的符号表示段名,后面的符号为段的类型,如CODE为程序代码段,DATA代表内部RAM段。
RSEG DATA_SEG 
声明以下内容应位于可重定位的DATA_SEG段 

RSEG xxx
             声明以下的语句应位于可重定位的xxx段,在编译时不进行定位,只有在链接时才确定其固定地址。

CSEG AT 00000H 
声明以下代码位于开始地址是0000H的CODE段 


CSEG AT  yyyH
             声明以下代码应位于CODE的绝对地址yyyH,在编译时已进行定位,不可重定位。通常用于中断向量和复位向量声明。

1、伪指令org用来规定目标程序存放单元的偏移量。
比如,如果在源程序的第一条指令前用了如下指令: 
org 200h 那么,汇编程序会把指令指针的ip的值设成200h,即目标程序的第一个字节放在200h处,后面的 内容则顺序存放,除非遇上另一个org 语句。

 

2、CSEG AT 定义绝对地址,而不是相对地址,
CSEG [AT absolute address] Define an absolute segment within the code address space.

当有C51与汇编混合编程时而要定位某段汇编代码,最好使用CSEG AT XXXH。




使用以上编译指令的好处:
    通常在编写一个较大的项目时,都会将不同功能的程序划分成不同的模块。以便于功能调试以及代码重用,从而提高工作效率和程序稳定性,减少程序bug。例如在一个项目中使用到AT24Cxx存储器,我们可以将AT24C相关的驱动代码写在一个单独的模块(文件)中,在模块程序起始的地方用RSEG CODE_SEG声明代码可重定位。那么此程序会由编译系统自动决定其链接地址,在其他模块程序修改后不会对其产生任何影响。并且此模块可以很方便地应用到其他使用AT24C的项目中去。
    假如我们没有使用RSEG CODE_SEG,而是用ORG来声明,那么在其他模块程序修改后我们可能需要再次修改其地址值,稍有不慎可能会造成地址重叠,或者是空间浪费。
    为了保持良好的编程风格,在ME300系列开发板的大部分例程中均使用了以上伪指令。这些对于初学者可能一下子难于理解,刚开始学习时可以不用理会,或者暂时用EQU、ORG来代用。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机语音识别电路模块设计