diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index 9e8679f9..cd1f2e48 100644 --- a/Labs/10. Interrupt subsystem/README.md +++ b/Labs/10. Interrupt subsystem/README.md @@ -246,27 +246,30 @@ _Рисунок 4. Структурная схема контроллера пр ```asm _start: # Инициализируем начальные значения регистров -li sp, 0x00003FFC # устанавливаем указатель на верхушку стека -li gp, 0x00000000 # устанавливаем указатель на глобальные данные +li sp, 0x00003FFC # устанавливаем указатель на верхушку стека + # данная псевдоинструкция будет разбита на две + # инструкции: lui и addi -li t0, 0x00000001 # подготавливаем маску прерывания единственного - # (нулевого) входа -csrw mie, t0 # загружаем маску в регистр маски +li gp, 0x00000000 # устанавливаем указатель на глобальные данные -la t0, interrupt # псевдоинструкция la аналогично li загружает число, - # только в случае la — это число является адресом - # указанного места (адреса обработчика перехвата) +li t0, 0x00000001 # подготавливаем маску прерывания единственного + # (нулевого) входа +csrw mie, t0 # загружаем маску в регистр маски -csrw mtvec, t0 # устанавливаем вектор прерывания +la t0, interrupt # псевдоинструкция la аналогично li загружает число, + # только в случае la — это число является адресом + # указанного места (адреса обработчика перехвата) -li t0, 0x00001FFC # готовим адрес верхушки стека прерывания -csrw mscratch, t0 # загружаем в указатель на верхушку стека прерывания +csrw mtvec, t0 # устанавливаем вектор прерывания -li t0, 1 # начальное значение глобальной переменной -sw t0, 0(gp) # загружаем переменную в память +li t0, 0x00001FFC # готовим адрес верхушки стека прерывания +csrw mscratch, t0 # загружаем в указатель на верхушку стека прерывания -li t1, 0 # начальное значение, чтобы в симуляции не было xxx -li t2, 0 # начальное значение, чтобы в симуляции не было xxx +li t0, 1 # начальное значение глобальной переменной +sw t0, 0(gp) # загружаем переменную в память + +li t1, 0 # начальное значение, чтобы в симуляции не было xxx +li t2, 0 # начальное значение, чтобы в симуляции не было xxx # Вызов ecall исключительно из хулиганских соображений, # поскольку в данной микроархитектурной реализации это @@ -275,7 +278,7 @@ li t2, 0 # начальное значение, чтобы в ecall # Вызов функции main main: - beq x0, x0, main # бесконечный цикл, аналогичный while (1); + beq x0, x0, main # бесконечный цикл, аналогичный while (1); # ОБРАБОТЧИК ПРЕРЫВАНИЯ # Без стороннего вмешательства процессор никогда не перейдет