Цель: Разработка своей модели процессора, транслятора и ЯП согласно варианту
- Керпик Артём Витальевич
alg | acc | neum | mc | tick | struct | stream | port | cstr | prob1 | 8bit- Без усложнения
Описание варианта
- alg -- синтаксис языка должен напоминать java/javascript/lua. Должен поддерживать математические выражения.
- acc -- система команд должна быть выстроена вокруг аккумулятора.
- Инструкции -- изменяют значение, хранимое в аккумуляторе.
- Ввод-вывод осуществляется через аккумулятор.
- neum -- фон Неймановская архитектура.
- mc -- microcoded.
- tick -- процессор необходимо моделировать с точностью до такта, процесс моделирования может быть приостановлен на любом такте
- struct -- машинный код в виде высокоуровневой структуры данных. Считается, что одна инструкция укладывается в одно машинное слово.
- stream -- Ввод-вывод осуществляется как поток токенов.
- port -- port-mapped (специальные инструкции для ввода-вывода)
- cstr -- Null-terminated (C string)
- prob1 -- Multiples of 3 or 5
- 8bit -- машинное слово -- 8 бит (как для памяти команд, так и для памяти данных, если они разделены). - не реализовано
- Описание синтаксиса:
<program> ::= <program_line> {<program>}
<program_line> ::= <variable declaration> | <conditional operator> | <loop> | <input> | <output>
<variable declaration> ::= [<type>] <identifier> ["["<integer constant>"]"] "=" <expression> ;
<type> :: = int | str
<id> ::= {<letter>}
<expression> ::= <arithmetic expression> | <id> | <literal>
<conditional operator> ::= if "(" <logical mapping> ")" "{"<telo_operator> "}"
<boolean expression> ::= (<identifier> (< | > | == ) < integer constant>) | (<identifier> % <integer constant> == <integer constant>)
<loop> ::= while ( <logical mapping> ) { <operator's phone number> }
<operator's phone number> ::= <program>
<arithmetic expression> ::= <term> { ( + | - | * | /) <arithmetic expression> }
<term> ::= <identifier> | <literal>
<literal> ::= <integer constant> | <string>
<integer constant> ::= <digit>+
<input> ::= read(<id>);
<output> ::= print(<id>|<string>);
<string> ::='{<any_ character>}'
<any_ character> ::= <letter> | <number> | ...
<letter> ::= a | ... | A ... | Z
<digit> ::= 0 | ... | 9
Описание
- Область видимости: Глобальная
- Статическая типизация.
- Типы данных включают в себя int, str.
- Виды литералов:
- Целочисленные: 123
- Строки: 'hello'
- Переменные хранятся на стеке
Registers
+------------------------------------+
| ACC - аккумулятор |
+------------------------------------+
| CR - регистр инструкции |
+------------------------------------+
| DR - регистр данных |
+------------------------------------+
| IP - счётчик команд |
+------------------------------------+
| SP - указатель стека |
+------------------------------------+
| AR - адрес записи в память |
+------------------------------------+
- Память данных и команд общая (фон Нейман)
- Виды адресации:
- абсолютная
- непосредственная адресация
- косвенная
- Назначение регистров
- ACC -- главный регистр (аккумуляторная архитектура), содержит результаты всех операций, ввод-вывод реализуется с него
- CR -- содержит текущую выполняемую инструкцию
- DR -- вспомомогательный регистр
- IP -- содержит адрес следующей инструкции, которая должна быть выполнена
- SP -- Указтаель на вершину стека
- AR -- содержит адрес, по которому произойдет запись или чтение из памяти
- Циклы выполнения команды:
- Цикл выборки инструкции: 1 такт
- Цикл выборки операнда: 2-3 такта (Зависит от вида адресации)
- Цикл выполнения команды: 1-3 такта
- Константы отсутствуют в языке
- В одном машинном слове хранится 1 символ строкового литерала
- Переменные помещаются на стек
- Строковые литералы хранятся в памяти последовательно
- Если встречается команда print('some'); -- символы внутри print после трансляции хранятся последовательно и представлены командой NOP
- Если встречается конструкция str some_str [number] = 'some' -- в памяти после всех инструкций или после последнего строкового литерала выделяется память длиной number
- Если встречается коснтрукция str some_str = 'some' --в памяти после всех инструкций или после последнего строкового литерала выделяется память длиной строки
- Конструкция str some_str [number] требуется для корректной работы со считыванием данных, так как шанс затирания последующих данных снижается
Особенности процессора:
- Доступ к вводу-выводу происходит через специальные команды READ (1 - Порт для буффера, 2 - Порт для вывода), порты конфигурируются в isa
Цикл команды:
- Выборка инструкции -- mem[IP] -> CR, IP+1 -> IP
- Выборка операнда --
- addr-> AR, mem[AR] -> DR (Абсолютная);
- addr -> DR (Непосредственная);
- addr -> AR, mem[AR] -> AR, mem[AR] -> DR (косвенная)
- Выполнение команды
| Инструкция | Описание |
|---|---|
ST <addr> |
Сохранить в память значение из аккумулятора |
LD <addr> |
Загрузить в аккумулятор значение из памяти |
ADD <addr> |
Сложить значение аккумулятора с значением из памяти, записать в аккумулятор |
SUB <addr> |
Вычесть из значения аккумулятора значение из памяти, записать в аккумулятор |
MUL <addr> |
Умножить значение аккумулятора на значение из памяти, записать в аккумулятор |
DIV <addr> |
Поделить значение аккумулятора на значение из памяти, записать в аккумулятор |
JUMP <addr> |
перейти по адресу |
| PUSH | Сохранить в стек значение аккумулятора |
| NOP | отсутствие операции |
| POP | Загрузить в аккумулятор значение со стека |
CMP <addr> |
Выставить значения флагов при сравнении аккумулятора и значения из памяти |
JE <addr> |
перейти по адресу, если флаг Z == 1 |
JNE <addr> |
перейти по адресу, если флаг Z == 0 |
JA <addr> |
перейти по адресу, если флаг N == 0 |
JB <addr> |
перейти по адресу, если флаг N == 1 |
| HALT | Остановка симуляции |
| INC | Прибавить к аккумулятору 1 |
<addr>-- абсолютная/косвенная/непосредственная адресация
- Машинный код сереализуется в список JSON
- Один элемент списка -- одна инструкция
Пример:
[
{
"index": 0,
"opcode": "Opcode.JUMP",
"arg1": "#",
"arg2": 14
}
]где:
index-- адрес в памятиopcode-- код операцииarg1-- вид адресацииarg2-- аргумент
Типы данных в модуле isa, где:
Opcode-- перечисление кодов операций- 'TypesOfAddressing' -- доступные виды адресации
Интерфейс командной строки: translator.py <input_file> <target_file>
Реализовано в модуле: translator
Этапы трансляции: Трансляция происходит в 3 шага:
- Lexer - разбивает код из <input_file> на токены
- AST - используя токены, строит AST
- translator - используя AST, создаётся машинный код, записывает в виде json в <target_file>
Интерфейс командной строки: machine.py <machine_code_file> <input_file>
Реализовано в модуле: machine.
Datapath
Реализован в machine.
Регистры (соответствуют регистрам на схеме):
ACCDRCRARSPIP
Сигналы:
latch_ar-- защелкнуть адресный регистр (addr->AR | mem[AR] -> AR)latch_acc-- защелкнуть аккумулятор (DR -> ACC | ALU_result -> ACC | mem[sp] -> ACC)latch_ip-- защелкнуть счетчик команд ( IP+1 -> IP | DR->IP)latch_sp-- защелкнуть регистр стека (SP+1-> SP | SP-1 -> SP)latch_dr-- защелкнуть регистр данныхlatch_cr-- защелкнуть регистр команд mem[IP] -> CRlatch_left_op-- ACC -> left_operandlatch_right_op-- ACC -> right_operandsignal_wr-- запись в память ACCcalculate-- выполнить операцию на АЛУget_flags-- Получить флаги с АЛУ
Селекторы для мультиплексоров реализованы с помощью Enum в machine классом Selector
Флаги:
N(negative) -- результат в алу содержит отрицательное числоZ(zero) -- результат в алу содержит ноль
ControlUnit
Реализован в machine.
- Получает из DataPath команду, декодирует её
- Выполняет микрокод:
- Включает в себя сигналы и мультиплексоры для DataPath
- Хранится в отдельной памяти в Control Unit
- Названия каждого бита:
- latch_cr -- защелкнуть адресный регистр
- sel_ip -- Мультиплексор для ip
- latch_ip -- защелкнуть счетчик команд
- sel_ar -- Мультиплексор для ar
- latch_ar -- защелкнуть адресный регистр
- sel_oe -- Мультиплексор для oe
- signal_oe -- сигнал для чтения
- sel_dr -- Мультиплексор для dr
- latch_dr -- защелкнуть регистр данных
- latch_left_op -- -- ACC -> left_operand
- latch_right_op -- ACC -> right_operand
- signal_calculate -- выполнить операцию на АЛУ
- check_flags -- проверка флагов
- sel_acc -- Мультиплексор для acc
- latch_acc -- защелкнуть аккумулятор
- sel_wr -- Мультиплексор для wr
- signal_wr -- сигнал на запись в память
- sel_sp -- Мультиплексор для sp
- latch_sp - защелкнуть SP
- latch_out -- Запись в порт для выхода
- mux_port -- Выбор порта
- latch_in -- Запись в порт для входа
- mux_mPC -- 4 возможных значения
- +1 -- переход к следующей микрокоманде
- 0 -- переход к 0 микрокоманде
- DECODE_OP_FETCH -- декодировать цикл выборки операнда
- DECODE_COMMAND -- декодировать исполнение команды
- latch_mPC -- защёлкнуть счётчик микрокоманд
- Класс MicrocodeMemory в Control unit представляет собой память микроинструкций, на каждом такте происходит считывание очередной микроинструкции и отправки нужных сигналов в DataPath
- 0 ячейка - Instruction Fetch
- 1-7 ячейка - Operand Fetch
- 8-20 ячейки - Выполнение команды
- Метод
process_tickмоделирует выполнение следующего такта - Для журнала состояний процессора используется стандартный модуль
logging - Каждая запись в журнале соответсвует состоянию процессора после выполнения инструкции
- Количество инструкций для моделирования лимитировано
- Остановка моделирования осуществляется при:
- превышении лимита количества тактов
- исключении
HaltError(командаhalt) - Попытке получить данные из пустого буфера
Реализованные программы:
- hello_world -- печатаем 'Hello, World!'
- cat -- программа cat, повторяем ввод на выводе
- hello_usr -- запросить у пользователя его имя, считать его, вывести на экран приветствие
- prob1 -- сумма всех чисел, кратных 3 или 5, меньше 1000.
Интеграционные тесты реализованы в integration_test:
- Стратегия: golden tests, конфигурация в папке golden/
CI при помощи Github Action:
defaults:
run:
working-directory: ./
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install
- name: Run tests and collect coverage
run: |
poetry run coverage run -m pytest .
poetry run coverage report -m
env:
CI: true
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install
- name: Check code formatting with Ruff
run: poetry run ruff format --check .
- name: Run Ruff linters
run: poetry run ruff check .Пример использования и журнал работы процессора на примере cat
- Код:
int n = 0;
str a [20] = '';
read(n);
while (n>0) {
a = a + n;
read(n);
}
print(a);
- Машинный код:
[{"index": 0, "opcode": "Opcode.LD", "arg1": "#", "arg2": 0},
{"index": 1, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 2, "opcode": "Opcode.LD", "arg1": "#", "arg2": 4097},
{"index": 3, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 4, "opcode": "Opcode.LD", "arg1": "#", "arg2": 0},
{"index": 5, "opcode": "Opcode.ST", "arg1": "=", "arg2": 4097},
{"index": 6, "opcode": "Opcode.READ", "arg1": null, "arg2": 1},
{"index": 7, "opcode": "Opcode.ST", "arg1": "=", "arg2": 8095},
{"index": 8, "opcode": "Opcode.LD", "arg1": "=", "arg2": 8095},
{"index": 9, "opcode": "Opcode.CMP", "arg1": "#", "arg2": 0},
{"index": 10, "opcode": "Opcode.JB", "arg1": "#", "arg2": 26},
{"index": 11, "opcode": "Opcode.LD", "arg1": "#", "arg2": 4097},
{"index": 12, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 13, "opcode": "Opcode.LD", "arg1": "~", "arg2": 8093},
{"index": 14, "opcode": "Opcode.CMP", "arg1": "#", "arg2": 0},
{"index": 15, "opcode": "Opcode.JE", "arg1": "#", "arg2": 20},
{"index": 16, "opcode": "Opcode.POP", "arg1": null, "arg2": null},
{"index": 17, "opcode": "Opcode.INC", "arg1": null, "arg2": null},
{"index": 18, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 19, "opcode": "Opcode.JUMP", "arg1": "#", "arg2": 13},
{"index": 20, "opcode": "Opcode.LD", "arg1": "=", "arg2": 8095},
{"index": 21, "opcode": "Opcode.ST", "arg1": "~", "arg2": 8093},
{"index": 22, "opcode": "Opcode.POP", "arg1": null, "arg2": null},
{"index": 23, "opcode": "Opcode.READ", "arg1": null, "arg2": 1},
{"index": 24, "opcode": "Opcode.ST", "arg1": "=", "arg2": 8095},
{"index": 25, "opcode": "Opcode.JUMP", "arg1": "#", "arg2": 8},
{"index": 26, "opcode": "Opcode.LD", "arg1": "#", "arg2": 4097},
{"index": 27, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 28, "opcode": "Opcode.LD", "arg1": "~", "arg2": 8093},
{"index": 29, "opcode": "Opcode.PRINT", "arg1": null, "arg2": 2},
{"index": 30, "opcode": "Opcode.CMP", "arg1": "#", "arg2": 0},
{"index": 31, "opcode": "Opcode.JE", "arg1": "#", "arg2": 36},
{"index": 32, "opcode": "Opcode.POP", "arg1": null, "arg2": null},
{"index": 33, "opcode": "Opcode.INC", "arg1": null, "arg2": null},
{"index": 34, "opcode": "Opcode.PUSH", "arg1": null, "arg2": null},
{"index": 35, "opcode": "Opcode.JUMP", "arg1": "#", "arg2": 28},
{"index": 36, "opcode": "Opcode.POP", "arg1": null, "arg2": null},
{"index": 37, "opcode": "Opcode.HALT", "arg1": null, "arg2": null}]
-
Вывод программы: Sergey
-
Журнал работы:
out_log: |-
INFO processor:simulation Simulation start
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 3 | ip: 1 | dr 0 |ar: 0 | acc: 0 | sp: 8095
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 6 | ip: 2 | dr 0 |ar: 0 | acc: 0 | sp: 8094
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 9 | ip: 3 | dr 4097 |ar: 0 | acc: 4097 | sp: 8094
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 12 | ip: 4 | dr 4097 |ar: 0 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 15 | ip: 5 | dr 0 |ar: 0 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 19 | ip: 6 | dr 0 |ar: 4097 | acc: 0 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> S
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 23 | ip: 7 | dr 0 |ar: 4097 | acc: 83 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 27 | ip: 8 | dr 0 |ar: 8095 | acc: 83 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 31 | ip: 9 | dr 83 |ar: 8095 | acc: 83 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 34 | ip: 10 | dr 0 |ar: 8095 | acc: 83 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 37 | ip: 11 | dr 26 |ar: 8095 | acc: 83 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 40 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 43 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 48 | ip: 14 | dr 0 |ar: 4097 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 51 | ip: 15 | dr 0 |ar: 4097 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 55 | ip: 20 | dr 20 |ar: 4097 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 59 | ip: 21 | dr 83 |ar: 8095 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 64 | ip: 22 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 69 | ip: 23 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> e
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 73 | ip: 24 | dr 4097 |ar: 4097 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 77 | ip: 25 | dr 83 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 80 | ip: 8 | dr 8 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 84 | ip: 9 | dr 101 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 87 | ip: 10 | dr 0 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 90 | ip: 11 | dr 26 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 93 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 96 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 101 | ip: 14 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 104 | ip: 15 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 107 | ip: 16 | dr 20 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 112 | ip: 17 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 115 | ip: 18 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 118 | ip: 19 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 121 | ip: 13 | dr 13 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 126 | ip: 14 | dr 0 |ar: 4098 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 129 | ip: 15 | dr 0 |ar: 4098 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 133 | ip: 20 | dr 20 |ar: 4098 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 137 | ip: 21 | dr 101 |ar: 8095 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 142 | ip: 22 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 147 | ip: 23 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> r
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 151 | ip: 24 | dr 4098 |ar: 4098 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 155 | ip: 25 | dr 101 |ar: 8095 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 158 | ip: 8 | dr 8 |ar: 8095 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 162 | ip: 9 | dr 114 |ar: 8095 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 165 | ip: 10 | dr 0 |ar: 8095 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 168 | ip: 11 | dr 26 |ar: 8095 | acc: 114 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 171 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 174 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 179 | ip: 14 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 182 | ip: 15 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 185 | ip: 16 | dr 20 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 190 | ip: 17 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 193 | ip: 18 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 196 | ip: 19 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 199 | ip: 13 | dr 13 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 204 | ip: 14 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 207 | ip: 15 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 210 | ip: 16 | dr 20 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 215 | ip: 17 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 218 | ip: 18 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 221 | ip: 19 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 224 | ip: 13 | dr 13 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 229 | ip: 14 | dr 0 |ar: 4099 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 232 | ip: 15 | dr 0 |ar: 4099 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 236 | ip: 20 | dr 20 |ar: 4099 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 240 | ip: 21 | dr 114 |ar: 8095 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 245 | ip: 22 | dr 0 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 250 | ip: 23 | dr 4099 |ar: 4099 | acc: 4099 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> g
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 254 | ip: 24 | dr 4099 |ar: 4099 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 258 | ip: 25 | dr 114 |ar: 8095 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 261 | ip: 8 | dr 8 |ar: 8095 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 265 | ip: 9 | dr 103 |ar: 8095 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 268 | ip: 10 | dr 0 |ar: 8095 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 271 | ip: 11 | dr 26 |ar: 8095 | acc: 103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 274 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 277 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 282 | ip: 14 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 285 | ip: 15 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 288 | ip: 16 | dr 20 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 293 | ip: 17 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 296 | ip: 18 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 299 | ip: 19 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 302 | ip: 13 | dr 13 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 307 | ip: 14 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 310 | ip: 15 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 313 | ip: 16 | dr 20 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 318 | ip: 17 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 321 | ip: 18 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 324 | ip: 19 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 327 | ip: 13 | dr 13 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 332 | ip: 14 | dr 114 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 335 | ip: 15 | dr 0 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 338 | ip: 16 | dr 20 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 343 | ip: 17 | dr 4099 |ar: 4099 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 346 | ip: 18 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 349 | ip: 19 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 352 | ip: 13 | dr 13 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 357 | ip: 14 | dr 0 |ar: 4100 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 360 | ip: 15 | dr 0 |ar: 4100 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 364 | ip: 20 | dr 20 |ar: 4100 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 368 | ip: 21 | dr 103 |ar: 8095 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 373 | ip: 22 | dr 0 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 378 | ip: 23 | dr 4100 |ar: 4100 | acc: 4100 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> e
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 382 | ip: 24 | dr 4100 |ar: 4100 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 386 | ip: 25 | dr 103 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 389 | ip: 8 | dr 8 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 393 | ip: 9 | dr 101 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 396 | ip: 10 | dr 0 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 399 | ip: 11 | dr 26 |ar: 8095 | acc: 101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 402 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 405 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 410 | ip: 14 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 413 | ip: 15 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 416 | ip: 16 | dr 20 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 421 | ip: 17 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 424 | ip: 18 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 427 | ip: 19 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 430 | ip: 13 | dr 13 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 435 | ip: 14 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 438 | ip: 15 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 441 | ip: 16 | dr 20 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 446 | ip: 17 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 449 | ip: 18 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 452 | ip: 19 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 455 | ip: 13 | dr 13 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 460 | ip: 14 | dr 114 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 463 | ip: 15 | dr 0 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 466 | ip: 16 | dr 20 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 471 | ip: 17 | dr 4099 |ar: 4099 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 474 | ip: 18 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 477 | ip: 19 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 480 | ip: 13 | dr 13 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 485 | ip: 14 | dr 103 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 488 | ip: 15 | dr 0 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 491 | ip: 16 | dr 20 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 496 | ip: 17 | dr 4100 |ar: 4100 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 499 | ip: 18 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 502 | ip: 19 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 505 | ip: 13 | dr 13 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 510 | ip: 14 | dr 0 |ar: 4101 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 513 | ip: 15 | dr 0 |ar: 4101 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 517 | ip: 20 | dr 20 |ar: 4101 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 521 | ip: 21 | dr 101 |ar: 8095 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 526 | ip: 22 | dr 0 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 531 | ip: 23 | dr 4101 |ar: 4101 | acc: 4101 | sp: 8093
DEBUG datapath:get_char_from_device INPUT-> y
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 535 | ip: 24 | dr 4101 |ar: 4101 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 539 | ip: 25 | dr 101 |ar: 8095 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 542 | ip: 8 | dr 8 |ar: 8095 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 546 | ip: 9 | dr 121 |ar: 8095 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 549 | ip: 10 | dr 0 |ar: 8095 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 552 | ip: 11 | dr 26 |ar: 8095 | acc: 121 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 555 | ip: 12 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 558 | ip: 13 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 563 | ip: 14 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 566 | ip: 15 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 569 | ip: 16 | dr 20 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 574 | ip: 17 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 577 | ip: 18 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 580 | ip: 19 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 583 | ip: 13 | dr 13 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 588 | ip: 14 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 591 | ip: 15 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 594 | ip: 16 | dr 20 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 599 | ip: 17 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 602 | ip: 18 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 605 | ip: 19 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 608 | ip: 13 | dr 13 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 613 | ip: 14 | dr 114 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 616 | ip: 15 | dr 0 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 619 | ip: 16 | dr 20 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 624 | ip: 17 | dr 4099 |ar: 4099 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 627 | ip: 18 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 630 | ip: 19 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 633 | ip: 13 | dr 13 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 638 | ip: 14 | dr 103 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 641 | ip: 15 | dr 0 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 644 | ip: 16 | dr 20 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 649 | ip: 17 | dr 4100 |ar: 4100 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 652 | ip: 18 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 655 | ip: 19 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 658 | ip: 13 | dr 13 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 663 | ip: 14 | dr 101 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 666 | ip: 15 | dr 0 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 669 | ip: 16 | dr 20 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 674 | ip: 17 | dr 4101 |ar: 4101 | acc: 4101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 677 | ip: 18 | dr 4101 |ar: 4101 | acc: 4102 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 680 | ip: 19 | dr 4101 |ar: 4101 | acc: 4102 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 683 | ip: 13 | dr 13 |ar: 4101 | acc: 4102 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 688 | ip: 14 | dr 0 |ar: 4102 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 691 | ip: 15 | dr 0 |ar: 4102 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 695 | ip: 20 | dr 20 |ar: 4102 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 699 | ip: 21 | dr 121 |ar: 8095 | acc: 121 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 704 | ip: 22 | dr 0 |ar: 4102 | acc: 121 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 709 | ip: 23 | dr 4102 |ar: 4102 | acc: 4102 | sp: 8093
DEBUG datapath:get_char_from_device INPUT 0
INFO controlunit:microcode_handler execute_command Opcode.READ | tick: 713 | ip: 24 | dr 4102 |ar: 4102 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.ST | tick: 717 | ip: 25 | dr 121 |ar: 8095 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 720 | ip: 8 | dr 8 |ar: 8095 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 724 | ip: 9 | dr 0 |ar: 8095 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 727 | ip: 10 | dr 0 |ar: 8095 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.JB | tick: 731 | ip: 26 | dr 26 |ar: 8095 | acc: 0 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 734 | ip: 27 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 737 | ip: 28 | dr 4097 |ar: 8095 | acc: 4097 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 742 | ip: 29 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
DEBUG datapath:output <- S
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 745 | ip: 30 | dr 83 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 748 | ip: 31 | dr 0 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 751 | ip: 32 | dr 36 |ar: 4097 | acc: 83 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 756 | ip: 33 | dr 4097 |ar: 4097 | acc: 4097 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 759 | ip: 34 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 762 | ip: 35 | dr 4097 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 765 | ip: 28 | dr 28 |ar: 4097 | acc: 4098 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 770 | ip: 29 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
DEBUG datapath:output S <- e
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 773 | ip: 30 | dr 101 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 776 | ip: 31 | dr 0 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 779 | ip: 32 | dr 36 |ar: 4098 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 784 | ip: 33 | dr 4098 |ar: 4098 | acc: 4098 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 787 | ip: 34 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 790 | ip: 35 | dr 4098 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 793 | ip: 28 | dr 28 |ar: 4098 | acc: 4099 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 798 | ip: 29 | dr 114 |ar: 4099 | acc: 114 | sp: 8092
DEBUG datapath:output Se <- r
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 801 | ip: 30 | dr 114 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 804 | ip: 31 | dr 0 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 807 | ip: 32 | dr 36 |ar: 4099 | acc: 114 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 812 | ip: 33 | dr 4099 |ar: 4099 | acc: 4099 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 815 | ip: 34 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 818 | ip: 35 | dr 4099 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 821 | ip: 28 | dr 28 |ar: 4099 | acc: 4100 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 826 | ip: 29 | dr 103 |ar: 4100 | acc: 103 | sp: 8092
DEBUG datapath:output Ser <- g
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 829 | ip: 30 | dr 103 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 832 | ip: 31 | dr 0 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 835 | ip: 32 | dr 36 |ar: 4100 | acc: 103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 840 | ip: 33 | dr 4100 |ar: 4100 | acc: 4100 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 843 | ip: 34 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 846 | ip: 35 | dr 4100 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 849 | ip: 28 | dr 28 |ar: 4100 | acc: 4101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 854 | ip: 29 | dr 101 |ar: 4101 | acc: 101 | sp: 8092
DEBUG datapath:output Serg <- e
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 857 | ip: 30 | dr 101 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 860 | ip: 31 | dr 0 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 863 | ip: 32 | dr 36 |ar: 4101 | acc: 101 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 868 | ip: 33 | dr 4101 |ar: 4101 | acc: 4101 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 871 | ip: 34 | dr 4101 |ar: 4101 | acc: 4102 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 874 | ip: 35 | dr 4101 |ar: 4101 | acc: 4102 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 877 | ip: 28 | dr 28 |ar: 4101 | acc: 4102 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 882 | ip: 29 | dr 121 |ar: 4102 | acc: 121 | sp: 8092
DEBUG datapath:output Serge <- y
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 885 | ip: 30 | dr 121 |ar: 4102 | acc: 121 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 888 | ip: 31 | dr 0 |ar: 4102 | acc: 121 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 891 | ip: 32 | dr 36 |ar: 4102 | acc: 121 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 896 | ip: 33 | dr 4102 |ar: 4102 | acc: 4102 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.INC | tick: 899 | ip: 34 | dr 4102 |ar: 4102 | acc: 4103 | sp: 8093
INFO controlunit:microcode_handler execute_command Opcode.PUSH | tick: 902 | ip: 35 | dr 4102 |ar: 4102 | acc: 4103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JUMP | tick: 905 | ip: 28 | dr 28 |ar: 4102 | acc: 4103 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.LD | tick: 910 | ip: 29 | dr 0 |ar: 4103 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.PRINT | tick: 913 | ip: 30 | dr 0 |ar: 4103 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.CMP | tick: 916 | ip: 31 | dr 0 |ar: 4103 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.JE | tick: 920 | ip: 36 | dr 36 |ar: 4103 | acc: 0 | sp: 8092
INFO controlunit:microcode_handler execute_command Opcode.POP | tick: 925 | ip: 37 | dr 4103 |ar: 4103 | acc: 4103 | sp: 8093
DEBUG datapath:output_the_buffer output: Sergey
INFO processor:simulation Simulation stop
| ФИО | алг | LoC | code байт | code инстр. | инстр. | такт. | вариант |
| Бугаев Сергей Юрьевич | hello_world | 1 | - | 24 | 117 | 352 | alg | acc | neum | mc | tick | struct | stream | port | cstr | prob1 | 8bit |
| Бугаев Сергей Юрьевич | cat | 7 | - | 37 | 268 | 925 | alg | acc | neum | mc | tick | struct | stream | port | cstr | prob1 | 8bit |
| Бугаев Сергей Юрьевич | hello_user | 11 | - | 100 | 532 | 1753 | alg | acc | neum | mc | tick | struct | stream | port | cstr | prob1 | 8bit |
| Бугаев Сергей Юрьевич | prob1 | 14 | - | 53 | 28523 | 102917 | alg | acc | neum | mc | tick | struct | stream | port | cstr | prob1 | 8bit |
где:
алг. -- название алгоритма (hello, cat, или как в варианте)
прог. LoC -- кол-во строк кода в реализации алгоритма
code байт -- кол-во байт в машинном коде (если бинарное представление)
code инстр. -- кол-во инструкций в машинном коде
инстр. -- кол-во инструкций, выполненных при работе алгоритма
такт. -- кол-во тактов, которое заняла работа алгоритма

