x86 アーキテクチャが本当に (64K のチャンクに) セグメント化されていた初期のアーティファクトである.model small
と確信しています。seg
masm32
IDE はそれらをまったく好まない (最近では 32 ビットのフラット モデル コードを実行することがはるかに一般的になっているため、予想外ではありません) 。
問題は、bin\assmbl.bat
ファイルをアセンブルするためにエディターがファイルを使用しており、次の行が含まれているという事実にあります。
\masm32\bin\ml /c /coff %1.asm > \masm32\bin\asmbl.txt
(/coff
オプションで)。これがアセンブラに文句を言わせる原因です。
コマンドラインに戻すことで動作させることができます。ファイルが であると仮定してtst.asm
、次のコマンドを使用します。
c:\masm32\bin\ml.exe /c tst.asm
c:\masm32\bin\link16 tst.obj.tst.exe,,,,
正常に動作する が得られますtst.exe
。
次のトランスクリプトは、これが機能することを示しています。
C:\masm32> type tst.asm
.model small
.stack
.data
message db "Hello world!", "$"
.code
_main proc
mov ax,seg message
mov ds,ax
mov ah,09
lea dx,message
int 21h
mov ax,4c00h
int 21h
_main endp
end _main
C:\masm32> bin\ml.exe /c tst.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: tst.asm
C:\masm32> bin\link16 tst.obj,tst.exe,,,,
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
C:\masm32> tst.exe
Hello world!
あるいは、エディターは非常に構成可能です。編集用にファイルを開いてmenus.ini
(最初にバックアップしてください。そのことを説明する必要はありません)、次のように変更します。
&Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
に:
&Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
Assemble ASM file (no COFF),\MASM32\BIN\Assmbl2.bat "{b}"
IDE の再起動時に新しいメニュー項目を追加できます。
また、後者にコピーbin\assmbl.bat
しbin\assmbl2.bat
て削除する必要があります。/coff
次に、新しいメニュー オプションを使用して、IDE 内から正常にコンパイルできます。
もちろん、link
とassemble/link
メニュー項目についても同じことを行う必要があります。しかし、それがどのように行われるかがわかったので、問題は発生しません。