Загрузка...

Turbo Assembler Версия 2.0. Руководство пользователя.


BORLAND INTERNATIONAL, INC. 1800 GREEN HILLS ROAD
P.O.BOX 660001, SCOTTS VALLEY, CA 95066-0001

Авторские права принадлежат Borland International (c) 1988, 1990.
Все права сохраняются. Все продукты Borland являются торговыми
марками или зарегистрированными торговыми марками фирмы Borland
International, Inc. Прочие имена продуктов являются торговыми
марками или зарегистрированными торговыми марками соответствующих
держателей.

Содержание
——————————————————————

Введение

Требования к аппаратному и программному обеспечению …….
Сведения о настоящих руководствах …………………….
Руководство пользователя ………………………….
Принятые обозначения ………………………………..
Как обратиться на фирму Borland ………………………

Глава 1 Установка Turbo Assembler

Файлы на диске ……………………………………..
Установка Turbo Assembler ……………………………

Глава 2 Начало работы с Turbo Assembler

Создание вашей первой программы на Turbo Assembler ……..
Ассемблирование вашей первой программы ……………..
Компоновка вашей первой программы ………………….
Запуск вашей первой программы ……………………..
Что происходило? …………………………………
Модифицирование вашей первой программы на Turbo Assembler ..
Передача вывода на принтер ………………………..
Создание вашей второй программы на Turbo Assembler ……..
Запуск программы REVERSE.ASM ………………………

Глава 3 Справочник по командной строке

Запуск Turbo Assembler из DOS ………………………..
Опции командной строки ………………………………
/a ………………………………………………..
/b ………………………………………………..
/c ………………………………………………..
/d ………………………………………………..
/e ………………………………………………..
/h или /? ………………………………………….
/i ………………………………………………..
/j ………………………………………………..
/kh ………………………………………………..
/ks ………………………………………………..
/l ………………………………………………..
/la ………………………………………………..
/m ………………………………………………..
/ml ………………………………………………..
/mu ………………………………………………..
/mv#………………………………………………..
/mx ………………………………………………..
/n ………………………………………………..
/p ………………………………………………..
/q ………………………………………………..
/r ………………………………………………..
/s ………………………………………………..
/t ………………………………………………..
/v ………………………………………………..
/w ………………………………………………..
/x ………………………………………………..
/z ………………………………………………..
/zd ………………………………………………..
/zi ………………………………………………..
Косвенные командные файлы ……………………………
Файл конфигурации ……………………………………

Глава 4 Природа языка ассемблера

Архитектура компьютера ………………………………
Что представляет собой язык ассемблера ……………..
Процессоры 8088 и 8086 ………………………………
Возможности 8086 …………………………………
Память ………………………………………….
Ввод и вывод …………………………………….
Регистры ………………………………………..
Флаговый регистр ………………………………
Регистры общего назначения ……………………..
Регистр AX …………………………………
Регистр BX …………………………………
Регистр CX …………………………………
Регистр DX …………………………………
Регистр SI …………………………………
Регистр DI …………………………………
Регистр BP …………………………………
Регистр SP …………………………………
Указатель команд ……………………………….
Сегментные регистры …………………………….
Регистр CS …………………………………
Регистр DS …………………………………
Регистр ES …………………………………
Регистр SS …………………………………
Набор команд 8086 …………………………………
IBM PC и XT ………………………………………..
Устройства ввода и вывода …………………………
Системное программное обеспечение для семейства IBM PC ..
DOS …………………………………………..
Прием нажатий клавиш ………………………..
Вывод символов на экран дисплея ………………
Выход из программы ………………………….
BIOS ………………………………………….
Выбор режимов дисплея ……………………….
Иногда обратиться прямо к аппаратному обеспечению
бывает абсолютно необходимо ……………………….
Прочие ресурсы …………………………………..

Глава 5 Элементы программы на языке ассемблера

