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 に答える