masm32:SIMPLE数组操作

时间:2011-09-17 14:23:27

标签: assembly masm32

我有一个非常简单的问题:

我想在masm32中的1d数组中存储字节(我昨天刚开始使用它,之前使用过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;

1 个答案:

答案 0 :(得分: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的代码)。