Ассемблер и программирование для IBM PC



       

ГЛАВА 4. Ассемблирование и выполнение программ - часть 8


DIR B:EXASM1.*

------------------------------------------------------------ ------------------------------------------------------------ Рис. 4.2. Схема ассемблирования, компановки и выполнения программы.

В результате на экране появится следующие имена файлов: EXASM1.BAK (если для корректировки EXASM1.ASM использовался редактор EDLIN), EXASM1.ASM, EXASM1.OBJ, EXASM1.LST, EXASM1.EXE и EXASM1.CRF. Последовательность этих файлов может быть иной в зависимости от того, что уже находится на диске. Очевидно, что разработка ряда программ приведет к занятию дискового пространства. Для проверки оставшегося свободного места на диске полезно использовать команду DOS CHKDSK. Для удаления OBJ-, CRF-, BAK- и LST-файлов с диска следует использовать команду ERASE (или DEL):

ERASE B:EXASM1.OBJ, ...

Следует оставить (сохранить) ASM-файл для последующих изменений и EXE-файл для выполнения. В следующем разделе представлено определение данных в сегменте данных. Позже будет описана таблица перекрестных cсылок.

ПРИМЕР ИСХОДНОЙ ПРОГРАММЫ ------------------------------------------------------------

Особенность программы, приведенной на рис. 4.1, состоит в том, что она не содержит определения данных. Обычно все программы имеют определенные константы, рабочие поля для арифметических вычислений и области для операций ввода-вывода. В главе 2 (рис.2.3) была рассмотрена программа в машинных кодах, в которой были определены два поля данных. В этой главе на рис. 4.3 приводится аналогичная программа, но на этот раз написанная на языке ассемблера и для краткости уже ассемблированная. Эта программа знакомит с несколькими новыми особенностями.

Ассемблер для IBM PC. Глава 4 87

Сегмент стека содержит директиву DW (Define Word - опреде лить cлово), описывающая 32 слова, в которых генерируется неопределенное значение обозначенное знаком вопроса (?). Определение размера стека в 32 слова является наиболее реальным, так как в больших программах может потребоваться много "прерываний" для ввода-вывода и вызовов подпрограмм - все они используют стек. Определение стека дублированием константы 'STACKSEG' в примере на pис. 3.2 необходимо лишь для удобства при работе с отладчиком DEBUG. Замечание: Определяйте размер стека не менее 32 слов. При малых размерах стека ни ассемблер, ни компановщик не смо- гут определить этого и выполнение программы может разрушить ся самым непредсказуемым образом. В примере на рис. 4.3 определен сегмент данных DATASG, начинающийся по относительному адресу 0000. Этот сегмент содержит три значения в формате DW. Поле FLDA определяет слово (два байта), содержащее десятичное значение 250, которое ассемблер транслирует в шест. 00FA (см. на рисунке слева). Поле FLDB определяет слово с десятичным значением 125, котоpое транслируется в шест. 007D. Действительные значения этих двух констант в памяти - FA00 и 7D00 соответственно, что можно проверить c помощью отладчика DEBUG.




Содержание  Назад  Вперед