Notas de Aula - MAC 211 - Laboratório de Programação
Aula anterior (aula 7)
Aula 8 - 18/3/2010
Segmentação de memória
- No 80x86, com registradores de 16 bits, os ponteiros podem apontar para apenas 64KB de memória.
- Para
permitir um endereçamento de mais memória, a Intel resolveu esse
problema usando segmentos de memória e registradores de segmentos.
- CS aponta para o segmento de código
- DS para o segmento de dados
- SS para o segmento da pilha
- ES
é um registrador de segmento extra para manipular registradores de
segmento ou apontar para outro lugar de interese do programador
- A
memória tinha tamanho máximo de 2^20, ou seja 16MB.
- Cada segmento é
espaçado de 16bytes.
- O endereço físico real portanto é calculado
através da seguinte forma:
- 16 * seletor +
deslocamento
- Pode-se usar o formato completo seletor:deslocamento em vários
comandos, por exemplo:
- MOV AX, [ES:DI]
- se o seletor não é
especificado, um segmento padrão é utilizado (p.ex., DS para dados, CS para código e SS para pilha)
- A partir do 80386, os registradores passaram a ter 32 bits
- isso permite o endereçamento de até 4 gigabytes, que passou a ser o tamanho de cada segmento.
- com segmentos tão grandes, a necessidade de usar os registradores de segmentos explicitamente passou a ser menor.
Vamos ler um pouco de código
-
Um uso peculiar de subrotinas: um programa eficiente para impressão de
valores hexadecimais
-
Um programa recursivo em linguagem de montagem para resolver o problema
das torres de Hanoi
- explicação do algoritmo utilizado e aparência da pilha na recursão
- apresentação do código de hanoi.s
e implementação do algoritmo.
- lição de casa: montar e executar o printreg e o hanoi
Próxima aula (aula 9)
Página de MAC211
Página do Fabio
Página do DCC