На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 1 / Определение типов операндов Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Определение типов операндов

В среде 8086/8088 существует четыре основных типа операндов. Это - регистровый операнд, непосредственный операнд, операнд памяти и адреса. Для операндов, ориентированных на данные, возможны подтипы. Регистры представляют собой специальные случаи сумматоров (регистр общего назначения A) и регистры сегментов. Все три типа данных могут подразделяться на 8- и 16-битовые данные. Адреса могут быть near (близкие, состоящие только из смещения) или far (далекие, состоящие из смещения и сегмента).


Как мы будем различать все эти типы? Мы будем использовать операторы MASM .TYPE и TYPE. В Табл. 1-7 приведены результаты использования этих операторов с различными классами операндов.



                     Таблица 1-7.  Операторы MASM .TYPE и TYPE

                             Правила для .TYPE  и TYPE
            ---------------------------------------------------------
            Оператор                           Результат
            ---------------------------------------------------------
            .TYPE  биты 5 и 7           8х     Определено внешне
                                        2х     Определено локально
                                        0х     Неверная ссылка
            .TYPE биты 0 ... 2          х0     Абсолютный режим
                                        х1     Программозависимый
                                        х2     Зависимый по данным
            TYPE  с переменной          01     Переменная в байт
                                        02     Переменная в слово
                                        04     Переменная в двойное
                                               слово
                                        08     Переменная в четверное
                                               слово
                                        10     Переменная в 10 байтов
                                        ХХ     Структура размерностью
                                               в ХХ
            TYPE с программной меткой   FFFF   "Близкая" программная
                                               метка
                                        FFFE   "Далекая" программная
                                               метка
         -------------------------------------------------------------

                             Примеры для .TYPE и TYPE
         -------------------------------------------------------------
            Тип переменной     .TYPE   Определено  TYPE  Определено
         -------------------------------------------------------------
            Непосредственный     20    локально      0   неверно
            Регистровый          20    локально      0   неверно
            Метка данных         22    локально      Х   количество
                                                         байтов
            "Близкая" метка      21    локально     FFFF "близкая"
                                                         метка
            "Далекая" метка      21    локально     FFFE "далекая"
                                                         метка
            Код операции MASM    00    неверно       0   неверно
            Нонсенс              00    неверно       0   неверно
         -------------------------------------------------------------

Список примеров можно продолжить. Хотя .TYPE и распознает имена различных регистров, он не распознает регистровые конструкции типа [BX] или ARRAY[BX][SI]. Односимвольная константа типа A распознается оператором .TYPE как переменная, определенная локально.


Во время первого прохода ассемблера ссылка вперед никак нераспознается. IFDEF в качестве результата возвращает "не определенно", .TYPE возвращает "неверно", а TYPE возвращает нулевую длину. К ссылкам вперед может быть применено только одно правило: если возможно, не применять их вообще.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz