En dator med lagrade program (engelska: stored-program computer) är en dator där programinstruktioner lagras i ett elektroniskt, elektromagnetiskt eller optiskt åtkomligt minne som datorn kan läsa under körning. Detta skiljer sig från tidigare system där ”programmet” i praktiken bestod av omkopplingar (t.ex. via kopplingspaneler) eller fysiskt matades in via exempelvis hålremsa.
Begreppet används ofta i en snävare betydelse för datorer där instruktioner och data lagras i ett och samma minne (så att program och data kan hanteras mer enhetligt), men i praktiken förekommer även varianter med separata minnen för instruktioner och data.
En dator med lagrade program behöver (i princip) ett minne som kan lagra både programinstruktioner och den data som programmet arbetar med. Detta möjliggör att datorn kan byta uppgift genom att ladda in ett annat program, i stället för att byggas om fysiskt.
Två vanliga arkitekturprinciper kopplas ofta till hur minnet organiseras:
I facklitteratur används ibland ”dator med lagrade program” som synonym till en von Neumann-maskin, men historiker har påpekat att lagrat-program-idén och von Neumann-arkitekturen inte alltid bör sammanblandas.
Som teoretisk föregångare nämns ofta universell Turingmaskin (1936), som visar att en maskin kan beskrivas av en ändlig beskrivning (”program”) och därmed i princip kan emulera andra beräkningar.
Tidiga praktiska datorer kunde vara:
En tidig milstolpe är Manchester Baby (SSEM), som i Wikipedia-litteraturen ofta beskrivs som den första digitala datorn som kunde lagra program i minne (d.v.s. var ”programlagringsbar”).
En annan central maskin är EDSAC i Cambridge, som i svensk Wikipedia beskrivs som den första datorn med lagrade program i reguljär användning och som gjorde sin första beräkning 6 maj 1949.
Vilken dator som ska räknas som ”först” beror på kriterier (t.ex. elektronisk/elektromekanisk, fullskalig drift, var programmet lagras och i vilken mening instruktioner kan behandlas som data). Detta har gjort att vissa påståenden - exempelvis om IBM SSEC - har diskuterats och ifrågasatts i datorhistorisk litteratur.
När en växel eller en kopplingsanläggning styrs av ett lagrat program brukar detta kallas stored program control (SPC). Sådan programstyrning blev viktig i utvecklingen av elektroniska växelsystem under 1900-talets andra hälft.