2012-09-18 2 views
11

Je comprends bien ce que signifie un système 32 ou 64 bits. Donc, fondamentalement, tous les registres ou la longueur des mots est soit 32 ou 64 bits. Pour simplifier, prenons un système de 32 bits et disons que j'écris un programme en C. si je déclare un type int, disons "int a = 5;" alors un emplacement de mémoire d'une longueur de mot est réservé pour var a. Donc, quand jamais je veux y accéder, je peux le faire en utilisant l'adresse de mot pour cet emplacement de mémoire.Comment un seul octet de la mémoire est accessible par la CPU dans une mémoire 32 bits et un processeur 32 bits

Mais disons que j'ai 4 caractères "char a, b, c, d;" puisque c'est un octet chacun d'entre eux sont placés en un seul mot, alors que dois-je faire si je veux accéder uniquement à char b? (dire que la mémoire est adressable octet) maintenant disons b est le troisième octet dans le mot ... Alors comment ça se passe dans le bus? n'est pas le 3ème octet câblé à la 17ème à la 24ème ligne dans le bus? alors qu'arrive-t-il aux 24 autres lignes quand on n'accède qu'à b?

+0

Vérifiez la langue de la machine, le langage d'assemblage, pour cette CPU particulière, en particulier les parties concernant l'adressage de la mémoire et les registres de la CPU. – theglauber

+1

@deepak, Sur les plates-formes 32 bits supportant l'adressage octet, il est possible d'écrire un seul octet en mémoire sans les trois autres octets écrits (selon les signaux Byte Enable désactivés). –

+0

@EricZ, maintenant que se passerait-il si l'octet que je veux est le 2ème octet (compte de départ de zéro) dans la mémoire? Habituellement, lorsque j'accède à un mot de la mémoire, le second octet se place entre les positions de bits 23 à 16 du registre. Mais dans ce cas, il devra atterrir en position 7 - 0. Cela m'embrouille parce que je pensais que le bit 0 de la mémoire est câblé pour atterrir dans le bit 0 du registre, et le bit 31 au bit 31. Je pensais que c'était tout dans les circuits, alors comment un bit qui est censé atterrir à la position 16, atterrira-t-il à la position 0 pendant l'accès aux octets? – deepak

Répondre

3

La réponse à votre question dépend en grande partie du compilateur que vous utilisez et du fonctionnement interne de votre CPU, contrôleur de mémoire et architecture de mémoire (cache et mémoire externe).
Vous avez seulement le contrôle sur le compilateur (en supposant que vous utilisez le compilateur C ou C++). Les compilateurs ont des modes différents pour les cas où vous utilisez des variables qui sont plus petites qu'une taille de mot. Il existe des indicateurs pour l'optimisation de la vitesse et l'optimisation de la mémoire. Selon lequel de ces indicateurs sont activés, le compilateur peut choisir de générer du code qui regroupe les quatre variables (dans votre cas) en un seul mot. Ou le compilateur peut choisir d'allouer un mot de mémoire pour chacune des variables mais utiliser un octet particulier pour stocker la valeur réelle. La façon dont le compilateur va le faire pour chacun des cas est de générer un ensemble différent d'instructions pour le CPU. Dans ce dernier cas, si la variable est lue dans la mémoire, le mot entier est placé sur le bus puis dans un registre général. Dans le premier cas, le mot est placé dans le registre, mais le mot peut être décalé d'un bit et les autres bits peuvent être remis à zéro en utilisant l'opération logique ET. De cette façon, le bon octet va être dans le registre. Ou peut-être que l'architecture de la CPU prend en charge l'accès au niveau des octets dans un mot, auquel cas il s'agira d'une seule opération effectuée par l'unité centrale. En fin de compte, c'est une bonne idée de comprendre ce qui se passe à l'intérieur, mais vous ne vous en soucierez pas car l'ensemble des instructions générées par le compilateur fonctionnera correctement de votre point de vue. La seule fois où vous vous en soucierez, c'est lorsque vous écrivez des logiciels sensibles aux performances. Dans ce cas, vous aurez besoin de connaître les détails de votre CPU et de la mémoire ainsi que les drapeaux supportés par le compilateur.

3

Cela dépend de l'assembleur, il peut choisir de donner un mot de mémoire ou un octet.
Alors maintenant, même si vous avez 4 caractères différents dans le mot, ce qui se passerait, c'est qu'ils sont tous accessibles en même temps, mais seulement celui dont vous avez besoin est opéré. c'est-à-dire que tous viennent dans le processeur à partir de la mémoire, alors seul l'octet que vous voulez est pris en compte, les autres sont rejetés.

Questions connexes