Создать обработчик исключений, имитирующий «виртуальную память» для любого «запрещённого» адреса — такого, чтение или запись машинного слова по которому приводило бы к LOAD_ACCESS_FAULT или STORE_ACCESS_FAULT. Исключение — адрес 0x00000000, он не поддерживается. Предлагается использовать таблицу вида «виртуальный» адрес:значение. Размер таблицы — 16 таких пар (т. е. 128 байтов). Можно использовать адрес 0 для обозначения пустой ячейки.
«Виртуальная память» работает только на операциях lw и sw с регистром t0 в качестве приёмника или источника соответственно (другие варианты не проверяются)
- Чтение по любому адресу работает так:
- Если адрес уже есть в таблице, возвращается хранящееся там значение
Если адреса нет в таблице, возвращается 0
- Запись по любому адресу работает так:
- Если адрес уже есть в таблице, меняется его значение
Если адреса нет в таблице, но в ней есть свободная ячейка, сохраняется новая пара «виртуальный» адрес:значение
- Если адреса нет в таблице, и таблица переполнена, не происходит ничего
Это делается обработкой соответствующих двух исключений. Соблюдать конвенцию неприкосновенности регистров. К обработчику будет приписана следующая программа: PseudoVM.asm. Ввод и вывод полученной программы:
21 123 22 1234 20 1001 100500 1000 100 -70001 -70001 -70000 -70004 0
1234 100500 0 0 -70001