(三)伪指令语句的增强与扩充
1.简化段定义伪指令
(1)简化段定义伪指令:完整段定义伪指令和简化段定义伪指令。在MASM5.0以上的汇编语言版本中,既可以使用完整段定义伪指令,又可使用简化段定义伪指令;在低于MASM5.0的版本中,只能使用完整段定义伪指。
简化段定义伪指令如下表所示。
简化段定义伪指令
段语句名 伪指令格式 功 能
代码段语句 .CODE[名字] 定义一个代码段,如果有多个代码段,要用名字加以区分
堆栈段语句 .STACK[长度] 定义一个堆栈段,并形成堆栈段寄存器SS和堆栈指针SP的初值。(SP)=长度,如果省略长度,则(SP)=1024
初始化近程数据段语句 .DATA 定义一个近程数据段,当用来与高级语言程序连接时,其数据空间要赋初值
非初始化近程数据段句 .DATA? 定义一个近程数据段,当用来与高级语言程序连接时,其数据空间只能用“?”定义,表示不赋初值
常数段语句 .CONST 定义一个常数段,该段是近程的,用来与高级语言程序连接, 段中数据不能改变
初始化远程数据段语句 .FARDARA?[名字] 定义一个远程数据段,且其数据语句的数据应赋初值,用来与高级语言程序连接
非初始化远程数据段句 .FARDARA[名字] 定义一个远程数据段,但其数据空间不赋初值,只能用“?”定义数据,用来与高级语言程序连接
(2)定义内存模式伪指令(MODEL)
在使用简化段定义伪指令时,必须事先说明用户使用的内存模式。格式:MODEL 模式类型[,高级语言]功能:指定数据和代码允许使用的长度。
●程序中凡数据或代码的长度不大于64KB时为近程,否则为远程。近程的数据通常定义在一个段中,对应于物理存储器中的一个段,只要程序一开始将其段值设置在DS中,以后数据的访问只改变偏移值,而不必改变其段值。
通常总是将定义内存模式伪指令语句放在用户程序中其他简化定义伪指令语句之前。可供选择的内存模式有5类,如下表所示。当独立的汇编语言源程序不与高级语言程序连接时,多数情况下只用小模式。
内存模式的类型
内存模式 说 明
Small 小模式,程序中的数据放在64KB的数据段内,代码放在64KB的代码段中,为近程
Medium 中模式,数据为近程,允许代码为远程
Compact 压缩模式,代码为近程,允许数据为远程
Large 大模式,允许数据和代码为远程,但一个数据段不能大于64KB
Huge 巨型模式,允许数据和代码为远程,且数据语句所用存储空间可以大于64KB
2.方式选择伪指令
80x86汇编语言是在8086/8088汇编语言的基础上逐步发展并向上兼容的,因此在对源程序进行汇编时,汇编程序首先要区分当前的源程序是针对80x86系列的哪种微处理器而执行的,为此提供了微处理器方式选择伪指令。又因为MASM5.0中对应每种微处理机的指令系统都有一个汇编执行语句集合,简称指令集,因此微处理器方式选择伪指令,实质上也就是指令集选择伪指令。方式选择伪指令的格式和功能下表所示。
方式选择伪指令的格式和功能
伪指令格式
功 能
.8086
这是一种默认方式,它告诉汇编程序只接受8086/8088指令
.286/.286C 它告诉汇编程序只接受8086/8088指令以及80286非保护方式下的指令,用.8086可以删除该伪指令
.286P 靠诉汇编程序接受8086/8088以及80286的所有指令(不仅包括保护方式下的指令,也包括非保护方式下的指令),通常只有系统设计人员才使用该伪指令,可以使用.8086伪指令删除
.386/.386C 告诉汇编程序接受8086/8088指令,以及80286/80386非保护方式下的指令。在这种方式下,将禁止所有保护方式下的指令出现,否则将出错
.386P 除具有.386/.386C功能外,还允许汇编保护方式下的80286/80386指令,通常只有系统设计人员才使用该伪指令。可以使用.8086伪指令删除
.8087 选用8087指令集,并指定实数的二进制码为IEEE格式
.287 选用80287指令集,并指定实数的二进制码为IEEE格式
.387 选用80387指令集,并指定实数的二进制码为IEEE格式
.486/.486C 允许汇编非保护方式下的80486指令。MASM6.0可以使用
.486P 允许汇编80486的全部指令。MASM6.0可以使用
上述伪指令语句一般放在源程序的开头
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |