```asm movb // копировать 1 байт movw // копировать 2 байтa movl // копировать 4 байта movq // копировать 8 байт leaq data, %rbx // загрузить адрес переменной data в регистр rbx ``` ~={yellow}Способы адресации=~ ```asm // Способ 1: прямая адресация movw 0x402008, %ax // скопировать 2 байта (адрес 0x402008) в регистр ax // или по метке movw M, %ax // Способ 2: косвенная адресация // Предварительно загружаем адрес в регистр (3 способа) movq $0x402008, %rbx movq $M, %rbx leaq M, %rbx // Скопировать в регистр %ax значение из памяти по тому адресу // который содержиться в регистре %rbx movw (%rbx), %ax // Можно указать базовое смещение адреса (положительное - вправо, отрицательное - влево) movw 8(%rbx), %ax // Можно указать текущее смещение предварительно загрузив его в регистр leaq data, %rbx movq $8, %rcx movw 0(%rbx, %rcx), %ax // Можно указать базовое и текущее смещение одновременно movw 0(%rbx, %rcx), %ax // Можно указать размер позиции смещения. // Вот здесь он равен 2-ум байтам movw 4(%rbx, %rcx, 2), %ax ``` ~={yellow}Адресация относительно регистра rip=~ %rip - Re-Extended Instruction Pointer - указатель команд. Хранит адрес очередной команды, которая будет выполнена. Если в качестве базового смещения относительно регистра %rip указана метка, то на место этой метки будет поставлено расстояние в байтах от значения %rip до того адреса, который обозначен данной меткой ```bash movb data(%rip), %al ``` **PIC (PIE) - Position Independent Code** Это код, который не зависит от абсолютных адресов. Все ссылки на ячейки памяти относительные (например относительно счетчика команд). Этот код может быть размещен в любой области памяти. Может использоваться при создании динамических библиотек.