Programar em Assembly com GAS/Modos de Endereçamento

Origem: Wikilivros, livros abertos por um mundo aberto.

Modos de Endereçamento[editar | editar código-fonte]

Endereçamento imediato[editar | editar código-fonte]

Este é o tipo de endereçamento mais simples e que permite atribuir diretamente um valor numérico literal a um registrador ou a uma célula de memória, como nos seguintes exemplos.

movl $80, %eax
movb $-15, %al 
movw $0x42bf, numero
movl $numero, %eax  # Move o valor do símbolo numero

Note-se a necessidade do cifr˜ao (‘$’) antes do valor numérico. Na sua ausência o montador interpretaria os números como endereços de memória.

Endereçamento por Registrador[editar | editar código-fonte]

Endereçamento Direto[editar | editar código-fonte]

Neste modo de endereçamento o operando é designado pelo seu endereço na memória. Aqui não é usado o cifrão (‘$’) para acessar o valor da variável.

Para deixar claro , vamos mover os dados de um determinado endereço da memoria a um registrador.

Exemplo:

movb 0x80484c4, %al
movl meu_valor, %eax 
movb meu_byte, %al

Endereçamento Indireto por Registrador[editar | editar código-fonte]

Um registro contem o endereço do operando. Depois da instrução movl $0x804930c,%ebx as operações do exemplo dão o mesmo resultado que o endereçamento direto.

movb (%ebx), %al 
movw (%ebx), %ax
movl (%ebx), %eax 

Endereçamento Relativo à Base[editar | editar código-fonte]