汇编程序编写平台的搭建与测试
阅读原文时间:2021年04月20日阅读:2

最近接触到了汇编程序,在自己的电脑上安装了MASM32和MASM6.11,MASM32是为了直接WIN32汇编,MASM611是为了DOS 16位汇编。这两个程序都可以在网上下到。

在开始汇编之前我们需要设置环境变量,在这里我们不到“我的电脑”里进行设置,而采用批处理的方式。在MASM32和MASM611的安装目录的bin文件加下都新建一个名为var.bat的文件(只要你喜欢,可取其他名字,但后缀名必须为bat)。在两个var.bat中分别输入如下内容:

@echo off

rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!

set Masm32Dir=C:\Masm32

set include=%Masm32Dir%\Include;%include%

set lib=%Masm32Dir%\lib;%lib%

set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%

set Masm32Dir=

echo on

@echo off

rem 请根据 Masm611 软件包的安装目录修改下面的 Masm611 环境变量!

set Masm611=C:\Masm611

set include=%Masm611%\Include;%include%

set lib=%Masm611%\lib;%lib%

set path=%Masm611%\Bin;%Masm611%;%PATH%

set Masm611=

echo on

这样在我们需要编译调试程序时进入var.bat所在目录运行一次var.bat文件即可。注意:重新运行命令行窗口CMD,需要再次运行var.bat,环境变量设置才能成功。也许你不太喜欢这种方式,那你可以自己到“我的电脑”->属性->高级->环境变量在对应的变量名后添加以上内容。

安装完MASM611后在bin文件夹没有link.exe这个文件,我们需要到binr文件夹中将link.exe复制到bin中。否则在环境变量中还需添加binr的路径。由于masm32和masm611都有link.exe,我们最好把其中一个link.exe改个名字。我把masm611\bin\link.exe改为了doslink.exe。你可以改为其他的。

现在写一个程序来测试一下:

DOS版:Test.asm

*************************************************

stack   segment stack

db 100 dup(?)

stack ends

data segment

szHello db 'Hello',0dh,0ah,'$'

data ends

code segment

assume cs:code,ds:data,ss:stack

start:

mov ax,data

mov ds,ax

mov ah,9

mov dx,offset szHello

int 21h

mov ah,4ch

int 21h

code ends

end start

*************************************************

开始测试:先masm Test.asm 会生成Test.obj。也可使用ML /c Test.asm。然后 doslink Test.obj 回车后就会出现

看到Test.exe就成功了。在Dos下运行,会在屏幕上出现Hello。OK,MASM611已经测试成功,下面进入MASM32的测试。

Win32版:Test.asm

.386

.model flat,stdcall

option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 文件定义

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include     windows.inc

include     user32.inc

includelib user32.lib

include     kernel32.inc

includelib kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 数据段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data

szCaption   db 'A MessageBox !',0

szText      db 'Hello, World !',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代码段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

start:

invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK

invoke ExitProcess,NULL

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

end start

开始测试: ml /c /coff Test.asm

Link /subsystem:windows Test.obj

运行生成的Test.exe会出现

OK,测试已经完成了,现在可以进行你的汇编程序之旅了。

其实我们完全没有必要安装了MASM32后有安装MASM611。只需安装一个MASM32就可以了。

在x:\masm32\bin目录中(假设masm32安装在x盘)有四个重要的程序,

ml.exe link.exe link16.exe rc.exe

看到了没,上面有两个连接程序,link16.exe就是为dos程序准备的。

如果你要编译dos程序,指令如下:

ml /c Test.asm

link16   Test.obj

如果你要编译32位控制台程序

ml /c /coff Test.asm

link /subsystem:console Test.obj

如果你要编译32位窗口程序

ml /c /coff Test.asm

link /subsystem:windows Test.obj

如果你的masm32软件包中没有link16.exe这个程序的话,你也不要担心,只要把masm611中那个link.exe,改成link16.exe然后复制到上面的目录中。