Assembly x86-64Memória
Modos de endereçamento
[base + índice*escala + desloc] e o lea
Modos de endereçamento de memória
Um operando de memória no x86-64 tem a forma geral [base + índice*escala + deslocamento], onde a escala é 1, 2, 4 ou 8. Nem toda parte precisa estar presente — abaixo, do mais simples ao mais completo. Lembre que lea calcula esse endereço sem tocar na memória, o que o torna útil também para aritmética.
| Modo | Exemplo | Descrição |
|---|---|---|
| Imediato | mov rax, 42 | Uma constante embutida na própria instrução. |
| Registrador | mov rax, rbx | O operando é o valor de um registrador. |
| Direto | mov rax, [0x600000] | Um endereço absoluto de memória. |
| Indireto | mov rax, [rbx] | O endereço está num registrador (ponteiro). |
| Base + deslocamento | mov rax, [rbp - 8] | Registrador base mais um deslocamento constante — variáveis locais. |
| Base + índice*escala | mov rax, [rdi + rcx*8] | Acesso a arrays: escala ∈ {1,2,4,8}. |
| Base+índice*escala+desloc | mov rax, [rdi + rcx*8 + 16] | A forma completa do endereço efetivo do x86. |
| Relativo a RIP | lea rsi, [rel msg] | Deslocamento a partir de RIP — a base do código independente de posição (PIC). |