【发布时间】:2022-10-17 23:40:00
【问题描述】:
我正在尝试创建一组基于“for循环”计数器的过程。 MASM 似乎没有传统的 for-next 类型循环,因此我尝试使用变量和 REPT。
例如:
ix = 0
rept 2
foo_&ix& proc
mov rax, ix
ret
foo_&ix& endp
ix = ix + 1
endm
...
; call the generated procs
call foo_0
call foo_1
然而 ml64.exe 返回error A2008: syntax error : foo_,所以它好像没有使用该变量。
我假设我没有正确定义和使用变量。常量是用ix equ 0 创建的,但这些似乎无法更改。
【问题讨论】:
-
我认为您将不得不使用
TEXTEQU之类的东西将字符串等同于常量值ix,然后使用 % (表达式运算符)来生成需要文本替换的行。您也可以使用 CATSTR。已经有一段时间了,但我认为您可以执行以下操作:pastebin.com/86rwSgWt。一些可能有用的额外信息在这里:masm32.com/board/index.php?topic=5703.0。在我的示例中,我在ix$的末尾使用$来表示string,这只是我使用的约定,所以我知道它是一个字符串值。 -
谢谢,遗憾的是这个例子没有骰子。我整天都在搜索 masm32.org!
-
用那个例子你会得到什么错误?不一样的A2008错误?除非您的代码中有其他干扰内容,否则它实际上应该可以工作。
-
使用
@CATSTR的版本也应该可以工作,看起来像:pastebin.com/E8mjx0cJ。@CATSTR会将多个字符串表达式连接成一个输出字符串。它也为PROC语句构建foo_#函数名称 -
啊!这确实做到了。太好了,谢谢!
标签: assembly x86-64 intel masm