2011-09-17 5 views
0

私は非常に単純な問題を抱えています数学、しかし、私はネットで有用な何かを見つけませんでした。MASM32:私は(私は、昨日それを前に使用するC#を始めた)MASM32で1次元配列内のバイトを保存し、その後、いくつかの簡単なとそれを修正したい</p> <p>:SIMPLE配列操作

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; 

答えて

0

私はMASM32を使用して、正確なディレクティブを覚えていないことができますが、

:あなたはそれがよりC#のコードのように構成することにしたい場合は

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 

または:基本的な構造はこのようなものでなければなりません0

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を含むもの)を変更する必要があることに注意してください。

関連する問題