汇编语言-多模块程序结构

1.程序模块

多模块程序结构

程序分段、子程序等实现了程序模块化
开发大型应用程序时常使用
   ▶多个源程序文件
   ▶目标代码模块等
组成完整的程序形成多模块程序结构

源文件包含

大型源程序可以合理地分放在若干个文本文件中
   ▶各种常量定义、声明语句等组织在包含文件(*.INC)
   ▶常用的或有价值的宏定义存放在宏定义文件(*.MAC)
   ▶常用的子程序形成汇编语言源文件(*.ASM)
   ▶任何文本文件

源文件包含的使用

被包含文件
   ▶文件名要符合操作系统规范
   ▶操作过程make32 eg0508
   ▶只能是文本文件
   ▶内容被插入源文件包含include语句所在的位置
实质仍然是一个源程序
   ▶只是分开在若干个文件中
   ▶只需针对主体源程序文件进行汇编、连接

模块连接

子程序单独编写一个源程序文件
   ▶使用共用伪指令PUBLIC和外部伪指令EXTERN
   ▶声明子程序在代码段,与主程序文件采用相同的存储模型
   ▶没有开始执行和结束执行点,但有汇编结束语句
   ▶处理好子程序与主程序之间的参数传递问题
子程序源文件汇编形成目标模块OBJ文件
连接时输入子程序目标模块文件名

模块连接的操作过程

   ▶子程序单独编写一个源程序文件
   ▶子程序源文件汇编形成目标模块OBJ文件
   ▶连接时输入子程序目标模块文件名

子程序库

子程序库是子程序模块的集合,便于统一管理子程序
编写存入库文件的子程序
   ▶遵循更加严格的子程序模块要求
   ▶应该遵循一致的规则(以免在使用时造成混乱)
子程序文件编写完成、汇编形成目标模块
利用库管理工具程序把子程序模块加入到子程序库

子程序库的使用

子程序单独编写一个源程序文件
子程序源文件汇编形成目标模块OBJ文件
利用库管理工具把子程序模块加入到子程序库
在连接主程序时提供子程序库文件名

库文件包含

要使用已存入库文件中的子程序
在主程序源文件中用库文件包含伪指INCLUDELIB声明
   使用库文件包含伪指令INCLUDELIB
       includelib 文件名
   ;使用库文件中的子程序

库文件包含的使用

将子程序源文件汇编、模块文件加入子程序库
   ML lc lcoff eg0508es.asm
   LIB32/OUT:eg0508.lib eg0508es.obj
源文件中用库文件包含伪指令INCLUDELIB声明
正常对主程序汇编、连接,无需在连接时输入库文件名
   ▶编写主程序、子程序更加独立
   ▶子程序使用更方便
   操作过程
   make32 eg0508e

2.宏汇编

宏汇编

(Macro)是具有宏名的一段汇编语句序列
宏需要先使用MACRO/ENDM伪指令进行定义
然后在程序中使用宏名(带参数)进行宏调用
源程序进行汇编时
   ▶宏名被汇编程序用宏定义的
   ▶代码序列替代,实现宏展开
这个过程就是“宏汇编”
    ▶宏定义
    宏名  macro [形参表]
           ….  ;宏定义体endm
         endm

宏汇编的特点

宏需要先定义后使用,且不必在任何段中
   ▶常书写于源程序开始位置
   ▶常用的宏定义可以单独写成一个宏定义文件
宏定义中更改了寄存器内容,最好进行保护和恢复
宏定义的参数灵活,宏定义允许嵌套和递归调用
宏调用不需要控制的转移与返回
   ▶宏调用将相应的语句序列复制到宏指令的位置
   ▶宏展开被嵌入源程序,成为一体

宏与子程序:简化程序

宏仅是源程序级的简化
   ▶宏调用在汇编时进行程序语句的展开,不需要返
   ▶回不减小目标程序,执行速度没有改变
子程序不仅简化源程序,还是目标程序级的简化
   ▶子程序调用在执行时由CALL指令转向、RET指令返回
   ▶形成的目标代码较短,执行速度减慢

宏与子程序:传递参数

宏通过形参、实参结合实现参数传递
   ▶使用软件方法,简洁直观、灵活多变
   ▶传递出错多体现为语法错误,易于发现
子程序利用寄存器、存储单元或堆栈等实现
   ▶运用硬件本身,规则严格、方法固定
   ▶传递出错常反映为逻辑或运行错误,较难排除

宏与子程序:选用原则

   ▶当程序段较短或要求较快执行时
选用宏
   ▶宏常依附于源程序,适合进行全局性预处理
   ▶当程序段较长或为减小目标代码时
选用子程序
   ▶子程序更具有独立性,可以分别编写
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DbillionBUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值