Micro Cosmo
Volte
03/06/96

< Segmentos e Deslocamentos >


O sistema operacional mais usado em nossas máquinas é o DOS (Disk Operating System, ou sistema operacional de disco). Sua sobrevivência, por si só, já é impressionante. Porque de acordo com os padrões modernos, ele está inteiramente ultrapassado. No entanto vem sobrevivendo devido à imensa base instalada (o grande número de máquinas que o usam) e ao impressionante número de programas desenvolvidos para ele. Foi assim que, de remendo em remendo, esta velharia evoluíu até os dias de hoje. E, embora a Microsoft (que o desenvolveu) jure que não, ainda é a base sobre a qual se assenta Windows 95.

O DOS foi desenvolvido para o microprocessador Intel 8088, a CPU do primeiro PC lançado pela IBM em 1981. Um chip cujos registradores internos podiam armazenar apenas 16 bits. E como você sabe, o maior número que “cabe” em 16 bits corresponde a 65535, ou 64K. Combinando esta informação com o que vimos semana passada, é fácil concluir que uma máquina com esta CPU não pode acomodar mais que 65535 posições de memória, ou seja, sua memória RAM não pode passar de 64K (pois endereços maiores que este não “cabem” em seus registradores). E de fato seria assim se a Intel não tivesse desenvolvido um mecanismo engenhoso para ampliar o chamado “campo de memória” (tamanho máximo teórico da memória) do 8088 até 1Mb. Que consistiu em decompor o endereço em duas partes que se somam, o “segmento” e o “deslocamento”, armazenando cada uma em um registrador diferente. Como cada uma delas não pode ultrapassar os 16 bits, ambas cabem nos registradores do 8088. Para encontrar um endereço, acrescenta-se quatro zeros no final do número que exprime o segmento e soma-se ao resultado o valor do deslocamento. Eu sei que esta explicação está demasiadamente condensada, mas é tudo o que cabe aqui. Seja como for, os pontos básicos que nos interessam são dois: a soma do segmento com o deslocamento não pode exceder 1Mb (o maior número binário que pode ser expresso com 20 bits) e o tamanho máximo de um segmento é 64K (que corresponde ao maior número binário que pode ser expresso com 16 bits).

Note que isto se deve apenas a uma limitação do velho 8088, para a qual o DOS foi desenvolvido. O problema é que desgraçadamente esta característica está de tal forma entranhada no DOS que até hoje os usuários do DOS e Windows, mesmo em uma máquina com CPU 486 com seus registradores de 32bits (que podem abrigar endereços de até 4Gb ) sofrem as conseqüências desta limitação do velho 8088 que ninguém mais usa.

B. Piropo