Компоненты и структура программы на языке ассемблера ……
Резервированные слова ……………………………….
Формат строки ………………………………………
Метки …………………………………………..
Мнемонические команды и директивы …………………
Директива END …………………………………
Операнды ………………………………………..
Операнды — регистры ……………………………
Операнды — константы …………………………..
Выражения …………………………………….
Операнды — метки ………………………………
Режимы адресации памяти ………………………..
Комментарии ……………………………………..
Сегментные директивы ………………………………..
Упрощенные сегментные директивы ……………………
.STACK, .CODE и .DATA …………………………
DOSSEG ……………………………………….
.MODEL ……………………………………….
Прочие упрощенные сегментные директивы …………..
Стандартные сегментные директивы …………………..
Директива SEGMENT ……………………………..
Директива ENDS ………………………………..
Директива ASSUME ………………………………
Сравнение упрощенных и стандартных сегментных директив ..
Распределение данных ………………………………..
Биты, байты и основания системы счисления …………..
Десятичная, двоичная, восьмиричная
и шестнадцатиричная формы записи ………………..
Выбор системы счисления по умолчанию …………….
Инициализированные данные …………………………
Инициализация массивов …………………………
Инициализация строк символов …………………..
Инициализация выражениями и метками ……………..
Неинициализированные данные ………………………..
Именованные ячейки памяти ………………………….
Пересылка данных ……………………………………
Выбор размера данных ……………………………..
Данные со знаком и без знака ………………………
Преобразования размеров данных …………………….
Доступ к сегментным регистрам ……………………..
Передача данных на стек и обратно ………………….
Обмен данными ……………………………………
Ввод/вывод ………………………………………
Операции …………………………………………..
Арифметические операции …………………………..
Сложение и вычитание …………………………..
32-битовые операнды …………………………
Операции инкремента и декремента ……………..
Умножение и деление ……………………………
Изменение знака ………………………………
Логические операции ………………………………
Операции сдвига и циклического сдвига ………………
Циклы и переходы ……………………………………
Безусловные переходы ……………………………..
Условные переходы ………………………………..
Циклы ……………………………………………
Подпрограммы ……………………………………….
Как работает подпрограмма …………………………
Передача параметров ………………………………
Возврат значений …………………………………
Сохранение регистров ……………………………..
Пример программы на языке ассемблера ………………….

Глава 6 Дополнительные сведения
о программировании на Turbo Assembler

