Книга: Пpогpаммиpование на Turbo Assembler 3.0 (pус)
Турбо Ассемблер 3.0/tasm/#1-2 = 1 =
Введение........................................................7 Требования к программному и аппаратному обеспечению.............8 Поддержка DPMI..................................................8 О данной документации...........................................9 Руководство пользователя........................................9 Соглашения по обозначениям.....................................11 Как обратиться за помощью к фирме Borland......................12 Ресурсы вашего пакета..........................................13 Возможности фирмы Borland......................................13 ЧАСТЬ 1. ИСПОЛЬЗОВАНИЕ ТУРБО АССЕМБЛЕРА............................15 Глава 1. Начало работы на Турбо Ассемблере.......................16 Установка Турбо Ассемблера в системе...........................16 Текстовые справочные файлы.....................................17 Файл README....................................................17 Файл HELPME!.TSM...............................................18 Файл H2ASH.TSM.................................................18 Файл TCREF.TSM.................................................18 Оперативный справочник.........................................18 Ваша первая программа на Турбо Ассемблере......................19 Ассемблирование вашей первой программы.........................21 Компоновка программы...........................................23 Запуск вашей первой программы..................................23 Что происходит?................................................23 Модификация вашей первой программы на Турбо Ассемблере.........25 Вывод информации на устройство печати..........................27 Ваша вторая программа на Турбо Ассемблере......................28 Запуск программы REVERSE.ASM...................................30 Литература по языку Ассемблера.................................30 Глава 2. Использование директив и параметров.....................32 Запуск Турбо Ассемблера из DOS.................................32 Параметры командной строки.....................................37 Параметр /A....................................................37 Параметр /B....................................................38 Параметр /C....................................................38 Параметр /D....................................................38 Параметр /E....................................................39 Параметр /H или /?.............................................40 Параметр /I....................................................40 Параметр /J....................................................41 Параметр /KH...................................................41 Параметр /L....................................................42 Параметр /LA...................................................42 Параметр /M....................................................43 Параметр /ML...................................................43 Параметр /MU...................................................44 Параметр /MV#..................................................45 Параметр /MX...................................................45 Параметр /N....................................................46 Параметр /O....................................................46 Параметр /OP...................................................46 Параметр /P....................................................46 Параметр /Q....................................................47 Параметр /R....................................................47
Турбо Ассемблер 3.0/tasm/#1-2 = 2 =
Параметр /S....................................................48 Параметр /T....................................................48 Параметр /V....................................................49 Параметр /W....................................................49 Параметр /X....................................................50 Параметр /Z....................................................51 Параметр /ZD...................................................51 Параметр /ZI...................................................52 Параметр /ZN...................................................52 Косвенные командные файлы......................................53 Файлы конфигурации.............................................53 Глава 3. Общие принципы программирования.........................55 Режим Ideal Турбо Ассемблера...................................55 Для чего используется режим Ideal?.............................56 Переключение в режим Ideal и выход из него.....................56 Отличия режима Ideal и режима MASM.............................58 Выражения и операнды...........................................59 Операции.......................................................60 Подавление корректировок.......................................60 Операнд инструкции BOUND.......................................60 Сегменты и группы..............................................61 Доступ к данным в сегменте, принадлежащем группе...............61 Комментарии в программах.......................................63 Комментарии в конце строки.....................................63 Директива COMMENT..............................................64 Продолжение строки.............................................64 Использование включаемых файлов................................65 Предопределенные идентификаторы................................66 Присваивание идентификаторам значений..........................67 Общая структура модуля.........................................68 Директива VERSION..............................................68 Директива NAME.................................................69 Директива END..................................................69 Вывод сообщения в процессе ассемблирования.....................70 Вывод предупреждающих сообщений................................70 Вывод нескольких сообщений об ошибках..........................72 Глава 4. Объектно-ориентированное программирование...............73 Терминология...................................................73 Для чего в Турбо Ассемблере используются объекты?..............74 Что такое объект?..............................................74 Пример объекта.................................................75 Описание объектов..............................................76 Описание процедуры методa......................................80 Таблица виртуальных методов....................................81 Инициализация таблицы виртуальных методов......................82 Вызов метода объекта...........................................82 Вызов статического метода......................................82 Вызов виртуального метода......................................83 Вызов виртуальных методов "предков"............................86 Кое-что еще о вызове методов...................................87 Создание экземпляра объекта....................................88 Программирование с объектами...................................88 Пример из области программирования.............................89
Турбо Ассемблер 3.0/tasm/#1-2 = 3 =
Глава 5. Использование выражений и значений идентификаторов......91 Константы......................................................91 Числовые константы.............................................91 Изменение используемого по умолчанию основания.................92 Строковые константы............................................93 Идентификаторы.................................................93 Имена идентификаторов..........................................93 Типы идентификаторов...........................................94 Адресные подтипы данных........................................94 Описание сложного адресного подтипа............................96 Выражения......................................................97 Точность в выражениях..........................................98 Константы в выражениях.........................................98 Идентификаторы в выражениях....................................98 Регистры.......................................................99 Стандартные значения идентификаторов..........................100 Значения простых идентификаторов..............................100 Унарная операция LENGTH.......................................102 Унарная операция WIDTH........................................105 Унарная операция MASK.........................................106 Общие арифметические операции.................................106 Простые арифметические операции...............................107 Логические арифметические операции............................108 Поразрядные операции сдвига...................................108 Операции сравнения............................................109 Задание адресного подтипа выражения...........................110 Получение типа выражения......................................111 Переопределение сегментной части адресного выражения..........112 Получение сегмента и смещения адресного выражения.............112 Создание адресного выражения, использующего счетчик инструкций...................................................113 Определение характеристик выражения...........................113 Ссылки на структуры, объединения и смещения элементов в таблице......................................................114 Описание содержимого адреса...................................115 Подразумеваемое сложение......................................115 Получение значения старшего или младшего байта выражения......115 Задание 16- или 32-разрядных выражений........................116 Глава 6. Директивы выбора процессора и идентификаторы процессора...................................................118 Директивы процессоров iAPx86..................................118 Предопределенные идентификаторы...............................120 Идентификатор @Cpu............................................121 Идентификатор @WordSize.......................................123 Директивы сопроцессора 8087...................................123 Директивы эмуляции сопроцессора...............................124 Глава 7. Использование моделей памяти программы и сегментации..................................................126 Директива MODEL...............................................127 Идентификаторы, генерируемые директивой MODEL.................133 Идентификатор @Model..........................................133 Идентификатор @32Bit..........................................133 Идентификатор @CodeSize.......................................133
Турбо Ассемблер 3.0/tasm/#1-2 = 4 =
Идентификатор @DataSize.......................................133 Идентификатор @Interface......................................134 Упрощенные сегментные директивы...............................135 Идентификаторы, создаваемые упрощенными директивами сегментации..................................................138 Директива STARTUPCODE.........................................139 Идентификатор @Startup........................................139 Директива EXITCODE............................................139 Определение общих сегментов и групп...........................139 Директива SEGMENT.............................................140 Атрибут комбинирования сегментов..............................141 Атрибут класса сегмента.......................................142 Атрибут выравнивания сегмента.................................142 Атрибут размера сегмента......................................144 Атрибут доступа к сегменту....................................145 Директива ENDS................................................145 Директива GROUP...............................................146 Директива ASSUME..............................................146 Переопределение сегмента......................................147 Изменение упорядочивания сегментов в модуле...................149 Директива .ALPHA..............................................149 Директива .SEQ................................................149 Директива DOSSEG: упорядочивание сегментов в порядке DOS......149 Изменение размера стека.......................................150 Глава 8. Определение типов данных...............................151 Определение перечислимых типов данных.........................151 Определение записей с битовыми полями.........................152 Определение структур и объединений............................154 Открытие определения структуры или объединения................155 Задание элементов структуры и объединения.....................156 Определение меток элементов структур с помощью директивы LABEL........................................................157 Выравнивание элементов структуры..............................157 Закрытие определения структуры или объединения................158 Вложенные структуры и объединения.............................158 Включение одной именованной структуры в другую................160 Использование имен структур в выражениях......................162 Определение таблиц............................................162 Переопределение элементов таблицы.............................165 Определение именованного типа.................................165 Определение объекта...........................................165 Директива TBLPTR..............................................167 Идентификаторы, определяемые расширенной директивой STRUC.....168 Глава 9. Задание и использование счетчика адреса................169 Идентификатор счетчика адреса $...............................169 Директивы счетчика адреса $...................................169 Директива ORG.................................................170 Директивы EVEN и EVENDATA.....................................172 Директива ALIGN...............................................173 Определение меток.............................................173 Операция :....................................................173 Директива LABEL...............................................175 Директива ::..................................................176
Турбо Ассемблер 3.0/tasm/#1-2 = 5 =
Глава 10. Описание процедур.....................................177 Синтаксис определения процедур................................177 Описание процедур NEAR или FAR................................178 Описание языка процедуры......................................180 Задание модификатора языка....................................183 Определения аргументов и локальных переменных.................184 Синтаксис директив ARG и LOCAL................................186 Область действия аргументов и имен локальных переменных.......188 Сохранение регистров..........................................189 Вложенные процедуры и правила области действия................189 Описание процедур методов для объектов........................191 Глава 11. Управление областью действия идентификаторов..........193 Переопределяемые идентификаторы...............................193 Область действия в границах блока.............................194 Директивы LOCALS и NOLOCALS...................................195 Область действия в границах блока в MASM......................195 Локальные метки в стиле MASM..................................196 Глава 12. Определение данных....................................197 Простые директивы определения данных..........................198 Создание экземпляра структуры или объединения.................202 Инициализация экземпляра структуры или объединения............203 Создание экземпляра записи....................................207 Инициализация экземпляров записи..............................207 Создание экземпляра данных перечислимого типа.................208 Инициализация экземпляра перечислимого типа данных............209 Создание экземпляра таблицы...................................209 Инициализация экземпляров таблицы.............................209 Создание и инициализация экземпляра именованного типа данных.......................................................210 Создание экземпляра объекта...................................211 Создание экземпляра таблицы виртуальных методов объекта.......211 Соглашения по вызовам, использующиеся в Паскале...............110 Вызов Borland C++ из Турбо Ассемблера.........................111 Компоновка с кодом инициализации С++..........................112 Задание сегмента..............................................112 Выполнение вызова.............................................112 Вызов из Турбо Ассемблера функции Borland C++.................114 Глава 13. Расширенные инструкции..................................9 Эффективная генерация кода: директивы SMART и NOSMART...........9 Расширенные инструкции перехода................................10 Дополнительные инструкции цикла процессора 80386...............11 Дополнительные инструкции ENTER и LEAVE........................11 Дополнительные инструкции возврата.............................11 Расширенные инструкции PUSH и POP..............................12 Инструкции PUSH и POP с несколькими операндами.................13 Использование в инструкциях PUSH и POP указателей..............13 Занесение в стек константа (процессор 8086)....................13 Расширенные инструкции сдвига..................................15 Принудительное переопределение сегментов: инструкции SEGxx.....15 Дополнительные инструкции работы с флагами.....................16 Дополнительные инструкции работы с битами полей................17 Инструкция GETFIELD............................................19 Дополнительная быстрая инструкции непосредственного умножения.....................................................19 Расширение необходимых инструкций для процессора 80386.........20 Вызов процедур с кадрами стека.................................22 Вызываемые процедуры, содержащие RETURNS.......................23 Вызов процедур методов для объектов: CALL...METHOD.............23 Остаточная рекурсия для методов объектов: инструкция JMP...METHOD..................................................25 Дополнительные инструкции для объектного программирования......25 Глава 14. Использование макрокоманд..............................26 Текстовые макрокоманды.........................................26 Определение текстовых макрокоманд с помощью директивы EQU......26 Директивы макрокоманд работы с текстовыми строками.............27 Директива CATSTR...............................................28 Директива SUBSTR...............................................28 Директива INSTR................................................28 Директива SIZESTR..............................................28 Примеры макрокоманд работы с текстом...........................29 Макрокоманды, состоящие из нескольких строк....................29 Тело макрокоманды, состоящей из нескольких строк...............29 Использование в макрокомандах символа &........................30 Включение комментариев в тело макрокоманды.....................31 Локальные формальные аргументы.................................31 Директива EXITM................................................33 Директива GOTO и макроидентификаторы перехода..................33 Общие макрокоманды, состоящие из нескольких строк..............34 Вызов общей макрокоманды, состоящей из нескольких строк........36 Литеральные строки в угловых скобках...........................37 Символ !.......................................................37 Символ вычисления выражения %..................................38 Переопределение общей макрокоманды, состоящей из нескольких строк.........................................................38 Удаление общей макрокоманды: директива PURGE...................38 Определение вложенных и рекурсивных макрокоманд................39 Счетчик повторения макрокоманды................................40 Директива WHILE................................................41 Макрокоманды повторения строк..................................41 Непосредственная макродиректива %..............................42
Турбо Ассемблер 3.0/tasm/#2-2 = 2 =
Включение расширения макрокоманды в файл листинга..............43 Глава 15. Использование условных директив........................44 Синтаксис условных директив....................................44 Директива условного ассемблирования IFxxx......................45 Директивы условного ассемблирования ELSEIFxxx..................47 Директивы генерации сообщений об ошибке ERRxx..................48 Описания конкретных директив...................................49 Безусловные директивы генерации сообщений об ошибке............49 Условные директивы с выражениями...............................49 Условные директивы с идентификатором...........................50 Условные директивы с текстовыми строками.......................52 Условия выполнения прохода Ассемблером.........................56 Включение условных директив в файл листинга....................56 Глава 16. Интерфейс с компоновщиком..............................58 Описание внешних идентификаторов...............................58 Соглашения для конкретного языка...............................58 Описание общедоступных идентификаторов.........................58 Описание идентификаторов библиотеки............................59 Определение внешних идентификаторов............................60 Описание глобальных идентификаторов............................60 Определение общих переменных...................................60 Включение библиотеки...........................................62 Глава 17. Генерация листинга.....................................63 Формат листинга................................................63 Общие директивы управления листингом...........................64 Директивы листинга включаемых файлов...........................65 Директивы вывода блоков условного ассемблирования..............66 Директивы вывода в файл листинга макрокоманд...................67 Директивы вывода листинга перекрестных ссылок..................67 Параметры изменения формата листинга...........................69 Глава 18. Интерфейс Турбо Ассемблера и Borland C++...............73 Вызов из Borland C++ функций Турбо Ассемблера..................74 Основные моменты в интерфейсе Турбо Ассемблера и Borland C++...........................................................76 Компоновка ассемблерных модулей с С++..........................77 Использование Extern "C" для упрощения компоновки..............78 Модели памяти и сегменты.......................................79 Упрощенные директивы определения сегментов и Borland C++.......79 Старые директивы определения сегментов и Borland C++...........80 Значения по умолчанию: когда необходимо загружать сегменты?....83 Общедоступные и внешние идентификаторы.........................86 Подчеркивания и язык Си........................................86 Различимость строчных и прописные символов в идентификаторах...............................................88 Типы меток.....................................................88 Внешние дальние идентификаторы.................................90 Командная строка компоновщика..................................91 Взаимодействие между Турбо Ассемблером и Borland C++...........93 Передача параметров............................................93 Сохранение регистров..........................................101 Возврат значений..............................................102 Вызов функции Турбо Ассемблера из Borland C++.................104 Написание на языке Ассемблера функций-элементов С++...........108
Турбо Ассемблер 3.0/tasm/#2-2 = 3 =
Соглашения по вызовам, использующиеся в Паскале...............110 Вызов Borland C++ из Турбо Ассемблера.........................111 Компоновка с кодом инициализации С++..........................112 Задание сегмента..............................................112 Выполнение вызова.............................................112 Вызов из Турбо Ассемблера функции Borland C++.................114 Глава 19. Интерфейс Турбо Ассемблера с Турбо Паскалем...........117 Совместное с Турбо Паскалем использование данных..............118 Директива компилятора $L и внешние подпрограммы...............118 Директива PUBLIC..............................................119 Директива EXTRN...............................................119 Ограничения при использовании объектов типа EXTRN.............122 Использование корректировок сегментов.........................123 Устранение неиспользуемого кода...............................125 Соглашения Турбо Паскаля по передаче параметров...............125 Параметры-значения............................................125 Скалярные типы................................................125 Вещественные значения.........................................126 Типы Single, Double, Extended и Comp и типы сопроцессора 8087.........................................................126 Указатели.....................................................126 Строки........................................................126 Записи и массивы..............................................126 Множества.....................................................127 Параметры-переменные..........................................127 Обеспечение стека.............................................127 Доступ к параметрам...........................................128 Использование для адресации к стеку регистра BP...............128 Директива ARG.................................................129 Турбо Паскаль и директива .MODEL..............................130 Использование другого базового или индексного регистра........131 Результаты функции в Турбо Паскале............................131 Выделение пространства для локальных данных...................132 Выделение статической памяти..................................132 Выделение временной памяти....................................133 Примеры подпрограмм на Ассемблере для Турбо Паскаля...........135 Подпрограмма шестнадцатиричного преобразования общего назначения...................................................135 Пример обмена содержимого двух переменных.....................138 Пример анализа операционной среды DOS.........................141 Часть 2. ПРИЛОЖЕНИЯ.............................................147 Приложение A. Замечания по программированию.....................148 Упрощенные директивы определения сегмента.....................148 Программы DOS.................................................150 Замечания по программам формата EXE...........................151 Замечания по программам формата COM...........................152 Программы Windows.............................................153 Замечания по динамически компонуемым библиотекам Windows......153 Замечания по прикладным программам Windows....................154 Приложение B. Обзор синтаксических правил Турбо Ассемблера......156 Лексическая грамматика........................................156 Грамматика выражений в режиме MASM............................158 Грамматика выражений в режиме Ideal...........................160
Турбо Ассемблер 3.0/tasm/#2-2 = 4 =
Старшинство ключевых слов.....................................162 Старшинство операций в режиме Ideal...........................162 Старшинство операций в режиме MASM............................162 Ключевые слова и предопределенные идентификаторы..............163 Ключевые слова директив.......................................163 Приложение C. Вопросы совместимости.............................168 Одно- и двухпроходные режимы ассемблирования..................169 Переменные операционной среды.................................170 Формат фирмы Microsoft для двоичных чисел с плавающей точкой.......................................................170 Приложение D. Утилиты Турбо Ассемблера..........................171 Утилита-преобразователь H2ASH.................................171 Приложение E. Сообщения об ошибках..............................174 Информационные сообщения......................................174 Предупреждающие сообщения и сообщения об ошибках..............176 32-bit segment not allowed without .386.......................176 Argument needs type override..................................176 Argument to operation or instruction has illegal size.........177 Arithmetic overflow...........................................177 ASSUME must be segment register...............................177 Bad keyword in SEGMENT statement..............................177 Can't add relative quantities.................................177 Can't address with currently ASSUMEd segment registers........178 Can't convert to pointer......................................178 Can't emulate 8087 instruction................................178 Can't make variable public....................................179 Can't override ES segment.....................................179 Can't subtract dissimilar relative quantities.................179 Can't use macro name in expression............................179 Can't use this outside macro..................................179 Code or data emission to undeclared segment...................180 Constant assumed to mean Immediate const......................180 Constant too large............................................180 CS not correctly assumed......................................180 CS override in protected mode.................................181 CS unreachable from current segment...........................181 Declaration needs name........................................181 Directive ignored in Turbo Pascal model.......................181 Directive not allowed inside structure definition.............182 Duplicate dummy arguments:_...................................182 ELSE or ENDIF without IF......................................182 Expecting METHOD keyword......................................183 Expecting offset quantity.....................................183 Expecting offset or pointer quantity..........................183 Expecting pointer type........................................183 Expecting record field name...................................183 Expecting register ID.........................................183 Expecting scalar type.........................................183 Expecting segment or group quantity...........................184 Extra characters on line......................................184 Forward reference needs override..............................184 Global type doesn't match symbol type.........................184 ID not member of structure....................................185
Турбо Ассемблер 3.0/tasm/#2-2 = 5 =
Illegal forward reference.....................................185 Illegal immediate.............................................185 Illegal indexing mode.........................................186 Illegal instruction...........................................186 Illegal instruction for currently selected processor(s).......186 Illegal local argument........................................186 Illegal local symbol prefix...................................186 Illegal mаcro argument........................................187 Illegal memory reference......................................187 Illegal number................................................187 Illegal origin address........................................187 Illegal override in structure.................................187 Illegal override register.....................................188 Illegal radix.................................................188 Illegal register for instruction..............................188 Illegal register multiplier...................................188 Illegal segment address.......................................188 Illegal use of constant.......................................189 Illegal use of register.......................................189 Illegal use of segment register...............................189 Illegal USES register.........................................189 Illegal version ID............................................189 Illegal warning ID............................................189 Instruction can be compacted with override....................190 Invalid model type............................................190 Invalid operand(s) to instruction.............................190 Labels can't start with numeric characters....................190 Line too long - truncated.....................................190 Location counter overflow.....................................190 Method call requires object name..............................191 Missing argument list.........................................191 Missing argument or <.........................................191 Missing argument size variable................................191 Missing COMM ID...............................................191 Missing dummy argument........................................192 Missing end quote.............................................192 Missing macro ID..............................................192 Missing module name...........................................192 Missing or illegal language ID................................192 Missing or illegal type specifier.............................193 Missing table member ID.......................................193 Missing term in list..........................................193 Missing text macro............................................193 Model must be specified first.................................193 Module is pass-dependant - compatibility pass was done........193 Name must come first..........................................194 Near jump or call to different CS.............................194 Need address or register......................................194 Need angle brackets for structure fill........................194 Need colon....................................................194 Need expression...............................................195 Need file name after INCLUDE..................................195 Need left parenthesis.........................................195
Турбо Ассемблер 3.0/tasm/#2-2 = 6 =
Need method name..............................................195 Need pointer expression.......................................195 Need quoted string............................................195 Need register in expression...................................196 Need right angle bracket......................................196 Need right curly bracket......................................196 Need right parenthesis........................................196 Need right square bracket.....................................196 Need stack argument...........................................197 Need structure member name....................................197 Not expecting group or segment quantity.......................197 One non-null field allowed per union expansion................197 Only one startup sequence allowed.............................198 Open conditional..............................................198 Open procedure................................................198 Open segment..................................................198 Open structure definition.....................................198 Operand types do not match....................................199 Operation illegal for static table member.....................199 Pass-dependant construction encountered.......................199 Pointer expression needs brackets.............................199 Positive count expecting......................................200 Record field too large........................................200 Record member not found.......................................200 Recursive definition not allowed for EQU......................200 Register must be AL or AX.....................................200 Register must be DX...........................................200 Relative jump out of range by __ bytes........................201 Relative quantity illegal.....................................201 Reserved word used as symbol..................................201 Rotate count must be constant or CL...........................201 Rotate count out of range.....................................201 Segment alignment not strict enough...........................202 Segment attributes illegally redefined........................202 Segment name is superfluous...................................202 String too long...............................................202 Symbol already defined:__.....................................203 Symbol already different kind.................................203 Symbol has no width or mask...................................203 Symbol is not a segment or already part of a group............203 Text macro expansion exceeds maximum line length..............203 Too few operands to instruction...............................203 Too many errors or warnings...................................204 Too many initial values.......................................204 Too many register multipliers in expression...................204 Too many registers in expression..............................204 Too many USES registers.......................................204 Trailling null value assumed..................................205 Undefined symbol..............................................205 Unexpected end of file (no END directive).....................205 Unknown character.............................................205 Unmatched ENDP:_..............................................205 Unmatched ENDS:_..............................................205
Турбо Ассемблер 3.0/tasm/#2-2 = 7 =
User-generated error..........................................206 Value out of range............................................206 Сообщения о фатальных ошибках.................................207 Bad switch....................................................207 Can't find @file __...........................................207 Сan't locate file __..........................................207 Error writing to listing file.................................207 Error writing to object file..................................207 File not found................................................207 File was changed or deleted while assembly in progress........208 Insufficient memory to process command line...................208 Internal error................................................208 Invalid command line..........................................208 Invalid number after _........................................208 Out of hash space.............................................208 Out of memory.................................................209 Out of string space...........................................209 Too many errors found.........................................209 Unexpected end of file (no END directive).....................209
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения