Programar em Assembly com GAS/Modos de Endereçamento
Aspeto
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