- •Введение
- •Сведения об архитектуре процессоров intel 80х86 и операционной системе windows, необходимые для программирования на ассемблере
- •1.1. Программно доступные регистры
- •1.2. Организация памяти [5]
- •1.2.1. Сегментация
- •1.2.2. Дескрипторы сегментов
- •1.2.3 Адресное пространство режима реального адреса
- •1.2.4. Адресное пространство защищенного режима [6]
- •1.2.5. Виртуальное адресное пространство
- •1.2.6. Способы адресации операндов
- •Регистровый операнд
- •Непосредственный операнд
- •1.3. Организация ввода – вывода
- •1.3.1. Консоль
- •1.3.2. Графический интерфейс пользователя
- •1.4. Система команд
- •Команды пересылки данных
- •Команды ввода/вывода
- •Команды целочисленной арифметики
- •Логические операции
- •Операции сдвигов
- •Команды передачи управления
- •Командные прерывания
- •Команды управления процессором
- •Команды обработки последовательности кодов
- •Команды для работы со стеком
- •2. Описание языка ассемблера
- •2.1. Алфавит языка ассемблера
- •2.2. Лексемы
- •2.3. Имена
- •2.3.1. Ключевые слова
- •2.3.2. Имена пользователя
- •2.4. Константы
- •2.4.1.Целые числа
- •2.4.2. Вещественные числа
- •2.4.3. Символьные и строковые константы
- •2.5. Структура строки языка ассемблера
- •2.5.1. Структура строки, содержащей машинную команду
- •2.6.3. Директивы упрощенного определения сегментов
- •2.6.4. Директивы определения сегментов и групп
- •2.6.5. Директивы описания процедуры
- •2.6.6. Директивы определения данных
- •2.6.7. Директивы определения имен
- •2.6.8. Директивы внешних ссылок
- •2.6.7. Директивы управления трансляцией
- •2.6.8. Макросредства
- •2.7. Операции в выражениях
- •2.7.1. Арифметические операции
- •2.7.2. Логические операции
- •2.7.3. Операции отношения
- •2.7.4. Операции, возвращающие значения
- •2.7.5. Операции присваивания атрибута
- •Трансляция программ
- •. Компиляция
- •3.2. Компоновка
- •Библиографический список
- •Функции api
- •1. Функция GetModuleHandleA
- •2. Функция LoadIcon
- •3. Функция LoadCursor
- •4. Функция Register Class
- •5. Функция CreateWindowExA
- •6. Функция ShowWindow
- •7. Функция UpdateWindow
- •8. Функция GetMessage
- •9. Функция DispatchMessage
- •10. Функция ExitProcess
- •11. Функция BeginPaint
- •12. Функция TextOutA
- •13. Функция EndPaint
- •Описание структур, определенных в фале win32.Inc
- •1. Структура wndclass
- •2. Структура сообщения
- •3. Структура paintstruct
- •Продолжение прил. 4
- •4. Структура rect
- •Формат командной строки и ключи транслятора tasm32
- •Формат командной строки и ключи компоновщика tlink32
- •Оглавление
Продолжение прил. 4
4. Структура rect
Структура RECT представлена в файле win32.inc следующим образом:
RECT struc
RcLeft UINT ? ;х - координата левого
;верхнего угла
RcTop UINT ? ;y - координата левого
;верхнего угла
RcRight UINT ? ;х - координата правого
;нижнего угла
RcBottom UINT ? ;у - координата правого
;нижнего угла
RECT ends
Приложение 5
Формат командной строки и ключи транслятора tasm32
[path]tasm32[options]source[,object][,listing][,xref]
где path – путь к компилятору
options – перечень ключей через пробел
source – имя исходного файла (расширение asm)
object - имя объектного файла, если оно не совпадает с именем исходного
listing - имя файла листинга трансляции (расширение lst)
xref - имя файла перекрестных ссылок (расширение xrf)
/a – сегменты в объектном файле следуют в алфавитном порядке
/s - сегменты в объектном файле следуют в порядке их описания в программе
/c - включать перекрестные ссылки в листинг
/dSYM [=VAL] определяет идентификатор SYM (эквивалент директивы = )
/e – эмуляция команд обработки операндов в формате с плавающей точкой
/r – трансляция действительных команд арифметического сопроцессора
/h, /? - отображение на экране справки о вызове компилятора
/iPATH - путь к файлу, включаемому при трансляции как по директиве INCLUDE
/jCMD - определяет директивы которые будут выполняться перед трансляцией программы на ассемблере
/kh * - задает максимальное * число идентификаторов в программе
/l - создать листинг
/la – включать в листинг код, генерируемый компилятором по директиве MODEL
/ml – во всех идентификаторах различать прописные и строчные буквы
/mx - различать прописные и строчные буквы во внешних и общих идентификаторах
/mu – все символы идентификаторов воспринимать как прописные
/mv * - определить максимальную длину * идентификатора
/m * - установка количества * проходов транслятора
/n - подавить таблицы идентификаторов в листинге
/os, /o, /op, /oi – генерация оверлейного кода
/p - проверить наличие кода с побочным эффектом в защищенном режиме
/q – удалить из объектного кода лишнюю информацию
/t - подавить вывод сообщений при условном ассемблировании, кроме сообщений об ошибках
/w0, /w1, /w2 – генерация, предупреждающий сообщений разного уровеня (w0=нет сообщений, w1=w2=есть)
/w-xxx, /w+xxx – генерация сообщений класса ххх. Отключение -, разрешение +
Классы сообщений обозначаются идентификаторами из трех символов:
ALN – выравнивание сегмента в памяти
ASS – используются сегменты реального режима
BRK – требуются квадратные скобки
ICG – неэффективная генерация кода
LCO – переполнение счетчика адреса
OPI – открытый блок условия IF
OPP – открытая процедура
OPS – открытый сегмент
OVF – переполнение
PDC – конструкция, зависящая от прохода
PRO – попытка переопределения регистра CS в защищенном режиме
RES – предупреждение о резервируемом слове
TPI – предупреждение о недопустимости в Turbo Pascal
/W+ - разрешить все сообщения
/W- - запретить все сообщения
/x - включить в листинг все блоки условного ассемблирования
/z - отображать исходную строку с сообщением об ошибках, ей соответствующих
/zi – сохранить отладочную информацию
/zd – сохранить информацию о номерах строк
/zn – запретить сохранение отладочной информации
Приложение 6
