这是我的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,这是我可以去...
继续执行非法命令。我究竟做错了什么? :(
答案 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
,_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
答案 1 :(得分:2)
换句话说:如何用马铃薯给自行车轮胎充气?
您的程序集是16位,并且您的目标是MS-DOS(int21
调用是赠品)。 VS2013和MASM32都不能生成DOS可执行文件。尝试不同的汇编程序,i。即NASM。或者,阅读现代装配。
答案 2 :(得分:2)
下载MASM32和DOSBox 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”。