- 1、本文档共147页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]微型计算机原理与应用王永山第5章
第 5 章 多模块程序设计 5.1 汇编语言程序的多模块连接 5.2 结 构 与 记 录 5.3汇编语言程序与高级语言程序的连接 汇编语言子程序: DGROUPGROUP -DATA, -BSS -DATA SEGMENT WORD PUBLIC ′DATA′ EXTRN -A:WORD PUBLIC -B -B DW 0 -DATA ENDS -BSS SEGMENT WORD PUBLIC ′BSS′ PUBLIC -R -R DD ? -BSS ENDS -TEXT SEGMENTBYTE PUBLIC ′CODE′ ASSUME CS:-TEXT, DS:DGROUP, SS:DGROUP PUBLIC -Y -Y PROC FAR PUSH BP MOV BP, SP MOV CX, [BP+6] MOV AX, [-A] DEC CX L1: MUL WORD PTR [-A] LOOP L1 ADD AX, -B JNC L2 INC DX 80END; 汇编语言子程序: CODESEGMENT ASSUME CS: CODES PUBLICHEXOUT HEXOUTPROCFAR PUSHBP MOVBP, SP PUSHAX PUSHBX PUSHCX PUSHDX MOVBX, [BP+6] MOVAX, [BX] PUSHAX MOVCX, 04 HEX1:POPAX PUSHCX MOVCL, 04 ROLAX, CL POPCX PUSHAX ANDAL, 0FH ADDAL, 30H CMPAL, 3AH JLOUT1 ADDAL, 07H OUT1:MOVDL, AL MOVAH, 02H INT21H LOOPHEX1 POPAX POPDX POPCX POPBX POPAX POPBP RET2 HEXOUTENDP CODESENDS END 2. 编译BASIC程序与汇编语言子程序的连接 尽管解释BASIC有许多优点,但它速度太慢,在科学计算等应用中受到了一定的限制,而编译BASIC在一定程度上克服了解释BASIC的缺点,从而得到广泛应用。由于编译BASIC的源文件经编译后可以产生目标文件,因而它与汇编语言子程序的连接也十分简单。连接方法主要有以下 3 点: (1) 首先利用BASCOM.COM程序对源程序进行编译, 形成BASIC程序的目标模块。如果IBM PC/XT(286#, 386)中有8087(80287#, 80387),可采用87编译BASIC。 87 BASCOM.COM编译时需使用O开关,即回答源文件名时应为:源文件名/O/O。 (2) 利用宏汇编对汇编语言子程序进行汇编, 形成汇编语言子程序的目标模块。 (3) 利用LINK程序把以上分别形成的两个目标模块连接起来。这样,便形成了一个完整的可执行文件。 这里需要说明几点: (1) 编译BASIC的源文件通常应由编辑程序建立。若是在解释BASIC状态下形成的源文件,则存盘时应加A参数,格式如下: SAVE 文件名.BAS, A (2) 编译BASIC语言程序作为主程序, 在调用汇编语言子程序时,只需使用调用语句CALL即可,它不需要对汇编语言子程序的段和偏移地址作任何设定,这是由LINK完成的。 (3) BASIC语言主程序在调用时,也可以有带参调用和无参调用两种。带参调用时,在执行调用语句的时候同样将参数的地址依次压入堆栈,以便传递给汇编语言子程序。 (4) 汇编语言子程序以过程形式编写,其类型应为FAR。 汇编语言子程序中必须用伪指令PUBLIC指出该过程为外部过程, 可供其它模块调用。
文档评论(0)