Oficina
4. A Memória do Computador
Sab 26 Mai 2007 11:21 |
- Detalhes
- Categoria: Sistemas Operacionais
- Atualização: Domingo, 12 Abril 2009 17:29
- Autor: vovó Vicki
- Acessos: 21579
Calculando um endereço de memória
Imagine a memória disponível para o usuário como uma fileira de bits contínuos de 640 Kb de comprimento e que cada bloco tenha 64 Kb de comprimento. Quantas partes de 64 Kb você consegue destacar nesta fileira? Até parece pegadinha
A primeira resposta que vem na cabeça da gente é 16 (mesmo porque já fizemos a conta). Pois é, se você respondeu 16, enganou-se! Imagine a primeira parte começando na primeira posição (a posição 0) e indo até a posição do byte 65.535; a segunda parte começando na segunda posição e indo até 65.536; a terceira parte começando na terceira posição e indo até 65.537 e assim sucessivamente. Só por cusiosidade, seria possível destacar 589.824 partes completas! É claro que usamos o expediente de sobrepor as partes, sempre com um intervalo de 1 byte.
Os engenheiros da Intel resolveram fazer a mesma coisa, só que com intervalos de 16 bytes, e chamaram cada parte de segmento. Portanto, segmento de memória são 65.536 bytes contínuos deslocados em 16 bytes para frente em relação ao início do segmento anterior. Está parecendo uma salada? Pois é isto mesmo que os engenheiros conseguiram fazer! A segmentação da memória ficou assim:
Segmento 0 começa na posição 0 e vai até 65535 Segmento 1 começa na posição 16 e vai até 65551 ... Segmento 100 começa na posição 1600 e vai até 67135 ... Segmento X começa na posição X*16 e vai até X*16 + 65535
Os blocos passaram a ser denominados Segmentos e a posição dentro de um bloco foi chamada de Deslocamento (offset, em Inglês). Convencionou-se indicar com Segmento:Deslocamento o parzinho que aponta uma determinada posição.
Agora um conceito importante: a diferença entre endereço absoluto ou real e endereço segmentado ou relativo. O endereço absoluto é o endereço físico, como se contássemos as posições na memória apontando com o dedo. O endereço segmentado é o indicado pelo parzinho Segmento:Deslocamento.
Talvez um exemplo de como 3 endereços segmentados indicam o mesmo endereço absoluto tire qualquer dúvida. Veja abaixo:
4660:0005 => 4660 x 16 + 5 = 74.565 4656:0069 => 4656 x 16 + 69 = 74.565 4608:0837 => 4608 x 16 + 837 = 74.565
Abra a calculadora do Windows, passe-a para o modo científica e transforme os números acima em hexadecimal (a notação usada com frequência no Assembly). Lembre-se que 16 decimal corresponde a 10 hexadecimal, portanto, basta adicionar um 0 ao hexadecimal para multiplicá-lo por 16. Você deve obter o seguinte:
1234:0005 => 1234 x 10 + 5 = 12340 + 5 = 12345 1230:0045 => 1230 x 10 + 45 = 12300 + 45 = 12345 1200:0345 => 1200 x 10 + 345 = 12000 + 345 = 12345