0

私は非常に単純な問題を抱えています:

masm32 の 1 次元配列にバイトを格納し (昨日始めたばかりで、以前は c# を使用していました)、単純な数学で変更したいのですが、ネットで役立つものは見つかりませんでした。

tiles BYTE 12 dup (0) ; array of 12 bytes with value 0

これは、.data セクションで配列を宣言する方法です。基本的に、C# 構文でやりたいことは次のとおりです。

for(int i = 0; i < tiles.Length; i++)
    tiles[i] += 2;
4

1 に答える 1

0

masm32 が使用する正確なディレクティブを思い出せませんが、基本的な構造は次のようになります。

    mov edi, addr tiles ; might be called offset, some assemblers (notably gas) would use something like lea edi, [tiles] instead
    mov ecx, 12 ; the count, this could be gotten from an equ, read from a variable etc.
for_loop:
    add byte ptr [edi], 2 ; tiles[i] += 2
    inc edi ; move to next tile
    dec ecx ; count--
    jnz for_loop ; if (count != 0) goto for_loop

または、C# コードのように構造化する場合は、次のようにします。

    mov edi, addr tiles
    sub ecx, ecx ; ecx = 0
for_loop:
    cmp ecx, 12 ; ecx < tiles.Length ?
    jnl done ; jump not less
    add byte ptr [edi+ecx], 2 ; tiles[i] += 2
    inc ecx ; i++
    jmp for_loop
done:

tiles一部のコードのタイプを変更すると、変更が必要になることに注意してください (edi特に関連するもの)。

于 2011-09-17T14:49:41.830 に答える