首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
其他开发语言
汇编语言
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
关于汇编器和连接器的困惑
[已结贴,结贴人:qlmi]
加为好友
发送私信
在线聊天
qlmi
大米
等级:
可用分等级:
富农
总技术专家分:
246
总技术专家分排名:
55045
揭帖率:
84.09%
发表于:
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
回复次数:
10
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
alan001
星岛孤裔林郎君(屹峰)
等级:
可用分等级:
小地主
总技术专家分:
2675
总技术专家分排名:
8082
发表于:
2008-08-23 16:13:38
1
楼 得分:
0
.一个工程可能含有多个ASM文件,MASM可编译成多个obj,最后确定无语法错误才链接成exe
.DLL导入导出lib文件和子程序集二进制代码库文件当然不一样
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gzgzlxg
LXG
等级:
可用分等级:
贫农
总技术专家分:
928
总技术专家分排名:
21464
发表于:
2008-08-23 16:57:18
2
楼 得分:
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
回贴亦是善举
等级:
可用分等级:
乞丐
总技术专家分:
105613
总技术专家分排名:
45
5
2
13
发表于:
2008-08-23 17:49:36
3
楼 得分:
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
LXG
等级:
可用分等级:
贫农
总技术专家分:
928
总技术专家分排名:
21464
发表于:
2008-08-23 18:10:11
4
楼 得分:
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
I LOVE 鲁伊.科斯塔
等级:
可用分等级:
富农
总技术专家分:
2755
总技术专家分排名:
7678
发表于:
2008-08-23 19:48:39
5
楼 得分:
0
学习!!!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
qlmi
大米
等级:
可用分等级:
富农
总技术专家分:
246
总技术专家分排名:
55045
发表于:
2008-08-24 10:41:37
6
楼 得分:
0
我的问题其实比较初级,就是要搞清楚,ML,masm,link这三个文件的关系,具体说来就是,如果我只有ML,是不是也能实现汇编和连接的功能?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
cnzdgs
回贴亦是善举
等级:
可用分等级:
乞丐
总技术专家分:
105613
总技术专家分排名:
45
5
2
13
发表于:
2008-08-24 12:42:09
7
楼 得分:
0
需要ml.exe和link.exe,看我前面的回复。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
qlmi
大米
等级:
可用分等级:
富农
总技术专家分:
246
总技术专家分排名:
55045
发表于:
2008-08-24 14:52:32
8
楼 得分:
0
cnzdgs 你说的是正确的,我刚刚按照你说的方法试了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
touta
该用户很懒,没有设置昵称
等级:
可用分等级:
贫农
总技术专家分:
233
总技术专家分排名:
59367
发表于:
2008-08-24 20:08:20
9
楼 得分:
0
啊,没的问题了,接分
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
qlmi
大米
等级:
可用分等级:
富农
总技术专家分:
246
总技术专家分排名:
55045
发表于:
2008-08-25 17:13:18
10
楼 得分:
0
gzgzlxg:
能否给我发一份MASM5.12 和完整安装带升级版的6.11
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友