Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Приложения /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Замечания по программированию - Программирование от RIN.RU
Замечания по программированию



Программы DOS


Программы DOS предназначены для работы под управлением операционной системы DOS и записываются в двух форматах:


  • формат .EXE;

  • формат .COM.




Формат EXE позволяет использовать наиболее общую в DOS сегментацию программы. Программы могут иметь насколько сегментов и могут ссылаться на сегмент или группу сегментов по имени. Таким образом, программы .EXE могут превышать по размеру 64К.


Формат COM представляет собой достаточно простой формат. Программы в таком формате не могут содержать символьных ссылок на имена групп и сегментов. Таким образом, программы COM обычно пишутся с использованием модели TINY и ограничены по размеру данных или кода 64 килобайтами.


Чтобы строить программы DOS, вам потребуется компоновщик (например, TLINK) и утилита построения программ (например, MAKE). Подробнее об утилитах рассказывается в Приложении D.


Замечания по программам формата EXE


При загрузке программы EXE операционная система устанавливает регистры следующим образом:


РегистрЗначение
DS, ESСодержит адрес параграфа для префикса програмного сегмента программы (PSP). PSP содержит передаваемые программе в командной строке аргументы и указатель на строку операционной среды для программы.
CS:IPСодержит начальный адрес, заданный в операторе END в одном из модулей программы, или адрес директивы STARTUPCODE.
SS:SPСодержит адрес последнего слова, которое задает в программе сегмент стека.



В программах EXE вы можете задавать любую модель памяти. Следует использовать возможно более простую модель, поскольку это обеспечивает более быстрое выполнение и упрощает программирование. Например, если в вашей программе никогда не предполагается использовать более 64К данных и области стека, то вполне можно использовать модель TINY.


Директива STURTUPCODE в модуле генерирует инструкции, которые автоматически инициализируют все необходимые регистры, соответствующие выбранной модели. Для использования в программе она сохраняет адрес параграфа PSP в сегменте ES.


Когда вы загружаете программу, операционная система выделяет программе до ее завершения всю оставшуюся память. Для программ, которые не используют динамически распределяемую область памяти, или которые строят в памяти свою собственную динамически распределяемую область, такое поведение вполне подходит. Другие программы могут выделять память через DOS. В этом случае через запросом на память из DOS память должна быть освобождена и доступна операционной системе.


Эти вопросы иллюстрируются примером программы EXEPROG.ASM на дистрибутивном диске. Чтобы сформировать программу EXE, используйте утилиту MAKE. В формирующем файле MAKEFILE следует указать все модули, с которыми компонуется программа, например:


EXECPROG.EXE: EXECPROG.OBJ


TLINK EXECPROG;
EXECPROG.OBJ: EXECPROG.ASM
TASM EXECPROG




Замечания по программам формата COM


Программы COM представляют собой ограниченные версии программ EXE. Каждую программу формата COM можно представить как программу EXE, но не каждую программу EXE можно представить как программу формата COM. Здесь действуют следующие ограничения:


  • Программы COM следует писать с использованием модели TINY.

  • В программах COM нельзя использовать предопределенный сегмент стека.

  • Программа COM не может содержать прямых адресных ссылок на адрес сегмента или группы. Это означает, что программа не может содержать непосредственных дальних вызовов или ссылаться на сегменты по имени. Все процедуры в программе COM должны описываться как BEAR.

  • Выполнение должно начинаться со смещения 100h в сегменте кода. Чтобы это произошло, укажите в качестве первой инструкции сегмента кода директиву STURTUPCODE.




Турбо Ассемблер загружает программы COM, начиная со смещения 100h в префиксе программного сегмента программы (PSP). Для этого директива STARTUPCODE для модели TINY автоматически помещает в программу ORG 100h.


При загрузке программы COM устанавливаются следующие регистры:


РегистрЗначение
CS,DS,ES,SS Содержит адрес параграфа в PSP программы.
IPУстанавливается в значение 100h.
SP Устанавливается в 0FFFEh (последнее слово в сегменте программы.



Если вы не хотите размещать стек в конце сегмента программы, то нужно установить новый стек. Для такого стека используйте неинициализированный сегмент данных (UDATASEG).


Хотя программы COM должны определяться с моделью памяти TINY, с помощью директив CODESEG, DATASEG и UDATASEG можно разделить код данные и неинициализированные данные.


Как и в случае программ EXE, когда вы загружаете программу COM, Турбо Ассемблер выделяет для ее завершения всю оставшуюся память. При возврате памяти в DOS убедитесь, что вы не освободили непреднамеренно неинициализированные данные.


Данные вопросы иллюстрируются файлом-примером COMPROPG.ASM, который можно найти на дистрибутивных дисках Турбо Ассемблера.


Чтобы сформировать программу COM, используйте утилиту MAKE. В формирующем файле MAEKFILE следует указать все модули, с которыми компонуется программа, например:


COMPROG.COM: COMPROG.OBJ
TLINK COMPROG;
COMPROG.OBJ: COMPROG.ASM
TASM COMPROG




<<<  НазадВперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Обзор синтаксических правил Турбо Ассемблера

Вопросы совместимости

Утилиты Турбо Ассемблера

Сообщения об ошибках

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь