Confusión entre tamaño de registro, tamaño de dirección, tamaño de datos

Empecé a aprender sobre punteros en C++ y pensé que debería informarme un poco sobre cómo funciona la memoria y cómo se accede a ella. Leí que cuando decimos que un procesador es de 64 bits, tiene un registro de 64 bits y puede acceder a 2^64 ubicaciones de direcciones. También leí que puede obtener 64/8, es decir, 8 bytes de datos a la vez, pero el bus de datos no es lo mismo que el registro, ¿verdad? ¿Tienen que ser del mismo tamaño o suele ser así? ¿Y es el tamaño del registro o el tamaño del bus de datos lo que determina a qué nos referimos, como 32/64 bits? ¿También hay una diferencia entre el tamaño del registro y el tamaño de la dirección?

Hay tantas diferencias y variantes y variaciones que casi no vale la pena tratar de considerar cómo se relacionan.

Respuestas (2)

Cuando se refiere a 64 bits o 32 bits, no es necesario que implique ningún ancho de registro o ancho de bus solo. Puede multiplexar un bus de modo que lea 64 bits en dos lecturas o cuatro lecturas, etc. El diseño de una CPU puede ser tan creativo como el ingeniero detrás de los bloques lógicos. Un buen ejemplo es el 8086 con un espacio de direcciones de 20 bits y un bus de datos de 16 bits. El software que escribe en C++ se envuelve sobre muchas capas de compilación y máquinas de estado de hardware de modo que se abstrae. En el diseño RISC, encontrará que el ancho de los registros y el ancho de la ALU casi siempre tienen el mismo ancho, pero en el diseño CISC, este no es necesariamente el caso.

-1: cuando llamamos a una máquina N bits que en su mayoría no se refiere al espacio de direcciones de la memoria (¡eso clasificaría todos los 8 bits clásicos como 16 bits!), sino al ancho dominante de la ALU, la ruta de datos y los registros.
Wouter tiene razón. Esta respuesta es completamente incorrecta. La mayoría de las CPU de 8 bits tienen entre 11 y 16 bits de espacio de direcciones. Entonces tienes el problema de que las máquinas de Harvard tienen diferentes espacios de direcciones para programas y datos.
Ok, me retracto de que se refiere principalmente al espacio de direcciones. Esa no era una parte importante del punto que estaba diciendo, por lo que no está "completamente mal". En los sistemas Intel decimos 64 bits/32 bits porque estamos interesados ​​en el espacio de direcciones de la memoria. Si la CPU usa registros de 32 bits, no significa que no pueda admitir matemáticas de 64 bits. Si está utilizando un microprocesador, es más consciente del hardware real, en cuyo caso especificarán cuál es el ancho de la dirección y cuál es el ancho de los datos. En diseños de CPU CISC más complicados, trabaja en cierto nivel de abstracción incluso en código ensamblador.

El ancho del procesador estará definido por el ancho de los registros internos. La ALU podrá tramitar los registros directamente. El ancho del bus de datos y la capacidad de direcciones rara vez definen los bits del procesador.

PD: un compilador de 32 bits y un compilador de 64 bits dan resultados diferentes en una máquina de 64 bits.

La ALU no necesita tener el mismo ancho que el espacio de direcciones. Puede usar bits de ejecución y sumas, restas y multiplicaciones sucesivas para diseñar un circuito que se comporte como si el ancho de la dirección fuera el mismo que el ancho de la ALU y los registros, etc. Mire el Intel 8086.
@ Matt Sí. ALU no necesita tener el mismo ancho que el espacio de direcciones
ALU ni siquiera necesita tener el mismo ancho que los registros. Todo depende de la implementación, pero si los diseñadores incluyen un diagrama, puede confiar en él como referencia. Puedo diseñar un registro de 32 bits y una ALU de 16 bits usando máquinas de estado y lograr algo que se sienta como si fuéramos de 32 bits