Я восприму ваш вопрос буквально и буду обсуждать в основном микропроцессоры, а не компьютеры в целом.
Все компьютеры имеют какой-то машинный код. Инструкция состоит из кода операции и одного или нескольких операндов. Например, инструкция ADD для Intel 4004 (самый первый микропроцессор) была закодирована как 1000RRRR, где 1000 - код операции для ADD, а RRRR - номер регистра.
Самые первые компьютерные программы были написаны вручную, с ручным кодированием цифр 1 и 0, чтобы создать программу на машинном языке. Это затем запрограммировано в чип. Первые микропроцессоры использовали ПЗУ (постоянная память); позже это было заменено EPROM (стираемое программируемое ПЗУ, которое было стерто ультрафиолетовым светом); теперь программы обычно программируются в EEPROM ( «электрически ... - EPROM» , который может быть удален на кристалле) или, в частности, во флэш-память.
Большинство микропроцессоров теперь могут запускать программы из ОЗУ (это в значительной степени стандартно для всех, кроме микроконтроллеров), но в первую очередь должен быть способ загрузки программы в ОЗУ. Как отметил в своем ответе Джоби Таффи, это было сделано с помощью тумблеров для Altair 8080, который работал на Intel 8080 (который последовал за 4004 и 8008). На вашем ПК есть немного ПЗУ, называемое BIOS, которое используется для запуска компьютера и загрузки ОС в ОЗУ.
Машинный язык очень быстро утомляет, поэтому были разработаны программы на ассемблере, которые используют мнемонический язык ассемблера и переводят его, обычно по одной строке кода ассемблера на инструкцию, в машинный код. Таким образом, вместо 10000001, можно написать ADD R1.
Но самый первый ассемблер должен был быть написан на машинном коде. Затем он может быть переписан в своем собственном коде ассемблера, и версия на машинном языке использовалась для его сборки в первый раз. После этого программа могла собраться сама. Это называется начальной загрузкой и выполняется также с компиляторами - они обычно сначала пишутся на ассемблере (или другом языке высокого уровня), а затем переписываются на их собственном языке и компилируются с оригинальным компилятором, пока компилятор не сможет скомпилировать себя.
Поскольку первый микропроцессор разрабатывался задолго до появления мэйнфреймов и миникомпьютеров, а 4004 на самом деле не подходил для работы на ассемблере, Intel, вероятно, написала кросс-ассемблер, который работал на одном из своих больших компьютеров, и перевела код сборки для 4004 в двоичный образ, который может быть запрограммирован в ПЗУ. Еще раз, это распространенный метод, используемый для переноса компиляторов на новую платформу (называемую кросс-компиляцией ).