段(SEGMENT)
伪指令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)的更多相关文章
- oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
数据文件和日志文件是数据库中最关键的文件.它们是数据存储的地方.每一个数据库至少有一个与之相关的数据文件,通常情况下不仅仅一个,有非常多.数据在数据文件里是怎样组织的?要了解这些内容我们首先必须理解什 ...
- oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...
- ELF Format 笔记(十四)—— 段内容
ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的, ...
- Oracle表空间、段、区和块
数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...
- 段的创建表user_segments
1.段的定义及类型 Oracle中的段(segment)是占用磁盘空间的一个对象,最常见的段类型包括: l 聚簇cluster l 表table l 表分区 tablepartition l ...
- 以太网帧、TCP与UDP段以及IP数据报格式总结
传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...
- Oracle 11g的Deferred Segment Creation
本篇主要介绍Oracle 11g中推出的“延迟段创建”(Deferred Segment Creation)特性,以及当我们使用这种特性时,需要注意的问题. 1)Deferred Segment Cr ...
- Oracle 表空间、段、区和块简述
数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...
- Oracle表空间、段、区和块简述
本文转载自:http://blog.itpub.net/17203031/viewspace-682003/ 在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念.表空间.段. ...
- 段的创建表user_segments 分类: H2_ORACLE 2013-08-10 11:13 714人阅读 评论(0) 收藏
1.段的定义及类型 Oracle中的段(segment)是占用磁盘空间的一个对象,最常见的段类型包括: l 聚簇cluster l 表table l 表分区 tablepartition l ...
随机推荐
- 使用PULL方式解析XML资源文件下面的xml文件
public class MainActivity extends Activity { private Button btn = null; private List<Map<Strin ...
- spring bean初始化和销毁
spring bean的创建与消亡由spring容器进行管理,除了使用<bean><property/></bean>进行简单的属性配置之外,spring支持更人性 ...
- SQL Interview Question
面试的时候发现会问一些SQL的基本问题,在此总结一下. ProgramInterview/SQL 这个网站上的问题还比较全. 1. Join type INNER JOIN: Returns all ...
- hadoop多文件输出
现实环境中,经常遇到一个问题就是想使用多个Reduce,可是迫于setup和cleanup在每个Reduce中会调用一次,仅仅能设置一个Reduce,无法是实现负载均衡. 问题,假设要在reduce中 ...
- Qt Assistant 的配置文件qhp--->qch 和qhcp--->qhc详解与生成
Qt Assistant 这个exe文件可以被我们利用到我们自己的程序为我们添加help,是一个文档浏览器,它的搜索功能,还有最主要的就是他可以让客户自己定义自己索要显示的文档,也就是qch文档. ...
- 关于 linux ssh 的配置.
一.禁止root用户远程登录: # cd /etc/ssh # vi sshd_config 将 permitRootLogin 后面的值改成 no 如下图: 然后再重启sshd服务即可,如下: # ...
- html_day3
总结学习html的第一天 表格的结构说明 <table></table> <tr></tr> <td></td> <th& ...
- EffectiveC#17--装箱和拆箱的最小化
1.如下这段代码会经历装箱和拆箱.例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又 经历拆箱成int(第二次拷贝)后然后调用tostring(). Console ...
- MySql命令——命令行客户机的分隔符
delimiter // create procedure productpricint() begin select avg(price) as priceaverage from product; ...
- Http请求和响应报文基础知识
一 HTTP请求报文(http://en.wikipedia.org/wiki/List_of_HTTP_header_fields) 请求报文由三部分组成:请求行,请求头和请求体. 请求行:请求方法 ...