%20al%20final%20de%20la%20direcci%C3%B3n%20del%20registro%20del%20segmento%20para%20obtener%20la%20direcci%C3%B3n%20del%20segmento%20en%20la%20memoria%20f%C3%ADsica%3F%20.png)
¿Por qué tenemos que encontrar una dirección en la memoria en la que haya 20 bits de espacio libre, que tengan 16 bits para el registro de segmento y 4 bits "cero"?
Por ejemplo, si el registro CS es 346AH, el segmento de código en la memoria principal será 346A0H, que tiene 20 bits. ¿Por qué hacemos eso?
Los segmentos de memoria son de 64 Kbytes (?), ¿qué pasa con el resto del espacio, aparte de esos 20 bits?
¡Lo siento, no soy muy bueno en arquitectura de computadoras!
Respuesta1
Por ejemplo, si el registro CS es 346AH, el segmento de código en la memoria principal será 346A0H, que tiene 20 bits. ¿Por qué hacemos eso?
Aparentemente te refieres asegmentación x86, como se usó originalmente en las CPU Intel 8086/88. Este tipo de "segmento" no es universal. Hay otras definiciones de memoria "segmentos".
En un contexto histórico, es necesario darse cuenta de que el silicio y la memoria (ferrita) solían ser muy caros. Para contrarrestar las costosas computadoras centrales, elminiordenadorsurgió en la década de 1970 para proporcionar una computadora de bajo costo. Este enfoque en el bajo costo generalmente significaba un bus de direcciones de 16 bits (por ejemplo, DEC PDP, Data General Nova, HP 21xx) y hasta 64 KB de memoria. Pero a medida que crecían los requisitos del sistema, a menudo se necesitaba más memoria.
Se idearon esquemas de memoria que aún podían usar las direcciones de 16 bits existentes pero podían acceder a más memoria.
La técnica más común para ampliar la capacidad de memoria de 64 KB con direcciones de 16 bits era utilizar bancos de memoria, es decir, los bits superiores reales de la dirección de memoria efectiva se especifican mediante un registro de banco. La principal ventaja de utilizar bancos de memoria es que se pueden implementar en el subsistema de memoria (es decir, externos a la CPU) y, por lo tanto, se pueden adaptar a cualquier CPU.
Con la llegada de los microprocesadores, los sistemas que utilizaban direccionamiento de 16 bits (por ejemplo, Intel 8051, Zilog Z80) tendieron a evolucionar de manera similar, es decir, incorporando memoria almacenada.
El direccionamiento de segmento utilizado por Intel x86 (y al menos otro sistema que yo sepa) está integrado con el procesador y, por lo tanto, es más versátil.
Mientras que un banco de memoria solo puede ocupar una región fija en el espacio de memoria original, los segmentos x86 brindan acceso a un espacio de direcciones expandido de 20 bits utilizando un desplazamiento de 16 bits combinado con una especificación de un registro de segmento.
La dirección del segmento x86 es en realidad una dirección de 20 bits truncada a solo 16 bits de dirección.
Ese segmento puede comenzar en cualquier párrafo (la dirección módulo 16 es cero).
De ahí la necesidad de agregar los cuatro bits cero truncados para obtener el inicio real del segmento x86 en un espacio de memoria de 20 bits.
Dependiendo demodelo de memoria x86, el software x86 podría utilizar principalmente "direcciones" de 16 bits (al igual que el software anterior), pero podría acceder a una memoria más efectiva que el software de direcciones de 16 bits más antiguo.
Los segmentos IOW x86 eran un método para expandir el hardware a un bus de direcciones de 20 bits, pero permitían que el software utilizara principalmente "direcciones" de 16 bits y no requería aritmética de 20 bits (es decir, registros y datos de 20 bits de ancho).