伪指令SEGMENT被用来声明一个普通段。一个再定位类型(relocation type)和一个地址分配类型(allocation type)可以按如下形式指明:

segment SEGMENT class reloctype alloctype

其中

segment

是分配给段的符号名。该符号名由后面的RSEG伪指令引用。段符号名也可用于表达式中代表由连接/定位器计算的组合段的基地址或起始地址。
class

class是指定段所用的存储类型。class为该段指明了存储空间。参见下面的表格获取更多信息。
reloctype

是该段的再定位类型。它决定连接/定位器要完成什么样的再定位选项。参见下面的表格获取更多信息。
alloctype
是该段的地址分配类型。它决定连接/定位器要完成什么样的再定位选项。参见下面的表格获取更多信息。

  Class(存储类型)

  一个模块中每个段的名称必须是唯一的。但是,连接器将把相同类型的段组合起来。对于在其它源文件模块中定义的段也是如此。class为段指明了存储类型空间。A251区分基本存储类型和用户定义的存储类型。连接/定位器使用class访问属于那一存储类型的所有段。

基本的存储类型如下表:

基本存储类型 说 明
BIT BIT空间(地址20H .. 2FH)。
CODE CODE空间
CONST CONST空间;同CODE但只能存储常数;通过MOVC访问。
DATA DATA空间(地址0到7FH & SFR寄存器)
EBIT 扩展的251位空间(地址20H .. 7FH)
EDATA EDATA空间
ECONST ECONST空间;同EDATA但只能存储常数
IDATA IDATA空间(地址0到0FFH)
ECODE Intel/Atmel WM 251和Philips 80C51MX存储程序代码的整个地址空间。
HCONST Intel/Atmel WM 251和Philips 80C51MX存储常数的整个地址空间。
HDATA Intel/Atmel WM 251和Philips 80C51MX存储数据的整个地址空间。
XDATA XDATA空间;通过MOVX访问。

  用户定义的存储类型名称(只适用于AX51和A251)

  用户定义的存储类型名称由一个基本的存储类型名称和一个扩展名组成,还要用单引号(')把它括起来。使用它们,我们可以像使用基本的存储类型名称一样访问相同的地址空间。好处是我们可以用一个用户定义的存储类型声名几个段,以后使用连接器把那一类型(及其段)定位在一个特定的物理地址中。参见英文手册336页的“CLASSES”获取如何定位用户定义类型的信息。

  例程

seg1 SEGMENT 'NDATA FLASH'
seg2 SEGMENT 'HCONST BITIMAGE'
seg3 SEGMENT 'DATA1'

  重定位类型(Relocation Type)

  选项重定位类型定义可能由连接/定位器完成的重定位操作。下表列出了正确的重定位类型:

重定位类型 说 明
AT 地址 声明一个绝对段。该段将被定位在指定的地址。
BITADDRESSABLE 声明一个将被放置在位可寻址空间(DATA空间20H到2FH)的段。BITADDRESSABLE只适用于DATA存储类型的段,并且长度不能超过16个字节。
INBLOCK 声明一个必须包含在2048字节模块中的段。该重定位类型只对具有CODE存储类型的段有效。
INPAGE 声明一个必须包含在2048字节页中的段。
OFFS 偏移量 声明一个绝对段。该段被定位在指定类型存储空间起始地址加指定偏移量的位置。与AT重定位类型相比较,它的优点是起始地址可以用Lx51连接/定位器控制指令CLASSES修改。参见英文手册336页的“CLASSES”获取更多信息。
OVERLAYABLE 指明该段可以与其它段共享存储空间。具有该重定位类型的段可以与其它也用OVERLAYABLE重定位类型声明过的段相重叠。当使用该重定位类型时,段名必须遵守C251,CX51,C51或PL/M-51的段名规则。
INSEG 参见C编译器用户指南获取更多信息。

  地址分配类型(Allocation Type)

  选项地址分配类型定义可能由连接/定位器完成的地址分配操作。下表列出了正确的地址分配类型:

地址分配类型 说 明
BIT 为段指明位对齐。对于所有具有BIT存储类型的段这是默认值。
BYTE 为段指明字节对齐。对于除BIT外的所有段,这是默认值。
WORD 为段指明字对齐。
DWORD 为段指明双字对齐。
PAGE 声明一个段的起始地址必须在256字节的页边界上。
BLOCK 声明一个段的起始地址必须在2048字节的块边界上。
SEG 声明一个段的起始地址必须在64K字节的段边界上。

  段声明的例子

IDS     SEGMENT    IDATA                        ;定义一个名为IDS的段,其存储类型为IDATA。
MYSEG   SEGMENT    CODE    AT       0FF2000H    ;定义一个名为MYSEG的段,其存储类型为CODE,而且被定位在地址0FF2000H。
HDSEG   SEGMENT    HDATA   INSEG    DWORD       ;定义一个名为HDSEG的段,存储类型为HDATA。该段位于64K字节的段内,并且是DWORD对齐的。
XDSEG   SEGMENT    XDATA            PAGE        ;定义一个名为XDSEG的段,存储类型为XDATA。该段是PAGE对齐的,也就是说从256字节的页开始。
HCSEG   SEGMENT    HCONST           SEG         ;定义一个名为HCSEG的段,存储类型为HCONST。该段是SEGMENT对齐的,也就是说从64K字节段开始。

段(SEGMENT)的更多相关文章

  1. oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最关键的文件.它们是数据存储的地方.每一个数据库至少有一个与之相关的数据文件,通常情况下不仅仅一个,有非常多.数据在数据文件里是怎样组织的?要了解这些内容我们首先必须理解什 ...

  2. oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...

  3. ELF Format 笔记(十四)—— 段内容

    ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的, ...

  4. Oracle表空间、段、区和块

    数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...

  5. 段的创建表user_segments

    1.段的定义及类型 Oracle中的段(segment)是占用磁盘空间的一个对象,最常见的段类型包括: l  聚簇cluster l  表table l  表分区 tablepartition l  ...

  6. 以太网帧、TCP与UDP段以及IP数据报格式总结

    传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...

  7. Oracle 11g的Deferred Segment Creation

    本篇主要介绍Oracle 11g中推出的“延迟段创建”(Deferred Segment Creation)特性,以及当我们使用这种特性时,需要注意的问题. 1)Deferred Segment Cr ...

  8. Oracle 表空间、段、区和块简述

    数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...

  9. Oracle表空间、段、区和块简述

    本文转载自:http://blog.itpub.net/17203031/viewspace-682003/ 在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念.表空间.段. ...

  10. 段的创建表user_segments 分类: H2_ORACLE 2013-08-10 11:13 714人阅读 评论(0) 收藏

    1.段的定义及类型 Oracle中的段(segment)是占用磁盘空间的一个对象,最常见的段类型包括: l  聚簇cluster l  表table l  表分区 tablepartition l  ...

