我想在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条答案
按热度按时间xt0899hw1#
汇编器从哪里知道起始地址?使用
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
(16位链接器)并添加start
和end start
,代码汇编和链接就很好。MASM 32在bin目录中包含一个16位链接器。不过,您必须向ML传递不同的命令行参数,才能正确汇编16位代码。因此,总结一下-您的代码需要一个起始地址和一个结束地址,您可以使用MASM 32附带的当前ML来组装16位和32位代码。要链接16位代码,必须使用16位链接器,要链接32位代码,必须使用32位链接器。
从我的一个16位DOS应用程序:
k0pti3hp2#
使用以下命令进行装配和链接:
ml. exe/omf文件名. asm
link16.exe文件名.obj
信息:
当您调用
ml.exe
而不使用任何特定参数时,它生成的对象文件类型将为COFF格式。COFF格式名称损坏要求您的代码应该具有_start
和end _start
。您编写的内容将适用于英特尔的OMF对象文件。