2024年3月31日发(作者:)
实验二 汇编编译工具MASM的使用
2.1. 实验目的
1、 学习如何安装MASM;
2、 学习如何使用和使用编译和链接汇编语言程序。
2.2. 基础知识
1、常用汇编语言工具
软件名称
Masm
V6.11
运行平台
DOS
软件说
明
微软
汇编工
具
202.116.77.47/
/tools/dev/
下载地址
Masm32 Windows
微软
V6.0 98/2000/XP Win32
汇编工
具
Masm32 Windows
微软
V8.0 98/2000/XP Win32
汇编工
具
Tasm
V5.0
DOS Borland
汇编工
具
/masm32/
61.133.63.176/ddcrack/assembler/tools/
/home/tools/
61.133.63.176/ddcrack/assembler/tools/
2、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 6.0或其它16位汇编工具,在命令提示符状态下编译和链接DOS汇编程序。
DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。对于一些可
能会影响整个操作系统工作的指令,Win32操作系统会拒绝执行。
2.3. MASM的安装
首先从Internet下载,这是一个ZIP压缩文件。可以用WINZIP或WINRAR
等压缩解压软件指定一个目录将其解压,目录名例如为F:MASM60。
运行“命令提示符”,在解压目录中运行setup程序,开始安装MASM。
在主菜单界面选择“Install the Microsoft Macro Assembler”继续。
在系统设置界面选择“DOS/Windows & NT”操作系统继续。
选择安装Windows有关文
选择安装PWD(Programmer’s WorkBench),继续。
无须安装“Brief compatibility”(常见编辑器兼容),继续。
选择复制微软鼠标驱动器“Microsoft Mouse Driver”,继续。
选择安装MASM工具,继续。
选择安装帮助文件,继续。
选择安装例程(sample program),继续。
选择系统的安装目录,例如将系统安装在E盘。
接下来是询问各部分程序的安装目录,一般情况下由系统自行决定即可。
参数设置完毕后最后检查一次。
检查如果无需改动,则选择“NO CHANGES”开始安装。
安装完毕后系统会提示MASM 6.11与5.1版本有一些区别,具体的内容可以观看安装菜
单中的“Special Note for MASM v5.1 users”,或者编程指南中的附录A。
设置MASM的DOS操作系统环境参数需要修改和两个文件,
MASM提供了和两个文件作为参考。如果MASM安装在
Windows 98/NT/2000/XP操作系统环境下,需要参考文件的内容进行设置,
设置方式稍后介绍。
接下来是Windows 3.x操作系统环境下的设置要求。如果MASM 6.11安装在Windows
3.0/3.1/3.11/3.2操作系统中,需要参考文件修改系统环境配置文件
。如果MASM 6.11安装在32位Windows中,无须理会的内容。
然后是关于PWD(Programmer’s WorkBench)的设置,安装系统会提供一个参考文件
。
最后是有关内存方面的设置。当MASM工作在非DOS环境下时,不需要理会这些方面的
内容。
在安装结束前最好看一看“Special Note for CodeView users”、“Special Note for
MASM v5.1 users”、“”和“”的内容。最后再退出安装。
2.3. WIN32操作系统中MASM的环境参数设置
安装完MASM后,需要设置一下MASM的环境参数。步骤如下:
在桌面“我的电脑”上点击鼠标右键,在弹出式菜单上选择“属性”项,在“系统属性”窗口
里打开“高级”页。
点击“环境变量”按钮。
在“环境变量窗口”的系统变量列表中选择“PATH”项,再点击系统变量列表下的“编辑”
按钮。
在“编辑环境变量窗口”的“变量值”栏里追加MASM的BIN、BINB、INCLUDE目录的路
径参数。例如:当MASM安装在E:MASM611目录,则在“变量值”栏里追加“; E:MASM611BINR;
E:MASM611BIN”。
除此之外,还需要增加以下环境变量:
LIB=E:MASM611LIB
INCLUDE=E:MASM611INCLUDE
INIT=E:MASM611INIT
HELPFILES=E:MASM611HELP*.HLP
ASMEX=E:MASM611SAMPLES
说明:环境参数改变后需要重新启动计算机才能生效。有些机房在计算机中使用了磁盘保护卡,
一旦重新启动所有安装的文件和设置的参数都将消失。在这种情况下,可以在DOS命令行模式中
输入一些临时命令设置MASM的环境参数。(假设MASM安装在E:MASM611目录)
SET PATH=E:MASM611BINR;E:MASM611BIN;%PATH%
SET LIB=E:MASM611LIB
SET INCLUDE=E:MASM611INCLUDE
SET INIT=E:MASM611INIT
SET HELPFILES=E:MASM611HELP*.HLP
SET ASMEX=E:MASM611SAMPLES
2.4. 的使用
用于将汇编源程序汇编成目标文件。当MASM汇编环境参数配置好之后,在“命
令提示符”窗口中键入“MASM /H”指令,将显示出MASM的使用介绍。
MASM的命令格式如下:
MASM [] 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
/E
/H
/HELP
/I
生成交叉参考文件
定义一个符号sym并对其赋值val
模拟浮点运算指令和IEEE格式
显示MASM的使用帮助
显示MASM的使用帮助
寻找引入文件(INC)的目录
生成列表文件
生成全部列表文件
区分所有标识符号的大小写
将全局标识符号转换为大写
区分全局标识符号的大小写
隐藏列表文件中的符号表
隐藏成功汇编时的显示消息
设置告警等级(0:无;1:严重;2:劝告)
列举错误条件
生成CodeView的行号信息
生成CodeView的标识符号信息
作用
/L
/La
/ML
/MU
/MX
/N
/T
/W[0/1/2]
/X
/Zi
/Zd
下面用一个汇编程序说明的使用方法。汇编程序名称为,内容如下:
data1 segment
msg db "Hello, world.",0dh,0ah,"$"
data1 ends
code1 segment
assume cs:code1, ds:data1
start:
mov ax, data1
mov ds, ax
mov dx, offset msg
mov ah, 9
int 21h
mov ax, 4c00h
int 21h
code1 ends
end start
输入“masm hello;”指令,指令后的分号表示一切按缺省情况进行。运行后显示以下内容:
Microsoft (R) MASM Compatibility Driver
Copyright (C) Microsoft Corp 1993. All rights reserved.
Invoking: /I. /Zm /c
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.
Assembling:
执行MASM /LA /ZI /ZD 指令,用记事本观看生成的的内容。
2.5. 的使用
用于将目标文件链接成可执行文件。当环境参数配置好之后,在“命令提示符”窗
口中键入“LINK /?”指令,将显示出LINK的参数表。
LINK的命令格式如下:
LINK []
可选部分是LINK的各种链接参数。
objs指定目标文件的名称,缺省的扩展名是OBJ。可以有多个目标文件,目标文件之间用加
号或者空格间隔。
exefile指定输出的可执行文件的名称。缺省的文件名与目标文件相同,缺省扩展名改为EXE。
mapfile指定输出的列表文件的名称,缺省的扩展名是MAP。缺省情况下不生成列表文件。
libs指定链接时使用的库文件,缺省的扩展名是LIB。可以有多个库文件,库文件之间用加号
或者空格间隔。缺省情况下MASM不使用库文件。最后的分号表示其后的项目按缺省情况处理。
deffile指定输出的定义文件的名称,缺省的扩展名是DEF。缺省情况下不生成定义文件。
最后的分号表示其后的项目按缺省情况处理。
以下就各个链接参数逐个加以说明。
参数名
/ALIGNMENT:size
/BATCH
/CODEVIEW
缩写
/A:size
/B
/CO
作用
根据指定的大小在分段执行文件中
排列段数据,不可用于DOS程序
隐藏库或目标文件找不到的提示
加入CodeView的标识符号及列号,
该选项与/EXEPACK不兼容。
/CPARMAXALLOC:number
/DOSSEG
/DSALLOCATE
/EXEPACK
/FARCALLTRANSLATION
/CP:number
/DO
/DS
/E
/F
以16字节为单位设置程序最大分
配空间
用缺省顺序排列段(用于微软高级
语言)
从数据段的尾部开始装入全部数
据,用于链接成EXE文件
压缩可执行文件的大小,与/CO和
/INCR不兼容
优化远程调用,当使用/TINY时自动
使用/FARCALL。当链接
WINDOWS程序时不建议同时使用
/FARCALL和
/FARCALLTRANSLATION
显示简要帮助信息
执行时尽可能地装入高端内存区,
和/DEALLOC并用。(用于微软高级
语言)
准备加入ILINK链接,与/EXEPACK
和/TINY不兼容。
显示链接过程的信息
将源文件行号和相关地址加入MAP
文件,目标文件必须带行号汇编。
将公共标识符加到MAP文件
忽略指定的缺省库
阻止LINK寻找库中的扩展字典,当
重定义标识符导致错误L2044时使
用/NOE
禁止远程调用
区别大小写字母
隐藏版权信息
类似于/DOSSEG参数,但是在
_TEXT段前不加额外的字节
对代码段不压缩
/HELP
/HIGH
/HE
/HI
/INCREMENTAL
/INFORMATION
/LINENUMBERS
/MAP
/NOEXTDICTIONARY
/INC
/INF
/LI
/M
/NOE
/NODEFAULTLIBRARYSEARCH[:library] /NOD[:library]
/NOFARCALLTRANSLATION
/NOIGNORECASE
/NOLOGO
/NONULLSDOSSEG
/NOPACKCODE
/PACKCODE:number
/PACKDATA:number
/NOF
/NOI
/NOL
/NON
/NOP
/PACKC:number
将相邻的代码段合并压缩,指定的
字节数用于设定物理段的最大值 。
/PACKD:number
将相邻的数据段合并压缩,指定的
字节数用于设定物理段的最大值 。
仅用于windows
/PAU
/PM:type
链接过程中暂停以更换磁盘
指定基于Windows的应用程序的类
型。
类型为PM表示是Windows API;
类型为VIO表示是Windows
/PAUSE
/PMTYPE:type
Compat;
类型为NOVIO表示不是Windows
Compat;
/QUICKLIBRARY
/SEGMENTS:number
/STACK:number
/TINY
/?
/Q
/SE:number
/ST:number
/T
/?
建立Quick Basic程序库
设置链接时的段总数,缺省值为127
设置栈段的最大字节数,不超过
64K
生成小模式的COM文件,与/INCR
不兼容
显示简要帮助信息
下面将刚才用汇编出来的目标程序进行链接。目标程序名称为。
输入“link hello;”指令,指令后的分号表示一切按缺省情况进行。运行后显示以下内容:
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : warning L4021: no stack segment
链接警告没有定义栈段,这不影响程序的运行。
接下来可以运行,看看显示结果是不是“Hello, world.”。
2.6. 的使用
的功能相当于和的总和,可以将汇编语言源程序汇编和链接
后直接生成可执行文件。当环境参数配置好之后,在“命令提示符”窗口中键入“ML /?”指令,
将显示出ML的参数表。
ML的命令格式如下:
ML [ /options ] filelist [ /link linkoptions ]
可选部分是ML的各种链接参数,/link linkoptions里设定的是链接参数,这些参数可以参照
2.5 LINK的有关参数。
filelist指定汇编源文件的名称,缺省的扩展名是ASM。可以有多个汇编源文件,文件之间用
空格间隔。
以下就各个链接参数逐个加以说明。
参数名
/AT Enable tiny model (.COM file)
/Bl
/c Assemble without linking
/Cp Preserve case of user identifiers
/Cu Map all identifiers to upper case
/Cx Preserve case in publics, externs
/D
/F
作用
允许小模式(生成COM文件)
使用linker参数里指定的链接器
仅仅汇编不链接
区分用户标识符的大小写
将所有标识符映象为大写
区分公共标识符和外部标识符的大小写
用给定的名字定义文字宏
设置堆栈大小
/EP Output preprocessed listing to stdout
生成预处理列表并输出至屏幕
/Fb[file] Generate bound executable
/Fe
/Fl[file] Generate listing
/Fm[file] Generate map
/Fo
/FPi Generate 80x87 emulator encoding
/Fr[file] Generate limited browser info
/FR[file] Generate full browser info
/G
生成限制性的可执行文件
设置可执行文件的名称
生成汇编代码列表文件
生成链接映象文件
设置目标文件的名称
生成80x87模拟代码
生成源浏览文件(SBR)
生成扩展源浏览文件(SBR)
指定汇编生成的调用格式。
C:pascal类型
D:C类型
/H
设置扩展名的最大长度
length
/I
/link
/nologo Suppress copyright message
/Sa Maximize source listing
/Sf Generate first pass listing
/Sl
/Sn Suppress symbol-table listing
/Sp
/Ss
/St
/Sx List false conditionals
/Ta
/VM Enable virtual memory
/w Same as /W0 /WX
/WX Treat warnings as errors
/W
/X Ignore INCLUDE environment path
/Zd Add line number debug info
/Zf Make all symbols public
/Zi Add symbolic debug info
/Zm Enable MASM 5.10 compatibility
/Zp[n] Set structure alignment
/Zs Perform syntax check only
添加include文件的目录
链接选项和库
取消版权信息
列表文件最大化
生成第一遍的汇编代码列表
设置列表文件行宽
隐藏列表文件中的符号表
设置列表文件的页长度
设置列表文件的子标题
设置列表文件的标题
列表文件中列举错误条件
汇编非ASM后缀的文件
启动虚拟存储器
设置告警级别为0
传回告警的错误码
设置告警级别(1、2、3)
忽略INCLUDE环境路径
在目标文件中产生CodeView列号
在目标文件中产生CodeView所有公共标识符
在目标文件中产生CodeView标识符
与MASM 5.10兼容
排列结构数据的起始地址为n(1、2、4)的倍数
只检查语法不产生目标文件
下面使用对ASM文件进行汇编和链接。汇编文件的名称为。
执行“ML ”指令,如无错误的话将生成可执行文件。
Microsoft (R) Macro Assembler Version 6.00
Copyright (C) Microsoft Corp 1981-1991. All rights reserved.
Assembling:
Microsoft (R) Segmented-Executable Linker Version 5.13
Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
Object Modules [.OBJ]:
Run File []: " "
List File []: NUL
Libraries [.LIB]:
Definitions File []: ;
LINK : warning L4021: no stack segment
运行,看看显示结果是不是“Hello, world.”。
2.7. 用DEBUG调试可执行文件
用MASM编译了汇编语言源文件之后,用DEBUG调试可执行程序
。具体的做法是:
1、 在“命令提示符”窗口下执行“DEBUG <文件所在路径+文件名>”指令。
2、 执行“R”指令观看段寄存器CS和DS的值,在EXE文件中两值应该不同。
3、 执行“U”指令观看CS:IP所指地址的反汇编代码。
4、 程序刚开始时会设置DS段寄存器的值,将其指向DATA1数据段。用跟踪指令“P”检查
这两条指令的执行结果。
5、 DS段寄存器的值被修改后,执行指令“D DS:0”,观看数据段的具体内容。
6、 继续用指令P进行程序跟踪,检查各寄存器和标志位的修改内容以及程序的运行情况。
7、 程序正常结束后,用“R IP”指令修改寄存器IP的值,将其设置为0。
8、 重复第4步到第6步的工作,改用指令T而不是指令P对程序进行跟踪,观看跟踪情况。
2.8. 用MASM和LINK生成COM可执行文件
对于有多个数据段、栈段的汇编语言程序,建议将其汇编和链接成EXE文件。如果程序的代
码和数据量比较小,可以将其汇编和链接成COM文件。EXE文件可以有多个段,每个段的最大空
间为64KB,程序在执行需要对多个段进行管理,所以EXE文件的结构有些复杂。而COM文件只
有一个段,执行代码和数据都处于一个段中,因此,COM文件比EXE文件显得更加短小精悍。COM
文件其唯一的约束就是可执行的程序的大小不允许超过64KB。
编写如下的汇编程序,文件名定为,内容如下:
code1 segment
assume cs:code1, ds:code1
start:
jmp next
msg db "Hello, world.",0dh,0ah,"$"
next:
mov ax, cs
mov ds, ax
mov dx, offset msg
add dx, 100h
mov ah, 9
int 21h
mov ax, 4c00h
int 21h
code1 ends
end start
执行以下指令对源文件进行汇编:MASM 。
执行以下指令将目标文件链接成COM文件:LINK /TINY HELLO2;。
命令执行完毕后,将生成文件,执行HELLO2观看运行结果。
比较一下和的大小,用DEBUG调试可执行程序,
了解它的程序结构。
发布评论