Использование подстановок равенства …………………..
Директива EQU ……………………………………
Предопределенное символическое имя $ …………….
Директива = ……………………………………
Строковые команды …………………………………..
Строковые команды для пересылки данных …………….
LODS ………………………………………..
STOS ………………………………………..
MOVS ………………………………………..
Повторение строковой команды ……………………
Нарушение указателем строки границ данных ………..
Строковые команды сканирования данных ………………
SCAS ………………………………………..
CMPS ………………………………………..
Использование операндов строковых команд ……………
Многомодульные программы ……………………………
Директива PUBLIC …………………………………
Директива EXTRN …………………………………
Директива GLOBAL …………………………………
Включаемые файлы ……………………………………
Файл листинга ……………………………………….
Аннотированный исходный текст программы ……………..
Таблицы символических имен листинга ………………..
Таблица меток …………………………………
Таблица групп и сегментов ……………………….
Таблица перекрестных ссылок ……………………….
Управление содержимым и форматом листинга …………..
Директивы выбора включаемых в листинг строк ………
%LIST и %NOLIST ……………………………….
%CONDS и %NOCONDS ……………………………..
%INCL и %NOINCL ……………………………….
%MACS и %NOMACS ……………………………….
%CTLS и %NOCTLS ……………………………….
%UREF и %NOUREF ……………………………….
%SYMS и %NOSYMS ……………………………….
Директивы управления форматом листинга …………….
Директивы управления шириной поля ……………….
%PUSHLCTL и %POPLCTL …………………………..
Прочие директивы управления листингом ……………….
Сообщения, выдаваемые во время ассемблирования …………
Условное ассемблирование исходной программы ……………
Директивы условного ассемблирования …………………
IF и IFE ……………………………………..
IFDEF и IFNDEF ………………………………..
Прочие директивы условного ассемблирования ……….
Семейство директив ELSEIF ………………………
Директивы условного генерирования состояний ошибки …..
.ERR, .ERR1 и .ERR2 ……………………………
.ERRE и .ERRNZ ………………………………..
.ERRDEF и .ERRNDEF ……………………………..
Прочие директивы условного генерирования
состояний ошибки ………………………………
Распространенные ошибки
при программировании на языке ассемблера ………………
Вы забыли вернуться в DOS …………………………
Вы забыли использовать команду RET …………………
Генерирование неверного типа возврата ……………..
Вы перепутали расположение операндов ……………….
Вы забыли распределить стек
или зарезервировали слишком малый стек ……………..
Вы вызвали подпрограмму, которая затирает содержимое
необходимых далее регистров ……………………….
Использование неверной модификации
команды условного перехода ………………………..
Распространенные ошибки,
связанные со строковыми командами ………………….
Вы забыли о выходе за границу строки
при использовании REP ………………………….
Вы установили нулевое значение CX
для доступа ко всему сегменту сразу ……………..
Неправильная установка флага направления …………
Использование невермой модификации
повторяющейся строковой команды сравнения ………..
Вы забыли об умолчаниях сегмента,
принимаемых для строковых команд ………………..
Неправильное преобразование формата
операций из байта в слово ………………………
Использование множественных префиксов …………..
Передача строковой команде операнда (операндов) ……
Вы забыли о нестандартных побочных эффектах ………..
Стирание регистра при умножении …………………
Вы забыли о том, что строковые команды
изменяют состояние нескольких регистров …………..
Вы ожидали, что конкретные команды
изменят состояние флага переноса ………………..
Вы слишком поздно использовали флаги ……………
Вы перепутали адрес памяти операнда
с непосредственно значением операнда ……………….
Циклический переход к началу сегмента ………………
Вы не смогли сохранить состояние процессора
при активации обработчика прерываний ……………….
Вы забыли задать переопределения групп
в операндах и таблицах данных ……………………..

Глава 7 Связь Turbo Assembler с Turbo C

Использования средства
встроенного ассемблирования Turbo C …………………..
Как работает встроенный ассемблер ………………….
Как Turbo C распознает
режим встроенного ассемблирования ………………
Запуск Turbo Assembler
для встроенного ассемблирования ………………..
Куда Turbo C ассемблирует
встроенные ассемблерные команды ………………..
Использование ключа -l для
ассемблирования команд 80186/80286 ……………..
Формат операторов встроенного ассемблирования ………..
Использование во встроенном ассемблере двоеточий ….
Комментарии во встроенном ассемблере ……………
Доступ к элементам структур/объединений …………
Пример встроенного ассемблирования …………………
Ограничения на встроенное ассемблирование …………..
Ограничения на операнды памяти и адреса …………
Отсутствие установки размеров по умолчанию
используемых в операторах встроенного ассемблера
автоматических переменных ……………………..
Необходимость сохранения регистров ……………..
Сохранение при вызове функций
переменных регистров ……………………….
Подавление внутренних регистровых переменных ….
Недостатки использования встроенного
ассемблера по сравнению с чистой программой на Си …….
Уменьшенные мобильность и удобство сопровождения ….
Более медленная компиляция ……………………..
Возможность работы с программой
только при помощи TCC …………………………
Ухудшение оптимизации программы …………………
Ограничения возможностей отслеживания ошибок ……..
Отладочные ограничения …………………………
Первоначальная разработка программы на Си и
последующая компиляция ее конечной версии с
использованием средства встроенного ассемблирования…
Вызов функций на Turbo Assembler из Turbo C ……………
Модели памяти и сегменты ……………………….
Упрощенные сегментные директивы и Turbo C ……..
Сегментные директивы
более старых версий и Turbo C ………………..
Сегментны умолчания:
когда требуется загружать сегменты? …………..
Общие и внешние символические имена ……………..
Подчеркивания ….. …………………………
Учет регистра,
в котором набраны символические имена …………
Типы меток …….. …………………………
Дальние внешние символические имена …………..
Командная строка компоновщика
Взаимодействие между Turbo Assembler и Turbo C ………
Передача параметров ……………………………
Сохранение регистров …………………………
Возврат значений ….. …………………………
Вызов функции на Turbo Assembler из Turbo C ………
Соглашения Паскаля о связях ……………………..
Вызов Turbo C из Turbo Assembler …………………..
Компоновка со стартовыми кодами Си ………………
Убедитесь в правильности сегментных установок ……..
Выполнение вызова ….. …………………………
Вызов функции на Turbo C из Turbo Assembler ……….

