创建编译链接环境
(1)安装MASM5和VC 6.0(若使用windows32汇编程序设计)。
MASM汇编器内部包含MASM.EXE,LINK.EXE,LIB.EXE等文件。该类汇编器一般不需要安装,直接解压后生成的文件夹复制到D盘,文件夹名称为MASM。
(2)建立一个MASMVAR.bat文件,内容如下。
@echo off
rem 请根据 Masm32软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir=D:\MASM
set include=%Masm32Dir%\Include;c:\Program Files\Microsoft Visual Studio\VC98\Include;Program Files\Microsoft Visual Studio\VC98\MFC\Include;%include%
set lib=%Masm32Dir%\lib;%lib%
set w2k=%Masm32Dir%\Incluse\w2k;%Include\w2k%
set path=%Masm32Dir%\Bin;%Masm32Dir%\Include;%Masm32Dir%\Include\w2k;%Masm32Dir%\lib;%Masm32Dir%;%PATH%
set Masm32Dir=f:\MASMDIR
echo on
(3)将windows系统中自带的 命令提示符 应用创建到桌面快捷方式,双击进入,运行MASMVAR.bat,配置好相应的汇编环境。
编译链接和运行
编辑、编译、链接及生成的文件。
其中.obj为目标文件,.lst为列表文件,.map为映像文件,.exe为可执行文件。
以下以编译链接222.asm为例。
(1)编译
masm 222.asm
Object filename [222.obj]直接回车,生成222.obj链接文件;
Source list和Cross-reference直接回车,不生成;
这样,链接文件222.obj就已经生成.
(2)链接
link 222.obj
直接回车,生成222.exe执行文件
若我们的汇编程序中没有定义堆栈段,会报LINK : warning L4021: no stack segment,它不会影响执行文件的生成。
(3)调试
生成正确的可执行文件后,装载222.exe进入调试。
debug 222.exe
使用反汇编命令U命令查看程序的反汇编并判断程序的结束地址,如下图:
U命令为反汇编命令,功能是反汇编32字节,可以不带参数也可以带参数,参数为程序地址。
由图可知程序结束地址为0014h,所以输入"G 0014"命令执行该程序,执行结果如下图:
G为运行命令,功能是从当前地址一直执行到G命令给出的结束地址。
即可以让程序执行到222.exe DOS功能调用。此时可以查看所有寄存器的值。
这时也可以使用R命令,查看寄存器的值,如下图:
R命令为读寄存器命令,可不带参数显示所有寄存器的值及标志位状态,也可带寄存器名的参数显示该寄存器的值,注意该寄存器参数可以为段寄存器(CS,DS,ES,SS)、标志寄存器(FR)、16位通用寄存器(AX,BX,CX,DX,SI,DI,SP,BP),但不允许为8位通用寄存器。
由图可知,存放结果的数据段 段首址为1467h,偏移量为0000h,即程序结果放入到1467:0000的字节单元,所以使用D命令查看结果,如下图:
如上图,内存地址14660000~14660001处的内容0x68ac,即为计算结果。
查看完结果,直接使用Q命令退出debug。