- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二节伪指令
第二节 伪指令
汇编语言程序中的语句可以由指令、伪指令和宏指令组成。上一章我们介绍了8086指令系统中的6类指令,每一条指令都对应一种CPU操作。 伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。 宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。宏指令将在第七章中介绍。 伪指令和指令的区别在于,每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其它伪指令不生成目标码。和各种指令一样,伪指令也是程序设计不可缺少的工具。下面介绍一些常用的伪指令。
4.2.1 处理器选择伪操作
.8086 选择 8086 指令系统
.286 选择 80286 指令系统
.286P 选择保护模式下的 80286 指令系统
.386 选择 80386 指令系统
.386P 选择保护模式下的 80386 指令系统
.486 选择 80486 指令系统
.486P 选择保护模式下的 80486 指令系统
.586 选择 Pentium 指令系统
.586P 选择保护模式下的 Pentium 指令系统
4.2.2 段定义伪指令 段定义伪指令是表示一个段开始和结束的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪指令来表示各种段。
1.完整段定义伪指令的格式如下:
由于ASSUME伪指令只是指定某个段分配给哪一个段寄存器,它并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中: MOV AX,DATA_SEG1 ; 数据段地址 MOV DS,AX ; 存入DS寄存器 MOV AX,DATA_SEG2 ; 附加段地址 MOV ES,AX ; 存入ES寄存器 如果程序中还定义了堆栈段STACK_SEG,也需要把段地址装入SS中: MOV AX,STACK_SEG ; 堆栈段地址 MOV SS,AX ; 存入ES寄存器 注意,在程序中不需要用指令装入代码段的段地址,因为在程序初始化时,装入程序已将代码段的段地址装入CS寄存器了。而DS和ES是指向一个称为“PSP”(程序段前缀)的一块区域的首地址。
为了对段定义作进一步地控制,SEGMENT伪指令还可以增加类型及属性的说明,其格式如下: 段名 SEGMENT [定位类型][组合类型][类别] … 段名 ENDS
[ ]中的内容是可选的,一般情况下,这些说明可以不用。但是,如果需要用连接程序把本程序与其他程序模块相连接时,就需要提供类型和属性的说明。
·定位类型:说明段的起始边界值(物理地址)。
定位类型
说 明
BYTE
段可以从任何地址边界开始
WORD
段从字边界开始,即段的起始边界值为偶数
DWORD
段从双字的边界开始,即段的起始边界值为4的倍数
PARA
段从小段边界开始,即段的起始边界值为16 (或10H) 的倍数
PAGE
段从页边界开始,即段的起始边界值为256 (或100H) 的倍数
注意: 定位类型的缺省项是PARA,即在未指定定位类型的情况下,则连接程序默认为PARA。BYTE和WORD用于把其它段(通常是数据段)连入一个段时使用;DWORD一般用于运行在80386及后继机型上的程序。
·组合类型:说明程序连接时的段组合方法。
组合类型
说 明
PRIVATE
该段为私有段,连接时将不与其它模块中的同名段合并
PUBLIC
该段连接时将与其它同名段连接在一起,连接次序由连接命令指定
COMMON
该段在连接时与其它同名段有相同的起始地址,所以会产生覆盖
AT 表达式
段地址=表达式的值,其值必为16位但AT不能用来指定代码段
MEMORY
与PUBLIC同义
STACK
将多个同名堆栈段连接在一起,SP设置在第一个堆栈段的开始
注意:组合类型的缺省项是PRIVATE。
例: 在连接之前已定义两个目标模块如下: 模块1 SSEG SEGMENT PARA STACK DSEG1 SEGMENT PARA PUBLIC Data DSEG2 SEGMENT PARA CSEG SEGMENT PARA Code 模块2
文档评论(0)