随机推荐

  1. 磁盘IO性能监控(Linux 和 Windows)

    磁盘IO性能监控(Linux 和 Windows) 作者:终南   <li.zhongnan@hotmail.com> 磁盘的IO性能是衡量计算机总体性能的一个重要指标.Linux提供了i ...

  2. adb链接手机调试android应用

    adb链接手机调试android应用 hulk@hulk-Lenovo:~$ adb devices List of devices attached  ???????????? no permiss ...

  3. UDP数据接收服务器

    简介 这是我在做一个要用UDP方式进行数据传输时,自己写的一个多线程的UDP数据接收服务器, 它能将接收到的UDP数据包存成文件,并提供数据包接收时间监测: 还支持键盘命令响应,以将数据写到新的文件, ...

  4. 完整的拆分nginx访问日志

    <pre name="code" class="html"> 10.168.255.134 [09/Oct/2016:15:28:52 +0800] ...

  5. RFC3261--sip

    本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...

  6. WEB打印插件Lodop

    Lodop.C-Lodop使用说明及样例   Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印.控件功能强大,却简单易用,所有调用如 ...

  7. 腾讯TT浏览器应用程序发生异常(0xc0000409) 位置为0x027a1f7f 的解决办法

    2013年8月26日下午,腾讯TT浏览器 4.8版1000 出现“应用程序发生异常(0xc0000409)  位置为0x027a1f7f ”的错误,导致浏览器自动关闭. 无论重新卸载安装还是 清理系统 ...

  8. VS快捷编码方式

    概念: 代码段是将预先定义好的可重用代码块快速插入到代码文件中,代码段提高了开发效率,增强了代码的可重用性:既节约了时间,又实现了不同开发人员间代码的共享.同时也可保证同一项目中代码风格的统一.   ...

  9. Java遍历Map对象的四种方法

    在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...

  10. Android应用程序安装过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...