Макрос [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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д