Глава 8 Связь Turbo Assembler с Turbo Pascal

Карта памяти Turbo Pascal …………………………..
Префикс сегмента программы ………………………..
Кодовые сегменты ………………………………..
Сегмент глобальных данных …………………………
Стек ……………………………………………
Куча ……………………………………………
Использование в Turbo Pascal регистров ……………….
Ближние или дальние? ………………………………..
Разделение информации с Turbo Pascal ………………….
Директива компилятора $L и внешние подпрограммы ……..
Директива PUBLIC …………………………………
Директива EXTRN …………………………………
Ограничения на использование объектов,
объявленных как EXTRN ………………………….
Использование фиксации сегментов …………………..
Устранение недействующих кодов …………………….
Соглашения Паскаля о передаче параметров ………………
Параметры-константы …………………………….
Скалярные типы ………………………………..
Действительные числа ………………………….
Single, Double, Extended и Comp : типы для 8087 …..
Указатели …………………………………….
Строки символов ………………………………
Записи и массивы ………………………………
Множества …………………………………….
Параметры-переменные ……………………………..
Работа со стеком …………………………………
Доступ к параметрам ………………………………
Использование регистра BP для адресации стека ……..
Директива ARG ………………………………
.MODEL и Turbo Pascal ………………………….
Использование другого базового
или индексного регистра ………………………..
Результаты функций в Turbo Pascal …………………….
Результаты скалярных функций ………………………
Результаты действительных функций ………………….
Результаты функций 8087 …………………………..
Результаты строковых функций ……………………..
Результаты функции типа указатель ……………….
Распределение области для локальных данных …………….
Распределение частной (private) статической области …..
Распределение уничтожаемой (volatile) области памяти ….
Примеры подпрограмм на языке ассемблера для Turbo Pascal …
Универсальная подпрограмма
шестнадцатиричных преобразований …………………..
Обмен двумя переменными ………………………….
Сканирование контекста DOS ………………………..

Глава 9 Расширенные средства программирования
на Turbo Assembler

Префиксы переопределения сегментов …………………..
Альтернативная форма ……………………………..
Когда префиксы переопределения сегментов не работают ….
Доступ к нескольким сегментам ……………………..
Локальные метки …………………………………….
Автоматическое определение размера перехода ……………
Прямые ссылки к коду и данным ………………………..
Использование блоков повторения и макросов …………….
Блоки повторения ………………………………….
Блоки повторения и переменные параметры ………….
Макросы …………………………………………
Вложенность макросов ………………………….
Макросы и директивы условного ассемблирования …….
Прекращение расширения при помощи директивы EXITM ….
Определение меток в макросах ……………………
Сложные структуры данных …………………………….
Директива STRUC …………………………………
Достоинства и недостатки
использования директивы STRUC …………………..
Уникальность имен полей структуры ………………
Вложенность структур …………………………..
Инициализация структур …………………………
Директива RECORD …………………………………
Доступ к записям ………………………………
Операция WIDTH …………………………….
Операция MASK ………………………………
Зачем использовать записи ………………………
Директива UNION ………………………………….
Сегментные директивы ………………………………..
Директива SEGMENT ………………………………..
Поля «имя» и «выравнивание» …………………….
Поле «комбинирование» ………………………….
Поля «использование» и «класс» ………………….
Размер, тип, имя и вложенность сегментов …………
Упорядочение сегментов ……………………………
Директива GROUP ………………………………….
Директива ASSUME …………………………………
Упрощенные сегментные директивы ……………………
Пример многосегментной программы …………………..

