Turbo Assembler 3.0. Руководство пользователя

Turbo Assembler 3.0. Руководство пользователя

Турбо Ассемблер 3.0/tasm/#1-2. Руководство пользователя.
Введение
Требования к программному и аппаратному обеспечению
Поддержка DPMI
О данной документации
Руководство пользователя
Соглашения по обозначениям
Как обратиться за помощью к фирме Borland
Ресурсы вашего пакета

Возможности фирмы Borland
Глава 1. Начало работы на Турбо Ассемблере


Установка Турбо Ассемблера в системе
Текстовые справочные файлы
Файл README
Файл HELPME!.TSM
Файл H2ASH.TSM
Файл TCREF.TSM
Оперативный справочник
Ваша первая программа на Турбо Ассемблере

Ассемблирование вашей первой программы
Компоновка программы
Запуск вашей первой программы
Что происходит?
Модификация вашей первой программы на Турбо Ассемблере
Вывод информации на устройство печати
Ваша вторая программа на Турбо Ассемблере
Запуск программы REVERSE.ASM
Литература по языку Ассемблера

Глава 2. Использование директив и параметров
Запуск Турбо Ассемблера из DOS
Параметры командной строки
Параметр /A
Параметр /B
Параметр /C
Параметр /D

Параметр /E
Параметр /H или /?
Параметр /I
Параметр /J
Параметр /KH
Параметр /L
Параметр /LA
Параметр /M
Параметр /ML
Параметр /MU

Параметр /MV#
Параметр /MX
Параметр /N
Параметр /O
Параметр /OP
Параметр /P
Параметр /Q
Параметр /R
Параметр /S
Параметр /T

Параметр /V
Параметр /W
Параметр /X
Параметр /Z
Параметр /ZD
Параметр /ZI
Параметр /ZN
Косвенные командные файлы
Файлы конфигурации
Глава 3. Общие принципы программирования

Режим Ideal Турбо Ассемблера
Для чего используется режим Ideal?
Переключение в режим Ideal и выход из него
Отличия режима Ideal и режима MASM
Выражения и операнды
Операции
Подавление корректировок
Операнд инструкции BOUND
Сегменты и группы
Доступ к данным в сегменте, принадлежащем группе

Доступ к данным в сегменте, принадлежащем группе - 2
Комментарии в программах
Комментарии в конце строки
Директива COMMENT
Продолжение строки
Использование включаемых файлов
Предопределенные идентификаторы
Присваивание идентификаторам значений
Общая структура модуля

Директива VERSION
Директива NAME
Директива END
Вывод сообщения в процессе ассемблирования
Вывод предупреждающих сообщений
Вывод нескольких сообщений об ошибках
Глава 4. Объектно-ориентированное программирование
Терминология
Для чего в Турбо Ассемблере используются объекты?
Что такое объект?

Пример объекта
Описание объектов
Описание процедуры методa
Таблица виртуальных методов
Инициализация таблицы виртуальных методов
Вызов метода объекта

Вызов статического метода
Вызов виртуального метода
Вызов виртуальных методов "предков"
Кое-что еще о вызове методов
Создание экземпляра объекта
Программирование с объектами
Пример из области программирования
Глава 5. Использование выражений и значений идентификаторов

Константы
Числовые константы
Изменение используемого по умолчанию основания
Строковые константы
Идентификаторы
Имена идентификаторов
Типы идентификаторов
Адресные подтипы данных
Описание сложного адресного подтипа
Выражения

Точность в выражениях
Константы в выражениях
Идентификаторы в выражениях
Регистры
Стандартные значения идентификаторов
Значения простых идентификаторов
Унарная операция LENGTH
Унарная операция WIDTH
Унарная операция MASK
Общие арифметические операции

Простые арифметические операции
Логические арифметические операции
Поразрядные операции сдвига
Операции сравнения
Задание адресного подтипа выражения
Получение типа выражения
Переопределение сегментной части адресного выражения
Получение сегмента и смещения адресного выражения
Создание адресного выражения, использующего счетчик инструкций
Определение характеристик выражения

Ссылки на структуры, объединения и смещения элементов в таблице
Описание содержимого адреса

Подразумеваемое сложение

Подразумеваемое сложение

Получение значения старшего или младшего байта выражения
Задание 16- или 32-разрядных выражений
Глава 6. Директивы выбора процессора и идентификаторы процессора
Директивы процессоров iAPx86
Предопределенные идентификаторы
Идентификатор @Cpu
Идентификатор @WordSize
Директивы сопроцессора 8087
Директивы эмуляции сопроцессора
Глава 7. Использование моделей памяти программы и сегментации

