Linguagens de Montagem Aula 5 – Memória
Segmentação
- Armazenamento de dados – escrever/ler
- Manutenção da pilha – escrever/ler
- Armazenamento de código – ler
Diretiva segment
Modo de uso:
segment .nome
Exemplo:
segment .data
segment .data
Indica o início de declarações pertencentes ao segmento de dados que contém somente dados inicializados.
Exemplo:
segment .data mensagem db "Hello World", 0 erro db "O procedimento não foi executado com sucesso", 0
segment .text
Indica o início de declarações de código (seqüência de instruções).
Exemplo
segment .text global main main: pusha pushf mov eax,1 ...
segment .bss
Indica o início de declarações de dados sem valor inicial.
Exemplo:
segment .bss vetor resd 50 string resb 30
Diretiva de dados
Dados iniciados
- db: define dados em bytes
- dw: define dados em words
- dd: define dados em double words
- dq: define dados em quad words
- dt: define dados em tenbytes
Exemplo:
segment .data msg db "Strings sempre são definidas em bytes", 0 num dd 1515h float dt 151.5
Seqüência
Podemos também declarar seqüência de dados:
Exemplo:
vetorX dd 0, 1, 2, 3, 4, 5 aux dw 77A2h, 1234h
No exemplo acima, reservamos uma word nomeada como aux e colocamos os números 77A2h e 1234h. Como uma word representa apenas 16 bits e o número 77A2h e 1234h tem 32bits cada um, temos o seguinte:
aux = A2h
aux+1 = 77h
aux+2 = 34h
aux+3 = 12h
MSB | [aux+3] 12h | [aux+2] 34h | [aux+1] 77h | [aux] A2h | LSB
Isso ocorre porque o Pentium segue a ordenação little endian. Ítens menos significativos ocupam endereços menores.
Strings na memória
As strings no nasm são delimitadas por aspas duplas (“”). Como já dito acima, strings são definidas em bytes, pois é convertida para o caractere ASCII correspondente. Para compatibilidade com funções C, temos que usar o número 0 (zero [ASCII Null]) ao fim da string.
mensagem db "ucg", 0
Na memória:
mensagem -> | 117 | 99 | 103 | 0 |
Atenção:
Inteiros e ponteiros C são representados como dwords.
Terminamos por hoje. Caso surgir alguma dúvida, na se hesite… Pergunte!
Até a próxima
Você tem que ser monitor de LM também cara, está até escrevendo sobre tal no blog. Estou querendo postar no meu blog depois também alguma coisa sobre LM.
Estou aprendendo uma nova sintaxe este semestre, outro professor orientador (Iamar) e ele utiliza o TASM (Turbo Assembly – Windows) para montar os programas.
Um abraço, visite meu blog.
Diogo
Sábado 8 de Novembro de 2008 em 20:37