Ya no necesitas buscar más por todo internet porque estás al lugar indicado, contamos con la solución que quieres recibir y sin problemas.
Solución:
Cuando Intel estaba construyendo el 8086, había un caso válido para tener más de 64 KB en una máquina, pero no había forma de que usara un espacio de direcciones de 32 bits. En aquel entonces, incluso un megabyte era un montón de memoria. (¿Recuerdas la cita infame “640K debería ser suficiente para cualquiera”? Es esencialmente una mala traducción del hecho de que en aquel entonces, 1 MB era una locura enorme.) La palabra “gigabyte” no sería de uso común durante otros 15 a 20 años, y no se referiría a la memoria RAM durante otros 5 a 10 años después de eso.
Entonces, en lugar de implementar un espacio de direcciones tan grande que “nunca” se utilizaría por completo, lo que hicieron fue implementar direcciones de 20 bits. Todavía usaban palabras de 16 bits para las direcciones porque, después de todo, este es un procesador de 16 bits. La palabra superior era el “segmento” y la palabra inferior era el “desplazamiento”. Sin embargo, las dos partes se superpusieron considerablemente: un “segmento” es un fragmento de memoria de 64 KB que comienza en (segment) * 16
, y el “desplazamiento” puede apuntar a cualquier lugar dentro de ese fragmento. Para calcular la dirección real, se multiplica la parte del segmento de la dirección por 16 (o se desplaza hacia la izquierda por 4 bits… lo mismo) y luego se suma la compensación. Cuando haya terminado, tiene una dirección de 20 bits.
19 4 0
+--+--+--+--+
| segment |
+--+--+--+--+--+
| offset |
+--+--+--+--+
Por ejemplo, si el segmento fuera 0x8000 y el desplazamiento fuera 0x0100, la dirección real resulta ser ((0x8000 << 4) + 0x0100)
== 0x80100
.
8 0 0 0
0 1 0 0
---------------
8 0 1 0 0
Sin embargo, las matemáticas rara vez son tan claras: 0x80100
puede ser representado literalmente por miles de diferentes segmentos: combinaciones de compensación (4096, si mis matemáticas son correctas).
En la memoria de modo real x86, la dirección física tiene una longitud de 20 bits y, por lo tanto, se calcula como:
PhysicalAddress = Segment * 16 + Offset
Verifique también: Administración de memoria en modo real
Si tienes alguna desconfianza y capacidad de modernizar nuestro reseña te inspiramos dejar una aclaración y con deseo lo interpretaremos.