Макрос [FASM] - как обратиться к макросу и как передать параметр в макрос - Assembler

Узнай цену своей работы

Формулировка задачи:

Задано число x0 и функции f(x), t(x), p(x). Пусть x1=p(x0), x2=t(x1), x3=t(x2), x4=f(x3), x5=p(x4), x6=f(x5), x7=t(x6 x8=f(x7), x9=p(x8), x10=p(x9), x11=p(x10), x12=t(x11), Требуется вычислить x12 при f(x)=2x+3, t(x)=2x-17, p(x)=2x+2. Вычисление функций оформить в виде макроопределения с параметром-константой. Если аргумент отсутствует, то команду сложения не генерировать. Выбор функции организовать с помощью логической шкалы.
Задачка тривиальная, но как обратиться к макросу и как передать параметр в макрос, ибо ругаецо? Само тело программы, по видимому, будет перебор 12 макросов в заданной последовательности? но будет ли сохраняться содержимое AX? Энто и вовсе не ясно
Выбор функции организовать с помощью логической шкалы.
format PE Console 5.0
entry Start
 
include 'win32a.inc'
 
section '.data' data readable writeable
 
x db 2
 
section '.text' code readable executable
Start:
    
macro f [arg]
{
 mov ax, [arg]
 imul 2
 add ax, 3
}
macro t [arg]
{
 mov ax, [arg]
 imul 2
 sub ax, 17
}   
macro p [arg]
{
 mov ax, [arg]
 imul 2
 add ax, 2
}
 
p x

Exit:
  invoke  ExitProcess, 0
 
section '.idata' import data readable
 
  library kernel, 'KERNEL32.DLL'
 
  import kernel,\
    ExitProcess, 'ExitProcess'

Решение задачи: «Макрос [FASM] - как обратиться к макросу и как передать параметр в макрос»

textual
Листинг программы
macro f arg
{
if ~ arg eq
  ; если параметр 'arg' есть, то будет вставлен этот кусок кода, иначе нет.
  mov eax, arg
  lea eax,[eax*2+3]
end if
}

Объяснение кода листинга программы

  1. Объявлен макрос с именем f.
  2. У макроса есть один параметр с именем arg.
  3. Если параметр arg не равен нулю, то выполняется следующий код:
    • Переменная eax получает значение параметра arg.
    • Выполняется операция lea eax,[eax*2+3] с переменной eax.
  4. Если параметр arg равен нулю, то выполняется только операция lea eax,[eax*2+3] с переменной eax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы