mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 01:30:10 +00:00
29 lines
1.3 KiB
ArmAsm
29 lines
1.3 KiB
ArmAsm
.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
|