Директива MODEL
Идентификаторы, генерируемые директивой MODEL
Идентификатор @Model
Идентификатор @32Bit
Идентификатор @CodeSize
Идентификатор @DataSize
Идентификатор @Interface
Упрощенные сегментные директивы

Идентификаторы, создаваемые упрощенными директивами сегментации
Директива STARTUPCODE
Идентификатор @Startup
Директива EXITCODE
Определение общих сегментов и групп
Директива SEGMENT
Атрибут комбинирования сегментов
Атрибут класса сегмента
Атрибут выравнивания сегмента
Атрибут размера сегмента

Атрибут доступа к сегменту
Директива ENDS
Директива GROUP
Директива ASSUME
Переопределение сегмента
Изменение упорядочивания сегментов в модуле
Директива .ALPHA
Директива .SEQ
Директива DOSSEG: упорядочивание сегментов в порядке DOS
Изменение размера стека

Глава 8. Определение типов данных
Определение перечислимых типов данных
Определение записей с битовыми полями
Определение структур и объединений
Открытие определения структуры или объединения
Задание элементов структуры и объединения
Определение меток элементов структур с помощью директивы LABEL
Выравнивание элементов структуры
Закрытие определения структуры или объединения
Вложенные структуры и объединения

Включение одной именованной структуры в другую
Использование имен структур в выражениях
Определение таблиц
Переопределение элементов таблицы
Определение именованного типа
Определение объекта
Директива TBLPTR
Идентификаторы, определяемые расширенной директивой STRUC

Глава 9. Задание и использование счетчика адреса
Идентификатор счетчика адреса $
Директивы счетчика адреса $
Директива ORG
Директивы EVEN и EVENDATA
Директива ALIGN
Определение меток
Операция :
Директива LABEL
Директива ::

Глава 10. Описание процедур
Синтаксис определения процедур
Описание процедур NEAR или FAR
Описание языка процедуры
Задание модификатора языка
Определения аргументов и локальных переменных
Синтаксис директив ARG и LOCAL

Область действия аргументов и имен локальных переменных
Сохранение регистров
Вложенные процедуры и правила области действия
Описание процедур методов для объектов
Глава 11. Управление областью действия идентификаторов
Переопределяемые идентификаторы
Область действия в границах блока
Директивы LOCALS и NOLOCALS
Область действия в границах блока в MASM
Локальные метки в стиле MASM

Глава 12. Определение данных
Простые директивы определения данных
Создание экземпляра структуры или объединения
Инициализация экземпляра структуры или объединения
Создание экземпляра записи

Инициализация экземпляров записи
Создание экземпляра данных перечислимого типа
Инициализация экземпляра перечислимого типа данных
Создание экземпляра таблицы
Инициализация экземпляров таблицы
Создание и инициализация экземпляра именованного типа данных
Создание экземпляра объекта
Создание экземпляра таблицы виртуальных методов объекта
Глава 13. Расширенные инструкции
Эффективная генерация кода: директивы SMART и NOSMART

Расширенные инструкции перехода
Дополнительные инструкции цикла процессора 80386
Дополнительные инструкции ENTER и LEAVE
Дополнительные инструкции возврата
Расширенные инструкции PUSH и POP
Инструкции PUSH и POP с несколькими операндами
Использование в инструкциях PUSH и POP указателей
Занесение в стек константа (процессор 8086)
Расширенные инструкции сдвига
Принудительное переопределение сегментов: инструкции SEGxx

Дополнительные инструкции работы с флагами
Дополнительные инструкции работы с битами полей
Инструкция GETFIELD
Дополнительная быстрая инструкции непосредственного умножения
Расширение необходимых инструкций для процессора 80386
Вызов процедур с кадрами стека
Вызываемые процедуры, содержащие RETURNS
Вызов процедур методов для объектов: CALL.METHOD
Остаточная рекурсия для методов объектов: инструкция JMP.METHOD

Дополнительные инструкции для объектного программирования
Глава 14. Использование макрокоманд
Текстовые макрокоманды
Определение текстовых макрокоманд с помощью директивы EQU
Директивы макрокоманд работы с текстовыми строками
Директива CATSTR
Директива SUBSTR
Директива INSTR
Директива SIZESTR
Примеры макрокоманд работы с текстом

