Написать новый ecall 71 — «безопасный ввод целого». Этот ecall должен вводить строку (общая длина — не более 256 символов, включая перевод строки), пропускать в ней лидирующие пробелы, а затем преобразовывать находящееся в её начале число в десятичной записи в целое. Вызов должен возвращать количество обработанных цифр в a1, а само число — в a0. Если в начале строки строке не содержится целого числа, оба регистра нулевые. Вводится не более 9 цифр. Задачу можно решить так: обработать исключение, проверить ucause на равенство ENVIRONMENT_CALL и содержимого a7 на равенство 71. Если возникло какое-то другое исключение или a7 не равен 71, немедленно завершать работу с диагностикой «Exception №», где № — номер исключения. К решению будет приписана проверяющая программа и проверочный код.
- Проверяющая программа: Переключить отображение номеров строк
1 .globl main 2 main: 3 la t0 handler 4 csrw t0 utvec # обработчик прерывания 5 6 li t0 0x10 7 csrw t0 ustatus # UPIE=1, а PIE=0, т. е. прерывания «были разрешены», но пока запрещены 8 la t0 _test 9 csrw t0 uepc # начало программы пользователя 10 uret # восстанавливаем разрешение прерываний и переходим к программе
- Проверочный код для примера ниже
-1234e5 no
-1234400Exception 5