Я немного смущен тем, как переменные реализованы в Assembly. Я знаю, что следующее объявление создает именованный ячейку памяти в data
разделе программы:Как реализованы переменные сборки?
.section .data
var:
.long 23
Затем вы можете получить доступ к переменной, такие как:
movl var, %eax //read from var location
То, что я не ясно, на то, как выше инструкции фактически реализованы. У меня создалось впечатление, что ссылку на память, даже ссылку на абсолютную память, необходимо было загрузить в регистр до того, как он сможет быть использован.
нужен ли ассемблеру для преобразования выше указаний на нескольких команд, такие как:
leal var, %ebx
movl (%ebx), %eax
Или же ассемблер отслеживать адреса var
и доступ к этому месту, как если бы это были абсолютным немедленный доступ , например:
movl ($addr_of_var), %eax
Нет. У вас есть непонимание требований. Вам не нужно загружать адрес в регистр. Посмотрите инструкцию по инструкции для семейства команд MOV. –