【发布时间】:2019-12-05 14:19:54
【问题描述】:
对于我创建的脚本for another question,我必须在字符串定义中将传递给 NASM 的文件名大写。我使用 %substr 提取 %rep 循环中的单个字符,重复计数来自 %strlen。我尝试了以下方法来大写一个字符:
$ cat test.asm
%define cc 'a'
%if cc >= 'a' && cc <= 'z'
%strcat cc cc - 'a' + 'A'
%endif
但失败如下:
$ nasm test.asm
test.asm:3: error: non-string passed to `%strcat' (9)
$
错误信息是由 NASM 预处理器源中的这个位产生的:https://repo.or.cz/nasm.git/blob/437e0ffa01505d173a8b9cfe2decf74f2e9795a5:/asm/preproc.c#l3472
使用https://repo.or.cz/nasm.git/blob/437e0ffa01505d173a8b9cfe2decf74f2e9795a5:/asm/preproc.c#l207中定义的token类型(9好像是TOK_OTHER。)
【问题讨论】:
-
@Rob:对不起,我把标签放在标题中的错误。我不明白你第一次编辑它。
-
另一个失败的尝试:
%assign cc cc - 'a' + 'A'\%strcat cc cc这失败了error: non-string passed to '%strcat' (6) -
为了帮助网络搜索,让我提一下,我们希望在此处使用 NASM 预处理器将字符大写。
标签: assembly nasm preprocessor capitalize