2

我想在 Visual Studio 2010 中编写 16 位 8086 汇编代码,但给了我错误:代码:

.MODEL small
.STACK 100h
.data
message BYTE "Hello, world!","$"
.code
mov ah,9
mov dx,OFFSET message ; addr of buffer
int 21h
END

输出给了我这个错误:

fm.obj : fatal error LNK1190: invalid fixup found, type 0x0001

我使用masm32v11。我该怎么办?

4

2 回答 2

3

汇编器在哪里知道起始地址在哪里?使用Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994(16 位链接器)并添加startend start代码汇编和链接就好了。MASM32 在 bin 目录中包含一个 16 位链接器。但是,您必须将不同的命令行参数传递给 ML 才能正确组装 16 位代码。

.MODEL small
.STACK 100h
.data
message BYTE "Hello, world!","$"
.code
start:
mov ah,9
mov dx,OFFSET message ; addr of buffer
int 21h
END start

回顾一下 - 您的代码需要一个起始地址和一个结束地址,您可以使用 MASM32 随附的当前 ML 来组装 16 位和 32 位代码。要链接 16 位代码,您必须使用 16 位链接器,要链接 32 位代码,您必须使用 32 位链接器。

从我的 16 位 DOS 应用程序之一:

ML.EXE /DMASM /DDOS /Zm /c /nologo /I"f:\masm32\Include" "dosdisplay.asm"
link16.exe /NOLOGO "dosdisplay.obj"
于 2013-02-05T03:36:05.573 回答
0

使用以下命令编译:

ml.exe /omf 文件名.asm

link16.exe 文件名.obj

信息:

当您在没有任何特定参数的情况下调用 ml.exe 时,它​​生成的目标文件类型将采用 coff 格式。coff 格式名称修改要求您的代码应具有“_start”和“end _start”。您所写的内容适用于英特尔的 omf 目标文件。

于 2015-11-20T17:41:16.583 回答