32bit, AT & Синтаксис T/GASConfused об leal. Получает ли он доступ к содержимому адреса памяти?
Я немного смущаюсь между тем, что хранится в регистре. Это значение или это адрес?
Скажем, начало нашей функции имеет это в коде.
movl 12(%ebp), %eax //Get i
leal (%eax,%eax,2), %eax //Compute 3*i
Так 12 (% ebp) не является значением самого i. Он имеет адрес, где значение i фактически находится в памяти. Таким образом, это означает, что & i отправляется в регистр eax.
Следующая строка Leal. Разве это действительно разыскивает адрес, который находится в eax?
Вот что я думаю, что это делает. Речь идет о загрузке адреса и отправке его в регистр% eax.
Если я следую своему определению, действительно ли он принимает & i в eax и умножает его на 2, а затем снова добавляет? Итак, это & i + & i * 2? Очевидно, что это не так. Если & я был FFFF FFF1 (невозможно, но только пример), он будет вычислять адрес, который находится за пределами моего диапазона памяти.
не должна быть линией ...
movl (%eax,%eax,2), %eax
где он будет иметь доступ к ячейке памяти, хранящуюся в EAX и посмотреть, что в этом адресе ими память, я мог бы равняться, скажем, 5, к примеру.
(If you wanted to know the rest of the code, here it is. It's about get an array element's address)
movl 16(%ebp), %edx //Get j
sall $2, %edx Compute //j*4
addl 8(%ebp), %edx //ComputexA+4j
movl (%edx,%eax,4), %eax //Read fromM[xA+4j+12i]
спасибо.