Макрос [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. Вычисление функций оформить в виде макроопределения с параметром-константой. Если аргумент отсутствует, то команду сложения не генерировать. Выбор функции организовать с помощью логической шкалы.
Выбор функции организовать с помощью логической шкалы.
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 }
Объяснение кода листинга программы
- Объявлен макрос с именем
f
. - У макроса есть один параметр с именем
arg
. - Если параметр
arg
не равен нулю, то выполняется следующий код:- Переменная
eax
получает значение параметраarg
. - Выполняется операция
lea eax,[eax*2+3]
с переменнойeax
.
- Переменная
- Если параметр
arg
равен нулю, то выполняется только операцияlea eax,[eax*2+3]
с переменнойeax
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д