Регистры
Имена регистров представляют регистры процессоров семейства 89086 и могут использоваться в составе выражения, например:
5+ax+7
При вычислении данного выражения получается значение ax+12, так как AX - это зарезервированный в Турбо Ассемблере идентификатор регистра. Идентификаторы регистров перечислены в следующем списке:
8086 | AX, BX. CX, DX, SI, DI, DP, CS, DS, ES, SS
| 80186,80286 | то же, что и для 8086 | 80386 | регистры 8086, плюс EAX, EBX, ECX, EDX, ESI EDI, EBP, PS, GS, CR0, CR3, CR3, DR0, DR1,DR@, DR#, DR6, DR7 | 80486 | регистры процессора 80386, плюс TR3, TR4, TR5
|
Стандартные значения идентификаторов
Некоторые идентификаторы всегда представляют конкретные значения, и для того, чтобы их использовать, определения не требуется. Эти идентификаторы и их значения перечислены в следующей таблице:
Стандартные идентификаторыИдентификатор | Значение |
---|
$ | Значение текущего счетчика адреса программы. | NOTHING | 0 | ? | 0 | UNKNOWN | 0 | BYTE | 1 | WORD | 2 | DWORD | 4 | PWORD | 6 | FWORD | 6 | QWORD | 8 | TBYTE | 10 | NEAR | 0ffffh | FAR | 0fffeh | PROC | 0ffffh или 0fffeh, в зависимости от текущей модели. | CODEPTR | 2 или 4, в зависимости от текущей модели. | DATAPTR | 2 или 4, в зависимости от текущей модели. |
Значения простых идентификаторов
Турбо Ассемблер возвращает для идентификаторов, которые используются сами по себе, следующие значения:
Значения идентификаторов, используемых непосредственноВыражение | Значение |
---|
имя_адреса | Возвращает адрес. | имя_числового_выражения | Возвращает значение числового выражения. | имя_таблицы | имя_элемента_таблицы | Возвращает значение по умолчанию элемента таблицы, заданное в определении таблицы. | структура/имя_элемента_таблицы | Возвращает смещение элемента в таблице или структуре (только в режиме MASM). | имя_записи | Возвращает маску, в которой биты, зарезервированные для представления битовых полей в определении записи, равны 1, а остальные равны 0. | имя_записи <.> | Возвращает начальное значение экземпляра записи, которое имела бы эта запись, если бы она описывалась с текстом, заключенном в угловые скобки (подробности содержатся здесь). | имя_записи [.] | Аналогично предыдущему. | имя_поля_записи | Возвращает число бит, на которое смещена запись от младшего бита записи (значение сдвига). | имя_перечисления | Возвращает маску, в которой биты, требуемые для представления максимального значения в определении перечисления равны 1, а остальные равны 0. | имя_сегмента | Возвращает значение сегмента. | имя_группы | Возвращает значение группы. | имя_структуры/объединения | Возвращает размер в байтах структуры или объединения, но только в том случае, если этот размер равен 1, 2 или 4; в противном случае возвращается 0. | имя_типа | Если тип определяется как синоним структуры или объединения, то возвращаемое значение то же, что и у структуры или объединения. В противном случае возвращается размер типа (с 0ffffh для меток short и near и 0fffeh для меток far). |
Все другие типы идентификаторов возвращают значение 0.
Заметим, что когда в выражении вы используете имя текстовой макрокоманды, Турбо Ассемблер подставляет вместо идентификатора текстовой макрокоманды значение текстовой макрокоманды. Аналогично, когда вы используете имя псевдонима, Турбо Ассемблер подставляет вместо идентификатора псевдонима значение идентификатора, которое представляет псевдоним.
Унарная операция LENGTH
Унарная операция LENGTH возвращает информацию о счетчике или числе величин, представляющих идентификатор. Возвращаемое фактическое значение зависит от типа идентификатора, что показано в приведенной ниже таблице:
Значения, возвращаемые операцией LENGTHВыражение | Значение |
---|
LENGTH имя_адреса | Возвращает счетчик элементов, выделяемых при определении имени адреса. | LENGTH имя_элемента_структуры/объединения | Возвращает счетчик элементов, выделенных при определении элемента (только режим MASM). |
При применении ее ко всем другим типам идентификаторов операция LENGTH возвращает значение 1. Приведем некоторые примеры использования операции LENGTH:
MSG DB "Hello" array DW 10 DUP (4 DUP (1),0) numbrs DD 1,2,3,4 lmsg = LENGTHG msg ; =1, нет операции DUP larray = LENGTH nsg ; =10, счетчик повторения DUP lnumbrs = LENGTH numbrs ; =1, нет операции DUP
Унарная операция SIZE
Унарная операция SIZE возвращает информацию о размере выделенного элемента данных. Возвращаемое значение зависит от типа заданного идентификатора. Список доступных для операции SIZE значений приведен в следующей таблице:
Значения, возвращаемые операцией SZIEВыражение | Значение |
---|
SIZE имя_адреса | В режиме Ideal возвращается фактическое число байт, выделенных для переменных данных. В режиме MASM возвращается размер подтипа имя_адреса (UNKNOWN=0, BYTE=1, WORD=2, DWORD=4, PWORD=FWORD=6, QWORD=8, TBYTE=10, SHORT=NEAR=0ffffh, FAR=0fffeh, адрес структуры = размеру структуры), умноженный на значение LENGTH имя_адреса. | SIZE имя_структуры/объединения | Возвращает число байт, требуемых для представления структуры или объединения. | SIZE имя_таблицы | Возвращает число байт, необходимых для представления таблицы. | SIZE имя_элемента_таблицы/структуры | Возвращает число байт, необходимых для представления общего числа бит, зарезервированных в определении записи: 1, 2 или 4. | SIZE имя_перечисления | Возвращает число байт, необходимых для представления максимального значения, присутствующего в перечислении: 1, 2 или 4. | SIZE имя_сегмента | Возвращает размер сегмента в байтах. | SIZE имя_типа | Возвращает число байт, необходимых для представления названного типа, при этом ближние и дальние метки возвращают значение 0ffffh, а дальние - 0fffeh. |
При применении ко всем другим типам идентификаторов операция SIZE возвращает значение 0.
Унарная операция WIDTH
Унарная операция WIDTH возвращает размер в битах поля записи. Это значение зависит от типа идентификатора. Эти типы идентификаторов показаны в приведенной ниже таблице. Для всех других типов операцию WIDTH использовать не допускается.
Значения WIDTHВыражение | Значение |
---|
WIDTH имя_записи | Возвращает общее число бит, зарезервированных в определении записи. | WIDTH имя_поля_записи | Возвращает число бит, зарезервированных для поля в определении записи. | WIDTH имя_перечисления | Возвращает число бит, необходимых для представления максимального значения в определении enum. |
1 2 3 4 5 6 7
8 8 8
| |