RAM direccionable por byte en lugar de RAM direccionable por palabra

0

Hace un par de meses comencé a trabajar en el desarrollo de mi propia computadora para aprender más sobre su funcionalidad de bajo nivel, el proceso de diseño y la arquitectura detrás de ella. Aunque veo ejemplos reales de otras computadoras, trato de no solo copiarlas, sino que las utilizo como inspiración para desarrollar la arquitectura de mi computadora.

Además de 555 temporizadores CMOS, algunas EEPROM y HM62256 SRAM todo lo demás se supone que ser construido discretamente con circuitos integrados de la serie 74.

Lo planeé para tener una longitud de palabra de 16 bits, pero no pensé en las implicaciones que esto tendría para la RAM en lugar de todos los ejemplos de computadora de 8 bits que he leído.

Mi primer enfoque fue hacer que la memoria RAM fuera direccionable a la palabra, así que conecté las líneas de dirección de dos HM62256 y efectivamente tenía 16 bits almacenados en cada dirección. Esto sería fácil de enviar al bus y trabajar con él, así que desarrollé un conjunto de instrucciones a su alrededor, con un código de operación de 5 bits y los 11 bits restantes, dependiendo del tipo de instrucción que queda para los registros o valores inmediatos.

Mientras hacía más y más investigación, sin embargo, me di cuenta de que la memoria RAM accesible a través de la palabra no parece ser común en las computadoras del mundo real. Todos parecen ser direccionables por byte. Esto no sería un problema para las computadoras de 8 bits, pero si planeo obtener mis instrucciones en un solo ciclo, hacerlo de esta manera sería un problema.

Especialmente mirando ASCII, parece importante tener una forma de almacenar bytes individuales en la RAM, no solo palabras completas. Si tuviera que almacenar caracteres ASCII en direcciones RAM de 2 bytes, habría un 50% de almacenamiento perdido. Podría simplemente ignorar esto y continuar con mis planes, pero también estoy realmente intrigado por cómo se resuelve esto.

¿Cómo puedo obtener varios bytes de una memoria RAM de un byte simultáneamente para usarlos en mi registro de instrucciones? ¿Tendría que leer dos bytes en secuencia y volver a ensamblarlos en una sola instrucción de 16 bits antes de almacenarla en el registro? ¿Qué pasa con otro tipo de datos? ¿La lectura de un valor de 2 bytes me obliga a cargar dos bytes de la RAM manualmente en los registros y volver a ensamblarlos? ¿Hay alguna forma más útil (o más simple) que no pueda imaginar?

Lo siento por la larga lectura de esa breve pregunta, pero gracias por las respuestas.

    
pregunta Padarom

1 respuesta

1

La mayoría de las arquitecturas que se encuentran con esta situación tienen dos (o más) instrucciones diferentes para acceder a bytes o palabras. Si tiene una ruta de datos de 16 bits (tamaño de palabra), eso significa que el hardware fuera de la memoria puede aceptar / entregar 2 bytes en un solo ciclo. Cómo la memoria maneja esto depende de la memoria. Si solo tiene un bus de datos de 8 bits dentro de la unidad de memoria, tendrá que realizar una de las técnicas que sugirió (2 ciclos, 2 transferencias de registros, etc.).

Sin embargo, nunca he visto eso en el hardware moderno porque es una tontería cuando el costo y la tecnología prácticamente no lo requieren. Como nota histórica:

  

El primer procesador de PC, el 8088 de Intel, fue un de 16 bits.   Procesador con un bus de memoria de 8 bits. Y había 386 [bus de datos de 32 bits] con 16 bits [memoria externa]   autobús (386SX). - TurboJ

Ahora, casi todo el hardware práctico tiene memoria (L1) ancho = ancho del procesador. Las instrucciones simplemente elegirán qué hacer con el mapeo. Instrucción de palabra de carga = 1: 1. Byte de carga = 2: 1 (por lo general, hay un rango de instrucciones que determinan qué hacer con el otro byte en la ruta de datos que no se está cargando desde la memoria).

    
respondido por el DrFriedParts

Lea otras preguntas en las etiquetas