Создать обработчик исключений с меткой handler:, реализующий три «новых системных вызова» (100, 101 и 102) для работы со «скрытыми регистрами»:
(a0 = размер). Однократно заказывает у системы память размером в a0 машинных слов, не возвращает ничего (размер и заказанный адрес запоминает в недрах обработчика). Это «скрытые регистры»
(a0 = номер). Возвращает в a0 содержимое «скрытого регистра» № номер. Если номер ⩾ размер, берётся остаток от деления номер % размер (actually, всегда))
(a0 = номер, a1 = значение). Заносит в регистр № номер % размер значение значение
Это делается путём обработки исключения, проверки ucause на равенство ENVIRONMENT_CALL и содержимого a7. Соблюдать конвенцию неприкосновенности регистров. К обработчику будет приписана такая проверяющая программа: NewEcall.asm. Ввод и вывод полученной программы с обработчиком:
8 1 1234 -9 -2 1 4213 2 -1 -7 -2 -1 0
1234 0 0 -1 4213