我想在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 。我该怎么办?
答案 0 :(得分:3)
汇编程序在哪里知道起始地址在哪里?
使用Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
(16位链接器)
并添加了start
和end 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目标文件。