В самых первых компьютерах программы писались в машинных кодах и первично вводились в память при помощи тумблеров, отвечающих за состояние каждого бита. Или же задавались напайкой соответствующих битам перемычек в постоянном запоминающем устройстве. Самые опытные программисты знали начальный загрузчик побитово наизусть и могли его ввести с тумблеров по памяти.
Конечно, достаточно тоскливо было вводить с тумблеров начальный загрузчик каждый раз при обнулении памяти, но у первых компьютеров часто были ферритовые запоминающие усстройства, не теряющие содержимое памяти при отключении питания.
Вот такой интерфейс для ввода программ был на машинах до 1960-х годов:
(кстати, это пульт системы IBM S/360 – первого компьютера, в котором придумали делить память на байты, благодаря чему видны группы по 8 тумблеров).
Потом, имея такую введённую по битам программу (начальный загрузчик), можно было с её помощью уже вводить, например, с перфоркарт другие программы на машинном языке, не манипулируя битами. В конечном итоге на машинном языке были написаны первые трансляторы с ассемблера, затем на ассемблере – первые трансляторы с языка высокого уровня. А имея транслятор с языка высокого уровня на одной машине, можно уже его дописать таким образом, чтобы он генерировал машинный код для другой машины, и на этой второй машине не повторять полностью всю цепочку.
Сейчас, разумеется, все программы для новых компьютеров поначалу пишутся при помощи старых компьютеров.
Весь этот процессс развёртывания выполнения сложных программ при помощи многоэтапного усложения от самых простых называется bootstraping, или раскрутка.
Вадим, спасибо Вам за интереснейший ответ на уровне лекции. И за фото ЭВМ с Эрикой в правом нижнем углу.
Ничего особенного. Я сам написал довольно приличный компилятор в кодах 580-го микропроцессора. Редактор вводился с перфоленты, разбросанной по полу. Было очень увлекательно. Сегодня, конечно, это кажется полным абсурдом.
Агдамов Александр, а как компилировались программы без компиляторов? И ещё, как самих компиляторов компилируют?
Аналогично писал дизассемблер для Радио РК86 и драйвер для принтера СМ6337. В тетрадке строчки типа
4A MOV C,D
3C INR D
то есть шестнадцатеричный код команды и его расшифровка.
Затем последовательный ввод в ячейки памяти, вручную каждое число. Запуск, и на печать выходит вполне удобоваримый для понимания текст на языке ассемблер. Это было время, когда каждый бит можно было подержать в руке. Романтика
CD 4A 35 - Вызов подпрограммы по адресу 4A35. ... или 354A - уже забыл... :-(
C3 4A 35 - безусловный переход по этому же адресу.
FF - RST 7 - очень часто исполняемая команда, т.к. незапрограммированая область ПЗУ содержит именно коды FF.
Не давно пришлось программировать 556рт5 на программаторе 815. Данные как раз вводятся именно побитно. Три часа и две испорченные микросхемы. но программа записана. Скажу вам, весьма увлекательная процедура.
Александр К, Ну 512 байт можно конечно и ручками, особенно если на голом 815.
Но по мне проще было сварганить RT-prog и на чем нибудь, что под руку подвернется (хоть на бейсике) набросать генератор бинарников из логических выражений. А 815-ый гроб убрать на полку, чтоб не спотыкаться :D
О, Боже, вы раскрыли мне секрет все моей жизни. Спасибо большое!
Ууууууу шайтан программа
Всеравно ничего не понимаю ;(
Это действительно очень интересно, спасибо. А как нужно было понять что комбинация из тумблеров сможет создать необходимое...это ведь просто ноль и единица, из которых даже простую команду не представляю как сложить...я даже затрудняюсь правильно задать вопрос)...как люди пришли к тому что тумблеры, дающие ноль и один, смогут сложиться в (не знаю...) MS DOS))?
Хоб Энегерек, ну так компьютер устроен. MS DOS состоит из операторов языка Си, которые транслируются в последовательности машинных команд. А машинные команды имеют числовые коды, которые представляются в двоичной системе. И именно с этими числовыми кодами в двоичной системе как раз и работает процессор компьютера. Например, 10100001 означает “загрузить значение из записанного дальше адреса памяти в регистр A” и т.д.
Интересная статья,но как по мне было мало информации.Спасибо за ответ!
Точный ответ именно на поставленный вопрос "Как .... написали программы.. без программ" звучит так:
"На бумаге". Я один из первых. Рисуешь блок-схему и потом...уже на чем есть - механические перемычки, электрические перемычки, перфокарты, перфоленты... ну и далее, по нарастающей.
Константин Бояринцев, ну, тут можно упереться в терминологический спор, можно ли считать непроверенный текст на бумажке написанной программой. Как я понял автора вопроса, его интересовало всё-таки возникновение работающего в компьютере кода.
Я одна офигела от заголовка?
Вот так и "раскручивается" искусственный интеллект. Сначала биты, потом один другого, потом другой третьего... Через несколько десятилетий раскрутится так, что человека задвинет.
Вряд ли. ИИ пока не создан.
Для ЭВМ не пробовал, а вот для станка с чпу в конце 80-х доводилось "набивать" программу на перфоленте вручную специальным дыроколом.Необходимо было уметь читать программу с перфоленты "по дырочкам".
Я в училище с перфокарт программы читал, пока не поставили перфоратор, где вверху перфокарты печатался листинг.
Я работаю программистом с 1971. В начале своей карьеры писал программы для БЭСМ-4 в машинных кодах. Ввод через перфокарты. До этого будучи студентом мехмата МГУ работал на Урале 2 (ввод данных через перфорированную кинопленку) и Днепр 1 ввод через тумблеры. Сейчас работаю удаленно.
Как можно удаленно тумблерами щелкать-то и перфоленту заправлять?)))
Первый Бейсик для ПК Альтаир Билл Гейтс и Пол Аллен писали на мини-компьютере PDP-11. Гейтс писал интерпретатор Бейсик, а Аллен написал эмулятор ПК Альтаир для PDP-11 (грешным делом, не помню, какая там стояла ОС), на PDP-11 их могло быть несколько). При запуске такого эмулятора, программы для Altair воспринимали его как ПК Altair и могли работать.