A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

4. A Memória do Computador

Sab

26

Mai

2007


11:21

(32 votos, média 4.22 de 5) 


Curiosidades

Existem algumas coisas interessantes que podemos aprender sobre a organização da memória. Conhecer estas características vai ajudar, e muito, o nosso projeto. A partir de agora vou utilizar apenas a notação hexadecimal.

A tabela de vetores de interrupção

Logo no início da área de memória, ou seja, a partir da posição 0000:0000 até a posição 0000:03FF, existem 1024 bytes reservados para uma tabela onde se encontram os endereços segmentados (par segmento:offset) das rotinas de tratamento de interrupções. Neste espaço reservado podem ser armazenados até 256 pares segmento:deslocamento, ou seja, 256 conjuntos de 4 bytes. Adivinhe só onde o processador vem buscar esta informação quando recebe uma requisição de interrupção? É aqui na tabela de vetores de interrupção. Se a interrupção for 0, ele pega o primeiro par; se for 1, ele pega o segundo par; ou seja, se for X pega o par X * 4.

É fácil ficar contando as coisas, mas é meio sem graça. Aposto que você, assim como eu, gosta de ver para crer. Para conferir o que foi dito, basta usar um programa que acompanha o Windows: o DEBUG.EXE. Este programa você encontra no diretório \Windows\system32 e, para rodá-lo, basta dar um duplo clique. Aparece a janela de fundo preto do shell do DOS com um cursor "-". Digite "?" (sem as aspas) e Enter para obter a ajuda do programa.

Debug.exe
Tela de ajuda do debug.exe

Verifique o comando D [range]. Este comando faz um dump (listagem) do que for pedido através do parâmetro range (área). Experimente digitar D 0:0 seguido de Enter:

Dump
Dump do endereço 0:0

Na minha máquina, os primeiros quatro bytes, que se referem ao vetor da interrupção 0, são 68 10 A7 00. Na sua máquina, com boa probabilidade, os números serão diferentes. Bem, existe uma gracinha chamada little endian que faz com que os bytes sejam inseridos na memória "ao contrário". Para que nós, mortais comuns, possamos entender, é preciso inverter suas posições: 68 10 A7 00 representam 00A7:1068, ou seja, segmento 00A7 e deslocamento 1068. Isto quer dizer que a rotina referente à interrupção 0 se encontra no endereço absoluto 00A7 x 10 + 1068, ou seja, 1AD8 (não vamos precisar dele, foi só para treinar).

O segundo quarteto de bytes é 8B 01 70 00, que corresponde a 0070:018B. Apenas por curiosidade, digite U 70:018B e depois Enter. U é o comando para transformar os códigos operacionais em Assembly, ou seja, mostram o código que será executado pela CPU quando receber uma solicitação de interrupção 1 (exceção de debug).

Informações adicionais