Макрокоманды, состоящие из нескольких строк
Тело макрокоманды, состоящей из нескольких строк

Непосредственная макродиректива %

Непосредственная макродиректива %
Включение расширения макрокоманды в файл листинга
Глава 15. Использование условных директив
Синтаксис условных директив
Директива условного ассемблирования IFxxx

Директивы условного ассемблирования ELSEIFxxx
Директивы генерации сообщений об ошибке ERRxx
Безусловные директивы генерации сообщений об ошибке
Условные директивы с выражениями
Условные директивы с идентификатором
Условные директивы с текстовыми строками
Условия выполнения прохода Ассемблером

Включение условных директив в файл листинга
Глава 16. Интерфейс с компоновщиком
Описание внешних идентификаторов
Соглашения для конкретного языка
Описание общедоступных идентификаторов
Описание идентификаторов библиотеки
Определение внешних идентификаторов
Описание глобальных идентификаторов
Определение общих переменных

Включение библиотеки
Глава 17. Генерация листинга
Формат листинга
Общие директивы управления листингом
Директивы листинга включаемых файлов
Директивы вывода блоков условного ассемблирования
Директивы вывода в файл листинга макрокоманд
Директивы вывода листинга перекрестных ссылок
Параметры изменения формата листинга

Глава 18. Интерфейс Турбо Ассемблера и Borland C++
Вызов из Borland C++ функций Турбо Ассемблера
Основные моменты в интерфейсе Турбо Ассемблера и Borland C++
Компоновка ассемблерных модулей с С++
Использование Extern "C" для упрощения компоновки
Модели памяти и сегменты
Упрощенные директивы определения сегментов и Borland C++

Старые директивы определения сегментов и Borland C++
Значения по умолчанию: когда необходимо загружать сегменты?
Общедоступные и внешние идентификаторы
Подчеркивания и язык Си
Различимость строчных и прописные символов в идентификаторах
Типы меток
Внешние дальние идентификаторы
Командная строка компоновщика

Взаимодействие между Турбо Ассемблером и Borland C++
Передача параметров
Сохранение регистров
Возврат значений

Вызов функции Турбо Ассемблера из Borland C++
Написание на языке Ассемблера функций-элементов С++
Соглашения по вызовам, использующиеся в Паскале
Вызов Borland C++ из Турбо Ассемблера
Компоновка с кодом инициализации С++
Задание сегмента
Выполнение вызова
Вызов из Турбо Ассемблера функции Borland C++

Глава 19. Интерфейс Турбо Ассемблера с Турбо Паскалем
Директива компилятора $L и внешние подпрограммы
Директива PUBLIC
Директива EXTRN
Ограничения при использовании объектов типа EXTRN
Использование корректировок сегментов
Устранение неиспользуемого кода
Соглашения Турбо Паскаля по передаче параметров

Параметры-значения
Скалярные типы
Вещественные значения
Типы Single, Double, Extended и Comp и типы сопроцессора 8087
Указатели
Строки
Записи и массивы
Множества
Параметры-переменные
Обеспечение стека

Доступ к параметрам
Использование для адресации к стеку регистра BP
Директива ARG
Турбо Паскаль и директива .MODEL
Использование другого базового или индексного регистра
Результаты функции в Турбо Паскале
Выделение пространства для локальных данных
Выделение статической памяти
Выделение временной памяти
Примеры подпрограмм на Ассемблере для Турбо Паскаля

Подпрограмма шестнадцатиричного преобразования общего назначения
Пример обмена содержимого двух переменных
Пример анализа операционной среды DOS
Новые средства Турбо ассемблера версии 3.1
Исправления и добавления к "Руководству пользователя по Турбо ассемблеру"

Приложение A. Замечания по программированию
Упрощенные директивы определения сегмента
Программы DOS
Замечания по программам формата EXE
Замечания по программам формата COM
Программы Windows
Замечания по динамически компонуемым библиотекам Windows
Замечания по прикладным программам Windows
Приложение B. Обзор синтаксических правил Турбо Ассемблера

Лексическая грамматика
Грамматика выражений в режиме MASM
Грамматика выражений в режиме Ideal
Старшинство ключевых слов
Старшинство операций в режиме Ideal
Старшинство операций в режиме MASM
Ключевые слова и предопределенные идентификаторы
Ключевые слова директив
Приложение C. Вопросы совместимости

