Мне удалось создать отдельные сегменты стека, данных и кода в TASM с помощью директивы SEGMENT
, но меня все еще беспокоит. Когда следующий код собран с Turbo Assembler 2.0, TLINK создает двоичный файл, размер которого находится в окрестности 90 КБ.Распределение стека и данных в реальном режиме MZ .exe в Turbo Assembler 2.0
.286
myStack segment para stack 'stack'
db 0FFFFh dup (?)
ends myStack
myData segment para 'data'
msg db 'Memes!$'
db 7FFFh dup (?)
ends myData
myCode segment para 'code'
assume cs:myCode
assume ss:myStack
start:
mov ax,myData
mov ds,ax
push offset msg
call write
add sp,2
mov ah,4ch
int 21h
write:
push bp
mov bp,sp
mov dx,[bp+4]
mov ah,9h
int 21h
pop bp
ret
ends myCode
end start
Теперь мне кажется, что формат файла М.З. должна позволить .exe, чтобы указать, что он требует выделения памяти сверх того, что на самом деле содержится в бинарном изображении (через мин/макс параграфов памяти, выделенных в дополнение к размеру ввода кода, который я предполагаю).
Так что мой вопрос: как укорачивать сборщик/компоновщик в генерации .exe с соответствующим заголовком для выделения памяти без непосредственного включения значений заполнитель в двоичное изображение?
Это работал. Забавно, я попробовал это сам всего пару часов назад, и ассемблер продолжал жаловаться на неизвестные символы для названий сегментов! Клянусь, это было то же самое, что и у вас, но даже с мультимассовым переключателем/m2 он не собирался. Странный. – chili
@chili Возможно, вы переместили сегменты ** после ** 'end start', а не раньше? –
Я думаю, что ты можешь быть прав; – chili