Данная задача была предложена на соревновании по программированию среди школьников Нью-Йорка и близлежащих районов -
см. материал на сайте,
задача F: "Microprocessor Simulation". "Вольный" (в смысле не дословный)
перевод с английского выполнен автором данного сайта.
Задание:
Написать программу, которая имитирует работу следующего простого микропроцессора.
- Каждое слово состоит из 4-х бит.
- Адреса состоят из двух слов, причем старшее всегда стоит первым.
- Память состоит из 256 слов.
- Имеется два аккумулятора - A и B, в каждом может хранится одно слово.
- Существует 9 кодов инструкций. Каждая занимает как минимум одно слово, содержащее код инструкции.
4 инструкции имеют аргументы, требующие 2 дополнительных слова.
Для записи каждой из 4-битной цифры используем традиционные шестнадцатиричные цифры.
А вот система инструкций:
| Код | Слов | Описание |
| 0 | 3 |
LD: загрузить в аккумулятор A содержимое ячейки с указанным адресом |
| 1 | 3 |
ST: сохранить содержимое аккумулятора A в ячейку с указанным адресом |
| 2 | 1 |
SWP: обмен содержимого аккумуляторов A и B |
| 3 | 1 |
ADD: сложить содержимого аккумуляторов A и B;
младшую часть суммы поместить в A, старшую - в B |
| 4 | 1 |
INC: увеличить содержимое аккумулятора A на 1;
допускается переполнение: F + 1 = 0 |
| 5 | 1 |
DEC: уменьшить содержимое аккумулятора A на 1;
допускается переполнение: 0 - 1 = F |
| 6 | 3 |
BZ: если аккумулятор A = 0, происходит переход по указанному адресу;
иначе переход игнорируется |
| 7 | 3 |
BR: безусловный переход по указанному адресу |
| 8 | 1 |
STP: стоп (выполнение программы прекращается) |
Микропроцессор всегда выполняет команды по порядку начиная с нулевого адреса,
за исключением переходов).
Примеры программ:
| Программа | Описание |
| 01A8 | Извлечь в аккумулятор A содержимое ячейки 1A и остановиться |
| 01A512F8 | Извлечь в A содержимое ячейки 1A, увеличить на 1,
сохранить в ячейку 2F и остановиться |
Входная информация представляет собой несколько строк длиной ровно 256 символов,
причем первый символ соответствует адресу 00, а последний - FF.
Результат выполнения программы выводится в таком же формате (примеры см.
на оригинальном сайте) .