如何使用VS2013或MASM32运行MS-DOS .asm文件?

时间:2014-11-30 19:18:47

标签: assembly visual-studio-2013 masm masm32 dosbox

这是我的test.asm代码。基本上没什么'在内部,因为只是想让它在没有错误的情况下构建和运行。

.model small
.stack 64
.data
.code

main proc
  mov ax,@data
  mov ds,ax

  mov ax,4c00h
  int 21h
main endp
end main

我尝试过使用visual studio 2013包含lib,添加链接器以及网站上的所有指南,但没有运气。始终收到此错误消息"错误A2006:未定义的符号:DGROUP"适用于MASM32和Visual Studio 2013。

请指导我一步一步的构建和运行..此外,我尝试使用dosbox,这是我可以去... enter image description here 继续执行非法命令。我究竟做错了什么? :(

3 个答案:

答案 0 :(得分:3)

VS不包含16位工具集。最常见的16位Microsoft汇编程序/工具集是MASM(ML.EXE)6.11。 (有一个补丁要将它更新到6.14,但是你需要一个dos扩展器,或者你需要从一个32位的dos控制台窗口运行它)。可能还有其他16位版本的MASM可供下载。希望这些内容包括如何安装和设置环境变量的说明。

还有其他程序与Microsoft的16位工具集,链接器,代码视图(源代码级调试器),nmake(make实用程序),h2inc(将ac .h文件转换为汇编程序.inc文件),qh(快速帮助),pwb(程序员工作台,文本库集成开发环境)和16位版本的C / C ++。

DGROUP通常将_data_bssstack分组到一个细分中,但如果您使用.model,则不需要引用它,名称不同,例如@data而不是_data。示例.asm文件(,c表示使用C调用约定。)

        .model  small,c
        .data
;       ...                     data goes here
        .stack  2048
        .code
        assume  cs:@code,ds:@data,es:nothing,ss:nothing
;-----------------------------------------------------------------------;
;       main                                                            ;
;-----------------------------------------------------------------------;
main    proc    far
        mov     ax,@data
        mov     ds,ax
        mov     es,ax
;       ...                     code goes here
        mov     ax,04c00h
        int     21h
main    endp
        end     main

答案 1 :(得分:2)

换句话说:如何用马铃薯给自行车轮胎充气?

您的程序集是16位,并且您的目标是MS-DOS(int21调用是赠品)。 VS2013和MASM32都不能生成DOS可执行文件。尝试不同的汇编程序,i。即NASM。或者,阅读现代装配。

答案 2 :(得分:2)

如何使用MASM32构建MSDOS程序并在DOSBox中运行

下载MASM32DOSBox for Windows并安装它们。 MASM32应该在 C:\ masm32 中以及%ProgramFiles ^(x86)%\ DOSBox-0.74 中的DOSBox中。 %PROGRAMFILES%\ DOSBox中-0.74

启动MASM快速编辑器(qeditor.exe)并加载menus.ini

向下滚动到

&Run Program,"{b}.exe"

[&Tools]

插入五行:

&Run Program,"{b}.exe"
-
Assemble 16-bit .asm to .obj,cmd /C\masm32\bin\ml.exe /c "{a}" & pause
Link 16-bit .obj to .exe,cmd /C\masm32\bin\link16.exe "{b}" ,,,,, & pause
Build 16-bit .asm to .exe,cmd /C\masm32\bin\ml.exe /Bl"C:\masm32\bin\link16.exe" "{a}" & pause
Run in DosBox,cmd /Cstart /D"%ProgramFiles(x86)%\DOSBox-0.74" DOSBox.exe "{b}.exe"

[&Tools]

最终,您必须将%ProgramFiles(x86)%更改为%ProgramFiles% - 已安装DOSBox。键入命令提示符SET,查看分配给该环境变量的目录。保存文件并重新启动MASM32快速编辑器。现在你在“项目”下有三个新项目。

以MASM语法键入MS-DOS程序集程序:

.MODEL small
.STACK 1000h
.DATA
    hello db "Hello world!", 13, 10, '$'
.CODE
main PROC
    mov ax, @DATA           ; Initialize DS
    mov ds, ax

    mov dx, OFFSET hello    ; You can also write lea dx, hello
    mov ah, 09h             ; http://www.ctyme.com/intr/rb-2562.htm
    int 21h

    mov ax, 4C00h           ; http://www.ctyme.com/intr/rb-2974.htm
    int 21h
main ENDP
END main

并将其保存在8.3 name下,例如hello.asm

单击项目/构建16位.asm到.exe 并按任意键关闭窗口。现在点击 Project / Run in DosBox 。 DOSBox窗口将打开,程序将运行。 DOSBox窗口保持打开状态,因此您可以在命令提示符处启动程序,例如,输入“hello.exe”。