Caracteristica definitorie a computerelor moderne, care le distinge de toate celelalte maşini, este că acestea pot fi programate. Asta presupune că un anumit tip de instrucţiuni (program) poate fi implementat în calculator, care le va procesa. Calculatoare moderne, bazate pe arhitectura von Neumann, au adesea codul maşină în forma unui limbaj de programare imperativ.
În termeni practici, un program de calculator poate fi doar un set de instrucţiuni sau se poate extinde la mai multe milioane de instrucţiuni, la fel ca şi programele pentru procesoare de texte şi browsere web, de exemplu. Un computer tipic modern poate executa miliarde de instrucţiuni pe secundă (gigaflops), şi rareori face o greşeală a lungul mai multor ani de funcţionare. Programele de calculator mari compuse din mai multe milioane de instrucţiuni pot lua echipelor de programatori ani pentru a le scrie, şi, ca urmare a complexităţii sarcinii, aproape sigur conţin erori.
Arhitectura programelor de memorat
(Replica de mici dimensiuni a Small-Scale Experimental Machine (SSEM), primul calculator cu program de memorat din lume, aflat la Muzeul de Ştiinţă şi Industrie din Manchester, Anglia)
Această secţiune se aplică la cele mai multe calculatoare bazate pe maşina RAM.
În cele mai multe cazuri, instrucţiunile de calculator sunt simple: se adaugă un număr la altul, se mută unele date de la o locaţie la alta, se trimite un mesaj la unele dispozitive externe, etc Aceste instrucţiuni sunt citite din memoria calculatorului şi se realizează în general (execută) în ordinea în care s-au dat. Cu toate acestea, există, de obicei, instrucţiuni de specialitate pentru a spune calculatorului să sară înainte sau înapoi într-un alt loc în program şi să continue executarea de acolo. Acestea sunt numite instrucţiuni de „salt”. Mai mult decât atât, instrucţiuni de salt pot fi făcute să se execute în mod condiţionat, astfel că diferite secvenţe de instrucţiuni pot fi utilizate în funcţie de rezultatul unor calcule anterioare sau un eveniment extern. Multe computere sprijină direct subrutinele prin furnizarea unui tip de salt care „aminteşte” locul de la care acesta a sărit şi o altă instrucţiune pentru a reveni la instrucţiunea următoare după instrucţiunea de salt.
Executarea programului ar putea fi asemănat cu a citi o carte. În timp ce o persoană va citi în mod normal, fiecare cuvânt şi linie, în ordine, acestea pot sări uneori înapoi la un loc anterior în text sau poate sări capitole care nu sunt de interes. În mod similar, un calculator poate merge uneori înapoi şi repeta instrucţiunile în unele secţiuni ale programului iar şi iar, până când unele condiţii interne sunt îndeplinite. Aceasta se numeşte fluxul de control în cadrul programului şi este ceea ce permite computerului să efectueze sarcini în mod repetat, fără intervenţie umană.
Comparativ, o persoană care utilizează un calculator de buzunar poate efectua o operaţie aritmetică de bază cum ar fi adăugarea a două numere cu doar câteva apăsări pe buton. Dar, pentru a adăuga împreună toate numerele de la 1 la 1000 i-ar lua mii de apăsări pe buton şi o mulţime de timp, şi cu certitudine aproape va face o greşeală. Pe de altă parte, un calculator poate fi programat pentru a face acest lucru cu doar câteva instrucţiuni simple. De exemplu:
mov No. 0, sum ; set sum to 0
mov No. 1, num ; set num to 1
loop: add num, sum ; add num to sum
add No. 1, num ; add 1 to num
cmp num, #1000 ; compare num to 1000
ble loop ; if num <= 1000, go back to ‘loop’
halt ; end of program. stop running
După ce s-a spus să ruleze acest program, computerul va îndeplini sarcina aditivă repetitivă fără intervenţie umană mai departe. Aproape niciodată nu va face o greşeală, şi un PC modern poate finaliza sarcina în aproximativ o milionime de secundă.
Cod maşină
În cele mai multe calculatoare, instrucţiunile individuale sunt stocate sub formă de cod maşină, fiecărei instrucţiuni atribuindu-i-se un număr unic (cod de operaţie sau opcod pe scurt). Comanda pentru a adăuga două numere împreună ar avea un opcode; comanda de a le multiplica ar avea un opcod diferit, şi aşa mai departe. Cele mai simple computere sunt capabile să efectueze oricare din câteva diferite instrucţiuni; calculatoarele mai complexe au câteva sute de instrucţiuni din care să aleagă, fiecare cu un cod numeric unic. Întrucât memoria calculatorului este capabilă să stocheze numere, se pot stoca, de asemenea, codurile de instruire. Aceasta conduce la faptul important că programe întregi (care sunt chiar listele cu aceste instrucţiuni) pot fi reprezentate ca liste de numere şi pot fi manipulate în interiorul calculatorului în acelaşi mod ca datele numerice. Conceptul fundamental de a stoca programe în memoria calculatorului alături de datele pe care le operează e punctul cheie von Neumann, sau al arhitecturii programului de memorat. În unele cazuri, un calculator poate stoca unele sau toate programele sale în memorie care este ţinută separat de datele cu care operează. Aceasta se numeşte arhitectura Harvard, după computerul Harvard Mark I. Calculatoare moderne von Neumann includ unele trăsături ale arhitecturii Harvard în proiectele lor, cum ar fi cache-ul CPU.
Deşi este posibil să se scrie programe de calculator ca liste lungi de numere (limbaj maşină), această tehnică fiind folosită pe multe alte calculatoare timpurii, este extrem de obositor şi potenţial predispusă la erori în acest sens, în practică, în special pentru programele mai complicate. În schimb, fiecărei instrucţiuni de bază i se poate da un nume scurt care indică funcţia sa şi este uşor de ţinut minte – un mnemonic, cum ar fi ADD, SUB, MULT sau JUMP. Aceste mnemonice sunt colectiv cunoscut sub numele de limbaj de asamblare al unui computer. Conversia programelor scrise în limbaj de asamblare în ceva ce computerul poate înţelege de fapt (limbaj maşină) se face de obicei de către un program de calculator numit de asamblare.
(O cartelă perforată din 1970 care conţine o linie de la un program FORTRAN. Cartela spune:. „Z(1) = Y + W(1)” şi este etichetată „PROJ039” pentru scopuri de identificare)
(Extras din cartea Întreţinerea şi repararea calculatoarelor)