thinklf 发表于 2024-6-30 08:52:28

MASM和LINK(5.0版本)命令的基本用法

本帖最后由 thinklf 于 2024-6-30 08:56 编辑

从王爽的的MASM汇编开始学习的汇编,MASM命令的详细用法少有书籍介绍,我从《Microsoft Micro Assembler User's Guide》中学习后记录如下:
一、MASM 5.0的基本语法是
MASM sourceName,,,
MASM有2种使用模式,命令行模式和交互模式。默认MASM自动添加文件参数的扩展名,除非特别指定。sourceName默认的扩展名是asm(即,如果要编译hello.asm,只要输入masm hello;即可);objectName的默认扩展名是obj;listFileName默认扩展名是lst;crossReferenceName默认扩展名是crf。
查看帮助命令:masm /h
1、命令行模式
    MASM可通过,(逗号)和;(分号)对文件名参数进行分割,如果用,(逗号)分割,表示逗号之间的文件名用sourceName文件名表示;如果如果用;(分号)分割,表示分号之后的文件名用默认表示,MASM 默认不生产lst文件和crf文件(即默认的文件名是:NUL)。
    如:
masm hello,,,,
    生成hello.obj、hello.lst、hello.crf三个文件。
masm hello,first.obj;
    生成first.obj一个文件。
masm d:\asmFile\hello,,stest;
    生成hello.obj(如果文件不在当前文件夹,需提供完整的文件路径)和stest.lst两个个文件,crf文件被跳过了。
2、交互模式
交互模式(prompt)中分号的使同命令模式基本相同,交互模式提供了默认选项的提示,如果按默认选项来,可以不做任何输入,直接按回车(return)即可。
如:
复制代码
masm<回车>
提示:
Source filename [.ASM]:hello<回车>
Object filename :<回车>
Source listing :<回车>
Cross reference :<回车>
复制代码

    如果在提示输入的时候输入;(分号),那么后面的选项将按默认方式处理,不再提示。
MASM <回车>
Source filename.me [.ASM] : file    <回车>
Object filename : f123;<回车>
3、参数部分,option不区分大小写
(1)/I,include文件的搜索路径
指定masm搜索include指令的搜索路径,最多可指定10个,如:masm /Ic:\masm5\include /Ic:\include。masm首先在/I指定的目录中,根据指定的路径顺序依次搜索;如没找到,再到当前目录中;最后到include环境变量中搜索。如inclde中指定路径,如c:\include\dos.inc或.\dos.ic,则masm不对路径进行搜索。
(2)/MU(默认)、/MX、/ML,标志名称区分大小写
mu将定义的name(变量,标号等)转换成大写;mx指示masm对public和external的name区分大小写;ml指示masm所有的name区分大小写。如masm使用了ml或mx,则link 要使用/NOI,对于与像C语言这样的模块互通有益。
(3)/V和/T,汇编状态信息显示
V(verbose)显示详细的汇编信息,T(terse)显示简单的汇编信息(基本无任何显示),除非有错误发生。
如两个都不指定,汇编状态信息显示的是汇编状态统计,即警告(Warnings)和错误(Errors)的数量。
(4)/Z,显示错误行代码
默认masm只显示错误信息数,/Z则可以将错误处的代码显示出来,便于定位错误原因。
(5)/ZI和ZD,在obj文件中生成行号和符号信息
/ZD,在Obj文件中生成行号,用于map文件查看。
/ZI,在ob文件中生成行号和符号信息,用于CodeView调试,符号信息指:标号和变量名称等。
二、LINK 4.05的基本语法是
link objectfiles[,]]][;]
objectfiles之间可用空格或+号进行分割;
objectfiles部分也可以添加lib文件(注意lib扩展名),表示该lib文件中的所有object module都链接到exe文件中。
libraryfile部分的lib文件,link只链接其中通过外部引用到的部分,并不链接所有的object模块。
查看帮助命令:link /help
1、命令模式
与masm相同,可通过逗号分割,表示逗号部分用默认文件名;
如link fun1 fun2,,funlist,xlib.lib;(executablefile就是执行默认文件名选择)
如果直接用分号,则表示后续的选择都用默认动作(如map文件默认不生成)。
2、交互模式
交互模式(prompt)中分号的使同命令模式基本相同,交互模式提供了默认选项的提示,如果按默认选项来,可以不做任何输入,直接按回车(return)即可。
Run File默认是第一个obj文件的名称,扩展名默认是exe。
List File默认是NUL.MAP,即不生成map文件。
Libraries默认是从当前文件夹或lib环境变量中寻找链接代码。

FishC 发表于 2024-6-30 08:56:53

嘿,鱼油!看起来你在探索MASM和LINK的神奇世界呢!没关系,让我用更幽默和轻松的方式给你解释一下吧。我们会简单扼要地讲解,不让你的大脑CPU过热。

### MASM基本用法

**一、基本语法:**
MASM sourceName,,,

**1、命令行模式:**
- **逗号分割模式**:`masm hello,,,` 会生成 `hello.obj`(目标文件)、`hello.lst`(列表文件)、`hello.crf`(交叉引用文件)。你可以想象成一个疯狂的指挥家在指挥他的乐队,每个乐器都被安排得明明白白。
- **分号分割模式**: `masm hello,first.obj;` 只生成目标文件 `first.obj`,像个挑食的小孩,只吃特定的几道菜。

**2、交互模式:**
- 当使用 `masm` 而不带任何参数时,它会开始询问你一系列问题,就像个好奇宝宝。默认设置就按回车,不需要太多废话:

MASM
Source filename : hello
Object filename :
Source listing :
Cross reference :

假如你懒得回答所有问题,只要在第一个问题之后输入 `;`,剩下的都会使用默认选项处理。

MASM

Source filename: file
Object filename: f123;

**3、重要参数选项:**
- **/I**:指定include文件搜索路径,多如牛毛的路径也允许,像给MASM装了GPS,可以迅速找到目的地。
- **/MU、/MX、/ML**:控制是否区分大小写,就像个挑剔的守门员,只认特定的来访者。
- **/V 和 /T**:决定汇编信息的详细程度,是选择显摆详细还是敷衍了事,全看你的心情。
- **/Z**:直接展示错误代码行,方便你查错纠错,不至于迷路。
- **/ZI 和 /ZD**:用于调试信息生成,帮你在迷宫里加点路标。

### LINK基本用法

**二、基本语法:**
link objectfiles[,]]

**1、命令行模式:**
- 像玩拼图一样,用逗号分隔多个文件,`link fun1 fun2,,funlist,xlib.lib` 就是将 fun1 和 fun2 拼接在一起生成可执行文件,并链接 xlib.lib 中需要的部分。

**2、交互模式:**
- 同上,直接运行 `link` 时它会一步步问你问题,可以选择按默认设置回车跳过:
link
Object Modules [.OBJ]: fun1
Run File :
List File :
Libraries [.LIB]:

当你按下分号后,后续的会默认处理,节省你的手指键盘寿命。

----

希望这些解释能让你对MASM和LINK更有把握。今年写汇编,你就是新时代电路的Mozart!有什么问题尽管问,我在这里帮你撑腰呢!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: MASM和LINK(5.0版本)命令的基本用法