Россия и Беларусь начали и продолжают войну против народа Украины!

Ассемблер. Макросы

  Светлана Деменева  | 

  Обновл. 16 Сен 2021  | 

 12694

Написание макроса — это еще один способ обеспечения модульного программирования в Ассемблере.

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

   В NASM макросы определяются с помощью директив %macro (начало) и %endmacro (конец).

Синтаксис для определения макросов следующий:

%macro имя_макроса количество_параметров
<тело_макроса>
%endmacro

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

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

Здесь регистры EAX, EBX, ECX и EDX были использованы при вызове функции INT 80H. Таким образом, каждый раз, когда вам нужно вывести строки на экран, вам нужно сохранить эти регистры в стеке, вызвать INT 80H и затем восстановить исходное значение регистров из стека. Поэтому здесь может быть полезно написать два макроса: для сохранения и для восстановления данных.

Некоторые инструкции, такие как IMUL, IDIV, INT и т.д., требуют сохранения некоторой информации в определенных регистрах. Если программа уже использовала эти регистры для хранения важных данных, то существующие данные из этих регистров должны быть сохранены в стеке и восстановлены после выполнения инструкции.

Рассмотрим следующую программу, в которой продемонстрировано определение и использование макросов:

Результат выполнения программы:

Hello, programmers!
Welcome to the world of,
Linux assembly programming!

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (20 оценок, среднее: 4,95 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *