Saltar al contenido

Acceso a ubicaciones de memoria de direcciones impares en 8086

Solución:

La memoria de toda la palabra se direcciona con un bus de dirección única. Cuando se lee una palabra de una dirección impar, un byte está en una palabra y el otro en otra. No puede direccionar ambos bytes al mismo tiempo. Incluso si la memoria tuviera un bus de direcciones separado para cada byte, el procesador no tiene los pines para direccionar ambos buses de direcciones al mismo tiempo.

El libro está un poco equivocado, pero intentemos aclararlo. La cosa es que tu pueden poner 125 en el bus de direcciones. Pero tu no poder leer las direcciones 125 y 126 en un solo reloj al hacerlo. Básicamente, esto se debe a que los números 125 y 126 difieren en bits distintos del último bit.

El 8086 tiene 20 líneas de dirección (A19: A0) y 16 líneas de datos (D15: D0). En realidad, las 16 líneas de datos y las 16 líneas de dirección inferiores son los mismos pines, también llamados AD15: AD0. Funcionan como líneas de dirección para la primera parte del ciclo del reloj y líneas de datos para la parte posterior. También es importante para el direccionamiento un pin llamado BHE, “bus high enable”. A0 también funciona como un pin de “habilitación”, como veremos en un momento.

Si el 8086 quiere leer la palabra en las direcciones 124-125, pone 124 en A19: A0 y pone BHE en bajo. Ambos bancos de memoria ven la dirección en A19: A1, y dado que A0 y BHE son señales activas bajas, ambos bancos estarán activos. El banco superior pondrá datos en D15: D8, y el banco inferior pondrá datos en D7: D0, y la CPU obtendrá una palabra completa.

Si el 8086 quiere leer un solo byte en la dirección 124, coloca 124 en A19: A0 y establece BHE alto. Debido a que A0 es bajo (activo), el banco inferior pondrá datos en D7: D0, pero con BHE alto, el banco superior no hace nada.

Si el 8086 quiere leer un solo byte en la dirección 125, coloca 125 en A19: A0 y establece BHE bajo. Debido a que A0 es alto, el banco inferior está inactivo y debido a que BHE es bajo, el banco superior colocará datos en D15: D8.

Y esos son los tres casos que son posibles (A1 alto y BHE alto no habilita ningún banco, por lo que no hace nada). Tenga en cuenta que las líneas A19: A1 son las mismas en los tres casos y no cambian a lo largo de un ciclo de reloj. Si el 8086 quiere leer una palabra en las direcciones 125-126, no puede hacerlo de esta manera, porque esas dos direcciones tienen diferente bits en A19: A1. Necesita hacer dos lecturas, como describe el libro.

Su libro solo considera A19: A1 como parte de “la dirección” y A0 como estrictamente una línea de habilitación, lo que significa que siempre considera que las direcciones de bus son pares. Esto es básicamente la verdad, ya que los bytes pares e impares de una palabra se tratan como una unidad, pero realmente no concuerda con la terminología aprobada por Intel.

De hecho, el 8086 lo hace exactamente de la última manera que usted describe, y tiene que usar dos ciclos de memoria para hacerlo.

Para acceder a la palabra desde la dirección 125, la CPU coloca 125 en el bus de direcciones. Dado que es una dirección impar y solo se necesita un byte alto de esta dirección, el bit de la dirección A0 será 1 y BHE está activo, por lo que solo responde el byte alto de la memoria. A continuación, la dirección 126 se coloca en el bus y, dado que es una dirección par y solo se solicita un byte bajo, A0 será bajo y BHE inactivo, por lo que solo responderá el byte bajo de memoria. Ahora se ha leído una palabra completa de dos direcciones consecutivas, porque no se pudo leer como un acceso de 16 bits desde una única dirección par, donde el bit A0 sería 0 y BHE activo, por lo que se devuelven los bytes bajos y altos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *