0

这是我的 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 包含库,添加链接器和所有来自网站的指南,但没有运气。对于 MASM32 和 Visual Studio 2013,总是收到此错误消息“错误 A2006:未定义符号:DGROUP”。

请指导我逐步构建并运行..另外,我尝试使用dosbox,这是我能做到的.. 在此处输入图像描述 继续使用非法命令。我究竟做错了什么?:(

4

3 回答 3

3

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

还有其他程序与 Microsoft 的 16 位工具集、链接器、codeview(源级调试器)、nmake(make 实用程序)、h2inc(将 ac .h 文件转换为汇编器 .inc 文件)、qh(快速帮助)一起使用、pwb(程序员的工作台,一个基于文本的集成开发环境),以及16位版本的C/C++。

DGROUP 通常将 、 和 分组_data_bss一个stack段,但如果您使用.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
于 2014-11-30T20:33:44.733 回答
2

套用一句话:我如何用土豆给自行车轮胎充气?

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

于 2014-11-30T20:26:44.900 回答
2

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

下载MASM32DOSBox for Windows 并安装它们。MASM32 应该在C:\masm32和 DOSBox 中,分别在%ProgramFiles^(x86)%\DOSBox-0.74中。%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 名称下,例如hello.asm.

单击Project/Build 16-bit .asm to .exe并按任意键关闭窗口。现在单击DosBox 中的 Project/Run。DOSBox 窗口将打开,程序将运行。DOSBox 窗口保持打开状态,因此您可以在命令提示符处启动程序,例如输入“hello.exe”。

于 2017-04-10T16:57:10.953 回答