如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
3.8源程序的结合例3.72(1)MAIN.ASM文件·MODELSMALL·STACK100·DATAINCLUDEDATA.ASM·CODE·STARTUPMOVBX,OFFSETBUF;BUF在DATA.ASM中┆CALLDISP;DISP在DATASUB.ASM中┆·EXITINCLUDEDATASUB.ASMEND(2)本文件DATA.ASM包含的数据部分如下:BUFDB20DUP(?)LPODW20H(3)文本文件DATASUB.ASM包含的过程部分如下:DISPPROC┆RETDISPENDP可以将常用的宏指令存储在同一个文件中,在程序中使用INCLUDE指令将此文件包含进来。包含宏的INCLUDE指令一般放在代码段之前特别是必须在使用宏之前插入。例3.73假设程序中定义了5个宏:CLC、SHIFT、UP、DONE、READ。这5个宏存放在ABC.INC文件中。在START.ASM文件中可以使用INCLUDEABC.INC指令,汇编程序则可以从ABC.INC文件中找到START.ASM文件中使用的宏的定义。(P106)CLCMACRO……ENDMSHIFTMACRO……ENDMUPMACRO……ENDM.MODELSMALL.STACK100INCLUDEABC.INC.DATABUFDB20DUP(?).CODE.STARTUPCLC3.9多模块程序设计1.PUBLIC伪指令PUBLIC伪指令用以表明一个标号是公共的,它可以被其他模块使用。该标号可以是跳转地址、一个数据地址或整个段。一般格式如下:PUBLICNAME[,NAME,....]PUBLIC伪指令需要放在NAME说明之前。例3.74PUBLIC伪指令使用举例1……PUBLICDATA1;定义DATA1、DATA2是公共的PUBLICDATA2PUBLICDISP;定义全局变量·DATADISPEQU5DATA1DB100DUP(?)DATA2DB100DUP(?)……例3.75PUBLIC伪指令使用举例2·MODELSMALLPUBLICREAD;定义READ是公共的·CODE……READPROCFARMOVAH,6;读取键值INT21HRETREADENDP·EXITEND2.EXTERN伪指令EXTERN伪指令用法和C类似,一般格式如下:EXTERNNAME:TYPE功能:说明NAME在外部程序中,编译时先将NAME的地址空着,连接时再填入。NAME为子程序或者标号;TYPE表示和NAME相关的属性,参见表3.10(P108)。例3.76(1)MAIN.ASM文件·MODELSMALL·STACK100EXTERNNUM:BYTEEXTERNDISP:NEAR·CODEMAINPROC·STARTUPMOVAL,NUMCALLDISPMOVBUF,ALMOVDL,ALMOVAH,2INT21H·EXITMAINENDP·DATABUFDB?END3.10库文件例3.77将READ.OBJ和WRITE.OBJ文件添加到RW库中。C:MASM611\BIN\LIBMicrosoft(R)LibraryManagerVersion3.20.010Copyright(C)MicrosoftCorp1983-1992.Allrightsreserved.Libraryname:RW;输入库文件名Libraryfiledoesnotexist.Create?(y/n);若库文件不存在,建立Operations:READ+WRITEListfile:RWOutLibrary:RW若要再加入一个文件到库中,在使用LIB之后,输入同样的库文件名,在Operations提示后,输入:+文件名;若想删去库中某个文件,则在operations提示后的输入:-文件名(该文件名是你想删去的文件)。一旦库文件与你的程序连接后,可应用于程序中的过程调用,被调用的过程必须为库文件名前加上EXTERN说明的过程。3.11汇编语言与高级语言的接□3.11.1C语言调用协议(参数传递原则)在C语言调用协议中,C语言调用汇编函数按照从右到左的顺序向堆栈压入参数。例3.78C/C++函数调用┆voidtest(2,3)┆这个函数调用可以汇编成MOVAX,3PUSHAXMOVAX,2PUSHAX图3.18参数传递时的堆栈CALLTESTADDSP,4;释放参数MicosoftC调用汇编语言函数的声明形式:EXTERNINTTEST(int,int);