- •Введение
- •Сведения об архитектуре процессоров 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
- •Оглавление
2.3. Имена
Имена можно разделить на две основные группы, включающие в себя всего шесть классов лексем. Это ключевые слова (имена, зарезервированные для системы) и имена пользователя.
2.3.1. Ключевые слова
Ключевыми словами называются имена, имеющие для языка определенный смысл и употребляемые в программах в этом смысле. К ним относятся имена регистров процессора, мнемонические имена команд процессора, имена префиксов, имена директив и имена операций в выражениях.
Имена регистров процессора: EAX, AX, АН, AL, EBX, BX, BH, BL, ECX, CX, CH, CL,EDX, DX, DH, DL, ESP, SP,EBP, BP, ESI, SI,EDI, DI, CS, DS, SS, ES.
Имена команд процессора, и имена префиксов приведены в п.1.4.
Некоторые имена директив, существовавших и в версиях TASM, предшествовавших версии TASM 5.0, предопределенные идентификаторы и имена операций в выражениях:
= |
DD |
GT |
%NOCREF |
RECORD |
.186 |
DQ |
HIGH |
%NOCTLS |
REPT |
.286 |
DT |
IDEAL |
NOEMUL |
.SALL |
.286C |
DUP |
IF |
%NOINCL |
SEG |
.286P |
DW |
IF1 |
NOJUMPS |
SEGMENT |
.287 |
DWORD |
IF2 |
%NOLIST |
.SEQ |
.386 |
ELSE |
IFB |
NOLOCALS |
.SFCOND |
.386C |
ELSEIF |
IFDEF |
%NOMACS |
SHL |
.387 |
EMUL |
IFDIF |
NOMASM51 |
SHORT |
.486 |
END |
IFDIF1 |
NOMULTERRS |
SHR |
.586 |
ENDIF |
IFE |
NOSMART |
SIZE |
.8086 |
ENDM |
IFIDN |
%NOSYMS |
SIZESTR |
.8087 |
ENDP |
IFIDNI |
NOT |
SMALL |
ALIGN |
ENDS |
IFNB |
NOTHING |
SMART |
ALFA |
EQ |
IFNDEF |
%NOTRUNC |
STAK |
AND |
EQU |
%INCL |
NOWARN |
.STAK |
ARG |
ERR |
INCLUDE |
OFFSET |
STRUC |
ASSUME |
.ERR |
INCLUDELIB |
OR |
SUBSTR |
%BIN |
.ERR1 |
INSTR |
ORG |
SUBTTL |
BYTE |
.ERR2 |
IRP |
%OUT |
%SUBTTL |
CATSTR |
.ERRB |
IRPC |
P186 |
%SYMS |
@CODE |
.ERRDEF |
JUMPS |
P286 |
SYMTYPE |
CODESEG |
ERRDIF |
LABEL |
P286N |
%TABSIZE |
COMMENT |
ERRDIFI |
.LALL |
P287 |
TBYTE |
%CONDS |
ERRE |
LARGE |
P386 |
%TEXT |
.CONST |
ERRIDN |
LENGTH |
P386N |
.TFCOND |
@CPU |
ERRIDNI |
.LFCOND |
P386P |
THIS |
%CREF |
ERRIFNB |
%LINENUM |
P387 |
??TIME |
.CREF |
ERRIFNDEF |
%LIST |
P486 |
TITLE |
%CREFALL |
ERRNB |
.LIST |
P586 |
%TITLE |
%CREFREF |
ERRNDEF |
LOCAL |
P8086 |
%TRUNC |
%CREFUREF |
ERRNZ |
LOCALS |
P8087 |
TYPE |
%CTLS |
EVEN |
LOW |
PAGE |
.TYPE |
@CURSEG |
EVENDATA |
LT |
%PAGESIZE |
UPDATASEG |
@CODESEG |
EXITM |
MACRO |
PARA |
UFARDATA |
COMM |
EXTRN |
%MACS |
%PCNT |
UNION |
@DATA |
FAR |
MASK |
PNO87 |
UNKNOWN |
.DATA |
FARDATA |
MASM |
%POPLCTL |
USES |
.DATA? |
@FARDATA |
MASM51 |
PROC |
??VERSION |
DATAPTR |
.FARDATA |
MOD |
PTR |
WARN |
DATASEG |
@FARDATA? |
MODEL |
PUBLIC |
WITH |
@DATASIZE |
.FARDATA? |
.MODEL |
PURGE |
WORD |
??DATA |
@FILENAME |
MULTERRS |
%PUSHLCTL |
@WORDSIZE |
DB |
??FILENAME |
NAME |
PWORD |
.XALL |
%DEPTH |
FWORD |
NE |
QUIRKS |
.XLIST |
DF |
GE |
NEAR |
QWORD |
XOR |
DISPLAY |
GLOBAL |
%NEWPAGE |
RADIX |
|
DOSSEG |
GROUP |
%NOCONDS |
.RADIX |
|
Список этот неполный. В нем есть ключевые слова, не имеющие смысла с точки зрения программирования в защищенном режиме. Но о выше перечисленных ключевых словах надо помнить для того, чтобы не воспользоваться ими как именами пользователя. Ассемблер допускает такое использование, и в случае неправильной интерпретации имени при неудачно сложившейся синтаксической ситуации компилятор будет считать его ключевым словом и получится ошибка, которую трудно обнаружить.
