mirror of
https://github.com/MPSU/APS.git
synced 2025-09-17 01:50:40 +00:00
Initial commit
This commit is contained in:
28
Labs/10. Programming/startup.S
Normal file
28
Labs/10. Programming/startup.S
Normal file
@@ -0,0 +1,28 @@
|
||||
.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
|
Reference in New Issue
Block a user