- •Введение
- •1. Архитектура процессора 8086
- •1.1. Программно доступные регистры микропроцессора
- •1.2. Сегментная организация памяти.
- •1.3. Способы адресации.
- •1.4. Организация стека.
- •1.5. Организация прерываний.
- •2. Загрузка и выполнение программ в DOS
- •2.1. EXE- и COM-программы
- •2.2. Выход из программы
- •3. Ассемблер, макроассемблер, редактор связей
- •4. Введение в язык Ассемблера
- •4.1. Структура программы на языке ассемблера
- •4.2. Операторы языка ассемблера
- •4.3. Приоритеты операций
- •4.4. Объявление и инициализация данных.
- •4.4.3. Структуры
- •4.4.4. Директива эквивалентности
- •4.6. Стандартные директивы определения сегментов
- •4.7. Директива INCLUDE
- •4.8. Ссылки вперед
- •5. Команды пересылки
- •5.1. Команда MOV
- •5.2. Команда обмена данных XCHG
- •5.3. Команды загрузки полного указателя LDS и LES
- •5.4. Команда перекодировки XLAT
- •5.5. Команды работы со стеком
- •5.6. Команды ввода-вывода
- •6. Арифметические команды
- •6.1. Команды арифметического сложения ADD и ADC
- •6.2. Команды арифметического вычитания SUB и SBB
- •6.3. Команда смены знака NEG
- •6.4. Команды инкремента INC и декремента DEC
- •6.5. Команды умножения MUL и IMUL
- •6.6. Команды деления DIV и IDIV
- •7. Команды побитовой обработки
- •7.1. Команды, выполняющие логические операции
- •7.2. Команды, выполняющие операции сдвигов
- •8. Команды сравнения и передачи управления
- •9. Подпрограммы и прерывания.
- •10. Команды работы со строками
- •11. Команды управления процессором
- •12. Структуры данных
- •12.1. Массивы
- •12.2. Связанные списки
- •13. Условное ассемблирование
- •14. Макросредства
- •14.1. Макродирективы
- •15. Языки высокого уровня и Turbo Assembler
- •15.1. Вызов подпрограмм и передача параметров в языке С++
- •15.2. Вызов ассемблерных программ из программ на языке С++
- •Литература
2.2. Выход из программы
Завершить программу можно следующими способами:
−через функцию 4CH (EXIT) прерывания 21H в любой момент, независимо от значений регистров;
−через функцию 00H прерывания 21H или прерывание INT 20H, когда CS указывает на PSP.
Функция DOS 4CH позволяет возвращать родительскому процессу код выхода, который может быть проверен вызывающей программой или командой COMMAND.COM "IF ERRORLEVEL".
Можно также завершить программу и оставить ее постоянно резидентной (TSR), используя либо INT 27H , либо функцию 31H (KEEP) прерывания 21H. Последний способ имеет те преимущества, что резидентный код может быть длиннее 64K, и что в этом случае можно сформировать код выхода для родительского процесса.
3. Ассемблер, макроассемблер, редактор связей
Существует несколько версий программы ассемблер. Одним из наиболее часто используемых является пакет Turbo Assembler, водящий в состав комплекса программ Borland С++. Рассмотрим работу с этим пакетом более подробно.
Входной информацией для ассемблера (TASM.EXE) является исходный файл — текст программы на языке ассемблера в кодах ASCII. В результате работы ассемблера может получиться до 3-х выходных файлов:
1)объектный файл – представляет собой вариант исходной программы, записанный в машинных командах;
2)листинговый файл – является текстовым файлом в кодах ASCII, включающим как исходную информацию, так и результат работы программы ассемблера;
3)файл перекрестных ссылок – содержит информацию об использовании символов и меток в ассемблерной программе (перед использованием этого файла необходима его обработка программой
CREF).
Объектному файлу ассемблер присваивает то же имя, что и у исходного, но с расширением OBJ; для листингового файла и файла перекрестных ссылок принимается значение NUL — специальный тип файла, в котором все, что записывается, недоступно и не может быть восстановлено.
Если ассемблер во время ассемблирования обнаруживает ошибки, он записывает сообщения о них в листинговый файл. Кроме того, он выводит их на экран дисплея.
20