Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 ... 198
         рые  автоматически настраиваются на конкретную среду функциониро-
         вания (например, определение размера области данных для запомина-
         ния   резервной   области  памяти).  Однако, используя  операторы
         отношений, MASM не всегда выполняет то, что планировалось.
            Работая с целыми со знаком, вы можете посчитать OFFFFh и -1 за
         одно  и  то же значение.  За некоторым исключением MASM также ис-
         пользует взаимозаменяемость значений. Хотя ранние версии MASM при
         работе  с отрицательными числами имели некоторые сложности, более
         новые версии (1.2 и выше) знают,  что -1 равно 0FFFFh, однако при
         сравнении  величин  двух  чисел MASM рассматривает их по-разному.
         Это иллюстрирует следующий пример:
            True       FFFF       dw    1 gt -1        очевидно
            False      0000       dw    1 gt 0FFFFh    65535, а не -1
            True       FFFF       dw   -1 ge 0FFFFh    -1=-1
            False      0000       dw   -1 gt 0FFFFh    -1 не больше -1

            В примере показано,  что MASM рассматривает 0FFFFh как положи-
         тельное целое число 65535,  однако при сравнении с -1 0FFFFh  ин-
         терпретируется как -1.  Об этом можно заметить:  "Кто предостере-
         жен, тот вооружен".
            Полный список операторов отношений приведен в Табл.  1-5. При-

                                      - 1-20 -
         мер использования  этих  операторов при программировании макрост-
         руктур помещен в конце данной главы.  В Табл. 1-6 приведен список
         директив условного ассемблирования.

              Таблица 1-5. Логические операторы и операторы отношений
                           условного ассемблирования
         ------------------------------------------------------------
            Оператор   Синтаксис            Описание применения
         ------------------------------------------------------------
            EQ        exp1 EQ exp2     TRUE,если выражение1 равно вы-
                                            ражению2
            NE        exp1 NE exp2     TRUE,если выражение1 не равно
                                            выражению2
            LT        exp1 LT ехр2     TRUE,если выражение1 меньше
                                            выражения2
            LE        exp1 LE exp2     TRUE,если выражение1 меньше
                                            или равно выражению 2
            GT        exp1 GT exp2     TRUE,если выражение1 больше
                                            выражения2
            GE        exp1 GE exp2     TRUE,если выражение1 больше
                                            или равно выражению2
            NOT       NOT  exp         TRUE,если выражение - FALSE,
                                            иначе FALSE
            AND       exp1 AND exp2    TRUE,если только оба выражение1
                                            и выражение2 - TRUE
            OR        exp1 OR  exp2    TRUE,если выражение1 либо выра-
                                            жение2 - TRUE
            XOR       exp1 XOR exp2    TRUE,если выражение1 равно лог.
                                            NOT от выражения2
            FALSE     (0000 16-CC)     Для IF TRUE любое нулевое выра-
                                       жение - FALSE
            TRUE      (FFFF 16-CC)     Для IF TRUE любoe ненулевое вы-
                                       ражение - TRUE
            ---------------------------------------------------------

              Таблица 1-6. Список директив условного ассемблирования

            ---------------------------------------------------------
            Директива                 Описание применения
            ---------------------------------------------------------
            .LFCOND         Приводит список ассемблерных условий, со-
                            ответствующих  FALSE.
            .SFCOND         Подавляет выдачу списка условий, соответ-
                            ствующих FALSE. По умолчанию устанавлива-
                            ется .SFCOND.
            .TFCOND         Включает список условного ассемблирования
                            FALSE аналогично переключателю MASM /X.
                            Действует независимо от переключателей
                            .LFCOND и .SFCOND.
            .LIST           Приводит список исходных строк. Противо-
                            положно .ХLIST, но не изменяет характерис-
                            тик листинга условного ассемблирования,
                            определенных .LFCOND,.SFCOND или .TFCOND.
            .XLIST          Подавляет любую выдачу.  Перекрывает все
                            предыдущие  директивы.
         ------------------------------------------------------------

                                      - 1-21 -

                         Условное ассемблирование. Выводы

            Кратко ознакомившись с условным ассемблированием,  мы увидели,
         как можно управлять включением в программу тех или иных  операто-
         ров. В этом плане мы рассмотрели применение условного ассемблиро-
         вания для облегчения процесса  включения   дополнительных  частей
         программы.
            Но мы затронули только часть проблемы.  В наших примерах  была
         разобрана  только одна из десяти возможных форм применения услов-
         ных операторов.  Где еще могут применяться эти операторы?  Прежде
         всего они могут применяться в макросах.  К рассмотрению этой темы
         мы теперь и переходим.

                        Условное ассемблирование и МАКРОСЫ

            Хотя условное  ассемблирование часто используется с определен-
         ными явно ключами,  основной потенциал условного  ассемблирования
         реализуется при его сочетании с возможностью макрокаманд. Сущест-
         вует целый набор возможностей условного  ассемблирования, которые
         специально  ориентированы на работу с макрокомандами.  Рассмотрим
         основные из этих возможностей.
            Макросы могут  быть  разделены на две группы.  В первую группу
         входят макросы,  ориентированные на создание определенных  струк-
         тур,  зависящих от некоторых входных данных, причем эти структуры
         хорошо определены, а входные данные принадлежат конкретному клас-
         су.  Примером может служить макро file_head,  предназначенное для
         ввода блока определения файла.
            Вторая группа макро предназначена для генерации структур,  за-
         висящих от информации, доступной программисту, или такой информа-
         ции,  которую программист считает несущественной и подлежащей иг-
         норированию.  Эти  макросы  часто   должны   уметь   обрабатывать
         множество классов аргументов и определять класс аргументов.  В то
         же время эти макросы  могут  поддерживать  локальные  данные  или
         счетчики,  освобождая  программиста  от рутинной работы.  Макросы
         структурного управления,  приводимые в  оставшейся  части  данной
         главы, являются первыми примерами второй группы. Конечно, макросы
         этих двух групп обычно частично перекрываются.
            Для одного  типа макро программист использует эти средства для
         того,  чтобы избежать дополнительного ввода данных  с  клавиатуры
         или  какой-либо  другой  неблагодарной  работы.  Для другого типа
         программист использует эти средства для создания структур высоко-
         го уровня, основанных на способности ассемблера поддерживать про-
         пущенную информацию.  В целях упрощения своей работы  программист
         умышленно прячет детали реализации.
            Примером макро высокого уровня является  использование  макро,
         упрощающих применение мнемоник в ассемблере. Хотя большинство ко-
         манд процессора 8086 может использоваться с регистровыми  операн-
         дами или операндами памяти, многие из них не позволяют непосредс-
         твенных операндов. Примером является команда PUSH, хотя  186/188

                                      - 1-22 -

         и 286 позволяют проталкивать в стек непосредственные данные.
            Довольно просто сконструировать макро pushi (проталкивание не-
         посредственное), передающее нужный аргумент в регистр и проталки-
         вающее этот регистр.  Однако, если макро предназначено для реали-
         зации более общей функции проталкивания, желательно, чтобы оно не
         только  проталкивало  непосредственные данные,  но и само решало,
         является ли такая операция необходимой. Другими словами, програм-
         мист хотел бы применять обобщенный pseudoopcode (псевдокод),  ра-
         ботающий во всех случаях.Реально псевдокод должен быть макро, вы-
         числяющим  операнды  и  генерирующим  стандартный или расширенный
         набор команд.
            Первый шаг в написании такого общецелевого макро заключается в
         определении операндов.  Для решения этой задачи MASM имеет  целый
         набор специальных операторов.

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

            В среде  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   "Далекая" программная
                                               метка
         -------------------------------------------------------------

                                      - 1-23 -

                             Примеры для .TYPE и TYPE
         -------------------------------------------------------------
            Тип переменной     .TYPE   Определено  TYPE  Определено
         -------------------------------------------------------------
Предыдущая страница Следующая страница
1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама