Создать обработчик исключений с меткой handler:, реализующий три «новых системных вызова» (100, 101 и 102) для работы со «скрытыми регистрами»:

  1. (a0 = размер). Однократно заказывает у системы память размером в a0 машинных слов, не возвращает ничего (размер и заказанный адрес запоминает в недрах обработчика). Это «скрытые регистры»

  2. (a0 = номер). Возвращает в a0 содержимое «скрытого регистра» № номер. Если номерразмер, берётся остаток от деления номер % размер (actually, всегда))

  3. (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


CategoryHomework

LecturesCMC/ArchitectureAssembler2024/Homework_NewEcall (последним исправлял пользователь FrBrGeorge 2022-03-25 20:57:40)