Самоучитель Ассемблер - Книга является руководством по программированию на ассемблере для микропроцессорных систем на базе i80x86 и посвящена практическому применению этого языка на примере и с использованием ассемблера а86. Рассматриваются дополнительные возможности языков ассемблера: макрокоманды и связь с языками высокого уровня. Приводится обзор стилей языков ассемблера для разных вычислительных систем. В качестве иллюстрации применения ассемблеров рассмотрены различные вопросы, связанные с многозадачностью, - обработка прерываний и резидентные программы. Изложенный материал снабжен примерами, контрольными вопросами и заданиями к практическим работам. Для начинающих программистов.
Название: Самоучитель Ассемблер Автор: Андрей Жуков, Андрей Авдюхин Издательство: БХВ-Петербург Год: 2002 Страниц: 447 Формат: PDF Размер: 11,5 МБ ISBN: 5-94157-133-X Качество: Отличное Серия или Выпуск: Самоучитель Язык: Русский
Содержание:
Введение Структура изложения Часть I. Основы ассемблера Глава 1. Данные, имена, типы 1.1. Структура программы 1.2. Директивы определения данных 1.3. Обозначение чисел 1.4. Символические обозначения чисел, выражения 1.5. Переменные и метки 1.6. Типы имен 1.7. Типы и выражения Глава 2. Определение имен 2.1. Алгоритм трансляции 2.2. Повторное определение имен 2.3. Локальные имена 2.4. Предопределенные имена 2.5. Имя end Глава 3. Практикум по программированию данных 3.1. Запуск ассемблера a86 3.2. Программирование данных Глава 4. Просмотр данных в отладчике 4.1. Запуск и завершение сеанса отладки 4.2. Экран отладчика 4.3. Окна отображения данных 4.4. Сохранение нажатий клавиш 4.5. Форматы вывода данных 4.5.1. Базовые форматы 4.5.2. Составные форматы 4.6. Задания на самостоятельную работу Глава 5. Способы адресации 5.1. Данные процессора 5.2. Обозначения операндов машинных команд 5.3. Способы адресации операндов 5.3.1. Регистровая и непосредственная адресация 5.3.2. Адресация данных в памяти Прямая адресация Косвенная адресация 5.3.3. Ограничение на адресацию операндов в памяти Глава 6. Система комацц i80x86 6.1. Режим непосредственного выполнения в d86 6.2. Способы адресации операндов 6.2.1. Регистровая, непосредственная и прямая адресация 6.2.2. Косвенная адресация Косвенная адресация по значению одного регистра Косвенная адресация по сумме значений двух регистров 6.3. Обзор системы команд процессора i80x86 6.3.1. Команды пересылки 6.3.2. Арифметические команды 6.3.3. Логические команды 6.3.4. Команды сдвигов и вращений 6.3.5. Команды передачи управления Адресация в командах передачи управления Команды условных переходов 6.3.6. Воздействие команд на флаги 6.3.7. Строковые команды Глава 7. Программирование циклов 7.1. Поиск в массиве байтов 7.2. Поиск в массиве слов 7.3. Поиск байта со значением больше заданного 7.4. Подсчет байтов в заданном диапазоне значений 7.4.1. Алгоритмическое решение 7.4.2. Табличное решение Глава 8. Исследование программ в d86 8.1. Пример исследуемой программы 8.2. Названия регистров в отображении данных 8.3. Режимы выполнения 8.4. Постоянные точки останова 8.5. Редактирование команд 8.6. Принудительный останов Глава 9. Примеры программ 9.1. Обработка данных на уровне бит 9.2. Вложенные циклы 9.3. Программирование ввода/вывода 9.4. Проблема опережающих ссылок 9.5. Решение проблемы опережающих ссылок 9.6. Упаковка четырехбитных кодов 9.7. Задания на составление программ 9.7.1. Задания первого уровня сложности 9.7.2. Задания второго уровня сложности Глава 10. Сегменты и exe-программы 10.1. Сегментная модель памяти 10.2. Сегменты в com-программе 10.3. Сегменты в exe-программе 10.4. Особенности подготовки exe-программы 10.5. Построение exe-программ из нескольких модулей 10.6. Практикум 10.6.1. Компоновка 10.6.2. Организация отладки 10.6.3. Компоновка многомодульной программы 10.6.4. Задание на самостоятельную работу Часть II. Расширенные возможности ассемблера Глава 11. Макрокоманды и условная трансляция 11.1. Макрокоманды 11.1.1. Макрокоманды без параметров 11.1.2. Макрокоманды с параметрами 11.1.3. Правила подстановки параметров 11.1.4. Функции от параметров 11.1.5. Циклы по параметрам R-циклы Q-циклы Задание шага в г- и q- циклах 11.1.6. Цикл по литерам параметра 11.1.7. Циклы, не зависящие от параметров 11.1.8. Вложенные циклы Вложенные циклы с фиксированным числом повторений Сложная обработка фактических параметров 11.2. Средства условной трансляции 11.2.1. Директива #if..#endif 11.2.2. Макроопределения и условная трансляция 11.2.3. Условия Арифметические отношения Объединение условий Проверка существования Определение имен в командной строке Инвертирование логических значений Пример условной трансляции в макроопределениях 11.2.4. Условная трансляция в циклах 11.3. Метки в макроопределениях 11.4. Средства отладки макрокоманд 11.5. Практикум 11.5.1. Макрокоманды без циклов 11.5.2. Макрокоманды с циклами 11.5.3. Функции от параметров 11.5.4. Вложенные циклы 11.5.5. Условная трансляция в макроопределениях 11.6. Вызов макрокоманд в d86 Глава 12. Структурный ассемблер 12.1. Логика условных переходов 12.2. Оператор if в a86 12.3. Способы реализации структурного ассемблера 12.3.1. Реализация при помощи макроассемблера 12.3.2. Реализация при помощи препроцессора 12.4. Структурный ассемблер bsp86 12.4.1. Синтаксис логических операторов Оператор цикла с постусловием Оператор цикла с предусловием Оператор счетного цикла Оператор бесконечного цикла Выход из цикла Оператор условного выполнения Последовательность операторов Оператор мультиветвления 12.5. Реализация мультиветвления в bsp86 12.6. Выполнение примеров 12.7. Диагностические сообщения bsp86 12.7.1. Сообщения первого типа 12.7.2. Особенности лексического анализатора 12.7.3. Сообщения второго типа 12.7.4. Ошибки в списках вариантов 12.8. Пример использования bsp86 12.9. Практикум Глава 13. Интерфейс с языком C 13.1. Машинное представление данных языка C 13.2. Правила использования регистров 13.2.1. Сегментные регистры 13.2.2. Регистры общего назначения 13.2.3. Регистр флагов 13.3. Ассемблерные вставки 13.3.1. Ассемблерные вставки в Microsoft/Borland-C 13.3.2. Ассемблерные вставки в Watcom-C 13.4. Интерфейс C-ассемблер при раздельной трансляции 13.4.1. Соглашения о сегментах кода 13.4.2. Соглашения об именах C-объектов 13.4.3. Соглашения о результате функции 13.4.4. Передача параметров через регистры 13.4.5. Передача параметров через стек Передача при ближних вызовах Кадр стека при дальних вызовах Инструкции enter и leave Порядок передачи параметров Соглашения об удалении параметров Сокращенные обозначения параметров и локальных данных Параметры дальние указатели Обращение к глобальным данным 13.5. Выполнение примеров Глава 14. Обработка BCD-данных 14.1. Форматы BCD 14.2. Операции над неупакованными BCD 14.2.1. Сложение и вычитание 14.2.2. Умножение и деление 14.2.3. Дополнительные возможности aad и aam 14.3. Операции над упакованными BCD 14.3.1. Инструкции daa и das 14.3.2. Преобразования для деления и умножения 14.4. Операции над знаковыми BCD 14.5. Команды, воздействующие на флаг a 14.6. Практикум Глава 15. Математический сопроцессор 15.1. Проверка наличия FPU 15.2. Загрузка и выгрузка целых чисел 15.3. Недопустимые операции и NaN 15.4. Организация массива данных в виде стека 15.5. Вычисления в стековой машине 15.5.1. Двуместные операции 15.5.2. Выражения в обратной польской записи 15.5.3. Расширения стековой машины в i80x87 15.6. Представление данных в FPU 15.7. Стандартный формат вещественных данных 15.8. Программная модель i80x87 15.8.1. Флаги особых ситуаций 15.8.2. Битовые поля управляющего слова 15.8.3. Битовые поля слова состояния 15.8.4. Доступ к указателям инструкции и операнда 15.9. Операции i80387 15.9.1. Пересылки Загрузка данных Команды выгрузки Команда обмена 15.9.2. Арифметические операции Основные арифметические операции Операции над знаковым битом Округление до целого Получение остатка от деления Извлечение корня Масштабирование Операции сравнения и тестирования 15.9.3. Трансцендентные операции Тригонометрические операции Возведение в степень 15.9.4. Команды управления 15.10. Практикум Часть III. Управление внешними устройствами, прерывания, резидентные программы Глава 16. Управление внешними устройствами 16.1. Внешние устройства в программной модели вычислительной системы 16.2. Инструкции для доступа к портам 16.3. Исследование внешних устройств вручную 16.3.1. Запуск редактора портов 16.3.2. Определение наличия устройства 16.3.3. Доступ к регистрам устройства Коммутация по чтению-записи Управление коммутацией через отдельный порт 16.3.4. Управление устройствами Принцип последовательной связи Основные регистры адаптера последовательной связи Последовательная передача в диагностическом режиме Получение ошибки переполнения приемника 16.4. Управление устройствами по программе 16.4.1. Наблюдение за состоянием в режиме периодического опроса 16.4.2. Реакция на особые состояния в режиме прерываний Задание адреса перехода при прерывании Выполнение прерывания процессором i80x86 Контроллер прерываний 8259А Пример организации прерываний от внешнего источника Каскадное включение контроллеров прерываний 16.5. Измерение временных характеристик устройства Глава 17. Прерывания и исключения 17.1. Прерывания и векторные вызовы подпрограмм 17.2. Типы исключений 17.3. Итоговая классификация прерываний 17.4. Программирование исключений 17.4.1. Trap-исключения 17.4.2. Fault-исключения 17.4.3. Различие между fault- и trap-исключениями 17.4.4. Практикум по trap- и fault-исключениям 17.5. Обработка прерываний при наличии системной процедуры 17.5.1. Сохранение и восстановление векторов 17.5.2. Дополнение к установленной процедуре обработки прерывания 17.6. Внешние прерывания 17.6.1. Доступ к данным из процедуры обработки прерывания 17.6.2. Ограничения на использование функций операционной системы 17.6.3. Определение причины прерывания 17.6.4. Практикум по внешним прерываниям Прерывание от клавиатуры Прерывание от последовательного канала связи Глава 18. Резвдентные программы 18.1. Установка резидентной процедуры 18.2. Взаимодействие с TSR-программой по данным 18.3. Уменьшение размера занимаемой памяти 18.4. Выгрузка TSR-программы 18.5. Вызовы DOS в TSR-процедурах 18.5.1. Способы определения состояния DOS 18.5.2. Pop-up программы Часть IV. Приложения Приложение 1. Биты, байты, слова, знаковые и беззнаковые числа Приложение 2. Коды литер в стандарте ASCII Приложение 3. Позиционные коды клавиш Приложение 4. Функции BIOS-DOS Функции BIOS для работы с клавиатурой Функции прерывания 021 DOS Функции низкоуровневого ввода/вывода Функции ввода Функции вывода Функции для работы с файлами и потоками Стандартные потоки ввода/вывода Функции чтения и записи Функции для создания, открытия и закрытия файлов Функции для завершения программы Функции для TSR-программ Приложение 5. Настройки запуска a86 Ключи, или опции запуска a86 Переменная окружения a86 Приложение 6. Операторы и инструкции a86 Операторы Инструкции Условные обозначения Общие правила установки флагов Воздействие команд на флаги AAA - Ascii Adjust after Addition AAD - ASCII Adjust before Division AAM - ASCII Adjust after Multiply AAS - ASCII Adjust after Subtraction ADC - Add with Carry ADD - Addition AND - Logical AND BOUND - Check Array Index Against Bounds CALL - Call Procedure CBW - Convert Byte to Word CLC - Clear Carry Flag CLD - Clear Direction Flag CLI - Clear Interrupt Flag CMC - Complement Carry Flag CMP - Compare CMPS/CMPSB/CMPSW - Compare String Operands CWD - Convert Word to Doubleword DAA - Decimal Adjust after Addition DAS - Decimal Adjust after Subtraction DEC - Decrement by 1 DIV - Unsigned Divide ENTER - Make Stack Frame for Procedure Parameters IDIV - Signed Divide IMUL - Signed Multiply IN - Input from Port INC - Increment by 1 INS/INSB/INSW - Input from Port to String INT/INTO - Call to Interrupt Procedure IRET - Interrupt Return J<x> - Jump if Condition is Met JMP - Jump LAHF - Load Flags into AH Register LEA - Load Effective Address LEAVE - High Level Procedure Exit LDS/LES - Load Far Pointer LODS/LODSB/LODSW - Load String Operand LOOP/LOOP<x> - Loop Control with CX Counter MOV - Move Data MOVS/MOVSB/MOVSW - Move Data from String to String MUL - Unsigned Multiplication of AL or AX NEG - Two's Complement Negation NOP - No Operation NOT - One's Complement Negation OR - Logical OR OUT - Output to Port OUTS/OUTSB/OUTSW - Output String to Port POP - Pop a Word from the Stack POPA - Pop all General Registers POPF - Pop Stack into FLAGS PUSH - Push Operand onto the Stack PUSH A - Push all General Registers PUSHF - Push Flags Register onto the Stack REP/REP<x> - Repeat Following String Operation RET - Return from Procedure RCL/RCR/ROL/ROR - Rotate SAHF - Store AH into Flags SAL/SAR/SHL/SHR - Shift Instructions SBB - Subtraction with Borrow SCAS/SCASB/SCASW - Scan String Data STC - Set Carry Flag STD - Set Direction Flag STI - Set Interrupt Flag STOS/STOSB/STOSW - Store String Data SUB - Subtraction TEST - Logical Compare WAIT - Wait until BUSY# Pin is Inactive XCHG - Exchange Register/Memory with Register XLAT/XLATB - Table Look-up Translation XOR - Logical Exclusive OR Приложение 7. Совместимость a86 с традиционными ассемблерами Приложение 8. Прерывания от i80x87 Синхронизация процессора и сопроцессора Обработка прерываний Подключение сигнала прерывания Внешнее прерывание через irql3 Внутреннее прерывание 16 Приложение 9. Ответы на контрольные вопросы из части 1 К разделу 1.2 К разделу 1.4 К разделу 1.7 К разделу 2.1 К разделу 2.5 К разделу 5.1 К разделу 5.3.2. Прямая адресация К разделу 5.3.2. Косвенная адресация К разделу 5.3.3 К разделу 7.4.2 К разделу 10.1 К разделу 10.5 Приложение 10. Ошибки в a86 v4.05 Ошибка при оптимизации инструкции call far Ошибка в операторе bit Приложение 11. Описание дискеты