📄 crt0.s
字号:
.text .balign 4 .global _start_start: ld24 sp, _stack ldi fp, #0# Clear the BSS. Do it in two parts for efficiency: longwords first# for most of it, then the remaining 0 to 3 bytes. seth r2, #shigh(__bss_start) add3 r2, r2, #low(__bss_start); R2 = start of BSS seth r3, #shigh(_end) add3 r3, r3, #low(_end) ; R3 = end of BSS + 1 sub r3, r2 ; R3 = BSS size in bytes mv r4, r3 srli r4, #2 ; R4 = BSS size in longwords (rounded down) ldi r1, #0 ; clear R1 for longword store addi r2, #-4 ; account for pre-inc store beqz r4, .Lendloop1 ; any more to go?.Lloop1: st r1, @+r2 ; yep, zero out another longword addi r4, #-1 ; decrement count bnez r4, .Lloop1 ; go do some more.Lendloop1: and3 r4, r3, #3 ; get no. of remaining BSS bytes to clear addi r2, #4 ; account for pre-inc store beqz r4, .Lendloop2 ; any more to go?.Lloop2: stb r1, @r2 ; yep, zero out another byte addi r2, #1 ; bump address addi r4, #-1 ; decrement count bnez r4, .Lloop2 ; go do some more.Lendloop2:# Run code in the .init section.# This will queue the .fini section to be run with atexit. bl __init# Call main, then exit. bl main bl exit# If that fails just loop..Lexit: bra .Lexit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -