MASM命令 - DOSBox上的问题

时间:2014-05-17 09:30:54

标签: windows dos masm dosbox

我是这个论坛的新手,想要一些关于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

1 个答案:

答案 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