首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于汇编器和连接器的困惑 [已结贴,结贴人:qlmi]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qlmi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-23 15:32:33 楼主
    麦兜:
        你好!关于汇编器、连接器、库文件管理器的使用中有太多的困惑,详述如下,请抽时间指点一二:
        1.我们用老版本的MASM汇编器来处理汇编源程序,然后再用link连接成DOS下可执行文件;
          到了后来高版本的汇编/连接器ML可以同时实现汇编和连接,不知道是不知ML里面就已经全部包含
          了这两种功能,还是要调用MASM和LINK来实现呢?这个问题我曾经在论坛里问过,有个网友告诉我
          说是ML调用LINK.EXE来实现连接的。
        2.类似的问题是关于库文件管理器LIB.EXE的。MASM611中的LIB.exe和MASM32V9中的LIB有什么区别?
          MASM32V9中的LINK可以带参数/LIB来管理库文件,那这个LINK是不是也要调用LIB.EXE,还是他自
          己就有这个功能?这两个LIB生成的库文件好像不能相互通用,这是为什么?
     
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alan001
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 16:13:381楼 得分:0
    .一个工程可能含有多个ASM文件,MASM可编译成多个obj,最后确定无语法错误才链接成exe
    .DLL导入导出lib文件和子程序集二进制代码库文件当然不一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gzgzlxg
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 16:57:182楼 得分:50
    ML 可以直接生成可执行文件,只要取消/c参数。这样做的结果和分步执行并没有什么区别。
    一般习惯上在开发阶段并不需要生成EXE文件,这个时候,加上/c参数,可以加快编译速度,从而获得出错信息。至于你最后一句,是调用Link来实现的,是多余的问题,不管它通过何种途径生成了EXE文件,对你而言都是一样,不过如果你自己参与过项目的开发,当知道,没有人会两次开发同类型的代码,所以ML是通过LINK来生成EXE文件的,ML的这个功能有点像鸡肋,食之无味,弃之可惜。
    这里特别要说明一下,这个对很多初学汇编,不熟悉汇编历史的人来说都很重要,你说的那个MASM32 v9 其本质是MASM V5.12或更早前的版本(时间久了,记不清是其中的那个版本,但这并不重要)。这是爱好者自己在原有的版本上自行修改而成的,而且多少年没有提升过真正的版本(即修改前的那个版本)。
    你的第二个问题即编译器和链接器的问题,编译器是向下兼容的,即可以使用32位汇编的任何版本来编译,即不管它是ML还是MASM都可以,使用ML并加上.386p或多少"p",可以使许多32位的指令得以直接在程序中书写代码,而不需要加什么 db 66h 后跟什么需要使用32位的操作码的指令。也就是说,LINK和LIB是不能向下兼容的,如果你想在DOS下运行你开发的程序或库,你只能使用纯种DOS的LINK或LIB,也就是5.12或以前的版本的LINK或LIB。
    这两个链接器链接出来的可执行文件exe(包括com)或lib是完全不同的,一个只能在32位下运行,一个只能在16位下运行。不过既是你弄错了,也没有什么关系,最多就是给你一个提示符"改程序只能运行在某环境下“,死不了人,也不伤害机器。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 5

      2

      13

    发表于:2008-08-23 17:49:363楼 得分:50
    1、ml.exe是编译器,可以调用link.exe来自动连接;masm.exe是调用ml.exe来编译的。
    2、MASM611和MASM32可以认为是两种不同的汇编工具,前者可以生成多种程序,后者只能生成Windows程序,两者生成的obj和lib是不通用的,两者使用的link程序也是不同的。至于MASM32的link.exe是否调用lib.exe,这个我不清楚,你可以把lib.exe先改成其它名字然后用link试一下,如果在没有lib.exe的情况下可以正常生成,那么就不是调用lib.exe来实现的;也可以反过来验证一下lib.exe是不是调用了link.exe。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gzgzlxg
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 18:10:114楼 得分:0
    分水岭是5.12这个最好支持DOS的纯种汇编编译器。6.11是第一个完全适应Windows32位环境下的汇编语言编译器,6.11出来后随后跟着出了两个更新包,一个将6.11更新到6.14,一个将6.11更新到6.15,其后微软在正式发现的6.11中都包含这两个升级包,所以你可以将这个版本称为6.11、6.14、6.15 都是对的。
    ml=masm+link是在6.11中首次出现的,在该软件的说明书中明确的提出,如果你想开发纯DOS下的程序,可以使用ML或MASM,完整安装带升级版的6.11中包含了这两个编译器。同时给出了两个链接器,和编译器不同的是,链接器只能针对某个特别的系统,你不能用支持dos的链接器去编译运行在window32下的程序,反之也不行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dongyi940333
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 19:48:395楼 得分:0
    学习!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qlmi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-24 10:41:376楼 得分:0
    我的问题其实比较初级,就是要搞清楚,ML,masm,link这三个文件的关系,具体说来就是,如果我只有ML,是不是也能实现汇编和连接的功能?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 5

      2

      13

    发表于:2008-08-24 12:42:097楼 得分:0
    需要ml.exe和link.exe,看我前面的回复。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qlmi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-24 14:52:328楼 得分:0
    cnzdgs 你说的是正确的,我刚刚按照你说的方法试了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • touta
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-24 20:08:209楼 得分:0
    啊,没的问题了,接分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qlmi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-25 17:13:1810楼 得分:0

    gzgzlxg:

    能否给我发一份MASM5.12 和完整安装带升级版的6.11
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved