2012-09-18 78 views
11

Entiendo perfectamente qué significa el sistema de 32 o 64 bits. así que, básicamente, todos los registros o la longitud de la palabra son 32 o 64 bits.Cómo se accede a un solo byte de la memoria mediante la CPU en una memoria de 32 bits y en el procesador de 32 bits

Por simplicidad, tomemos un sistema de 32 bits y digamos que estoy escribiendo un programa en C. si declaro un tipo int diga "int a = 5;" luego, una ubicación de memoria de una longitud de palabra se reserva para var a. así que cuando quiera acceder a él, puedo hacerlo usando la dirección de palabra para esa ubicación de memoria.

Pero digo que tengo 4 caracteres "char a, b, c, d;" dado que es un byte, cada uno de ellos se coloca en una palabra, entonces, ¿qué hago si quiero acceder solo a char b? (diciendo que la memoria es direccionable por byte) ahora diga b es el tercer byte en la palabra ... . Entonces, ¿cómo llega al autobús? ¿No está el 3er byte conectado a la línea 17 a 24 en el bus? entonces, ¿qué pasa con las otras 24 líneas cuando solo se accede a b?

+0

Compruebe el idioma de la máquina, el lenguaje de ensamblaje, para esa CPU en particular, especialmente las partes sobre direccionamiento de memoria y registros de la CPU. – theglauber

+1

@deepak, en las plataformas de 32 bits que admiten el direccionamiento de bytes, es posible escribir un solo byte en la memoria sin los otros tres bytes escritos (de acuerdo con las señales de habilitación de bytes desactivadas). –

+0

@EricZ, ¿qué pasaría si el byte que quiero es el segundo byte (conteo inicial desde cero) en la memoria? generalmente cuando accedo a una palabra de la memoria, el 2do byte cae entre las posiciones de bit 23 - 16 del registro. Pero en este caso tendrá que aterrizar en la posición 7 - 0. Esto me confunde porque pensé que el bit 0 de la memoria estaba conectado para aterrizar en el bit 0 del registro, y el bit 31 en el bit 31. Pensé que era todo en el circuito, entonces ¿cómo podría un bit que se supone que aterriza en la posición de bit 16, aterrizar en la posición 0 durante el acceso de byte? – deepak

Respuesta

3

La respuesta a su pregunta depende en gran medida de qué compilador utiliza y el funcionamiento interno de su CPU, controlador de memoria y arquitectura de memoria (caché y memoria externa).
Solo tiene control sobre el compilador (suponiendo que está utilizando el compilador C o C++). Los compiladores tienen modos diferentes para casos en los que se usan variables que son más pequeñas que un tamaño de palabra. Hay indicadores para la optimización de la velocidad y la optimización de la memoria. Dependiendo de cuáles de esos indicadores estén activados, el compilador puede elegir generar un código que empaquete las cuatro variables (en su caso) en una palabra. O el compilador puede elegir asignar una palabra de memoria para cada una de las variables pero usar un byte particular para almacenar el valor real. La forma en que el compilador lo hará para cada caso es generar diferentes conjuntos de instrucciones para la CPU. En este último caso, si la variable se lee desde la memoria, la palabra completa se coloca en el bus y luego en un registro de propósito general. En el primer caso, la palabra se coloca en el registro, pero luego la palabra se puede desplazar en bits y los otros bits se pueden poner a cero utilizando la operación lógica Y. De esa forma, el byte correcto estará en el registro. O puede ser que la arquitectura de la CPU sea compatible con el acceso de nivel de bytes en una palabra, en cuyo caso será solo una operación realizada por la CPU. Al final, es una buena idea entender lo que sucede dentro, pero no le importará demasiado porque el conjunto de instrucciones generadas por el compilador funcionará correctamente desde su punto de vista. La única vez que te importará es cuando escribes software sensible al rendimiento. En ese caso, necesitará conocer los detalles de su CPU y memoria, así como los indicadores admitidos por el compilador.

3

Depende del ensamblador, puede elegir dar una palabra de memoria o un byte.
Ahora, incluso si tiene 4 caracteres diferentes en la palabra, lo que sucedería es que se accede a todos a la vez, pero solo se opera el que necesita. es decir, todos ingresan al procesador desde la memoria, entonces solo se considera el byte que desea, los demás son rechazados.

Cuestiones relacionadas