.section .boot .global _start _start: la gp, _gbl_ptr # Инициализация глобального указателя la sp, _stack_ptr # Инициализация указателя на стек # Инициализация (зануление) сегмента bss la t0, _bss_start la t1, _bss_end _bss_init_loop: beq t0, t1, _main_call sw zero, 0(t0) addi t0, t0, 4 j _bss_init_loop # Вызов функции main _main_call: li a0, 0 # Передача аргументов argc и argv в main. Формально, argc должен li a1, 0 # быть больше нуля, а argv должен указывать на массив строк, # нулевой элемент которого является именем исполняемого файла, # Но для простоты реализации оба аргумента всего лишь обнулены. # Это сделано для детерминированного поведения программы в случае, # если будет пытаться использовать эти аргументы. call main # Зацикливание после выхода из функции main _endless_loop: j _endless_loop