assembly 程序集致命错误LNK1190:找到无效链接地址信息,类型为0x0001

fgw7neuy  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(219)

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

xt0899hw

xt0899hw1#

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

因此,总结一下-您的代码需要一个起始地址和一个结束地址,您可以使用MASM 32附带的当前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"
k0pti3hp

k0pti3hp2#

使用以下命令进行装配和链接:
ml. exe/omf文件名. asm
link16.exe文件名.obj

信息:

当您调用ml.exe而不使用任何特定参数时,它生成的对象文件类型将为COFF格式。COFF格式名称损坏要求您的代码应该具有_startend _start。您编写的内容将适用于英特尔的OMF对象文件。

相关问题