Tomasz Grysztar - Flat Assembler 1.64. Мануал программера

Тут можно читать онлайн Tomasz Grysztar - Flat Assembler 1.64. Мануал программера - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-db. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Flat Assembler 1.64. Мануал программера
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.25/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Tomasz Grysztar - Flat Assembler 1.64. Мануал программера краткое содержание

Flat Assembler 1.64. Мануал программера - описание и краткое содержание, автор Tomasz Grysztar, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Flat Assembler 1.64. Мануал программера - читать онлайн бесплатно полную версию (весь текст целиком)

Flat Assembler 1.64. Мануал программера - читать книгу онлайн бесплатно, автор Tomasz Grysztar
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

macro mov op1,op2,op3

{

if op3 eq

mov op1,op2

else

mov op1,op2

mov op2,op3

end if

}

Это позволяет инструкции « mov» иметь три операнда, но она так же все ещё может иметь два операнда, так как если макроинструкции задается меньше аргументов, чем ему требуется, оставшиеся заполняются пустыми значениями. Если заданы три операнда, то макроинструкция превратится в две ранее определенных, то есть « mov es,ds,dx» будет ассемблировано как « push ds», « pop es» и « mov ds,dx».

Если требуется создать макроинструкцию с аргументом, который содержит запятые, этот аргумент следует заключить между « <» и « >». Если он содержит больше одного знака « <», то для окончания его описания должно быть использовано такое же количество « >».

« purge» позволяет отменить последнее определение указанной макроинструкции. За директивой должно следовать одно или больше имен макроинструкций, разделенных запятыми. Если указанная макроинструкция не определена, это не вызовет ошибку. Например, после расширения синтаксиса « mov» вышеуказанными макроинструкциями вы можете отключить синтаксис с тремя операндами, используя директиву « purge mov». Следующее « purge mov» отключит синтаксис для сегментных регистров, а дальнейшее применение этой директивы не возымеет эффекта.

Если после директивы « macro» вы заключаете некоторую группу аргументов в квадратные скобки, это позволит при использовании макроинструкции задать данной группе аргументов больше значений. Любой следующий аргумент данный после последнего аргумента данной группы начнет новую группу и станет её первым членом. Поэтому после закрытия квадратных скобок не должно быть имен аргументов. Содержание макроинструкции будет обрабатываться для каждой такой группы аргументов отдельно. Простейший пример — это заключение одного имени аргумента в квадратные скобки:

macro stoschar [char]

{

mov al,char

stosb

}

Эта макроинструкция допускает неограниченное число аргументов, и каждый будет обработан этими двумя инструкциями отдельно. Например, « stoschar 1,2,3» будет ассемблирован как следующие инструкции:

mov al,1

stosb

mov al,2

stosb

mov al,3

stosb

Существуют некоторые специальные директивы, возможные только внутри определений макроинструкций. Директива « local» задает локальные имена, которые будут заменены уникальными значениями каждый раз, когда используется макроинструкция. За ней должны следовать имена, разделенные запятыми. Эта директива обычно требуется для внутренних констант или меток макроинструкции. Например:

macro movstr

{

local move

move:

lodsb

stosb

test al,al

jnz move

}

Каждый раз, когда используется эта макроинструкция, « move» заменяется новым уникальным именем. То есть вы не получите ошибку, это обычный случай, когда метка определяется больше, чем один раз.

« forward», « reverse» и « common» делят макроинструкцию на блоки, каждый из которых обрабатывается после окончания обработки предыдущего. Они различаются в поведении только если макроинструкция поддерживает много групп аргументов. Блок инструкций, следующий за « forward» будет обрабатываться для каждой группы аргументов от первой до последней, как блок по умолчанию (без этих директив). Блок, идущий за « reverse» будет обрабатываться для каждой группы аргументов в обратном порядке — от последней до первой. Блок за директивой « common» обрабатывается лишь один раз, просто для всех групп аргументов. Локальное имя, определенное в одном блоке, доступно во всех следующих блоках при обработке той же группы аргументов. Если оно было определено в блоке « common», оно доступно во всех следующих блоках, независимо от обрабатываемой группы.

Вот пример макроинструкции, которая создает таблицу адресов строк и следующих за ними строк.

macro strtbl name,[string]

{

common

label name dword

forward

local label

dd label

forward

label db string,0

}

Первый аргумент, задаваемый этой макроинструкции, станет меткой для таблицы адресов, следующими аргументами должны быть строки. Первый блок обрабатывается однажды и определяет метку, второй блок назначает локальную метку для каждой строки и определяет запись в таблице, содержащий адрес этой строки. Третий блок определяет данные каждой строки с соответствующей меткой.

Первая инструкция, следующая за директивой, начинающей блок в макроинструкции, может идти с ней на той же строке, как на следующем примере:

macro stdcall proc,[arg]

{

reverse push arg

common call proc

}

Это макрос может применяться для вызова процедур, используя соглашение STDCALL, аргументы сохраняются в стеке в обратном порядке. Например, « stdcall foo,1,2,3» будет ассемблировано так:

push 3

push 2

push 1

call foo

Если некоторое имя внутри макроинструкции имеет несколько значений (это либо один из аргументов, заключенных в квадратные скобки, либо локальное имя, определенное в блоке, следующем за директивой « forward» или « reverse») и используется в блоке, следующем за директивой « common», оно будет заменено на все значения, разделенные запятыми. Например, следующий макрос передать все дополнительные аргументы ранее определенной макроинструкции « stdcall»:

macro invoke proc,[arg]

{ common stdcall [proc],arg }

Он может применяться для непрямого вызова (через указатель в памяти) процедуры, используя соглашение STDCALL.

Внутри макроинструкции также может быть использован специальный оператор « #». Этот оператор сцепляет два имени в одно. Это может быть полезно, так как делается после того, как аргументы и локальные имена заменяются на свои значения. Следующая макроинструкция генерирует условный переход в зависимости от аргумента « cond»:

macro jif op1,cond,op2,label

{

cmp op1,op2

j#cond label

}

Например, « jif ax,ae,10h,exit» будет ассемблировано как инструкции « cmp ax,10h» и « jae exit».

Оператор « #» может также использоваться для объединения двух строк, заключенных в кавычки.

Возможно преобразование имени в строку в кавычках с помощью оператора « `», который также может быть использован внутри макроинструкции. Он конвертирует следующее за ним имя в строку, заключенную в скобки, но имейте в виду, что если за ним следует аргумент, который заменяется на значение, содержащее больше, чем один символ, будет преобразован только первый из них, так как оператор « `» конвертирует только символ, идущий непосредственно за ним. Здесь пример использования этих двух свойств:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Tomasz Grysztar читать все книги автора по порядку

Tomasz Grysztar - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Flat Assembler 1.64. Мануал программера отзывы


Отзывы читателей о книге Flat Assembler 1.64. Мануал программера, автор: Tomasz Grysztar. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x