我是这个论坛的新手,想要一些关于MASM编程的帮助。目前我正在从我的课程讲师那里学习MASM,他告诉我们使用MASM 6.15(适用于其他Windows版本但不适用于Windows 7和8)来编译我们的程序。我使用Windows 8,所以我无法编译这些程序。所以我遇到了一个网站,据说使用DOSBox模拟器在Windows 8上使用MASM!我已经安装了它并完成了所有必需的任务以使其正常工作但我仍然无法在DOSBox上编译我的MASM程序!当我尝试编译时,它给出了这个程序无法在DOS中运行的错误。任何帮助都会非常感激!
我从这个链接获得了MASM: http://www2.hawaii.edu/~pager/312/masm%20615%20downloading.htm
...我从中得到命令的另一个站点是: http://ansmachine.blogspot.com/2013/12/masm-using-dos-box-in-windows-8.html#.U3c8JvmSy27
答案 0 :(得分:2)
DOSBox
适合运行16位DOS程序,而不是32/64位Windows程序。 MASM可以从6.x版开始生成Windows程序。因此,如果您没有明确地想要制作DOS程序,那么您就不需要DOSBox。
您的示例是一个16位DOS程序(" INT 21h")。要构建它,你必须打开一个" Windows命令提示符"又名控制台,不 DOSBox。如果您不知道如何操作,请在Google上搜索。我假设你的汇编程序的路径是c:\masm615\bin
。现在输入:
c:\masm615\bin\ml.exe prog.asm
请注意,我使用ml.exe
代替masm.exe
。
现在,您可以在prog.exe
中运行DOSBox
。
在网上搜索32位MASM程序,您可以以相同的方式组装这些程序,但在当前的Windows控制台中运行。那么你可以而且应该忘记INT 21h
!
现在让我们使用Visual Studio(VS)。我将使用VS 2010 Express展示它,但其他版本的VS应该是类似的。
你需要一个Windows程序(.MODEL FLAT),我们称之为 prog.asm :
.686p
.MODEL FLAT
includelib msvcrt.lib
extern _printf:PROC
extern _exit:PROC
.DATA
format1 db "%s",10,0
string1 db "Hello world!",0
format2 db "The square root of %f is %f.",10,0
double1 REAL8 10.0
double2 REAL8 ?
.CODE
_main PROC
push OFFSET string1
push OFFSET format1
call _printf
fld double1
fsqrt
fstp double2
push DWORD PTR double2 + 4
push DWORD PTR double2
push DWORD PTR double1 + 4
push DWORD PTR double1
push OFFSET format2
call _printf
push 0
call _exit
_main ENDP
END _main
打开控制台。首先,您需要知道vcvarsall.bat
的位置。输入:
dir /s /b \vcvarsall.bat
几分钟后,您应该得到类似C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat
的内容。在双引号中键入此行,然后按ENTER键。当您看到以下内容时,一切正常:设置使用Microsoft Visual Studio 2010 x86工具的环境。
现在您可以组装并运行prog.asm:
ml prog.asm
prog.exe