Я візьму ваше запитання буквально і обговорюю в основному мікропроцесори, а не комп'ютери взагалі.
На всіх комп’ютерах є якийсь машинний код. Інструкція складається з опкоду та одного або декількох операндів. Наприклад, інструкція ADD для Intel 4004 (найперший мікропроцесор) була закодована як 1000RRRR, де 1000 - опкод для ADD, а RRRR - реєстровий номер.
Перші комп’ютерні програми були написані вручну, кодуючи вручну 0 і 0, щоб створити програму машинною мовою. Потім це програмується в чіп. Перші мікропроцесори використовували ПЗУ (пам'ять лише для читання); пізніше це було замінено EPROM (Erasable Programmable ROM, який був стертий УФ-світлом); зараз програми зазвичай запрограмовані на EEPROM ( "Електрично ... - EPROM" , який можна стерти на мікросхемі), або конкретно на флеш-пам'ять.
Більшість мікропроцесорів тепер можуть запускати програми з оперативної пам’яті (це, як правило, стандарт для всього, крім мікроконтролерів), але в першу чергу повинен бути спосіб завантаження програми в оперативну пам’ять. Як вказував у своїй відповіді Джобі Таффі, це було зроблено за допомогою тумблерів для Altair 8080, який працював на базі Intel 8080 (який слідував за 4004 та 8008). У вашому ПК є трохи ПЗУ під назвою BIOS, який використовується для запуску комп'ютера та завантаження ОС в оперативну пам'ять.
Мова машини стає швидко стомлюючим, тому були розроблені програми асемблера, які беруть мнемонічну мову асемблера і переводять її, як правило, один рядок коду складання за інструкцією, в машинний код. Тож замість 10000001 можна було б написати ADD R1.
Але найперший асемблер мав бути записаний у машинному коді. Тоді його можна було б переписати у власний код асемблера, а машинна версія, що використовується для його складання вперше. Після цього програма могла зібратись. Це називається завантажувальним завантаженням, і це робиться і з компіляторами - вони, як правило, спочатку записуються в асемблері (або іншій мові високого рівня), а потім переписуються рідною мовою та збираються з оригінальним компілятором, поки компілятор не зможе скомпілювати себе.
Оскільки перший мікропроцесор був розроблений задовго після того, як з'явилися мейнфрейми та мінікомп'ютери, а 4004 взагалі не підходив для роботи асемблера, Intel, ймовірно, написала крос-асемблер, який працював на одному з його великих комп'ютерів, і переклав код складання для 4004 у бінарне зображення, яке можна запрограмувати в ROM. Знову ж таки, це звичайна методика, яка використовується для порту компіляторів на нову платформу (так звану перехресну компіляцію ).