masm安装教程.docx
《masm安装教程.docx》由会员分享,可在线阅读,更多相关《masm安装教程.docx(22页珍藏版)》请在冰豆网上搜索。
masm安装教程
实验二汇编编译工具MASM的利用
.实验目的
1、学习如何安装MASM;
2、学习如何利用和利用编译和链接汇编语言程序。
.基础知识
一、经常使用汇编语言工具
软件名称
运行平台
软件说明
下载地址
Masm
DOS
微软
汇编工具
Windows98/2000/XP
微软Win32
汇编工具
Windows98/2000/XP
微软Win32汇编工具
DOS
Borland
汇编工具
、DOS汇编与WIN32汇编
在DOS下编写汇编程序,程序员能够治理系统的所有资源,访问和改动系统中所有的内存,修改内存操纵块,修改中断向量表截获中断,直接对I/O端口进行读写。
DOS是个单任务操作系统,只有一个运行级别,任何进程和DOS操作系统都是同品级别的。
因此,DOS系统中各个进程会相互阻碍,若是某个进程死机的话,整个系统都会垮掉。
DOS工作在实模式下,程序员能够寻址1M的内存,通过段寄放器来指定段的初始地址,每一个段的大小为64K。
超过1M的部份,就只能把他作为XMS利用。
1M以上的内存空间只能用作数据寄存而无法在其中执行程序。
Win32是指32位的Windows操作系统,进程有多种运行级别,操作系统工作在最高级别——0级,而应用程序工作在3级。
在第三级别,进程无法直接访问I/O端口,无法访问其它进程运行的内存,连向自己的运行代码写入数据都是非法的。
只有关于最高级别的进程,系统才是全开放的。
Windows工作在爱惜模式下,所有的资源对进程来讲都是被“爱惜”的。
在内存方面,Windows利用了处置器的分页机制,程序员没必要用一个段寄放器去指定段的地址,因为在爱惜模式下,段寄放器的含义是不同的(参见80386手册方面的书籍)。
程序员能够直接指定一个32位的地址来寻址4GB的内存。
在程序结构方面,Windows程序也有专门大的不同,它是“基于消息”的。
在上面列举的汇编工具中,一些是DOS汇编工具,一些是Win32汇编工具。
初学者能够从DOS汇编入手,先把握汇编编程的思路、大体语法和编程技术,待入门后再学习Win32汇编。
固然,学习DOS汇编并非必然需要安装和利用DOS操作系统。
程序员能够在Win32环境中安装MASM或其它16位汇编工具,在命令提示符状态下编译和链接DOS汇编程序。
DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。
关于一些可能会阻碍整个操作系统工作的指令,Win32操作系统会拒绝执行。
.MASM的安装
第一从Internet下载,这是一个ZIP紧缩文件。
能够用WINZIP或WINRAR等紧缩解压软件指定一个目录将其解压,目录名例如为F:
\MASM60。
运行“命令提示符”,在解压目录中运行setup程序,开始安装MASM。
在主菜单界面选择“InstalltheMicrosoftMacroAssembler”继续。
在系统设置界面选择“DOS/Windows&NT”操作系统继续。
选择安装Windows有关文
选择安装PWD(Programmer’sWorkBench),继续。
不必安装“Briefcompatibility”(常见编辑器兼容),继续。
选择复制微软鼠标驱动器“MicrosoftMouseDriver”,继续。
选择安装MASM工具,继续。
选择安装帮忙文件,继续。
选择安装例程(sampleprogram),继续。
选择系统的安装目录,例如将系统安装在E盘。
接下来是询问各部份程序的安装目录,一样情形下由系统自行决定即可。
参数设置完毕后最后检查一次。
检查若是无需改动,那么选择“NOCHANGES”开始安装。
安装完毕后系统会提示MASM与版本有一些区别,具体的内容能够观看安装菜单中的“SpecialNoteforMASMusers”,或编程指南中的附录A。
设置MASM的DOS操作系统环境参数需要修改和两个文件,MASM提供了和两个文件作为参考。
若是MASM安装在Windows98/NT/2000/XP操作系统环境下,需要参考文件的内容进行设置,设置方式稍后介绍。
接下来是Windows操作系统环境下的设置要求。
若是MASM安装在Windows操作系统中,需要参考文件修改系统环境配置文件。
若是MASM安装在32位Windows中,不必理会的内容。
然后是关于PWD(Programmer’sWorkBench)的设置,安装系统会提供一个参考文件。
最后是有关内存方面的设置。
当MASM工作在非DOS环境下时,不需要理会这些方面的内容。
在安装终止前最好看一看“SpecialNoteforCodeViewusers”、“SpecialNoteforMASMusers”、“”和“”的内容。
最后再退出安装。
.WIN32操作系统中MASM的环境参数设置
安装完MASM后,需要设置一下MASM的环境参数。
步骤如下:
在桌面“我的电脑”上点击鼠标右键,在弹出式菜单上选择“属性”项,在“系统属性”窗口里打开“高级”页。
点击“环境变量”按钮。
在“环境变量窗口”的系统变量列表当选择“PATH”项,再点击系统变量列表下的“编辑”按钮。
在“编辑环境变量窗口”的“变量值”栏里追加MASM的BIN、BINB、INCLUDE目录的途径参数。
例如:
当MASM安装在E:
\MASM611目录,那么在“变量值”栏里追加“;E:
\MASM611\BINR;E:
\MASM611\BIN”。
除此之外,还需要增加以下环境变量:
LIB=E:
\MASM611\LIB
INCLUDE=E:
\MASM611\INCLUDE
INIT=E:
\MASM611\INIT
HELPFILES=E:
\MASM611\HELP\*.HLP
ASMEX=E:
\MASM611\SAMPLES
说明:
环境参数改变后需要从头启动运算机才能生效。
有些机房在运算机中利用了磁盘爱惜卡,一旦从头启动所有安装的文件和设置的参数都将消失。
在这种情形下,能够在DOS命令行模式中输入一些临时命令设置MASM的环境参数。
(假设MASM安装在E:
\MASM611目录)
SETPATH=E:
\MASM611\BINR;E:
\MASM611\BIN;%PATH%
SETLIB=E:
\MASM611\LIB
SETINCLUDE=E:
\MASM611\INCLUDE
SETINIT=E:
\MASM611\INIT
SETHELPFILES=E:
\MASM611\HELP\*.HLP
SETASMEX=E:
\MASM611\SAMPLES
.的利用
用于将汇编源程序汇编成目标文件。
当MASM汇编环境参数配置好以后,在“命令提示符”窗口中键入“MASM/H”指令,将显示出MASM的利用介绍。
MASM的命令格式如下:
MASM[option...]source(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;]
可选部份是MASM的各类汇编参数。
source(.asm)指定汇编源文件的名称,缺省的扩展名是ASM。
out(.obj)指定输出的目标代码文件。
缺省的文件名与汇编源文件相同,扩展名改成OBJ。
list(.lst)指定输出的列表文件,缺省的扩展名是LST。
缺省情形下MASM不生成列表文件。
cref(.crf)指定输出的交叉参考文件,缺省的扩展名是CRF。
缺省情形下MASM不生成交叉参考文件,交叉参考文件的后缀为SBR。
最后的分号表示其后的项目按缺省情形处置。
以下就各个汇编参数逐个加以说明。
参数名
作用
/C
生成交叉参考文件
/D[=]
定义一个符号sym并对其赋值val
/E
模拟浮点运算指令和IEEE格式
/H
显示MASM的使用帮助
/HELP
显示MASM的使用帮助
/I
寻找引入文件(INC)的目录
/L
生成列表文件
/La
生成全部列表文件
/ML
区分所有标识符号的大小写
/MU
将全局标识符号转换为大写
/MX
区分全局标识符号的大小写
/N
隐藏列表文件中的符号表
/T
隐藏成功汇编时的显示消息
/W[0/1/2]
设置告警等级(0:
无;1:
严重;2:
劝告)
/X
列举错误条件
/Zi
生成CodeView的行号信息
/Zd
生成CodeView的标识符号信息
下面用一个汇编程序说明的利用方式。
汇编程序名称为,内容如下:
data1segment
msgdb"Hello,world.",0dh,0ah,"$"
data1ends
code1segment
assumecs:
code1,ds:
data1
start:
movax,data1
movds,ax
movdx,offsetmsg
movah,9
int21h
movax,4c00h
int21h
code1ends
endstart
输入“masmhello;”指令,指令后的分号表示一切按缺省情形进行。
运行后显示以下内容:
Microsoft(R)MASMCompatibilityDriver
Copyright(C)MicrosoftCorp1993.Allrightsreserved.
Invoking:
/I./Zm/c
Microsoft(R)MacroAssemblerVersion
Copyright(C)MicrosoftCorp1981-1993.Allrightsreserved.
Assembling:
执行MASM/LA/ZI/ZD指令,用记事本观看生成的的内容。
.的利用
用于将目标文件链接成可执行文件。
当环境参数配置好以后,在“命令提示符”窗口中键入“LINK/?
”指令,将显示出LINK的参数表。
LINK的命令格式如下:
LINK[option...],,,,[;]
可选部份是LINK的各类链接参数。
objs指定目标文件的名称,缺省的扩展名是OBJ。
能够有多个目标文件,目标文件之间用加号或空格距离。
exefile指定输出的可执行文件的名称。
缺省的文件名与目标文件相同,缺省扩展名改成EXE。
mapfile指定输出的列表文件的名称,缺省的扩展名是MAP。
缺省情形下不生成列表文件。
libs指定链接时利用的库文件,缺省的扩展名是LIB。
能够有多个库文件,库文件之间用加号或空格距离。
缺省情形下MASM不利用库文件。
最后的分号表示其后的项目按缺省情形处置。
deffile指定输出的概念文件的名称,缺省的扩展名是DEF。
缺省情形下不生成概念文件。
最后的分号表示其后的项目按缺省情形处置。
以下就各个链接参数逐个加以说明。
参数名
缩写
作用
/ALIGNMENT:
size
/A:
size
根据指定的大小在分段执行文件中排列段数据,不可用于DOS程序
/BATCH
/B
隐藏库或目标文件找不到的提示
/CODEVIEW
/CO
加入CodeView的标识符号及列号,该选项与/EXEPACK不兼容。
/CPARMAXALLOC:
number
/CP:
number
以16字节为单位设置程序最大分配空间
/DOSSEG
/DO
用缺省顺序排列段(用于微软高级语言)
/DSALLOCATE
/DS
从数据段的尾部开始装入全部数据,用于链接成EXE文件
/EXEPACK
/E
压缩可执行文件的大小,与/CO和/INCR不兼容
/FARCALLTRANSLATION
/F
优化远程调用,当使用/TINY时自动使用/FARCALL。
当链接WINDOWS程序时不建议同时使用/FARCALL和/FARCALLTRANSLATION
/HELP
/HE
显示简要帮助信息
/HIGH
/HI
执行时尽可能地装入高端内存区,和/DEALLOC并用。
(用于微软高级语言)
/INCREMENTAL
/INC
准备加入ILINK链接,与/EXEPACK和/TINY不兼容。
/INFORMATION
/INF
显示链接过程的信息
/LINENUMBERS
/LI
将源文件行号和相关地址加入MAP文件,目标文件必须带行号汇编。
/MAP
/M
将公共标识符加到MAP文件
/NODEFAULTLIBRARYSEARCH[:
library]
/NOD[:
library]
忽略指定的缺省库
/NOEXTDICTIONARY
/NOE
阻止LINK寻找库中的扩展字典,当重定义标识符导致错误L2044时使用/NOE
/NOFARCALLTRANSLATION
/NOF
禁止远程调用
/NOIGNORECASE
/NOI
区别大小写字母
/NOLOGO
/NOL
隐藏版权信息
/NONULLSDOSSEG
/NON
类似于/DOSSEG参数,但是在_TEXT段前不加额外的字节
/NOPACKCODE
/NOP
对代码段不压缩
/PACKCODE:
number
/PACKC:
number
将相邻的代码段合并压缩,指定的字节数用于设定物理段的最大值。
/PACKDATA:
number
/PACKD:
number
将相邻的数据段合并压缩,指定的字节数用于设定物理段的最大值。
仅用于windows
/PAUSE
/PAU
链接过程中暂停以更换磁盘
/PMTYPE:
type
/PM:
type
指定基于Windows的应用程序的类型。
类型为PM表示是WindowsAPI;
类型为VIO表示是WindowsCompat;
类型为NOVIO表示不是WindowsCompat;
/QUICKLIBRARY
/Q
建立QuickBasic程序库
/SEGMENTS:
number
/SE:
number
设置链接时的段总数,缺省值为127
/STACK:
number
/ST:
number
设置栈段的最大字节数,不超过64K
/TINY
/T
生成小模式的COM文件,与/INCR不兼容
/?
/?
显示简要帮助信息
下面将适才用汇编出来的目标程序进行链接。
目标程序名称为。
输入“linkhello;”指令,指令后的分号表示一切按缺省情形进行。
运行后显示以下内容:
Microsoft(R)SegmentedExecutableLinkerVersionJul131992
Copyright(C)MicrosoftCorp1984-1992.Allrightsreserved.
LINK:
warningL4021:
nostacksegment
链接警告没有概念栈段,这不阻碍程序的运行。
接下来能够运行,看看显示结果是不是“Hello,world.”。
.的利用
的功能相当于和的总和,能够将汇编语言源程序汇编和链接后直接生成可执行文件。
当环境参数配置好以后,在“命令提示符”窗口中键入“ML/?
”指令,将显示出ML的参数表。
ML的命令格式如下:
ML[/options]filelist[/linklinkoptions]
可选部份是ML的各类链接参数,/linklinkoptions里设定的是链接参数,这些参数能够参照LINK的有关参数。
filelist指定汇编源文件的名称,缺省的扩展名是ASM。
能够有多个汇编源文件,文件之间用空格距离。
以下就各个链接参数逐个加以说明。
参数名
作用
/ATEnabletinymodel(.COMfile)
允许小模式(生成COM文件)
/BlUsealternatelinker
使用linker参数里指定的链接器
/cAssemblewithoutlinking
仅仅汇编不链接
/CpPreservecaseofuseridentifiers
区分用户标识符的大小写
/CuMapallidentifierstouppercase
将所有标识符映象为大写
/CxPreservecaseinpublics,externs
区分公共标识符和外部标识符的大小写
/D[=text]Definetextmacro
用给定的名字定义文字宏
/EPOutputpreprocessedlistingtostdout
生成预处理列表并输出至屏幕
/FSetstacksize(bytes)
设置堆栈大小
/Fb[file]Generateboundexecutable
生成限制性的可执行文件
/FeNameexecutable
设置可执行文件的名称
/Fl[file]Generatelisting
生成汇编代码列表文件
/Fm[file]Generatemap
生成链接映象文件
/FoNameobjectfile
设置目标文件的名称
/FPiGenerate80x87emulatorencoding
生成80x87模拟代码
/Fr[file]Generatelimitedbrowserinfo
生成源浏览文件(SBR)
/FR[file]Generatefullbrowserinfo
生成扩展源浏览文件(SBR)
/GGeneratePascalorCcalls
指定汇编生成的调用格式。
C:
pascal类型
D:
C类型
/HSetmaxexternalnamelength
设置扩展名的最大长度
/IAddincludepath
添加include文件的目录
/link
链接选项和库
/nologoSuppresscopyrightmessage
取消版权信息
/SaMaximizesourcelisting
列表文件最大化
/SfGeneratefirstpasslisting
生成第一遍的汇编代码列表
/SlSetlinewidth
设置列表文件行宽
/SnSuppresssymbol-tablelisting
隐藏列表文件中的符号表
/SpSetpagelength
设置列表文件的页长度
/SsSetsubtitle
设置列表文件的子标题
/StSettitle
设置列表文件的标题
/SxListfalseconditionals
列表文件中列举错误条件
/TaAssemblefile
汇编非ASM后缀的文件
/VMEnablevirtualmemory
启动虚拟存储器
/wSameas/W0/WX
设置告警级别为0
/WXTreatwarningsaserrors
传回告警的错误码
/WSetwarninglevel
设置告警级别(1、2、3)
/XIgnoreINCLUDEenvironmentpath
忽略INCLUDE环境路径
/ZdAddlinenumberdebuginfo
在目标文件中产生CodeView列号
/ZfMakeallsymbolspublic
在目标文件中产生CodeView所有公共标识符
/ZiAddsymbolicdebuginfo
在目标文件中产生CodeView标识符
/ZmEnableMASMcompatibility
与MASM兼容
/Zp[n]Setstructurealignment
排列结构数据的起始地址为n(1、2、4)的倍数
/ZsPerformsyntaxcheckonly
只检查语法不产生目标文件
下面利用对ASM文件进行汇编和链接。
汇编文件的名称为。
执行“ML”指令,如无错误的话将生成可执行文件。
Microsoft(R)MacroAssemblerVersion
Copyright(C)MicrosoftCorp1981-1991.Allrightsreserved.
Assembling:
Microsoft(R)Segmented-ExecutableLinkerVersion
Copyright(C)MicrosoftCorp1984-1991.Allrightsreserved.
ObjectModules[.OBJ]:
RunFile[]:
""
ListFile[]:
NUL
Libraries[.LIB]:
DefinitionsFile[]:
;
LINK:
warningL4021:
nostacksegment
运行,看看显示结果是不是“Hello,world.”。
.用DEBUG调试可执行文件
用MASM编译了汇编语言源文件以后,用DEBUG调试可执行程序。
具体的做法是:
1、在“命令提示符”窗口下执行“DEBUG<文件所在途径+文件名>”指令。
2、执行“R”指令观看段寄放器CS和DS的值,在EXE文件中两值应该不同。
3、执行“U”指令观看CS:
IP所指地址的反汇编代码。
4、程序刚开始时会设置DS段寄放器的值,将其指向DATA1数据段。
用跟踪指令“P”检查这两条指令的执行结果。
5、DS段寄放器的值被修改后,执行指令“DDS:
0”,观看数据段的具体内容。
6、继续用指令P进行程序跟踪,检查各寄放器和标志位的修改内容和程序的运行情形。
7、程序正常终止后,用“RIP”指令修改寄放器IP的值,将其设置为0。
8、重复第4步到第6步的工作,改用指令T而不是指令P对程序进行跟踪,观看跟踪情形。
.用MASM和LINK生成COM可执行文件
关于有多个数据段、栈段的汇编语言程序,建议将其汇编和链接成EXE文件。
若是程序的代码和数据量比较小,能够将其汇编和链接成COM文件。
EXE文件能够有多个段,每一个段的最大空间为64KB,程序在执行需要对多个段进行治理,因此EXE文件的结构有些复杂。
而COM文件只有一个段,执行代码和数据都处于一个段中,因此,COM文件比EXE文件显得加倍短小精悍。
COM文件其唯一的约束确实是可执行的程序的大小不许诺超过64KB。
编写如下的汇编程序,文件名定为,内容如下:
code1segment
assumecs:
code1,ds:
code1
start:
jmpnext
msgdb"Hello,world.",0dh,0ah,"$"
next:
movax,cs
movds,ax
mov