程序集致命错误LNK1190:找到无效的修正,键入0x0001

时间:2013-02-04 17:57:50

标签: visual-studio-2010 assembly x86 masm

我想在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 。我该怎么办?

2 个答案:

答案 0 :(得分:3)

汇编程序在哪里知道起始地址在哪里? 使用Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994(16位链接器) 并添加了startend start代码Assembles和链接就好了。 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"

答案 1 :(得分:1)

使用以下命令编译:

  

ml.exe / omf filename.asm

     

link16.exe filename.obj

<强>的信息:

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