Вот с помощью Base + (Index * Scale) + Смещение режима адресации. По крайней мере, я так думаю. Я не очень хорошо знаком с синтаксисом AT & T. Я думаю, что синтаксис Intel будет:
add eax,[esi + ebx*4 - 4]
cmp [esi + ebx*4],eax
Это выглядит как он индексирует в массив целых чисел (значения 4 байта). Представьте себе, в C, который вы хотите добавить значение из некоторого элемента массива в целом, как это:
int a[100];
int i = 10;
int total = 0;
total += a[i-1];
Теперь сделайте esi
содержать адрес массива, ebx
содержать значение i
и eax
удерживайте значение 33. Вы бы получить:
add eax,[esi + ebx*4 - 4]
инструкции сравнения тестирование, чтобы увидеть, если результат (в eax
) равно следующее значение в массиве. В примере C это эквивалентно сравнению total
с a[i]
.
Это поможет, если вы отредактируете вопрос, чтобы включить более подробную информацию о конкретном ассемблере, который вы используете. Я не понимаю этот синтаксис, хотя я должен добавить, что прошло некоторое время, так как я искал ассемблер. –