0

想象一下:

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

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

4

1 回答 1

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]
于 2012-08-21T21:52:32.707 回答