Индексирование в сборке в основном такое же, как в C / C ++, за исключением одного различия: вы должны знать размер ваших элементов данных.
Например, чтобы просмотреть массив байтов (или символов в строке) в сборке, вы можете сделать следующее:
mov eax, 0
mov ecx, 0
loop_start:
cmp ecx, ARRAY_LENGTH
jge loop_end
add eax, BYTE PTR myArray[ecx]
add ecx, 1
jmp loop_start
loop_end:
Как видите, массив проходит по одному элементу за раз, увеличивая ecx (который я использую в качестве счетчика). Каждый элемент добавляется в eax, который содержит сумму в конце цикла. Обратите внимание, что мне пришлось добавить «BYTE PTR» при обращении к массиву, чтобы сообщить ассемблеру, какой тип данных я использую.
Теперь взгляните на этот код, который делает то же самое для данных DWORD (4 байта):
mov eax, 0
mov ecx, 0
loop_start:
cmp ecx, ARRAY_LENGTH
jge loop_end
add eax, myArray[ecx*4]
add ecx, 1
jmp loop_start
loop_end:
Изменились только две вещи: мне больше не нужно было использовать «BYTE PTR», потому что, если не указано иное, ассемблер предполагает, что вы используете 32-битные типы данных на 32-битной машине; Мне также нужно было изменить индекс массива на «ecx * 4», потому что каждый элемент в массиве имеет длину 4 байта. Большинство типов данных, используемых на 32-разрядных компьютерах, имеют размер 32 бита, поэтому более поздний пример будет более распространенным.
Чтобы ответить на ваш конкретный вопрос, вот один из способов перебрать массив строк и отобразить их:
.data
sunday db "Sun",0
monday db "Mon",0
tuesday db "Tues",0
wednesday db "Wed",0
thursday db "Thurs",0
friday db "Fri",0
saturday db "Sat",0
daysOfWeek dd OFFSET sunday, OFFSET monday, OFFSET tuesday OFFSET wednesday
dd OFFSET thursday, OFFSET friday, OFFSET saturday
.code
mov ecx, 0
loop_start:
cmp ecx, 7
jge loop_end
mov eax, daysOfWeek[ecx*4]
; eax now contains the pointer to the
; next element in the array of days
add ecx, 1
jmp loop_start
loop_end:
Поскольку указатели на 32-разрядном компьютере имеют ширину 32 бита, обрабатывайте их как DWORD, как во втором примере.