Справочник по языку Ассемблера IBM PC



     изготовления рекламного ролика для ресторанов. |     

Псевдооператоры equ и = - часть 2


/p>

Псевдооператор “=” удобно использовать для определения простых абсолютных (то есть не зависящих от места загрузки программы в память) математических выражений.
Главное условие то, чтобы транслятор мог вычислить эти выражения во время трансляции.
К примеру:

.data adr1 db 5 dup (0) adr2 dw 0 len = 43 len = len+1 ;можно и так, через предыдущее определение len = adr2-adr1

Как видно из примера, в правой части псевдооператора “=” можно использовать метки и ссылки на адреса — главное, чтобы в итоге получилось абсолютное выражение.

Компилятор TASM, начиная с версии 3.00, содержит директивы, значительно расширяющие его возможности по работе с текстовыми макросами. Эти директивы аналогичны некоторым функциям обработки строк в языках высокого уровня. Под строками здесь понимается текст, описанный с помощью псевдооператора equ.

Набор этих директив следующий:

  • директива слияния строк catstr:
    идентификатор catstr строка_1,строка_2,... — значением этого макроса будет новая строка, состоящая из сцепленной слева направо последовательности строк строка_1,строка_2,...


    В качестве сцепляемых строк могут быть указаны имена ранее определенных макросов.
    К примеру:

    pre equ Привет, name equ < Юля>

    privet catstr pre,name ;privet= “Привет, Юля”

  • директива выделения подстроки в строке substr:
    идентификатор substr строка,номер_позиции,размер — значением данного макроса будет часть заданной строки, начинающаяся с позиции с номером номер_позиции и длиной, указанной в размер.
    Если требуется только остаток строки, начиная с некоторой позиции, то достаточно указать только номер_позиции без указания размера.
    К примеру:

    ;продолжение предыдущего фрагмента: privet catstr pre,name ;privet= “Привет, Юля” name substr privet,7,3 ;name=“Юля”

  • директива определения вхождения одной строки в другую instr:
    идентификатор instr номер_нач_позиции,строка_1,строка_2 — после обработки данного макроса транслятором идентификатору

    будет присвоено числовое значение, соответствующее номеру (первой) позиции, с которой совпадают строка_1 и строка_2.
    Если такого совпадения нет, то идентификатор получит значение 0;

  • директива определения длины строки в текстовом макросе sizestr:
    идентификатор sizestr строка — в результате обработки данного макроса значение идентификатор устанавливается равным длине строки.

    ;как продолжение предыдущего фрагмента: privet catstr pre,name ;privet= “Привет, Юля” len sizestr privet ;len=10

  • Эти директивы очень удобно использовать при разработке макрокоманд, которые являются следующим макросредством, предоставляемым компилятором ассемблера.




    Содержание  Назад  Вперед