Assembly 使用寄存器内容作为标签

Assembly 使用寄存器内容作为标签,assembly,x86,nasm,labels,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 我想问的是我犯了什么语法错误——我很确定我遵循了NA

想象一下:

假设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节),u.和?…”

此外,我还问是否有更有效的方法来解决我的问题?

您不能在汇编中“计算”标签。但是你可以计算地址

此处,
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]

谢谢你的帮助,阿列克西。我想把65移到EAX中也证明了关于名称中运算符优先级的另一点(即[table-'A'*4+ecx*4]),即乘法是否发生在加法之前。我不认为NASM对+-*/具有异常的优先级。