CARDIAC (CARDboard Illustrative Aid to Computation) — учебное пособие, разработанное Дэвидом Хагелбаргером и Солом Фингерманом для Bell Telephone Laboratories в 1968 году для обучения школьников работе компьютеров . Комплект состоит из инструкции и вырезанного из картона «компьютера».
Компьютер «работает» с помощью карандаша и скользящих карточек. Любая арифметика выполняется в голове человека, управляющего компьютером. Компьютер работает в десятичной системе счисления и имеет 100 ячеек памяти , которые могут хранить числа со знаком от 0 до ±999. Он имеет набор из 10 инструкций, которые позволяют CARDIAC складывать, вычитать, проверять, сдвигать, вводить, выводить и прыгать.
« CPU » компьютера состоит из 4 слайдов, которые перемещают различные числа и стрелки, чтобы поток реального CPU ( мозга пользователя ) двигался в правильном направлении. У них есть один флаг (+/-), на который влияет результат в аккумуляторе.
Память состоит из другой половины картонной выкройки. Всего 100 ячеек. Ячейка 0 — это « ПЗУ », всегда содержащая число «1»; ячейки с 1 по 98 — это « ОЗУ »; доступны для инструкций и данных; а ячейку 99 лучше всего можно описать как « ЭСППЗУ ».
Ячейки памяти содержат десятичные числа со знаком от 0 до ±999 и записываются карандашом. Ячейки стираются ластиком. «Жук» предоставляется для работы в качестве счетчика программ и помещается в отверстие рядом с текущей ячейкой памяти.
CARDIAC имеет 10 инструкций машинного языка . Инструкция представляет собой три десятичных цифры (знак игнорируется) в форме OAA
. Первая цифра — код операции ( O
); вторая и третья цифры — адрес ( AA
). Адресация может быть аккумулятором в абсолютную память, абсолютной памятью в аккумулятор, входом в абсолютную память и абсолютной памятью в выход.
Языки высокого уровня никогда не разрабатывались для CARDIAC, поскольку они противоречили бы одному из предназначений устройства: внедрению концепций программирования на языке ассемблера.
Программы собираются вручную, а затем записываются в соответствующие ячейки памяти.
Код операции | Мнемонический | Инструкция | Описание |
---|---|---|---|
0 | ИНП | Вход | взять число с входной карты и поместить его в указанную ячейку памяти. |
1 | КЛА | Очистить и добавить | очистить аккумулятор и добавить содержимое ячейки памяти в аккумулятор. |
2 | ДОБАВЛЯТЬ | Добавлять | добавить содержимое ячейки памяти в аккумулятор. |
3 | ТАС | Тестовое содержимое аккумулятора | выполняет проверку знака содержимого аккумулятора; если отрицательно, переходит к указанной ячейке памяти. |
4 | СФТ | Сдвиг | сдвигает аккумулятор на x позиций влево, затем на y позиций вправо, где x — старшая цифра адреса, а y — младшая. |
5 | ВНЕ | Выход | взять число из указанной ячейки памяти и записать его на выходную карточку. |
6 | СТО | Магазин | скопировать содержимое аккумулятора в указанную ячейку памяти. |
7 | СУБ | Вычитать | вычесть содержимое указанной ячейки памяти из аккумулятора. |
8 | СПМ | Прыжок | перейти к указанной ячейке памяти. Текущий номер ячейки записывается в ячейку 99. Это позволяет использовать один уровень подпрограмм, возвращая инструкцию в ячейке 99 (в которой «8» жестко закодировано как первая цифра). |
9 | ЧРС | Остановка и сброс | переместить ошибку в указанную ячейку, затем остановить выполнение программы. |
Программы запускаются путем перемещения трех слайдов таким образом, чтобы число в регистре команд совпадало с числом в ячейке памяти, в которой находится ошибка. После этого ошибка перемещается в следующую ячейку памяти. Затем пользователь следует за стрелкой, которая затем сообщает ему, что делать дальше. Это продолжается для всего выполнения программы.