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

Турбо Ассемблер 3.0/tasm/#1-2. Руководство пользователя.


Введение

Требования к программному и аппаратному обеспечению

Поддержка DPMI

О данной документации

Руководство пользователя

Соглашения по обозначениям

Как обратиться за помощью к фирме Borland

Ресурсы вашего пакета

Возможности фирмы Borland

ЧАСТЬ 1. ИСПОЛЬЗОВАНИЕ ТУРБО АССЕМБЛЕРА

Глава 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

Сегменты и группы

Доступ к данным в сегменте, принадлежащем группе

Комментарии в программах

Комментарии в конце строки

Директива 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

    Примеры макрокоманд работы с текстом

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

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

    Использование в макрокомандах символа &

    Включение комментариев в тело макрокоманды

    Локальные формальные аргументы

    Директива EXITM

    Директива GOTO и макроидентификаторы перехода

    Общие макрокоманды, состоящие из нескольких строк

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

    Литеральные строки в угловых скобках

    Символ !

    Символ вычисления выражения %

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

    Удаление общей макрокоманды: директива PURGE

    Определение вложенных и рекурсивных макрокоманд

    Счетчик повторения макрокоманды

    Директива WHILE

    Макрокоманды повторения строк

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

    Включение расширения макрокоманды в файл листинга

    Глава 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

    Часть 2. ПРИЛОЖЕНИЯ 1

    Приложение A. Замечания по программированию

    Упрощенные директивы определения сегмента

    Программы DOS

    Замечания по программам формата EXE

    Замечания по программам формата COM

    Программы Windows

    Замечания по динамически компонуемым библиотекам Windows

    Замечания по прикладным программам Windows

    Приложение B. Обзор синтаксических правил Турбо Ассемблера

    Лексическая грамматика

    Грамматика выражений в режиме MASM

    Грамматика выражений в режиме Ideal

    Старшинство ключевых слов

    Старшинство операций в режиме Ideal

    Старшинство операций в режиме MASM

    Ключевые слова и предопределенные идентификаторы

    Ключевые слова директив

    Приложение C. Вопросы совместимости

    Одно- и двухпроходные режимы ассемблирования

    Переменные операционной среды

    Формат фирмы Microsoft для двоичных чисел с плавающей точкой

    Приложение D. Утилиты Турбо Ассемблера

    Утилита-преобразователь H2ASH

    Приложение E. Сообщения об ошибках

    Информационные сообщения

    Предупреждающие сообщения и сообщения об ошибках

    32-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

    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)

    Дополнение для Borland C++ 3.1. Новые средства Турбо ассемблера версии 3.1

    Вперед >>>


    Содержание раздела