想象一下:
说ECX == 3.
我想要数字'65',即ASCII'A'作为我的代码的标签:
;NB This is an example/code snippet
mov ecx, 65
jmp .%+[ecx]
...
.A:
[do stuff here]
当我使用上述想法编译代码时,它给出了以下内容:
error: comma, colon or end of line expected
我要问的是我在做什么语法错误 - 我很确定我遵循NASM手册第3.1章中列出的标签定义规则:
“......唯一可用作标识符第一个字符的字符是字母,。(具有特殊含义:见第3.9节),_和?...”
另外,我问问题是否有更有效的解决方案?
答案 0 :(得分:2)
您无法在装配中“计算”标签。但是你可以计算地址。
此处ecx
将用作包含与多个标签对应的地址的表的索引:
mov ecx, 65
jmp [table - 'A'*4 + ecx*4]
...
table:
dd .A ; address of .A:
dd .B ; address of .B:
dd .C ; address of .C:
...
.A:
[do stuff here]
.B:
[do stuff here]
.C:
[do stuff here]