第4章 伪指令与源程序格式.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 伪指令与源程序格式 汇编语言程序的语句有三种,即指令、伪指令,还可以有宏指令。关于宏指令将在第7章介绍,本章介绍部分常用的伪指令(又称伪操作)。这些伪指令在程序中是必不可少的,主要用来定义数据变量和程序结构。本章还介绍指令中的操作数和运算符,通过本章的学习,可以学会使用简便而有效率的指令格式,正确定义数据变量,熟知源程序的格式,编写完整的汇编语言程序。 4.1 伪指令 伪指令和指令不同的是,指令是在程序运行期间由计算机的CPU来执行的,而伪指令是在汇编程序对源程序进行汇编期间由汇编程序处理的操作。它们可以完成如定义数据、定义程序模式、分配存储区、指示程序结束、处理器选择等功能。这里只介绍一些常用的伪指令。有些和宏汇编有关的伪指令在介绍宏汇编时再作说明。 4.1.1 处理机选择伪指令 由于80x86的所有处理器都支持8086指令系统,但每一种高档的机型又都增加了一些新的指令。为了能使用这些新增指令,在编写程序时要用处理机选择伪指令对所用的处理机作出选择,也就是说,要告诉汇编程序应该选择哪一种指令系统。 处理机选择伪指令有以下几种: .8086 选择8086指令系统 .286 选择8O286指令系统 .286P 选择保护方式下的80286指令系统 .386 选择80386指令系统 .386P 选择保护方式下的8O386指令系统 .486 选择80486指令系统 .486P 选择保护方式下的8O486指令系统 .586 选择Pentium指令系统 .586P 选择保护方式下的Pentium指令系统 指令中的点‘.’是需要的。这类伪指令一般放在整个程序的最前面。如不给出,则汇编程序认为其默认选择是8086指令系统。 4.1.2 段定义伪指令 我们结合第2章已介绍的程序实例2来看段定义,注意有分号的注释行,程序如下: 例4.1 data segment ;定义数据段data string db ‘hello,world!$’ data ends code segment ;定义代码段code assume cs:code,ds:data ;指定段寄存器和段的关系 start:mov ax,datamov ds,ax mov dx,offset string mov ah,9 int 21h mov ah,4ch int 21h code ends end start ;segment_name SEGMENT … segment_name ENDS 其中segment_name由用户确定,大写的为关键字。段定义伪指令两句成对出现,两句之间为其它指令。 为了确定用户定义的段和哪个段寄存器的关系,用ASSUME伪指令来实现。 ASSUME伪指令格式: ASSUME register_name:segment_name …,register_name:segment_name 其中register_name为段寄存器名,必须是CS,DS,ES和SS。而segment_name则必须是由段定义伪指令定义的段中的段名。 ASSUME伪指令只是指定把某个段分配给哪一个段寄存器,它并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中。为此,还需要用两条MOV指令完成这一操作。但是,代码段不需要这样做,代码段的这一操作是在程序初始化时完成的。 一般情况下,使用上述的段定义伪指令就可以了,如果需要对段定义作进一步地控制,SEGMENT伪指令还可以增加类型及属性的说明,其格式如下: segment_name SEGMENT [定位类型][组合类型][ 使用类型][“类别”] … segment_name ENDS 如果需要用连接程序把本程序与其他程序模块相连接时,就需要使用这些说明,具体内容安排在第6章有关子程序的多模块设计中介绍。 2.简化的段定义伪指令 MASM5.0以上版本还支持一种简化的段定义方法,把例4.1程序用简化的段定义方法可以改写如下: 例4.2 .model small ;定义存储模型为small .data ;定义数据段data string db ‘hello,world!$’ .code

文档评论(0)

love + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档