- •Глава 14 Элементы программирования на языке ассемблера После изучения данной главы вы должны знать:
- •Основные компоненты языка ассемблер Алфавит языка
- •Константы (числа и строки) Числа — только целые
- •Строки (литералы)
- •Команды (операторы)
- •Директивы (псевдооператоры)
- •Модификаторы
- •Адресация регистров и ячеек памяти в ассемблере
- •Непосредственная адресация
- •Прямая адресация регистров мпп
- •Адресация ячеек оп
- •Основные команды языка ассемблер
- •Команды пересылки данных
- •Арифметические команды
- •Команды сложения, вычитания и сравнения
- •Команды приращения
- •Команды умножения
- •Команды деления
- •Логические команды
- •Команды безусловной передачи управления
- •Команды перехода к подпрограмме и выхода из подпрограммы
- •Команда перехода к подпрограмме: call opr
- •Команда выхода из подпрограммы
- •Команды условной передачи управления
- •Команды условной передачи управления для беззнаковых данных
- •Команды условной передачи управления для знаковых данных
- •Команды условной передачи управления для прочих проверок
- •Команды управления циклами
- •Команды прерывания
- •Основные директивы ассемблера
- •Директивы определения идентификаторов
- •Директивы определения данных
- •Директивы определения сегментов и процедур
- •Видеооперации с прерыванием 21h dos
- •Программирование работы с клавиатурой
- •Программирование работы с принтерами
- •Печатающие устройства параллельного типа
- •Печатающие устройства последовательного типа
- •Программирование работы с файлами
- •Прерывания, используемые при работе с файлами на дисках
- •Некоторые аспекты создания исполняемых программ
- •Процедуры формирования программы
- •Структура программы на языке ассемблера для получения исполняемого файла формата exe
- •Основные сведения о листинге и его структуре
- •Особенности структуры машинных команд
- •Последовательность работы пк при выполнении программы
- •Краткие сведения об отладчике программ debug
- •Основные команды отладчика debug
- •Вопросы для самопроверки
Некоторые аспекты создания исполняемых программ
Язык ассемблера удобен тем, что, с одной стороны, он позволяет писать программы на уровне команд микропроцессора, с другой стороны, не требует использования и, соответственно, запоминания множества числовых кодов этих команд.
Исходная программа, составленная на языке ассемблера, использующая мнемонические сокращения английских слов и введенная в машину с использованием любого текстового редактора (Word, NE, Brief, Xedit, Lexicon и т. д.), оформляется в виде файла с расширением ASM; после обработки исходной программы программой-ассемблером (ASM, MASM или TASM) формируется программа в машинных кодах — объектная программа с расширением OBJ, уже понятная микропроцессору (ASM выдает только коды ошибок, обнаруженных при трансляции, а MASM предоставляет более развернутую информацию об этих ошибках; MASM, в отличие от ASM, позволяет использовать в программах команды, ориентированные на современные микропроцессоры и сопроцессоры; возможности у TASM еще несколько шире, чем у MASM, но в настоящее время продолжает развиваться только MASM).
Объектная программа еще не является законченной и исполняемой микропроцессором: в ней окончательно оформлены еще не все адреса (программа является «перемещаемой») и не объединены части (блоки), оттранслированные отдельно друг от друга (например, с целью более простой их отладки). Преобразование объектной программы в исполняемую (компоновка объектной программы) выполняется редактором связей LINK (либо TLINK). Исполняемый файл после загрузки имеет расширение EXE. Отладку исполняемой программы удобно выполнять с помощью отладчика DEBUG.
Процедуры формирования программы
Последовательность процедур формирования программы показана на рис. 9.4.
Рис. 9.4. Последовательность процедур формирования программы
Составление программы и ее ввод под каким-нибудь именем на диск (дискету). При вводе программы используется любой текстовый редактор, например встроенный редактор Norton Commander.
Трансляция (ассемблирование) программы. При запуске транслятора MASM вводится строка вида:
MASM c:prog.asm или просто MASM.
Появится запрос: Surce filename [.asm]. Следует указать путь к файлу и имя исходного файла, если оно не было указано ранее. В ответ на запрос Object filename [prog.obj] ввести имя объектной программы (объектного модуля), если оно отличается от имени исходного файла (иначе следует нажать клавишу Enter). Если нужен листинг программы в машинных кодах, в ответ на Source listing [nul.lst] укажите местоположение и имя формируемого файла, иначе нажмите клавишу Enter. Для получения листинга перекрестных ссылок программы в ответ на Cross-reference [nul.crf] укажите местоположение и имя формируемого файла, иначе нажмите клавишу Enter.
Альтернативный вариант вызова ассемблера: MASM [c:]prog, c:, c:, c:.
Листинг — распечатка, файл для распечатки; листинг программы содержит программу исходную и в машинных кодах, а также обнаруженные при трансляции ошибки в программе. Листинг перекрестных ссылок показывает имена переменных и номера строк программы, где эти переменные используются.
Компоновка объектного модуля (загрузка и редактирование связей).
Вводится: LINK c:prog.obj или просто LINK.
Появится запрос: Object modules [.obj]. Следует указать имя файла .OBJ, если оно не было указано ранее.
Следующий запрос: Run file [prog.exe]; если имя исполняемой программы другое, то следует его ввести, иначе Enter.
List file [nul.map], следует ввести CON; MAP-файл содержит таблицу имен и информацию о размере сегментов, а также ошибки, обнаруженные при загрузке; ввод CON означает требование вывода их на экран дисплея.
Запрос Libraries [.lib]: нажмите Enter, если при сборке дополнительных библиотек связей не требуется.
Альтернативный вариант вызова загрузчика: LINK [c:]prog.obj, c:, con.
Отладка программы (при необходимости). Можно использовать отладчик DEBUG. Вызов отладчика DEBUG: DEBUG c:prog.exe.
Выполнение программы.
При наличии приглашения к работе MS DOS ввести имя программы: c:prog[.exe].