x86 простая инструкция mov - PullRequest
       28

x86 простая инструкция mov

0 голосов
/ 22 сентября 2011

Это простой вопрос, но я не могу найти надежных ответов в Google.

Что означает эта инструкция:

movl %eax, (%esi, %ecx, 4)

Перемещает ли значение в регистре eaxна значение в памяти, на которое указывает (%esi, %ecx, 4)?

(%esi, %ecx, 4) для массива.Таким образом, это означает Array [Xs + 4i], где Xs - это начальная точка в памяти для Array, а i - просто смещение в массиве целых чисел.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Точно правильно. Это синтаксис AT & T, поэтому сначала идет источник, затем пункт назначения. Таким образом, он сохраняет содержимое регистра eax в ячейку памяти esi + 4*ecx.

Если вам нравится рассматривать это как массив, он сохраняет eax в ecx -й записи массива 4-байтовых объектов, основанных на esi.

2 голосов
/ 22 сентября 2011

Да, именно это и есть. В синтаксисе AT & T адресация памяти записывается как:

offset(base, index, multiplier)

offset - это константа со знаком, указывающая смещение от base, base - это регистр, с которого следует начинать, index - это регистр, указывающий, как далеко после начала массива искать, после умножения на multiplier, который может быть 1, 2, 4 или 8.

Вы должны указать хотя бы один из offset, base и index. Чтобы использовать index без base, вам необходимо поставить перед ним запятую ((, index)). Если вы не укажете multiplier, по умолчанию будет 1.

В синтаксисе Intel это записывается как:

[base + index*multiplier + offset]

Это легче понять, так как это просто математическая задача.

...