Совместимость с MASM / TASM
Синтаксис
Emu8086 полностью совместим со всеми основными ассмеблерами,
включая
MASM и
TASM; кроме нескольких директив,
которые имеются только в
Emu8086.
Если требуется откомпилировать программу с помощью другого ассемблера,
то вам нужно будет "закомментировать" или удалить нижеуказанные директивы
и любые другие директивы, которые начинаются со знака '
#':
#MAKE_COM#
#MAKE_EXE#
#MAKE_BIN#
#MAKE_BOOT#
Emu8086 не поддерживает директиву
ASSUME. Практически
все программисты считают, что эта директива только усложняет ваш код.
Предпочтительнее вручную указывать, какой из сегментных регистров
CS:,
DS:,
ES:
или
SS:, можно использовать для адресации конкретной ячейки, если
сегмент данных хранится не
DS. Например:
MOV AX, [BX] ; то же самое, что и MOV AX, DS:[BX]
MOV AX, ES:[BX]
Emu8086 не требует определять сегмент, если вы компилируете
COM-файл, но
MASM и
TASM могут потребовать это,
например:
CSEG SEGMENT ; сегмент кода начинается здесь.
; #MAKE_COM# ; "закомментировано" для Emu8086.
ORG 100h
start: MOV AL, 5 ; какой-то простой код...
MOV BL, 2
XOR AL, BL
XOR BL, AL
XOR AL, BL
RET
CSEG ENDS ; сегмент кода заканчивается здесь.
END start ; остановить компилятор и установить точку входа.
|
Точка входа для
COM-файла всегда должна быть
0100h
(первая команда после директивы
ORG 100h). В
MASM и
TASM вам может потребоваться вручную установить точку входа,
используя директиву
END.
Emu8086 одинаково работает как
с этой директивой, так и без нее.
Чтобы проверить вышеописанный код, сохраните его в файл
test.asm
(или любой другой) и запустите следующие команды из командной строки:
Для MASM 6.0:
MASM test.asm
LINK test.obj, test.com,,, /TINY
Для TASM 4.1:
TASM test.asm
TLINK test.obj /t
Вы должны получить файл
test.com (11 байтов). Щелкните по нему
правой кнопкой мыши и выберите
Отправить в и
emu8086.
Вы можете видеть, что дизассемблированный код не содержит каких-либо
директив и идентичен коду, сгенерированному с помощью
Emu8086
без каких-либо хитрых директив.
Шаблон, используемый
Emu8086 для создания
EXE-файлов,
полностью совместим с
MASM и
TASM, только следует
"закомментировать" директиву
#MAKE_EXE#, чтобы избежать сообщения
об ошибке
Unknown character (неизвестный символ) в строке
11.
EXE-файлы генерируются
MASM точно также, как и
emu8086.
TASM не подсчитывает контрольные суммы, и имеет несколько отличную
структуру ЕХЕ-файла, но генерирует точно такой же машинный код.
Примечание: имеются несколько способов для кодирования одних и тех же
команд машинного кода для процессора 8086. Поэтому сгенерированный машинный код
может отличаться на различных компиляторах.
Ассемблер
Emu8086 поддерживает укороченные варианты
BYTE PTR and
WORD PTR - это:
B. и
W.
Для
MASM и
TASM вам придется заменить
B. и
W. на
BYTE PTR и
WORD PTR соответственно.
Например:
LEA BX, var1
MOV WORD PTR [BX], 1234h ; работает всегда.
MOV w.[BX], 1234h ; та же команда, но работает только в Emu8086.
HLT
var1 DB 0
var2 DB 0