Глава 10 80386 и другие процессоры

Изменение в ассемблерной программе типа процессора ……..
80186 и 80188 ……………………………………..
Новые команды ……………………………………
Команды PUSHA и POPA ………………………….
Команды ENTER и LEAVE ………………………….
Команда BOUND …………………………………
Команды INS и OUTS …………………………….
Расширенные команды 8086 ю…………………………
Помещение в стек непосредственных значений ……….
Сдвиг и циклический сдвиг
непосредственных значений ………………………
Умножение на непосредственное значение ………….
80286 …………………………………………….
Включение поддержки ассемблирования для 80286 ……….
80386 ……………………………………………..
Выбор режима ассемблирования для 80386 ……………..
Новые типы сегментов …………………………….
Упрощенные сегментные директивы
и типы сегментов 80386 ………………………..
48-битовый тип данных FWORD …………………….
Новые регистры …………………………………..
32-битовые регистры общего назначения ……………
32-битовый флаговый регистр …………………….
32-битовый указатель команд …………………….
Новые сегментные регистры ………………………
Новые режимы адресации ……………………………
Новые команды ……………………………………
Проверка отдельных битов ……………………….
Сканирование битов …………………………….
Пересылка данных, расширенных знаком или нулями ……
Преобразование к типу данных DWORD или QWORD ………
Сдвиг через несколько слов ……………………..
Условная установка байтов ………………………
Загрузка SS, FS и GS …………………………..
Расширенные команды ………………………………
Специальные версии MOV …………………………
32-битовые версии команд 8086 …………………..
Новые версии команд LOOP и JCXZ ………………
Новые версии строковых команд ………………..
IRETD ……………………………………..
PUSHFD и POPFD ……………………………..
PUSHAD и POPAD ……………………………..
Новые версии команды IMUL ………………………
Чередование 16-битовых и 32-битовых команд
и сегментов ……………………………………..
Пример функции для 80386 ………………………….
80287 …………………………………………….
80387 …………………………………………….

Глава 11 Режим Turbo Assembler Ideal

Что такое режим Ideal? ………………………………
Зачем использовать режим Ideal? ……………………..
Вход и выход из режима Ideal …………………………
Различия между режимами MASM и Ideal ………………….
Лексемы режима Ideal ………………………………..
Лексемы — символические имена ……………………..
Дублирующиеся имена членов структур ………………..
Лексемы — числа с плавающей точкой …………………
Директивы EQU и = …………………………………
Выражения и операнды ………………………………..
Операция квадратные скобки [] ……………………..
Примеры операндов ………………………………..
Операции …………………………………………..
Использование точек для записи членов структур ………
Указатели структур ……………………………….
Операция SYMTYPE …………………………………
Операции HIGH и LOW ………………………………
Необязательная операция PTR ………………………
Операция SIZE ……………………………………
Директивы ………………………………………….
Директивы управления листингом ……………………
Директивы, начинающиеся точкой (.) …………………
Обмен местами директивы и символического имени ………
Строки символов в кавычках,
задаваемые директивам как аргументы ………………..
Сегменты и группы ………………………………….
Доступ к данным сегмента, принадлежащего к группе ……
Определение ближних или дальних меток кода ……………
Внешние, общие и глобальные символические имена ………..
Прочие различия ……………………………………
Подавленные фиксации ……………………………..
Операнд команды BOUND ……………………………
Комментарии в макросах ……………………………
Локальные символические имена ……………………..
Сравнение программирования в режимах MASM и Ideal ……….
Пример программы для режима MASM ………………..
Пример программы для режима Ideal ……………….
Анализ режимов NASM и Ideal ……………………….

