Глава 4. Основы программирования для MS DOS

Программа, написанная на так же как и программа, написанная на лю-

бом другом языке программирования, выполняется не сама по себе, а при помощи

операционной системы. Операционная система выделяет области памяти для про­граммы, загружает ее, передаёт ее управление и обеспечивает взаимодействие про­граммы с устройствами ввода-вывода, файловыми системами и другими программа­ми (разумеется, кроме тех случаев, когда эта программа сама является операционной

системой или ее частью). Способы взаимодействия программы с внешним миром

различны для разных операционных систем, поэтому программа, написанная для

Windows, не будет работать в DOS, а программа для Linux - в Solaris/x86, хотя все

указанные системы могут работать на одном и том же компьютере.

Самая простая и распространенная операционная система для компьютеров,

основанных на процессорах Intel, - DOS (дисковая операционная система). Она

распространяется как сама по себе несколькими производителями - Microsoft (MS DOS), IBM (PC-DOS), Novell (Novell DOS), Caldera (Open DOS) и др., так и в виде части систем Microsoft Windows 95 и старше. DOS предоставляет програм­мам полную свободу действий, никак не ограничивая доступ к памяти и внешним устройствам, позволяя им самим управлять процессором и распределением памяти. По этой причине система лучше всего подходит для того, чтобы основательно познакомиться с устройством компьютера и возможностями программы на ассем­блере, но которые часто скрываются компиляторами с языков высокого уровня и более совершенными операционными системами.

Итак, чтобы программа выполнилась любой ОС, она должна быть скомпилиро­вана в исполняемый файл. Основные два формата исполняемых файлов в DOS -СОМ и ЕХЕ. Файлы типа СОМ содержат только скомпилированный код без ка­кой-либо дополнительной информации о программе. Весь код, данные и стек та­кой программы располагаются в одном сегменте и не могут превышать 64 Кб. Файлы типа ЕХЕ содержат заголовок, где описывается размер файла, требуемый объем памяти, список команд в программе, использующих абсолютные адреса, которые зависят от расположения программы в памяти, и т. д. ЕХЕ-файл может иметь любой размер. Формат ЕХЕ также используется для исполняемых файлов в различных версиях DOS-расширителей и Windows, но с большими изменениями.

Несмотря на то что файлам типа СОМ принято давать расширение .сот, \&*) а файлам типа ЕХЕ - .асе, DOS не использует расширения для определе­ния типа файла. Первые два байта заголовка ЕХЕ-файла - символы «MZ» или «ZM», и если файл начинается с них и длиннее некоторого порогового значения, отличающегося в разных версиях DOS, он загружается как EXE, если нет - как СОМ.

Кроме обычных исполняемых программ DOS может загружать драйверы уст­ройств - специальные программы, используемые для упрощения доступа к вне­шним устройствам. Например, драйвер устройства LPT* входящий в IO.SYS, по­зволяет посылать тексты на печать из DOS простым копированием файла в LPT, а драйвер RAMDISK.SYS разрешает выделить область памяти и обращаться к ней, как к диску. Написание драйверов значительно сложнее, чем написание обычных программ (см. далее).