masm32: ПРОСТАЯ манипуляция массивом - PullRequest
0 голосов
/ 17 сентября 2011

У меня очень простая проблема:

Я хочу сохранить байты в массиве 1d в masm32 (я только начал с него вчера, раньше использовал 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 голосов
/ 17 сентября 2011

Я не могу вспомнить точные директивы, которые использует 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).

...