Articles

Co to jest akumulator?


Najlepsza odpowiedź

Akumulator to obiekt, który przyrostowo śledzi sumy, liczby potrzebne do wydajnego obliczania średnich, odchylenie standardowe, min , max itp. zamiast konieczności przeliczania za każdym razem.

Odpowiedź

Pozwólcie, że nieco sprecyzuję Wasze pytanie: Jaka jest różnica między architekturą zestawu instrukcji akumulatora a architekturą zestawu instrukcji rejestru ogólnego przeznaczenia?

Reprezentują one dwa punkty w przestrzeni projektowania dla zestawów instrukcji. Zastanów się, co musi zrobić instrukcja procesora. Na razie rozważ po prostu obliczenia . Musi przynajmniej zawierać następujące informacje:

  • Jakie obliczenia wykonać (dodać, odjąć, przesunąć, porównać)
  • Na jakich wartościach wykonać obliczenia ( dane wejściowe do obliczeń)
  • Gdzie umieścić wynik (wynik obliczenia)

Na przykład, jeśli napisałem instrukcję programu wysokiego poziomu X = Y + Z, musisz nakazać procesorowi pobranie wartości przechowywanych w Y i Z, dodanie ich i zapisanie wyniku w X.

W architekturze akumulatorowej większość instrukcje obliczeniowe działają na specjalnym rejestrze zwanym akumulatorem. Dlatego większość operacji ma akumulator jako argument niejawny w instrukcji. Akumulator dostarcza dane wejściowe do instrukcji, odbiera dane wyjściowe z instrukcji lub jedno i drugie. Aby wykonać X = Y + Z na maszynie z akumulatorem, sekwencja instrukcji wyglądałaby mniej więcej tak:

  • Załaduj Y do akumulatora
  • Dodaj Z do akumulatora
  • Przechowaj akumulator do X

Gdybym miał bardziej złożone wyrażenie, takie jak „I = J + K + L + M + N + O ”, sekwencja może wyglądać następująco:

  • Załaduj J do akumulatora
  • Dodaj K do akumulatora
  • Dodaj L do akumulator
  • Dodaj M do akumulatora
  • Dodaj N do akumulatora
  • Dodaj O do akumulatora
  • Przechowaj akumulator do I

Ponieważ większość operacji wykorzystuje akumulator, nie musisz poświęcać żadnych bitów kodu operacji, aby go określić. Jak wspomniałem wcześniej, akumulator to dorozumiany . Ponadto w samej maszynie akumulator mógłby być wbudowany bezpośrednio w samą jednostkę arytmetyczną, upraszczając sprzęt.

W architekturze rejestru ogólnego przeznaczenia, instrukcje obliczeniowe s przyjmują wiele argumentów, aby określić, z których rejestrów mają być odczytywane wartości. Dzięki temu są bardziej elastyczne. Ale elastyczność ma swoją cenę: potrzebujesz więcej bitów kodu operacji, aby określić, które rejestry mają działać, i musisz zapewnić ścieżki dla wszystkich tych rejestrów do jednostki arytmetycznej.

Na przykład wyrażenia powyżej , kod nie wygląda inaczej:

  • Załaduj Y do rejestru R0
  • Załaduj Z do rejestru R1
  • Dodaj R0 do R1, wstawiając wynik w R2
  • Store R2 to X

Maszyny rejestrujące ogólnego przeznaczenia zaczynają wykazywać przewagę, gdy można przechowywać wartości w rejestrach dla wielu operacji. Na przykład załóżmy, że chcę uruchomić ten nieco bardziej skomplikowany program:

X = A + B

Y = A - B

W maszynie akumulatorowej musiałbym przeładować A i B dla obu operacji. Na maszynie ogólnego przeznaczenia załadowałbym A i B tylko raz.

W maszynach rejestru ogólnego przeznaczenia istnieje również wiele odmian: (Ta lista nie jest wyczerpująca; również niektóre architektury łączą te pojęcia. )

  • Register-Memory: jeden operand pochodzi z rejestru, a jeden operand pochodzi z pamięci.
  • Register-Register, 2-address: Oba operandy pochodzą z rejestrów, ale wynik musi nadpisać jedno z wejść.
  • Register-Register, 3-address: Oba argumenty pochodzą z rejestrów, a wynik może przejść do własnego rejestru.

Na przykład procesor x86 jest maszyną typu Register-Memory, która oferuje również instrukcje Register-Register z 2 adresami. Większość maszyn RISC to maszyny rejestrujące i rejestrujące z 3 adresami, z oddzielnymi instrukcjami ładowania / przechowywania. Obie są maszynami rejestrującymi ogólnego przeznaczenia.

Porównaj je z 6502 , który jest maszyną akumulatorową. Większość działań arytmetycznych (dodawanie, odejmowanie, obracanie i przesuwanie) działa na rejestrze A. Dwa pozostałe rejestry, X i Y, obsługują tylko zwiększanie, zmniejszanie i porównywanie; są one używane głównie do indeksowania pamięci i liczników pętli.

Trzecim typem architektury, o którym nie wspomniałeś, jest architektura stosu . Architektura stosu jest podobna do architektury akumulatorowej, ponieważ wszystkie obliczenia koncentrują się na jednym punkcie. Różnica polega na tym, że architektura stosu zawsze odczytuje swoje argumenty ze stosu i zawsze umieszcza wyniki na stosie.Zarówno dane wejściowe , jak i dane wyjściowe instrukcji obliczeniowej są niejawne. Inne instrukcje muszą następnie zarządzać wypychaniem wartości na stos i zdejmowaniem wartości ze stosu.

W rzeczywistych układach nie ma wielu architektur stosu. Jednak są one popularne w interpreterach (na przykład kod bajtowy Java lub FORTH) oraz w niektórych kalkulatorach, takich jak kalkulatory HP oparte na RPN.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *