Articles

Hva er akkumulator?


Beste svaret

En akkumulator er et objekt som trinnvis holder oversikt over summer, teller som er nødvendige for effektiv beregning av midler, standardavvik, minutter , max etc ,. i stedet for å måtte beregne hver gang.

Svar

La meg avgrense spørsmålet ditt litt: Hva er forskjellen mellom en akkumulatorinstruksjonsarkitektur og en generell registerinstruksjonsarkitektur?

Disse representerer to punkter i designrommet for instruksjonssett. Tenk på hva en CPU-instruksjon trenger å gjøre. Foreløpig er det bare å vurdere beregningsinstruksjoner . Som et minimum må den oppgi følgende informasjon:

  • Hvilken beregning du skal utføre (legg til, trekk fra, skift, sammenlign)
  • Hvilke verdier du skal utføre beregningen på ( inngangene til beregningen)
  • Hvor skal resultatet (beregningens utdata) plasseres

For eksempel hvis jeg skrev programnæringen på høyt nivå X = Y + Z, må du be prosessoren om å hente verdiene som holdes i Y og Z, legge dem til og skrive resultatet til X.

I en akkumulatorarkitektur er de fleste beregningsinstruksjoner fungerer på et spesialregister kalt akkumulator. De fleste operasjoner har derfor akkumulatoren som et implisitt argument til instruksjonen. Akkumulatoren gir enten en inngang til instruksjonen, mottar utgangen fra instruksjonen eller begge deler. For å utføre X = Y + Z på en akkumulatorbasert maskin, vil instruksjonsrekkefølgen se omtrent slik ut:

  • Last Y inn i akkumulatoren
  • Legg Z til akkumulatoren
  • Lagre akkumulatoren til X

Hvis jeg hadde et mer komplekst uttrykk, for eksempel «I = J + K + L + M + N + O «, kan sekvensen se slik ut:

  • Legg J inn i akkumulatoren
  • Legg K til akkumulatoren
  • Legg L til i akkumulator
  • Legg M til akkumulatoren
  • Legg N til akkumulatoren
  • Legg O til akkumulatoren
  • Lagre akkumulatoren til I

Fordi de fleste operasjoner involverer akkumulatoren, trenger du ikke å dedikere noen opcode-biter for å spesifisere den. Som jeg nevnte tidligere, er akkumulatoren underforstått . I selve maskinen kunne akkumulatoren også bygges rett inn i selve den aritmetiske enheten, og forenkle maskinvaren.

I en generell registerarkitektur, beregne instruksjoner s tar flere argumenter for å spesifisere hvilke registre du skal lese verdier fra. Dette gjør dem mer fleksible. Men fleksibiliteten koster: Du trenger flere opkodebiter for å spesifisere hvilke registre du skal operere på, og du må gi stier for alle disse registerene til den aritmetiske enheten.

For eksemplet ovenfor , ender koden ikke med å se mye annerledes ut:

  • Last Y i register R0
  • Last Z inn i register R1
  • Legg R0 til R1, og sett resultatet i R2
  • Lagre R2 til X

Generelle registermaskiner begynner å vise en fordel når du kan beholde verdier i registre over mange operasjoner. Anta for eksempel at jeg ønsket å kjøre dette litt mer kompliserte programmet:

X = A + B

Y = A - B

I en akkumulator må jeg laste inn A og B for begge operasjonene. I en generell maskin ville jeg bare laste inn A og B en gang.

Innen maskiner for generelle formål er det også flere varianter: (Denne listen er ikke uttømmende; også noen arkitekturer blander disse konseptene. )

  • Registerminne: En operand kommer fra et register, og en operand kommer fra minnet.
  • Register-Register, 2-adresse: Begge operandene kommer fra registre, men resultatet må overskrive en av inngangene.
  • Register-Register, 3-adresse: Begge operandene kommer fra registrerer, og resultatet kan gå til eget register.

x86-prosessoren er for eksempel en Register-Memory-maskin som også tilbyr 2-adresse Register-Register instruksjoner. De fleste RISC-maskiner er 3-adresse Register-Register-maskiner, med separate laste- / butikkinstruksjoner. Begge er generelle registermaskiner.

Sammenlign dem med 6502 , som er en akkumulatormaskin. Mest regning (addisjon, subtraksjon, rotasjon og forskyvning) opererer på A-registeret. De to andre registrene, X og Y, støtter bare økning, dekrementering og sammenligning; de brukes hovedsakelig til indeksering av minne- og sløyfeteller.

En tredje arkitekturtype du ikke nevnte er stack-arkitekturen . En stakkarkitektur ligner på en akkumulatorarkitektur ved at all beregning er fokusert på et enkelt punkt. Forskjellen er at en stakkarkitektur alltid leser argumentene fra en stabel, og alltid legger resultatene på stakken.Både inngangene og utgangene til en beregningsinstruksjon er implisitte. Andre instruksjoner må deretter administrere skyve verdier til og poppe verdier ut av bunken.

Du finner ikke mange stakkarkitekturer i faktiske sjetonger. Men de er populære hos tolker (Java bytecode, for eksempel , eller FORTH), og i visse kalkulatorer som HPs RPN-baserte kalkulatorer.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *