Articles

Vad är ackumulator?


Bästa svaret

En ackumulator är ett objekt som stegvis håller reda på summor, räkningar som behövs för effektiv beräkning av medel, standardavvikelse, minuter , max osv. snarare än att behöva räkna om varje gång.

Svar

Låt mig förfina din fråga något: Vad är skillnaden mellan en ackumulatorinstruktionsuppsättningsarkitektur och en allmän instruktionsuppsättningsarkitektur?

Dessa representerar två punkter i designrummet för instruktionsuppsättningar. Tänk på vad en CPU-instruktion behöver göra. För närvarande överväger bara beräkningsinstruktioner . Som ett minimum måste den tillhandahålla följande information:

  • Vilken beräkning ska utföras (lägg till, subtrahera, flytta, jämför)
  • Vilka värden ska beräkningen utföras på ( ingångarna till beräkningen)
  • Var ska man placera resultatet (beräkningen)

Till exempel om jag skrev programnivå på hög nivå X = Y + Z, du måste be processorn att hämta värdena i Y och Z, lägga till dem och skriva resultatet till X.

I en ackumulatorarkitektur, mest beräkningsinstruktioner fungerar på ett specialregister som kallas ackumulatorn. De flesta operationer har därför ackumulatorn som ett implicit argument för instruktionen. Ackumulatorn ger antingen en ingång till instruktionen, tar emot utmatningen från instruktionen eller båda. För att utföra X = Y + Z på en ackumulatorbaserad maskin skulle instruktionssekvensen se ungefär så ut:

  • Ladda Y i ackumulatorn
  • Lägg till Z i ackumulatorn
  • Lagra ackumulator i X

Om jag hade ett mer komplext uttryck, till exempel ”I = J + K + L + M + N + O ”, sekvensen kan se ut så här:

  • Ladda J i ackumulatorn
  • Lägg K till ackumulatorn
  • Lägg till L i ackumulator
  • Lägg M till ackumulatorn
  • Lägg N till ackumulatorn
  • Lägg O till ackumulatorn
  • Lagra ackumulator till I

Eftersom de flesta operationer involverar ackumulatorn behöver du inte ägna några opkodbitar för att specificera den. Som jag nämnde tidigare är ackumulatorn underförstådd . I själva maskinen kan ackumulatorn också byggas in i själva aritmetikenheten, vilket förenklar hårdvaran.

I en allmänt registerarkitektur beräknar du instruktioner s tar flera argument för att ange vilka register att läsa värden från. Detta gör dem mer flexibla. Men flexibiliteten kostar: Du behöver fler opkodbitar för att ange vilka register du ska arbeta med, och du måste tillhandahålla banor för alla dessa register till aritmetiska enheten.

För exemplet ovanstående uttryck slutar koden inte se mycket annorlunda ut:

  • Ladda Y i register R0
  • Ladda Z i register R1
  • Lägg till R0 till R1, sätt resultatet i R2
  • Lagra R2 till X

Registermaskiner för allmänna ändamål börjar visa en fördel när du kan behålla värden i register över många operationer. Antag till exempel att jag ville köra det här lite mer komplicerade programmet:

X = A + B

Y = A - B

I en ackumulatormaskin skulle jag behöva ladda om A och B för båda operationerna. I en maskin för allmänt ändamål skulle jag bara ladda A och B en gång.

Inom registermaskiner för allmänna ändamål finns det också flera varianter: (Den här listan är inte uttömmande. Vissa arkitekturer blandar också dessa begrepp. )

  • Registerminne: En operand kommer från ett register och en operand kommer från minnet.
  • Register-Register, 2-adress: Båda operanderna kommer från register, men resultatet måste skriva över en av ingångarna.
  • Register-Register, 3-adress: Båda operanderna kommer från register, och resultatet kan gå till sitt eget register.

X86-processorn är till exempel en Register-Memory-maskin som också erbjuder 2-adresser Register-Register-instruktioner. De flesta RISC-maskiner är 3-adresser Register-Register-maskiner, med separata last- / butiksinstruktioner. Båda är allmänna registermaskiner.

Jämför dem med 6502 , som är en ackumulatormaskin. Mest aritmetik (addition, subtraktion, roterar och skiftar) fungerar på A-registret. De två andra registren, X och Y, stöder endast inkrement, minskning och jämförelse; de används huvudsakligen för indexering av minne och loopräknare.

En tredje arkitekturtyp som du inte nämnde är stackarkitekturen . En stackarkitektur liknar en ackumulatorarkitektur genom att hela beräkningen är fokuserad på en enda punkt. Skillnaden är att en stackarkitektur alltid läser sina argument från en stack och alltid lägger sina resultat på stacken.Både ingångarna och utdata från en beräkningsinstruktion är implicita. Andra instruktioner behöver då hantera att trycka värden på och poppa värden från stacken.

Du hittar inte många stackarkitekturer i faktiska marker. Men de är populära hos tolkar (Java bytecode, till exempel , eller FORTH), och i vissa miniräknare, såsom HP: s RPN-baserade miniräknare.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *