%20ao%20final%20do%20endere%C3%A7o%20do%20registrador%20de%20segmento%20para%20obter%20o%20endere%C3%A7o%20do%20segmento%20na%20mem%C3%B3ria%20f%C3%ADsica%3F%20.png)
Por que temos que encontrar um endereço na memória em que haja 20 bits de espaço livre, sendo 16 bits para registro de segmento e 4 bits “Zero”?
Por exemplo, se o registrador CS for 346AH, o segmento de código na memória principal será 346A0H, que tem 20 bits. Por que nós fazemos isso?
Os segmentos de memória têm 64Kbytes (?), o que acontece com o resto do espaço, além desses 20 bits?
Desculpe, não sou muito bom em arquitetura de computadores!
Responder1
Por exemplo, se o registrador CS for 346AH, o segmento de código na memória principal será 346A0H, que tem 20 bits. Por que nós fazemos isso?
Aparentemente você está se referindo asegmentação x86, conforme usado originalmente nas CPUs Intel 8086/88. Este tipo de “segmento” não é universal. Existem outras definições para memória "segmentos".
Em um contexto histórico, você precisa perceber que a memória de silício e (ferrite) costumava ser muito cara. Para combater os caros computadores mainframe, ominicomputadorsurgiu na década de 1970 para fornecer um computador de baixo custo. Esse foco no baixo custo geralmente significava um barramento de endereço de 16 bits (por exemplo, DEC PDP, Data General Nova, HP 21xx) e até 64 KB de memória. Mas à medida que os requisitos do sistema aumentavam, muitas vezes era necessária mais memória.
Foram desenvolvidos esquemas de memória que ainda poderiam usar os endereços existentes de 16 bits, mas ainda assim acessar mais memória.
A técnica mais comum para expandir a capacidade de memória de 64 KB com endereços de 16 bits era usar bancos de memória, ou seja, os bits superiores reais do endereço de memória efetivo são especificados por um registrador de banco. A principal vantagem do uso de bancos de memória é que ele pode ser implementado no subsistema de memória (ou seja, externo à CPU) e, portanto, adaptado a qualquer CPU.
Com o advento dos microprocessadores, os sistemas que utilizam endereçamento de 16 bits (por exemplo, Intel 8051, Zilog Z80) tenderam a evoluir de forma semelhante, ou seja, incorporando memória armazenada.
O endereçamento de segmento usado pelo Intel x86 (e pelo menos um outro sistema que eu conheço) é integrado ao processador e, portanto, mais versátil.
Enquanto um banco de memória só pode ocupar uma região fixa no espaço de memória original, os segmentos x86 fornecem acesso a um espaço de endereço expandido de 20 bits usando um deslocamento de 16 bits combinado com uma especificação de um registrador de segmento.
O endereço do segmento x86 é na verdade um endereço de 20 bits truncado para apenas 16 bits de endereço.
Esse segmento pode começar em qualquer parágrafo (o módulo de endereço 16 é zero).
Daí a necessidade de acrescentar os quatro zero bits truncados para obter o início real do segmento x86 no espaço de memória de 20 bits.
Dependendo domodelo de memória x86, o software x86 poderia usar principalmente "endereços" de 16 bits (assim como o software mais antigo), mas poderia acessar uma memória mais eficaz do que o software de endereço mais antigo de 16 bits.
Os segmentos IOW x86 eram um método de expansão do hardware para um barramento de endereços de 20 bits, mas permitiam que o software usasse principalmente "endereços" de 16 bits e não exigisse aritmética de 20 bits (ou seja, registros e dados de 20 bits).