2012-09-18 7 views
11

Rozumiem, co oznacza system 32- lub 64-bitowy. więc zasadniczo wszystkie rejestry lub długość słowa są 32 lub 64-bitowe.W jaki sposób jeden bajt pamięci jest dostępny dla procesora w 32-bitowej pamięci i 32-bitowym procesorze?

Dla uproszczenia, weźmy system 32-bitowy i powiedzmy, że piszę program w C., jeśli deklaruję typ int, powiedz "int a = 5;" wówczas lokalizacja pamięci o długości jednego słowa jest zarezerwowana dla var a. więc gdy kiedykolwiek chcę uzyskać do niego dostęp, mogę to zrobić za pomocą adresu słowa dla tej lokalizacji pamięci.

Ale powiedz, że mam 4 znaki "char a, b, c, d;" ponieważ jest to jeden bajt, każdy z nich jest umieszczony w jednym słowie, więc co zrobić, jeśli chcę uzyskać dostęp tylko do char b? (mówiąc, że pamięć jest adresowana bajtowo) teraz powiedzieć, że b jest trzecim bajtem w słowie ... ., jak to się dzieje w autobusie? nie jest trzecim bajtem podłączonym do linii od 17 do 24 w autobusie? co dzieje się z pozostałymi 24 liniami, gdy uzyskuje się tylko dostęp do b?

+0

Sprawdź język urządzenia, asembler, dla danego procesora, szczególnie części dotyczące adresowania pamięci i rejestrów procesora. – theglauber

+1

@deepak, Na platformach 32-bitowych, które obsługują adresowanie bajtów, możliwe jest zapisanie jednego bajtu do pamięci bez pozostałych trzech bajtów (zgodnie z wyłączonymi sygnałami wyłączenia bajtów). –

+0

@EricZ, teraz co by się stało, gdyby bajt, którego chcę, to drugi bajt (liczony od zera) w pamięci? zwykle kiedy uzyskuję dostęp do słowa z pamięci, drugi bajt wyląduje pomiędzy pozycją bitu 23 - 16 rejestru. Ale w tym przypadku będzie musiał wylądować w pozycji 7 - 0. To mnie myli, ponieważ myślałem, że bit 0 z pamięci jest podłączony do wylądowania w bicie 0 rejestru, a bit 31 do bit 31. Myślałem, że to wszystko w obwodzie, więc w jaki sposób bit, który powinien wylądować na pozycji bitu 16, ląduje na pozycji 0 podczas dostępu do bajtu? – deepak

Odpowiedz

3

Odpowiedź na twoje pytanie w dużej mierze zależy od używanego kompilatora i wewnętrznych procesów twojego procesora, kontrolera pamięci i architektury pamięci (pamięci podręcznej i pamięci zewnętrznej).
Masz tylko kontrolę nad kompilatorem (zakładając, że używasz kompilatora C lub C++). Kompilatory mają różne tryby dla przypadków, gdy używasz zmiennych, które są mniejsze niż rozmiar słowa. Dostępne są flagi do optymalizacji prędkości i optymalizacji pamięci. W zależności od tego, która z tych flag jest włączona, kompilator może wybrać generowanie kodu, który pakuje wszystkie cztery zmienne (w twoim przypadku) w jedno słowo. Lub kompilator może przydzielić słowo pamięci dla każdej zmiennej, ale użyć konkretnego bajtu do przechowywania rzeczywistej wartości. Sposób, w jaki kompilator zrobi to dla każdego z przypadków, będzie generował inny zestaw instrukcji dla procesora. W tym drugim przypadku, jeśli zmienna jest odczytywana z pamięci, całe słowo umieszczane jest na magistrali, a następnie w rejestrze ogólnego przeznaczenia. W pierwszym przypadku słowo jest umieszczane w rejestrze, ale wtedy słowo może zostać przesunięte bitowo, a pozostałe bity mogą zostać wyzerowane za pomocą operacji logicznej AND. W ten sposób prawy bajt znajdzie się w rejestrze. Lub może być architektura procesora wspiera dostęp do poziomu bajtów w słowie, w którym to przypadku będzie to tylko jedna operacja wykonywana przez procesor. W końcu dobrze jest zrozumieć, co dzieje się w środku, ale nie będziesz się tym przejmować, ponieważ zestaw instrukcji generowanych przez kompilator będzie działał poprawnie z twojego punktu widzenia. Jedyny czas, który Cię interesuje, to pisanie oprogramowania wrażliwego na wydajność. W takim przypadku musisz znać szczegóły procesora i pamięci, a także flagi obsługiwane przez kompilator.

3

To zależy od asemblera, może wybrać jedno słowo pamięci lub bajt.
Tak więc nawet jeśli masz 4 różne znaki w słowie, to co się stanie, wszystkie są dostępne od razu, ale tylko ten, który jest wymagany, jest obsługiwany. to znaczy, wszystkie z nich wchodzą do procesora z pamięci, wtedy rozważany jest tylko bajt, a pozostałe są odrzucane.

Powiązane problemy