《汇编语言实用教程》第5章 汇编语言源程序组成_第1页
《汇编语言实用教程》第5章 汇编语言源程序组成_第2页
《汇编语言实用教程》第5章 汇编语言源程序组成_第3页
《汇编语言实用教程》第5章 汇编语言源程序组成_第4页
《汇编语言实用教程》第5章 汇编语言源程序组成_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.1.1段的定义在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义的段名。书写时,应该首先用段定义伪指令SEGMENT/ENDS定义各逻辑段,再用段寻址伪指令ASSUME指出各逻辑段与段寄存器之间的关系,各逻辑段的顺序是随意安排的,通常是数据段在前,代码段在后。段定义的一般格式如下。格式:段名[对齐类型][组合类型][类别];段内的具体内容;段内的具体内容段名SEGMENT……ENDS出现上述问题的主要原因就是,字变量W1在数据段内的偏移量是奇数,为了保证其偏移量是偶数,需要在其定义之前加上伪指令EVEN。所以,可把前面的变量定义改变成下列形式:B1

DB

12HEVENW1

DW

4567H这时,变量的内存分配和读取字变量W1的过程如图5.8所示。3.对齐伪指令ALIGNALIGN伪指令是将当前偏移地址指针指向n(n是2的乘方)的整数倍的地址,即若原地址指针已指向n的整数倍地址,则不作调整;否则将指针加以l~n-l中的一个数,使地址指针指向下一个n的整数倍地址。格式:ALIGN

n标题定义伪指令TITLE是给程序指定一个标题,以便在列表文件中每一页的第一行都显示这个标题。格式:

TITLE标题名伪指令END标志源程序结束,并指定程序运行时的起始地址。它一方面告诉汇编程序,END伪指令后面的任何语句在汇编时都被略去,另一方面又告诉汇编程序,在程序装入内存时根据起始地址(如一个标号)的段基值和偏移量分别自动装入CS和IP中。格式:END

起始地址1.伪指令PUBLIC伪指令PUBLIC是用来说明当前模块中哪些标识符是能被其他模块引用的公共标识符。其说明的一般格式如下。格式:PUBLIC

标识符1,标识符2,…

2.伪指令EXTRN伪指令EXTRN是用来说明在当前模块所使用的标识符中,哪些标识符是已在其他模块中被定义为指定类型的标识符。伪指令EXTRN的一般说明格式如下。格式:EXTRN

标识符1:类型1,标识符2:类型2,…下面是两个程序模块连接的例子,模块MODULE1源程序如下:TITLE

MODULE1"I

am

a

student

"SEGMENTDBENDSDATAVAR1DATASTACKlSEGMENT

PARA

STACK20H

DUP

(1)STACKlPUBLICEXTRNCODElDWENDSSTRINGEXT1:

FARSEGMENTSTART:ASSUME

CS:

CODEl,

DS:

DATA,

SS:

STACK1...CALL

EXT1...CODElENDSENDSTART模块MODULE2源程序如下。TITLE

MODULE2EXT1VAR1:

BYTESEGMENTPROC

FARPUBLICEXTRNCODE2EXT1...MOV

DX,

OFFSET

VAR1...RETEXT1CODE2ENDPENDSEND5.5.1使用4CH系统功能调用正常结束DOS为程序设计人员提供了很多系统功能调用,其中调用号为4CH的系统调用的功能是结束程序执行返回DOS,因此可以利用它来完成程序返回操作系统,其具体方法是在程序结束时,使用以下两条指令:AH,

4CH21HMOVINT例如:…CODESEGMENTASSUMECS:CODE,

…START:

…;程序主体;4CH号系统功能调用MOVINTAH,

4CH21H;结束程序,返回DOS系统CODEENDSENDSTART在DOS转移控制权时,将CS指向EXE程序的代码段,SS指向堆栈段,DS和ES并不指向用户程序的数据段和附加段,而是指向PSP,这样便于用户使用和处理PSP中的信息。因此,EXE文件装入内存后,存储器的分配情况如图5.9所示。应用程序只要设法转到PSP的偏移0处,就能实现程序的终止,返回DOS。其具体的步骤如下。把用户程序编制成一个过程,并且将过程的类型属性设置为FAR。将PSP的起始逻辑地址压入堆栈,即将“INT

20H”指令的地址压入堆栈。由于EXE文件装入内存时DS和ES都是指向PSP的,因此用指令“PUSH

DS”就可以实

现将PSP的起始逻辑地址(INT

20H的逻辑地址)压入堆栈的操作。在用户程序编制而成的过程结束时使用返回指令RET,这样执行该指令时系统便会将保存在堆栈中的PSP起始逻辑地址弹出到CS和IP中,进而转去执行PSP首地址处的指令INT

20H,从而实现返回DOS的目的。例如:…CODEPROClSEGMENTPROC;使用过程,主程序开始FARASSUME

CS:CODE,

…DS;保存PSP首地址,START:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论