使用寄存器内容作为标签

时间:2012-08-21 21:32:13

标签: assembly x86 nasm labels

想象一下:

说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节),_和?...”

另外,我问问题是否有更有效的解决方案?

1 个答案:

答案 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]