adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
і і і
і NEAR і Указатель виртуальной таблицы (если она і
і і имеется будет содержать смещение (16 или і
і і 32, бита в зависимости от выбора текущей і
і і модели по USE16 или USE32). і
і і і
і FAR і Указатель виртуальной таблицы (если она і
і і имеется будет содержать величины, задаю- і
і і щие сегмент и смещение (32 или 48 бит, в і
і і зависимости от выбора текущей модели по і
і і USE16 или USE32). і
АДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Если вы не задаете модификатор, размер указателя виртуальной
таблицы (если он имеется) зависит от того, адресуются ли данные в
текущей модели как NEAR, или как FAR.
Директива TBLPTR
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В концепции объектов используется таблица виртуальных мето-
дов. Экземпляр этой таблицы существует для любого объекта, содер-
жащего виртуальные методы. Структура данных для для любого объек-
та, содержащего виртуальные методы, также должна содержать указа-
тель на таблицу виртуальных методов этого объекта. Турбо
Ассемблер автоматически обеспечивает в структуре данных объекта
указатель таблицы виртуальных методов (если это требуется), и вам
не нужно задавать его явно с помощью директивы TBLPTR.
Директиву TBLPTR следует использовать в определении структу-
ры данных объекта. TBLPTR позволяет вам явно разместить указатель
таблицы виртуальных методов там, где вы хотите. Она имеет следую-
щий синтаксис:
TBLPTR
Размер указателя, который резервирует TBLPTR, определяется
тем, задано в текущей модели USE16 или USE32, и тем, какие моди-
фикаторы используются в определении объекта.
Турбо Ассемблер 3.0/tasm/#1-2 = 168 =
Идентификаторы, определяемые расширенной директивой STRUC
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Расширенная директива STRUC определяет и использует несколь-
ко идентификаторов, которые отражают определяемый объект. Эти
идентификаторы показаны в следующей таблице:
Идентификаторы, определяемые расширенной директивой STRUC
Таблица 8.4
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Идентификатор і Значение і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і @Object і Текстовая макрокоманда, содержащаяі
і і текущий объект. і
і і і
і @Table_<имя_объекта> і Табличный тип данных, содержащийі
і і таблицу методов объекта. і
і і і
і @Tableaddr_<имя_объекта>і Метка, описывающая адрес таблицыі
і і виртуальных методов объекта. і
АДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Турбо Ассемблер 3.0/tasm/#1-2 = 169 =
Глава 9. Задание и использование счетчика адреса
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Счетчик адреса отслеживает при ассемблировании исходного
файла текущий адрес. Это позволяет вам в любой момент в процессе
ассемблирования программа знать, где вы находитесь. Турбо Ассемб-
лер предоставляет директивы, которые позволяют работать со счет-
чиком адреса и помещать в него нужно значение адреса.
Метки представляют собой имена, использующиеся для ссылок на
адреса в программе. Меткам во время их определения присваивается
текущее значение счетчика адреса программы. Метки позволяют вам
назначать имена переменным в памяти и адресам конкретных инструк-
ций.
В данной главе описываются имеющиеся директивы, которые ис-
пользуются для работы со счетчиком адреса и описания метод по те-
кущему адресу.
Идентификатор счетчика адреса $
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Предопределенный идентификатор $ представляет текущий счет-
чик адреса. Счетчик адреса состоит из двух частей: сегмента и
смещения. При ассемблировании счетчик адреса представляет собой
смещение в текущем сегменте.
Счетчик адреса - это адрес адрес, который увеличивается и
отражает текущий адрес при ассемблировании каждого оператора ис-
ходного файла. Например:
helpkMessage DB 'это справочное сообщение программы'
helpLength = $ - helpMessage
Когда эти две строки ассемблируются, идентификатор
helpLength равен длине справочного сообщения.
Директивы счетчика адреса $
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В Турбо Ассемблере предусмотрено несколько директив, уста-
навливающий счетчик инструкций. Эти директивы описываются в сле-
дующем разделе. Заметим, что все эти директивы работают как в ре-
жиме MASM, так и в режиме Ideal.
Турбо Ассемблер 3.0/tasm/#1-2 = 170 =
Директива ORG
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Вы можете использовать директиву ORG, чтобы установить
счетчик адреса в значение текущего сегмента. Директива ORG имеет
следующий синтаксис:
ORG выражение
где "выражение" не может содержать никаких имен идентификаторов с
опережающими ссылками. Оно может быть константой или смещением от
идентификатора в текущем сегменте, либо смещением относительно
текущего счетчика адреса.
Перед данными или кодом, которые уже введены в сегмент, вы
можете восстановить значение счетчика адреса. Это можно использо-
вать для возврата назад и заполнения записей таблицы, значения
которых не были известны во время определения таблицы. Используй-
те этот метод с осторожностью: вы можете непреднамеренно что-либо
затереть.
Директиву ORG можно использовать для того, чтобы связать
метку с конкретным адресом. Директива ORG может также использо-
ваться для задания начального адреса файлов .COM. Приведем приме-
ры ее использования:
PROG SEGMENT
ORG 100h ; начальное смещение файла .COM
start:
;
; остальная часть программы .COM
PROG ENDS
end start
Приведем другой пример:
PROG SEGMENT
ASSUME cs:PROG, ds:PROG, ss:PROG, es:NOTHING
ORG 20h
EnvPtr label word ; определить метку для доступа
; к слову в PSP, которое ука-
; зывает на сегмент, содержа-
; щий блок операционной среды
; (он обычно освобождается для
; создания более компактной
; резидентной программы)
ORG 80h
CmdLength lebel byte ; определить метку для доступа
; к длине командной строки
ORG @1h
CmdLine label byte ; определить метку для доступа
; к тексту командной строки
Турбо Ассемблер 3.0/tasm/#1-2 = 171 =
ORG 0100h
start:
; освободить блок операционной среды
mov es, EnvPtr ; ES -> блок операционной среды
mov ah, 49h ; функция 49h: освободить блок
; памяти
int 21h ; вызвать MS-DOS
jc error_ENV ; ошибка освобождения EnvBlock?
; анализ командной строки
mov al, CmdLength ; длина командной строки
or al,al ; проверка на 0
jz no_params ; нет параметров
mov cl,al ; поместить длину в cl
mov ch,0
mov si,offset CmdLine ; адрес командной строки
mov al,' ' ; символ для поиска
repne scasb ; поиск первого пробела
;
; остальная часть файла .COM резидентной программы:
|
adfun.ru
|
|
|
|