Articles

Ce este acumulatorul?


Cel mai bun răspuns

Un acumulator este un obiect care va ține evidența incrementală a sumelor, numărărilor necesare pentru calculul eficient al mijloacelor, abaterea standard, min. , max etc ,. mai degrabă decât să trebuiască să recalculați de fiecare dată.

Răspundeți

Permiteți-mi să vă perfecționez ușor întrebarea: Care este diferența dintre arhitectura unui set de instrucțiuni de acumulator și o arhitectură de set de instrucțiuni de registru general?

Acestea reprezintă două puncte în spațiul de proiectare pentru seturile de instrucțiuni. Luați în considerare ce trebuie să facă o instrucțiune CPU. Deocamdată, luați în considerare instrucțiunile de calcul . Cel puțin, trebuie să furnizeze următoarele informații:

  • Ce calcul să efectuați (adăugați, scădeți, schimbați, comparați)
  • Pe ce valori să efectuați calculul ( intrările la calcul)
  • Unde se pune rezultatul (rezultatul calculului)

De exemplu, dacă am scris declarația de program la nivel înalt X = Y + Z, trebuie să spuneți procesorului să preia valorile deținute în Y și Z, să le adauge și să scrie rezultatul în X.

Într-o arhitectură de acumulator, majoritatea instrucțiunile de calcul operează pe un registru special numit acumulator. Prin urmare, majoritatea operațiilor au acumulatorul ca argument implicit la instrucțiune. Acumulatorul fie furnizează o intrare la instrucțiune, primește ieșirea din instrucțiune, fie ambele. Pentru a efectua X = Y + Z pe o mașină bazată pe acumulatori, secvența de instrucțiuni ar arăta cam așa:

  • Încărcați Y în acumulator
  • Adăugați Z la acumulator
  • Stocați acumulatorul la X

Dacă aș avea o expresie mai complexă, cum ar fi „I = J + K + L + M + N + O „, secvența ar putea arăta astfel:

  • Încărcați J în acumulator
  • Adăugați K în acumulator
  • Adăugați L în acumulator
  • Adăugați M la acumulator
  • Adăugați N la acumulator
  • Adăugați O la acumulator
  • Stocați acumulatorul la I

Deoarece majoritatea operațiunilor implică acumulatorul, nu trebuie să dedicați niciun bit de cod opțional pentru a-l specifica. După cum am menționat anterior, acumulatorul este implicit . De asemenea, în mașină, acumulatorul ar putea fi încorporat chiar în unitatea aritmetică, simplificând hardware-ul.

Într-o arhitectură de registru de uz general, calculați instrucțiunile s ia mai multe argumente pentru a specifica din ce registre se citesc valorile. Acest lucru le face mai flexibile. Dar flexibilitatea are un cost: aveți nevoie de mai mulți biți de coduri de opțiune pentru a specifica pe ce registre să operați și trebuie să furnizați căi pentru toate aceste registre către unitatea aritmetică.

Pentru exemplele de expresii de mai sus , codul ajunge să nu arate mult diferit:

  • Încărcați Y în registrul R0
  • Încărcați Z în registrul R1
  • Adăugați R0 la R1, punând rezultatul în R2
  • Stocați R2 până la X

Mașinile de înregistrare cu scop general încep să prezinte un avantaj atunci când puteți păstra valorile în registre în mai multe operații. De exemplu, să presupunem că am vrut să rulez acest program puțin mai complicat:

X = A + B

Y = A - B

Într-o mașină cu acumulator, ar trebui să reîncărc A și B pentru ambele operații. Într-o mașină de uz general, aș încărca A și B o singură dată.

În cadrul mașinilor de înregistrare de uz general, există și mai multe varietăți: (Această listă nu este exhaustivă; de asemenea, unele arhitecturi îmbină aceste concepte. )

  • Register-Memory: un operand provine dintr-un registru și un operand provine din memorie.
  • Register-Register, 2-address: Ambii operanzi provin din registre, dar rezultatul trebuie să suprascrie una dintre intrări.
  • Register-Register, 3-address: Ambii operandi provin din înregistrează, iar rezultatul poate merge la propriul registru.

Procesorul x86, de exemplu, este o mașină Register-Memory care oferă și instrucțiuni Register-Register cu 2 adrese. Majoritatea mașinilor RISC sunt mașini de înregistrare-înregistrare cu 3 adrese, cu instrucțiuni separate de încărcare / depozitare. Ambele sunt aparate de înregistrare de uz general.

Comparați-le cu 6502 , care este o mașină de acumulare. Majoritatea aritmeticii (adunarea, scăderea, rotirea și deplasarea) funcționează pe registrul A. Celelalte două registre, X și Y, acceptă doar creșterea, descreșterea și compararea; acestea sunt „utilizate în principal pentru indexarea contoarelor de memorie și de buclă.

Un al treilea tip de arhitectură pe care nu l-ați menționat este arhitectura stivei . O arhitectură de tip stivă este similară cu o arhitectură de acumulator prin aceea că tot calculul este axat pe un singur punct. Diferența este că o arhitectură de stivă își citește întotdeauna argumentele dintr-o stivă și își pune întotdeauna rezultatele pe stivă.Atât intrările cât și ieșirile unei instrucțiuni de calcul sunt implicite. Apoi, alte instrucțiuni trebuie să gestioneze împingerea valorilor și scoaterea valorilor din stivă.

Nu găsești multe arhitecturi de stivă în jetoanele reale. Dar acestea sunt populare în interpreți (cod byt Java, de exemplu , sau FORTH) și în anumite calculatoare, cum ar fi calculatoarele HP bazate pe RPN.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *