где КОП - код операции, а рез = оп1 <операция> оп2.
Для обмена с памятью с помощью инструкций ld1 и st1 (load и store 1 байт) используется особый формат команд, в котором вместо последнего операнда указывается 4-битная константа. Эта константа, складываясь с содержимым регистра, где хранится адрес, образует окончательный адрес ОЗУ. В частном случае константу можно положить равной 0, тогда получится "чистый" метод косвенной адресации через регистр.
"ANT-8" содержит 16 регистров, пронумерованных в шестнадцатеричной системе от 0 до F. Регистры r2 - rF являются регистрами общего назначения, в регистре r0 всегда хранится ноль, а r1 сохраняет некоторые "особенности" результата операции (например, факт переполнения или адрес возврата - подробности см. в таблице команд). Забавно, что в документации разрядность регистров нигде специально не оговаривается, хотя из анализа некоторых команд очевидно, что она составляет 8 бит. Это автоматически ограничивает адресное пространство 256 байтами (у меня есть ощущение, что авторы сознательно оставляли себе возможность для увеличения разрядности регистров и, следовательно, объема памяти и разрядности чисел). В первоначальной версии, описанной в статье 1999 года, "ANT-8" имел 2 блока памяти по 256 байт - отдельно для программы и отдельно для команд (грех в Гарварде не использовать гарвардскую архитектуру). Позднее авторы перешли к более стандартному решению - 256 байт общей памяти для команд и данных (господствующая фон-неймановская или принстонская архитектура).
Вопрос о разрядности в архитектуре "ANT-8" не праздный, поскольку инструкции имеют длину 16 бит, а данные - 8. В документации указано, что в разделяемой (общей для команд и данных) памяти адрес инструкции должен быть всегда четным (необходимо т.наз. выравнивание).
8-разрядные двоичные числа бывают положительными и отрицательными и хранятся в памяти в дополнительном коде. Очевидно, что их диапазон от -128 до +127.
В "ANT-8" 16 инструкций.
"ANT-8" циклически повторяет следующий алгоритм выполнения инструкций (обозначение PC означает Program Counter, т.е. программный счетчик).
- Выбрать очередную инструкцию (из двух последовательных байт) по адресу, взятому из PC.
- PC := PC + 2.
- Выполнить считанную инструкцию:
- извлечь исходные значения из регистров (если это требуется согласно выполняемой инструкции!);
- выполнить операцию;
- поместить результат в регистр (если требуется);
- установить значение регистра r1 (если требуется);
- изменить содержимое PC (если требуется - в командах переходов beq, bgt и jmp).
|