Для того, чтобы избежать ошибок
tlink /x /v /3 /t p,p
Для того, чтобы избежать ошибок при подготовке программ, целее образно подготовить два командных файла для трансляции и компоновки программных примеров - один для программ типа .ЕХЕ, и другой для программ типа .СОМ. Разумеется, файлам надо назначить различающие имена.
Рассмотрим пример законченной программы типа .СОМ, которая выводит на экран строку текста.
Пример 3-2. Простая .COM- программа
assume CS:code,DS:code
code segment
org 256 ; Место под PSP
main proc
mov AH, 09h ; Функция вывода на экран
mov DX,offset msg
int 21h
mov AX,4C00h ; Функция завершения
int 21h ; программы
main endp
msg db 16,16,16 ' Программа типа .COM'17,17,17,'$'
code ends
end main
В начале программы отведено 256 байт под PSP; в программе отсутствует инициализация регистра DS; поле данных размещено в программном сегменте непосредственно после последней команды. Для разнообразия в строку, выводимую на экран, включены коды 16 и 17, которые отображаются на экране в виде залитых треугольников (рис. 3.2). Как видно из этого рисунка, программа имела имя Р. СОМ и запускалась из каталога F:\CURRENT.
Рассмотрим важный в принципиальном плане вопрос о месте размещения данных в .СОМ-программе. В нашем примере данные описаны в конце программного сегмента вслед за процедурой main, которая, как и в предыдущих примерах, введена скорее для порядка, чем по необходимости.
Рис. 3.2.
Вывод программы 3.2.
С таким же успехом можно было предложение с именем msg поместить после вызова int21h, внутри процедуры main. Третий возможный вариант, с которым мы еще столкнемся в примерах резидентных программ, приведен ниже.
assume CS:code,DS:code
code segment
org 256 ; Место под PSP
main proc
jmp start ; Первая выполнимая команда
Содержание Назад Вперед