Литература
——————————————————————

Алфавитный указатель
——————————————————————

Таблицы
——————————————————————

5.1 Резервированные слова TASM ………………………
5.2 Работа логических команд 8086 AND, OR и XOR ……….
5.3 Команды условного перехода ………………………
6.1 Исходные и конечные операнды команд MUL и IMUL ……..
7.1 Установки регистров при входе из Turbo C в ассемблер…
9.1 Сегменты по умолчанию и типы
для модели памяти Tiny ………………………….
9.2 Сегменты по умолчанию и типы
для модели памяти Small ………………………….
9.3 Сегменты по умолчанию и типы
для модели памяти Medium ………………………..
9.4 Сегменты по умолчанию и типы
для модели памяти Compact ………………………..
9.5 Сегменты по умолчанию и типы
для моделей памяти Large и Huge …………………
9.6 Сегменты по умолчанию и типы
для модели памяти Turbo Pascal (TPASCAL) ………….

Рисунки
——————————————————————

2.1 Цикл редактирования, ассемблирования, компоновки и
выполнения …………………………………….
3.1 Командная строка Turbo Assembler ………………..
4.1 Пять подсистем …………………………………
4.2 Адресное пространство памяти 8086 ………………..
4.3 Отдельные адреса оперативной памяти
и ввода/вывода (I/O) 8086 ……………………….
4.4 Регистры 8086 ………………………………….
4.5 Флаговый регистр 8086 ……………………………
4.6 Регистры AX, BX, SP и стек ………………………
4.7 20-битовый адрес памяти ………………………..
4.8 Вычисление адреса памяти для команды mov ………….
4.9 Системное программное обеспечение DOS и BIOS как
промежуточный уровень управления и интерфейса ………
5.1 Ячейка памяти строки символов CharString …………..
5.2 Адресация строки символов CharString ……………..
5.3 Адресация CharString при помощи BX ……………….
5.4 Хранение в памяти WordVar и DwordVar ……………..
5.5 Преобразование двоичного 001100100
(десятичное 100) в восьмиричное 144 ………………
5.6 Преобразование двоичного 01100100
(десятичное 100) в шестнадцатиричное 64 …………..
5.7 Премер пятиэлементного массива …………………..
5.8 Пример сдвига влево …………………………….
5.9 Пример команды SAR (арифметического сдвига вправо) ….
5.10 Пример команды ROR (циклического сдвига вправо) …….
5.11 Пример команды RCR (циклического сдвига вправо
через флаг переноса) ……………………………
5.12 Работа подпрограммы ……………………………..
6.1 Переменные памяти:
различие между смещением и значением ………………
6.2 Пример циклического перехода в сегменте ……………
6.3 Три сегмента, сгруппированные в одну сегментную
группу ………………………………………..
7.1 Цикл компиляции и компоновки Turbo C ……………..
7.2 Цикл компиляции,
ассемблирования и компоновки Turbo C ……………..
7.3 Компиляция, ассемблирование и компоновка
при помощи Turbo C, Turbo Assembler и TLINK ……….
7.4 Состояние стека непосредственно перед выполнением
первой команды Test …………………………….
7.5 Состояние стека после выполнения команд PUSH и MOV ….
7.6 Состояние стека после выполнения команд
PUSH, MOV и SUB ……………………………….
7.7 Состояние стека непосредственно после выполнения
команды MOV BP,SP ………………………………
8.1 Карта памяти программы в Turbo Pascal 5.0 …………
9.1 Расположения и исходные значения полей TRec ……….
10.1 Регистры 80386 …………………………………

Загрузка...