<<
>>

Псевдооператоры EQU и =

К простейшим макросредствам языка ассемблера можно отнести псевдооперато- ры EQU и = (равно). Их мы уже неоднократно использовали при написании про- грамм. Данные псевдооператоры предназначены для присвоения некоторому вы- ражению символического имени или идентификатора.
Впоследствии, когда в ходе трансляции такие идентификаторы встречаются в теле программы, макроассемб- лер подставляет вместо них соответствующее выражение. Выражениями могут быть константы, имена меток, символические имена и строки в апострофах. После при- своения этим конструкциям символических имен их можно использовать везде, где эти конструкции могли бы присутствовать. Синтаксис псевдооператора EQU: имя_идентификатора еqu строка или числовое_выражение Синтаксис псевдооператора =: имя_идентификатора = числовое_выражение Несмотря на внешнее и функциональное сходство, псевдооператоры EQU и = различаются следующим: с помощью псевдооператора ЕQU идентификатору можно ставить в соответствие как числовые выражения, так и текстовые строки, а псевдооператор = может использоваться только с числовыми выражениями; Ж идентификаторы, определенные с помощью псевдооператора=, можно переопре- делять в исходном тексте программы, а определенные с использованием псев- дооператора ЕQU — нельзя. Ассемблер всегда пытается вычислить значение строки, воспринимая ее как выражение. Для того чтобы строка воспринималась именно как текстовая, необхо- димо заключить ее в угловые скобки: . Угловые скобки являются оператором ассемблера, называемым оператором вы- деления. С его помощью транслятору сообщается, что заключенная в угловые скобки строка должна трактоваться как текст, даже если в нее входят служебные слова ассемблера или операторы. Псевдооператор EQU удобно использовать для настройки программы на кон- кретные условия выполнения, замены сложных в обозначении объектов, много- кратно встречающихся в программе, более простыми именами и т.
п. К примеру, mаsm model small stack 256 mаs_sizе equ 10 ;размерность массива аkk equ ах переименовать регистр mаs_еТеm equ mаs[bх][si] адресовать элемент массива ,dаtа ;описание массива из 10 байт: mas db mas_size dup (0) . code mоv аkk,@dаtа ;фактически mоv ах,@dаtа mоvds,аkk ;фактически mоv ds,ах mоv аt,mаs_еТеm ;фактически mov а!,таs[bх][si] Псевдооператор = удобно использовать для определения простых абсолютных (то есть не зависящих от места загрузки программы в память) математических выражений. Главное условие — транслятор должен быть в состоянии вычислять эти выражения во время трансляции. К примеру, .data аdrl db 5 dup (0) аdr2 dw 0 Теп = 43 Теп = Ten+1 ;можно и так, через предыдущее определение Теп = аdr2-аdrl Как видно из примера, в правой части псевдооператора = можно использовать метки и ссылки на адреса — главное, чтобы в итоге получилось абсолютное выра- жение. Компилятор TASM, начиная с версии 3.00, содержит директивы, значительно расширяющие его возможности по работе с текстовыми макросами. Эти директи- вы аналогичны некоторым функциям обработки строк в языках высокого уровня. Под строками здесь понимается текст, описанный с помощью псевдооператора EQU. Эти директивы перечислены далее. ® Директива слияния строк CATSTR: идентификатор catstr строка_l,строка_2,. Значением этого макроса будет новая строка, состоящая из сцепленной слева направо последовательности строк строка_1, строка_2 и т. д. В качестве сцепляе- мых строк могут быть указаны имена ранее определенных макросов. К при- меру, рге equ Привет, name equ < Юля> privet catstr рге,name ;рrivеt= "Привет, Юля" » Директива выделения подстроки в строке SUВSТR: идентификатор substr строка, номер_позиции, размер Значением данного макроса будет часть строки, заданной операндом строка, начинающаяся с позиции с номером номер_позиции и длиной, указанной опе- рандом размер. Если требуется только остаток строки начиная с некоторой по- зиции, то достаточно указать номер позиции (без размера).
К примеру, ;продолжение предыдущего фрагмента: privet catstr рге,name ;рrivеt= "Привет, Юля" name substr рrivеt,7,З ;паmе="Юля" S Директива определения вхождения одной строки в другую INSТR; идентификатор instr номер_нач_позиции,строка_l,строка_2 После обработки данного макроса транслятором операнду идентификатор будет присвоено числовое значение, соответствующее номеру (первой) позиции, с которой совпадают операнды строка_l и строка_2. Если такого совпадения нет, то идентификатор получит значение 0. ■ Директива определения длины строки в текстовом макросе SIZЕSТR: идентификатор sizestr строка В результате обработки данного макроса значение идентификатор устанавлива- ется равным длине строки: ;как продолжение предыдущего фрагмента: privet саtstr рrе,паmе ;рrivеt= "Привет, Юля" ten sizestr privet ;Теп=iо Эти директивы очень удобно использовать при разработке макрокоманд, кото- рые являются следующим типом макросредств, предоставляемых компилятором ассемблера. .
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Псевдооператоры EQU и =:

  1. Библиография
  2. Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
  3. ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
  4. ПЕРЕДМОВА
  5. Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
  6. Розділ І. Загальні положення цивільного права
  7. Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
  8. Тема 2. Цивільне законодавство України
  9. Тема 3. Поняття, елементи та види цивільних правовідносин
  10. Тема 4. Здійснення цивільних прав і виконання обов’язків