如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
5.2.1源程序的结构.486;方式定义DATASEGMENTUSE16;定义数据段MESGDB‘HELLO’,0DH,0AH,’$’DATAENDSCODESEGMENTUSE16;定义代码段ASSUMECS:CODE,DS:DATA;说明段约定BEG:MOVAX,DATA;BEG为启动地址MOVDS,AXMOVCX,10LAST:MOVAH,9MOVDX,OFFSETMESGINT21HLOOPLASTMOVAH,4CHINT21H;返回DOSCODEENDSENDBEG;汇编结束1.方式选择伪指令2.段定义语句3.段约定语句4.过程定义语句5.汇编结束语句6.返回DOS语句这类语句是与程序结构密切相关的基本语句,用来说明MPU类型、段结构与寻址方式的段约定、目标块的定位和源程序结束。1.方式选择伪指令指令以句号开头,格式和功能如下:2.段定义语句功能:是逻辑段的定界语句,源程序中每一个逻辑段都必须用段定义语句定界。段定义语句格式如下:段名SEGMENT定位参数链接参数‘分类名’段长度段体段名ENDS定位参数,链接参数,‘分类名’为段定义语句的3个属性参数,可以选用1~3个,也可以全部省略。属性参数的功能:为源程序的汇编、链接提供必要的信息。(1)定位参数定位参数通知链接程序,逻辑段的目标代码在存储器中如何存放。①BYTE字节地址:表明该逻辑段的目标代码可以从任意地址开始依次存放;②WORD字地址:表示该逻辑段的目标代码,从偶地址开始依次存放;③PARA(或者缺省)节地址:表示该逻辑段的目标代码,从一个能被16整除的地址开始依次存放;④PAGE页地址:表示该逻辑段的目标代码,从一个能被256整除的地址开始依次存放。(2)链接参数链接又称组合,链接参数通知链接程序如何将不同模块中的同名逻辑段组合成一个段①PUBLIC:通知链接程序,把不同模块中具有PUBLIC属性的同名段,在满足定位方式前提下,按照指定的链接顺序进行链接,组成一个逻辑段;②MEMORY:实验证明MEMORY属性和PUBLIC属性是等价的;③COMMON:通知链接程序,把不同模块中,具有COMMON属性的同名段,根据指定的链接顺序,按照“覆盖”方式组合成一个逻辑段。组合之后的逻辑段体积,等于链接之前具有COMMON属性同名段中最大的段体;④STACK:具有STACK属性的逻辑段是堆栈段,链接程序将把不同模块中具有STACK属性的同名段链接成一个大的堆栈段。链接后的堆栈空间是链接前各模块预留的堆栈空间之和。程序装入后,DOS自动给SS寄存器赋值,使之等于堆栈段段基址,自动给SP赋值,使之等于堆栈空间的字节数,使SS:SP自动指向栈顶。链接程序要求:EXE文件的汇编源程序,必须有堆栈段,否则链接时发出警告信息:Warningnostacksegment这行信息仅仅是提醒用户注意,并不表示源程序有什么错误。⑤AT表达式:该属性表明:逻辑段在定位时,其段基址等于表达式给出的值。AT属性常和ORG伪指令配合如:DATASEGMENTAT0040HORG0017HKEYFLAGDB?DATAENDS定义键标志单元(KEYFLAG)的物理地址为00417H,以便代码段中可以使用变量名KEYFLAG访问这个单元。AT参数不能使用在代码段。⑥缺省:表明该段是一个独立的逻辑段,链接程序对于不同模块中,链接参数缺省的同名段,不进行组合。(3)‘分类名’表示逻辑段的类别。由用户定义,是长度不超过40个字符的字符串。分类名必须用单引号括起来,分类名可有可无。习惯上,数据段分类名用’DATA’,代码段分类名用’CODE’,堆栈段分类名用‘STACK’。链接程序把不同模块中分类名相同的同名段组织成一类,存放在邻近的存储区中。(4)段长度这一参数是80386、80486汇编语言新增的段参数,只有高版本的汇编器才能识别,它有两种描述方式可供选择:①USE16:表示该逻辑段长度最大允许为64K,单元的有效地址为16位,访问该逻辑段应采用16位寻址方式。②USE32:表示该逻辑段长度可以超过64K,单元的有效地址为32位,访问该逻辑段采用32位寻址方式。【小结】1.段定义语句有4个属性参数,每一个参数都有多种选择。2.模块化程序中才有必要考虑各模块之间同名段的定位方式和链接方式。对于单一模块的程序不需考虑这些问题。3.单一模块的程序,如果有堆栈段的话,堆栈段的链接属性应为STACK(因为只有STACK属性才表示该段是堆栈段),分类名应为用’STACK’,且不能省略。其它的逻辑段,前3个属性参数都选用缺省方式。4.不同模块中,链接方式相同的同名段