Articles

Hvad er akkumulator?


Bedste svar

En akkumulator er et objekt, der trinvist holder styr på summer, optællinger, der er nødvendige for effektiv beregning af midler, standardafvigelse, minutter , max osv. snarere end at skulle genberegne hver gang.

Svar

Lad mig forfine dit spørgsmål en smule: Hvad er forskellen mellem en akkumulatorinstruktions sætarkitektur og en generel registerinstruktions sætarkitektur?

Disse repræsenterer to punkter i designrummet til instruktionssæt. Overvej hvad en CPU-instruktion skal gøre. For øjeblikket skal du bare overveje beregningsinstruktioner . Som et minimum skal den give følgende oplysninger:

  • Hvilken beregning der skal udføres (tilføj, træk, skift, sammenlign)
  • Hvilke værdier beregningen skal udføres på ( input til beregningen)
  • Hvor skal resultatet (beregningens output) placeres

Hvis jeg f.eks. skrev programudtalelsen på højt niveau X = Y + Z, skal du bede processoren om at hente værdierne i Y og Z, tilføje dem og skrive resultatet til X.

I en akkumulatorarkitektur er mest beregningsinstruktioner fungerer på et specielt register kaldet akkumulatoren. De fleste operationer har derfor akkumulatoren som et implicit argument til instruktionen. Akkumulatoren giver enten et input til instruktionen, modtager output fra instruktionen eller begge dele. For at udføre X = Y + Z på en akkumulatorbaseret maskine ser instruktionssekvensen omtrent sådan ud:

  • Læg Y i akkumulatoren
  • Føj Z til akkumulatoren
  • Gem akkumulator til X

Hvis jeg havde et mere komplekst udtryk, såsom “I = J + K + L + M + N + O “, sekvensen kan se sådan ud:

  • Læg J ind i akkumulatoren
  • Føj K til akkumulatoren
  • Føj L til akkumulator
  • Føj M til akkumulator
  • Føj N til akkumulator
  • Føj O til akkumulator
  • Gem akkumulator til I

Da de fleste operationer involverer akkumulatoren, behøver du ikke dedikere eventuelle opkodebit for at specificere det. Som jeg nævnte før, er akkumulatoren underforstået . Også i selve maskinen kunne akkumulatoren bygges lige ind i selve den aritmetiske enhed, hvilket forenkler hardwaren.

I en generel registerarkitektur beregnes instruktioner s tager flere argumenter for at angive, hvilke registre værdier skal læses fra. Dette gør dem mere fleksible. Men fleksibiliteten har en pris: Du har brug for flere opkodebit for at specificere, hvilke registre der skal opereres, og du skal angive stier til alle disse registre til den aritmetiske enhed.

For eksemplet ovenfor udtryk , ender koden med at se ikke meget anderledes ud:

  • Indlæs Y i register R0
  • Indlæs Z i register R1
  • Tilføj R0 til R1, sæt resultatet i R2
  • Gem R2 til X

Registermaskiner til generelle formål viser en fordel, når du kan gemme værdier i registre på tværs af mange operationer. Antag for eksempel, at jeg ville køre dette lidt mere komplicerede program:

X = A + B

Y = A - B

I en akkumulatormaskine skal jeg genindlæse A og B for begge operationer. I en almindelig maskine ville jeg kun indlæse A og B en gang.

Inden for maskiner til almindelige formål er der også flere varianter: (Denne liste er ikke udtømmende; også nogle arkitekturer blander disse begreber. )

  • Registerhukommelse: En operand kommer fra et register, og en operand kommer fra hukommelsen.
  • Register-Register, 2-adresse: Begge operander kommer fra registre, men resultatet skal overskrive en af ​​inputene.
  • Register-Register, 3-adresse: Begge operander kommer fra registrerer, og resultatet kan gå til sit eget register.

x86-processoren er for eksempel en Register-Memory-maskine, der også tilbyder 2-adresse Register-Register-instruktioner. De fleste RISC-maskiner er 3-adresser Register-Register-maskiner med separate belastnings- / butiksinstruktioner. Begge er almindelige registermaskiner.

Sammenlign dem med 6502 , som er en akkumulatormaskine. Mest aritmetik (addition, subtraktion, rotering og forskydning) fungerer på A-registeret. De to andre registre, X og Y, understøtter kun stigning, deklementering og sammenligning; de “bruges hovedsageligt til indeksering af hukommelse og loop-tællere.

En tredje arkitekturtype, som du ikke nævnte, er stakarkitektur . En stakarkitektur svarer til en akkumulatorarkitektur, idet hele beregningen er fokuseret på et enkelt punkt. Forskellen er, at en stakarkitektur altid læser sine argumenter fra en stak og altid lægger sine resultater på stakken.Både input og output fra en beregningsinstruktion er implicitte. Andre instruktioner skal derefter styre skubbe værdier til og poppe værdier ud af stakken.

Du finder ikke mange stakarkitekturer i faktiske chips. Men de er populære i tolke (Java bytecode, for eksempel , eller FORTH) og i visse regnemaskiner, såsom HPs RPN-baserede regnemaskiner.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *