Si una dirección RAM contiene 8 bits, ¿contiene códigos de operación y operandos en la misma dirección? Si una dirección de memoria es de 8 bits y tiene un tipo de datos de 32 bits, ¿cargará la CPU los 4 bytes automáticamente?

Con frecuencia se supone que la memoria contiene ocho bits por dirección (donde la dirección tiene una longitud arbitraria), pero eso es solo una convención basada en familias de CPU populares de los últimos 30 años más o menos. El hardware de memoria puede construirse para contener cualquier número de bits por dirección, desde 1 hasta el máximo que desee, y de hecho existen tales dispositivos, y en un FPGA generalmente puede definir que la memoria de bloque sea de cualquier ancho de datos dado y la longitud de la dirección que desee.

Con eso fuera del camino, ¿qué se guarda en la memoria? De nuevo, eso es un artefacto de una arquitectura de CPU dada:

En una CPU llamada Harvard Architecture, hay dos conjuntos de memoria completamente independientes, uno que contiene solo instrucciones y otro para datos que pueden ser manipulados por el programa y la CPU impone una separación estricta de los dos. En una arquitectura “Princeton” (p. Ej., CPU típicas de Intel), hay un único espacio de direcciones y el contenido puede ser cualquiera.

En ambos tipos, las instrucciones particulares pueden incorporar datos directamente dentro del flujo de instrucciones, como cargar un registro con un valor constante. Se decide que una instrucción diferente significa usar el valor constante como una dirección de memoria para ir a leer / escribir los datos desde (o hacia). Otro más dirá que use el valor en un registro particular como la dirección en lugar de una dirección constante incrustada en la instrucción misma. Y así sucesivamente, la indexación es el siguiente tipo de acceso a memoria popular. (Valor de registro + otro valor de la memoria o un registro = dirección final que se utilizará). En la versión de Harvard, la memoria de datos simplemente se supone en todos estos casos, y la dirección utilizada al acceder a la memoria de instrucciones solo puede verse afectada por el flujo secuencial normal del contador del programa y las instrucciones de salto que lo cambian.

Por último, a su pregunta sobre el tamaño de los datos, una vez más, el conjunto de instrucciones de la CPU dicta lo que puede hacer. Intel x86 le permite acceder a bytes individuales, palabras y palabras Dwords de 16 o 32 bits, o palabras Q de 64 bits. Al acceder a los tipos más pequeños, se usa un nombre de registro diferente que implica que solo se necesita una parte del registro completo para que coincida con la longitud de los datos. Por ejemplo, EAX de 32 bits también tiene un nombre AX de 16 bits para la mitad inferior, que a su vez tiene AH y AL de 8 bits para las dos mitades de AX. El hardware se encarga de acceder solo a los bytes individuales necesarios en la memoria. En aras de la eficiencia, en los procesadores modernos, todos los 64 bits (4 direcciones adyacentes de 8 bits) de una determinada QWord alineada se leerán simultáneamente desde la memoria principal, incluso si la instrucción solo está interesada en algún subconjunto de los bits, ya que hay un probabilidad de que las instrucciones posteriores usen otras partes, que luego pueden recuperarse más rápidamente de la memoria caché.

Una “dirección” es la ubicación (puntero a) algo en la memoria. Para los abridores, ignoremos el tamaño de ese algo, que podría ser una instrucción de máquina, cualquier modificador de dirección y su operando (s); de lo contrario, es más probable que sea algún tipo de estructura de datos.

En el pasado (1960-70), los mainframes como la serie IBM 7090, la serie GE / Honeywell 600/6000, la serie Univac 1100 y el DEC PDP-10 eran máquinas de palabras de 36 bits. Por defecto, su memoria se direccionó a nivel de palabra, pero cada uno tenía un medio para abordar bits, caracteres u otras subestructuras individuales dentro de las palabras, y los pares de palabras proporcionaron valores enteros de 72 bits o de coma flotante.

Desde entonces, sin embargo, casi todo se trata en el nivel de byte (8 bits), y los tamaños de las direcciones han evolucionado de 8 a 16 a 24 a 32 a 64 bits. Las operaciones de la máquina y las estructuras de datos ocupan tantas mordidas como sea necesario para lo que son, y su “dirección” apunta a un extremo u otro de esos bytes. (Las direcciones “little-endian” apuntan al inicio del elemento, mientras que las direcciones “big-endian” apuntan a su final, o incluso más allá de él).

Demasiado para abordar. La otra mitad de la pregunta pregunta cuánto se obtiene cuando se accede a la memoria. Eso es en gran medida una función del hardware específico en uso. Para el rendimiento, las CPU precomprimen las instrucciones para “canalizarlas”. Mientras se ejecuta la instrucción actual, sus sucesores se decodifican y sus operandos (la memoria en la que también se buscarán). Por supuesto, si hay una instrucción de ramificación por delante, la tubería puede estar “rota”; En respuesta, la CPU puede tener estrategias para anticipar sucursales y minimizar sus impactos en el rendimiento.

En cuanto a los datos, las CPU y los controladores de memoria utilizan estrategias de almacenamiento en caché de varios niveles para capturar fragmentos de datos en paralelo desde la RAM (más lenta) a la caché en chip (más rápida) y a la caché de CPU (incluso más rápida).

La respuesta real a la pregunta depende completamente de los componentes específicos del sistema y sus especificaciones. Incluso una implementación barata obtendrá los 32 bits de un operando de 32 bits (y más); el hecho de que su dirección se exprese en una serie de (4 u 8) bytes de 8 bits (que TAMBIÉN se buscarán juntos) en realidad no es un factor.

Una dirección en una CPU moderna no es solo de 8 bits (excepto posiblemente como un desplazamiento a una dirección absoluta de 32 bits o 64 bits), y una dirección no contiene ningún código de operación u operandos. Lo que apunta esa dirección contiene códigos de operación u operandos, o datos arbitrarios, pero supongo que eso fue lo que quiso decir.

Una CPU carga la cantidad de bytes necesarios para llenar un registro de tamaño específico, ya sea 1, 2, 4, 8 bytes. Esto se hace en hardware.

Las instrucciones de la CPU a menudo se extienden en varios bytes. La cantidad correcta para cada instrucción se obtiene automáticamente, nuevamente por hardware.

varios modelos de procesadores tienen buses de datos de diferentes tamaños … los más rápidos y de mayor rendimiento tendrán buses anchos y obtendrán palabras completas de hasta 64 bits a la vez.

Solo el más lento y el más barato obtienen 8 bits a la vez.