1

我是这个论坛的新手,希望在 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

4

1 回答 1

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.exeDOSBox

在网上搜索 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
于 2014-05-17T12:14:21.847 回答