Я почти уверен, что .model small
и seg
являются артефактами более раннего периода, когда архитектура x86 была действительно сегментирована (на куски по 64 КБ).
Среда masm32
не нравитсяих вообще очень много (не удивительно, так как в наши дни гораздо чаще встречается код 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
.Но теперь, когда вы знаете, как это делается, это не должно вызывать проблем.