Макрос [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? Энто и вовсе не ясно
Выбор функции организовать с помощью логической шкалы.
Листинг программы
  1. format PE Console 5.0
  2. entry Start
  3. include 'win32a.inc'
  4. section '.data' data readable writeable
  5. x db 2
  6. section '.text' code readable executable
  7. Start:
  8. macro f [arg]
  9. {
  10. mov ax, [arg]
  11. imul 2
  12. add ax, 3
  13. }
  14. macro t [arg]
  15. {
  16. mov ax, [arg]
  17. imul 2
  18. sub ax, 17
  19. }
  20. macro p [arg]
  21. {
  22. mov ax, [arg]
  23. imul 2
  24. add ax, 2
  25. }
  26. p x
  27.  
  28. Exit:
  29. invoke ExitProcess, 0
  30. section '.idata' import data readable
  31. library kernel, 'KERNEL32.DLL'
  32. import kernel,\
  33. ExitProcess, 'ExitProcess'

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

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы