Косвенная адресация
Теперь нам известно как загрузить значение адреса и содержимое памяти.
Но как загрузить содержимое памяти на которое указывает адрес расположенный в памяти или регистре?
Синтаксис AT&T не использует средства подобные "BYTE PTR", которые традиционны для ассемблера Intel.
Для загрузки регистра ebx 32-битным содержимым памяти адрес которого храниться в регистре eax необходимо написать:
movl (%eax), %ebx |
Для добавления смещения к адресу в регистре eax, необходимо использовать это смещение как префикс.
Например, для получения содержимого 4-мя байтами ниже адреса, указанного в регистре eax, следует написать:
movl -4(%eax), %ebx |
или использовать содержимое памяти подобным образом:
movl my_var(%eax), %ebx |
Существует большое количество возможных схем адресации (при необходимости, лучше обратиться к руководству по as) однако того, что перечислено, как правило, достаточно для использования встроенного ассемблера.