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(16bit リンカ)を使用して追加するstartend start、コードのアセンブルとリンクは正常に行われます。MASM32 には、bin ディレクトリに 16 ビットのリンカーが含まれています。ただし、16 ビット コードを正しくアセンブルするには、さまざまなコマンド ライン パラメータを ML に渡す必要があります。

.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 アプリの 1 つから:

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 に答える