Одно- и двухпроходные режимы ассемблирования
Переменные операционной среды
Формат фирмы Microsoft для двоичных чисел с плавающей точкой
Приложение D. Утилиты Турбо Ассемблера
Утилита-преобразователь H2ASH
Приложение E. Сообщения об ошибках
Информационные сообщения
Предупреждающие сообщения и сообщения об ошибках
Bit segment not allowed without .386

Argument needs type override
Argument to operation or instruction has illegal size
Arithmetic overflow
ASSUME must be segment register
Bad keyword in SEGMENT statement
Can't add relative quantities
Can't address with currently ASSUMEd segment registers
Can't convert to pointer
Can't emulate 8087 instruction
Can't make variable public

Can't override ES segment
Can't subtract dissimilar relative quantities
Can't use macro name in expression
Can't use this outside macro

Code or data emission to undeclared segment

Code or data emission to undeclared segment
Constant assumed to mean Immediate const
Constant too large
CS not correctly assumed
CS override in protected mode
CS unreachable from current segment

Declaration needs name
Directive ignored in Turbo Pascal model
Directive not allowed inside structure definition
Duplicate dummy arguments:_
ELSE or ENDIF without IF
Expecting METHOD keyword
Expecting offset quantity
Expecting offset or pointer quantity
Expecting pointer type
Expecting record field name

Expecting register ID
Expecting scalar type
Expecting segment or group quantity
Extra characters on line
Forward reference needs override
Global type doesn't match symbol type
ID not member of structure
Illegal forward reference
Illegal immediate
Illegal indexing mode

Illegal instruction
Illegal instruction for currently selected processor(s)
Illegal local argument
Illegal local symbol prefix
Illegal mаcro argument
Illegal memory reference
Illegal number
Illegal origin address
Illegal override in structure
Illegal override register

Illegal radix
Illegal register for instruction
Illegal register multiplier
Illegal segment address
Illegal use of constant
Illegal use of register
Illegal use of segment register
Illegal USES register
Illegal version ID
Illegal warning ID

Instruction can be compacted with override
Invalid model type
Invalid operand(s) to instruction
Labels can't start with numeric characters
Line too long - truncated
Location counter overflow
Method call requires object name
Missing argument list
Missing argument or
Missing argument size variable

Missing COMM ID
Missing dummy argument
Missing end quote
Missing macro ID
Missing module name
Missing or illegal language ID
Missing or illegal type specifier
Missing table member ID
Missing term in list
Missing text macro

Model must be specified first
Module is pass-dependant - compatibility pass was done
Name must come first
Near jump or call to different CS
Need address or register
Need angle brackets for structure fill
Need colon
Need expression
Need file name after INCLUDE
Need left parenthesis

Need method name
Need pointer expression
Need quoted string
Need register in expression
Need right angle bracket
Need right curly bracket
Need right parenthesis
Need right square bracket
Need stack argument
Need structure member name

Not expecting group or segment quantity
One non-null field allowed per union expansion
Only one startup sequence allowed
Open conditional
Open procedure
Open segment
Open structure definition
Operand types do not match
Operation illegal for static table member
Pass-dependant construction encountered

Pointer expression needs brackets
Positive count expecting
Record field too large
Record member not found
Recursive definition not allowed for EQU
Register must be AL or AX
Register must be DX
Relative jump out of range by __ bytes
Relative quantity illegal
Reserved word used as symbol

Rotate count must be constant or CL
Rotate count out of range
Segment alignment not strict enough
Segment attributes illegally redefined
Segment name is superfluous
String too long
Symbol already defined:__
Symbol already different kind
Symbol has no width or mask
Symbol is not a segment or already part of a group

Text macro expansion exceeds maximum line length
Too few operands to instruction
Too many errors or warnings
Too many initial values
Too many register multipliers in expression
Too many registers in expression
Too many USES registers
Trailling null value assumed
Undefined symbol
Unexpected end of file (no END directive)

Unknown character
Unmatched ENDP:_
Unmatched ENDS:_
User-generated error
Value out of range
Сообщения о фатальных ошибках -----------------------------------------------------------------
Bad switch
Can't find @file __
Сan't locate file __
Error writing to listing file

Error writing to object file
File not found
File was changed or deleted while assembly in progress
Insufficient memory to process command line
Internal error
Invalid command line
Invalid number after _
Out of hash space
Out of memory
Out of string space

Too many errors found
Unexpected end of file (no END directive)