Кіріспе

Компьютердің орталық процессорлық блогында (CPU) аккумулятор – аралық есептеу және логикалық операциялардың нәтижелерін сақтайтын регистр. Аккумулятор сияқты регистр болмаса, әр есептеудің нәтижесін (қосу, көбейту, ығысу және т.б.) кэш жадына немесе негізгі жадқа жазу қажет болар еді, және мүмкін, келесі операцияда пайдалану үшін оны қайтадан оқуға тура келер еді. Жадқа қол жеткізу, аккумулятор сияқты регистрге қол жеткізуден баяу, себебі үлкен негізгі жад үшін қолданылатын технология регистрге қарағанда баяу (бірақ арзан). Алғашқы электрондық компьютерлер аккумуляторлары бар және аккумуляторлары жоқ екі топқа бөлінді. Қазіргі заманғы компьютерлік жүйелерде аккумулятор ретінде жұмыс істей алатын бірнеше мақсатты регистрлер бар, сондықтан бұл термин бұрынғыдай жиі қолданылмайды. Дегенмен, құрылымын жеңілдету үшін, көптеген арнайы процессорлар әлі де бір аккумуляторды пайдаланады.

Аккумуляторлы машиналар

Аккумуляторлы машина, сондай-ақ 1 операндты машина немесе аккумуляторлық архитектуралы процессор – бірнеше тіркелгісі бар процессор түрі, бірақ процессор есептеулердің нәтижелерін көбінесе бір арнайы тіркелгіде сақтайды, ол әдетте «аккумулятор» деп аталады. Дерлік барлық компьютерлер аккумуляторлы машиналар болды, тек жоғары өнімділіктегі «суперкомпьютерлер» ғана бірнеше тіркелгіге ие болды. Кейіннен мейнфрейм жүйелері микрокомпьютерлерге ұступи келіп, аккумуляторлық архитектуралар қайтадан танымал болды, MOS 6502 осының жарқын мысалы. 2014 жылға дейін де танымал болған көптеген 8 биттік микроконтроллерлер, мысалы PICmicro және 8051, аккумуляторлық машиналар болып табылады. Қазіргі заманғы процессорлар әдетте 2 операндты немесе 3 операндты машиналар болып табылады. Қосымша операндар есептеулер үшін қай жалпы мақсаттағы тіркелгілердің (сонымен қатар «жалпы мақсаттағы аккумуляторлар» деп аталады) көз және мақсат ретінде пайдаланылатынын көрсетеді. Бұл процессорлар «аккумуляторлы машиналар» деп есептелмейді. Компьютерлік архитектурадағы бір тіркелгіні аккумулятор ретінде ерекшелейтін ерекшелік – аккумулятор (егер архитектурада болса) арифметикалық нұсқаулар үшін жасырын операнд ретінде қолданылады. Мысалы, процессорда мынадай нұсқау болуы мүмкін: ADD memaddress, бұл memaddress жад орнынан оқылған мәнді аккумулятордағы мәнге қосып, нәтижені аккумуляторға қайтарады. Аккумулятор нұсқауда тіркелгі нөмірімен көрсетілмейді; ол нұсқауда жасырын және нұсқауда басқа тіркелгіні көрсету мүмкін емес. Кейбір архитектуралар кейбір нұсқауларда аккумулятор ретінде белгілі бір тіркелгіні пайдаланады, бірақ басқа нұсқаулар операндарды нақты көрсету үшін тіркелгі нөмірлерін қолданады.

Белгілі аккумуляторлы компьютерлер

ENIAC-тің 1945 жылғы конфигурациясында 20 аккумулятор болды, олар параллель жұмыс істей алды. Әрқайсысы сегіз ондық санды сақтай алады және оған (немесе одан азайтуға) түскен санды қоса алады. PDP 8-де бір ғана аккумулятор болды. HP 2100 және Data General Nova 2 және 4 аккумуляторлы болды. Nova, PDP 8-ге жалғастыру ретінде қарастырылған, бірақ PDP 11 пайдасына қабылданбаған кезде құрылды. Nova төрт аккумулятор ұсынды: AC0–AC3, сондай-ақ AC2 және AC3 офсеттік мекенжайларды беру үшін де қолданылуы мүмкін, бұл тіркелімдерді пайдаланудың әмбебаптығына бағытталған. PDP 11-де System/360 және PDP 10 сияқты 8 жалпы мақсаттағы регистрлер болды; көптеген кейінгі CISC және RISC машиналары бірнеше жалпы мақсаттағы регистрлерді ұсынды. 4004, 8008 және тағы да басқа көптеген 4 биттік және 8 биттік микропроцессорлар көбінесе бір аккумулятормен жабдықталды. 8051 микроконтроллерінде екі аккумулятор бар: негізгі және қосымша, екіншісі тек көбейту (MUL AB) немесе бөлу (DIV AB) нұсқауларында қолданылады; алғашқысы 16 биттік нәтижені екі 8 биттік аккумуляторға бөледі, ал екіншісі бөліндіні негізгі аккумулятор А-да, ал қалдықты қосымша аккумулятор В-да сақтайды. 8008, 8080 және 8086 процессорларының тікелей мұрагері ретінде, қазіргі кезде кең таралған Intel x86 процессорлары әлі де үлкен сандарды көбейту және бөлу үшін негізгі аккумулятор EAX және қосымша аккумулятор EDX-ты пайдаланады. Мысалы, MUL ECX нұсқаулы 32 биттік ECX және EAX регистрлерін көбейтіп, 64 биттік нәтижені EAX және EDX арасында бөледі. Дегенмен, MUL және DIV ерекше жағдайлар болып табылады; басқа арифметикалық-логикалық нұсқаулар (ADD, SUB, CMP, AND, OR, XOR, TEST) EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI регистрлерінің кез келгенін аккумулятор ретінде (яғни сол жақ операнд және мақсат) көрсетуге мүмкіндік береді. Нәтижесінің жоғарғы жартысы қажет болмаса, көбейту үшін де қолдау бар. x86 – аккумуляторлық модельге негізделгеніне қарамастан, өте әмбебап регистрлік архитектура. x86-ның 64 биттік кеңейтілген нұсқасы, x86-64, 8 жалпы регистрдің орнына 16-ға дейін әмбебаптандырылды.