MASM和LINK(5.0版本)命令的基本用法
从Microsoft的MASM汇编开始学习的汇编,MASM命令的详细用法少有书籍介绍,博主从《Microsoft Micro Assembler User's Guide》中学习后记录如下:
一、MASM 5.0的基本语法是
MASM [options] sourceName,[objectName],[listFileName],[crossReferenceName]
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 [hello.OBJ]: <回车>
Source listing [NUL.LST]: <回车>
Cross reference [NUL.CRF]: <回车>
如果在提示输入的时候输入;(分号),那么后面的选项将按默认方式处理,不再提示。
MASM <回车> Source filename.me [.ASM] : file <回车> Object filename [file.OBJ] : f123; <回车>
3、[option]参数部分,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 [option] objectfiles[,[executablefile[,mapfile[,libraryfile]]]][;]
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环境变量中寻找链接代码。