Murilo :P

C++, Computação, Programação, Web e afins :)

Linguagens de Montagem Aula 5 – Memória

with one comment

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

Advertisements

Written by Murilo Adriano

17 de February de 2008 at 21:44

Posted in Assembly, Baixo nível

Tagged with , ,

One Response

Subscribe to comments with RSS.

  1. 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

    8 de November de 2008 at 20:37


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: