Ядро может использовать отображения и адреса памяти пользовательского пространства, и вы передали ему адрес в $a0
. Вы также передали длину буфера в $a1
, чтобы он знал, сколько байтов ему разрешено хранить.
Таким образом, ядро получает данные с устройства ввода-вывода, а затем использует sw
или sb
инструкции для их сохранения в переданном вами буфере.
(или, если вы используете MARS / SPIM, syscall
перехватывает код интерпретатора / эмулятора / симулятора и вообще не выполняет инструкции MIPS. В отличие от реальной машины MIPS, работающей под управлением Linux или чего-либо еще.)