Компьютер Little Man (LMC) — это очень простая микропроцессорно-компьютерная система, предназначенная для обучения начинающих программированию на ассемблере. Для простоты он представлен не как двоичный компьютер, а как десятичный. Он содержит 100 ячеек памяти, пронумерованных от 0 до 99. Здесь вы можете разместить инструкции и данные программы.
Каждая ячейка может содержать трехзначное десятичное число. Здесь мы можем хранить инструкции для выполнения компьютера или данные для работы. ЦП имеет один аккумулятор, который используется при выполнении арифметических операций. Существует также вход и выход, где вы можете читать пользовательский ввод и записывать выходные данные для пользователя.
Вот простой обзор набора инструкций. Каждая инструкция на самом деле представляет собой просто трехзначное число. Но обычно при программировании приходится иметь дело с буквенными сокращениями, которые легче запомнить. Вот совет о том, как читать описание ниже. Например, команда Add
имеет номер 1xx
. На самом деле это означает, что xx
— это место, куда вы помещаете свой операнд (аргумент). Итак, 142
— это инструкция добавления содержимого ячейки памяти 42 к содержимому аккумулятора.
ADD
1xx добавляет содержимое по адресу xx
в память в аккумулятор.SUB
2xx вычитает содержимое адреса xx
из того, что хранится в аккумуляторе. Сохраните результат в аккумуляторе.STA
3xx сохраняет аккумулятор по адресу xx
в памяти.LDA
5xx с содержимым по адресу xx
в памяти.BRA
6xx переходит к позиции xx
в программе.BRZ
7xx прыгает, если аккумулятор равен нулюBRP
8xx скачок, если аккумулятор равен нулю или выше (положительный).INP
901 заполняет аккумулятор числом из входа.OUT
902 помещает значение аккумулятора в очередь вывода.HLT
000 программа остановки В папке примеров вы можете найти больше примеров программ. Вот пример программы, которая считывает число из входных данных и затем ведет обратный отсчет. Таким образом, если на входе он читает 4, то на выходе он запишет 4, 3, 2, 1 и 0.
INP
OUT
LOOP BRZ QUIT // Jump to QUIT if accumulator is 0
SUB ONE // Subtract from accumulator what is stored in ONE
OUT
BRA LOOP // Jump (unconditionally) to the memory address labeled LOOP
QUIT HLT // Label this memory address as QUIT
ONE DAT 1 // Store 1 in this memory address.
Вы можете взять программу, написанную в качестве примера, сохранить ее в файле и передать это имя файла функции assemble(file)
, которая создаст список трехзначных целых чисел, представляющих вашу программу и данные. Вы можете передать это в функцию simulate!(program, inputs)
для запуска вашей программы. Это приведет к сбросу вывода.
Альтернативно вы можете скопировать и вставить код в один из веб-симуляторов LMC, описанных ниже.
В Интернете можно найти несколько браузерных симуляторов для процессора LMC. Где вы можете пошагово перемещаться по программам и наблюдать в прямом эфире, как работает виртуальный компьютер.
Есть несколько игр, в которые можно играть, основанных на небольших вариациях идеи LMC. Потенциально это хороший способ вовлечь детей в изучение программирования.