Skip to content
Snippets Groups Projects
README.md 4.52 KiB
Newer Older
vslutov's avatar
vslutov committed
# modelmachine
Model machine emulator
vslutov's avatar
vslutov committed

vslutov's avatar
vslutov committed
## TODO

vslutov's avatar
vslutov committed
* УМ-3 (трехадресная)
* УМ-2 (двухадресная)
* УМ-П (с переменным форматом команд)
* УМ-1 (одноадресная)
* УМ-С (стековая)
* УМ-Р (решистровая)
* УМ с модификацией адресов ???

* Работа с плавающей запятой
* Загрузка программы и данных из файла
vslutov's avatar
vslutov committed
* ГУИ
vslutov's avatar
vslutov committed
* Продумать и поправить ввод-вывод
vslutov's avatar
vslutov committed

vslutov's avatar
vslutov committed
## Модельная машина

Модельная машина - это чистая архитектурная концепция, позволяющая понять
логику функционирования центральных процессоров. По своей структуре она близка
к компьютерам первого поколения. Подробнее читайте по ссылкам внизу.

vslutov's avatar
vslutov committed
## Внутреннее устройство

Данная реализация модельной машины состоит из классов, разбитых на
файлы-модули:

* `memory.py` - память; делится на два класса: `регистровая` и `оперативная`;
  оперативная делится на `little-endian` и `big-endian`
vslutov's avatar
vslutov committed
* `numeric.py` - целочисленная арифметика с фиксированным числом двоичных
  знаков
vslutov's avatar
vslutov committed
* `alu.py` - арифметико-логическое устройство, работает с четко
  специализированными регистрами: `R1`, `R2`, `S`, `FLAGS` и `IP`.
vslutov's avatar
vslutov committed
* `cu.py` *не реализованно* - контролирующее устройство, выполняющее считывание команд из памяти
  и запускающее необходимые методы в арифметико-логическом устройстве
* `io.py` *не реализованно* - устройство ввода-вывода
* `cpu.py` *не реализованно* - финальное объединение устройств в единое целое

### memory.py

`AbstractMemory` - класс абстрактной памяти, предоставляющий интерфейс для
надежной связи частей компьютера. Основные методы: `fetch` и `put`, которые
принимаютна вход адрес в памяти и количество битов, с которыми нужно работать,
количество должно быть кратно размеру ячейки (слова). Строго
рекомендуется их использовать во всех унаследованных классах.

`RandomAccessMemory` - класс, реализующий память прямого доступа. При
инициализации указывается размер машинного слова и количество этих слов. Если
`is_protected=True`, то при попытке считывания из неинициализированной ячейки
будет выброшено исключение, иначе, метод `fetch` вернет нуль.

`RegisterMemory` - класс, реализующий регистровую память. При инициализации
ему дается список регистров. По умолчанию регистры заполняются нулями.

vslutov's avatar
vslutov committed
### numeric.py

Класс Integer реализует целочисленную арифметику фиксированной длины.
vslutov's avatar
vslutov committed
Поддерживаемые операторы: `+`, `-`, `*`, `/`, `%`, `==`, `!=`. Плюс методы
`get_value` и `get_data`. Деление работает согласно такому алгоритму:

    div = abs(a) // abs(b)
    if a * b < 0: div *= -1
    mod = a - b * div
vslutov's avatar
vslutov committed

vslutov's avatar
vslutov committed
## References

* E. А. Бордаченкова - "Модельные ЭВМ" <http://al.cs.msu.su/files/ModComp.pdf>
* Е. А. Бордаченкова - "Архитектура ЭВМ. Учебные машины. Методическое пособие"
  <http://al.cs.msu.su/files/bordachenkova.architecture.model.machines.2010.doc>
* В. Г. Баула - "Введение в архитектуру ЭВМ и системы программирования"
  <http://arch.cs.msu.ru/Page2.htm>
* <http://cmcmsu.no-ip.info/1course/um3.command.set.htm>