📄 crt0.s
字号:
# XSTORMY16 startup code# Interrupt vectors at 0x8000. .section .int_vec,"ax" .global _start .align 1_start: ;; Reset, watchdog timer interrupt jmpf _int_reset ;; base timer interrupt jmpf _int_basetimer ;; timer 0 jmpf _int_timer0 ;; timer 1 jmpf _int_timer1 ;; SIO0 interrupt jmpf _int_sio0 ;; SIO1 interrupt jmpf _int_sio1 ;; port0 interrupt jmpf _int_port0 ;; port1 interrupt jmpf _int_port1 .text# Reset code, set up memory and call main._int_reset: ;; Set up the stack pointer. mov r0,#__stack bz r0,#0,0f mov sp,r00: ;; Zero the data space mov r0,#_edata mov r1,#_end mov r2,#00: mov.w (r0++),r2 blt r0,r1,0b ;; Call hardware init routine callf _hwinit ;; Call initialization routines callf _init ;; Set up fini routines to be called from exit mov r2,#@fptr(_fini) callf atexit ;; Call main() with empty argc/argv/envp mov r2,#0 mov r3,#0 mov r4,#0 callf main ;; Exit. callf exit ;; Should never reach this code. halt1: .size _int_reset,1b-_int_reset # Stub interrupt routines. .globl _int_timer0 .weak _int_timer0 .globl _int_timer1 .weak _int_timer1 .globl _int_sio0 .weak _int_sio0 .globl _int_sio1 .weak _int_sio1 .globl _int_port0 .weak _int_port0 .globl _int_port1 .weak _int_port1 .globl _int_basetimer .weak _int_basetimer_int_timer0:_int_timer1:_int_sio0:_int_sio1:_int_port0:_int_port1:_int_basetimer: iret1: .size _int_timer0,1b-_int_timer0# Stub hardware init .globl _hwinit .weak _hwinit_hwinit: ret1: .size _int_hwinit,1b-_int_hwinit# The first word in .data has address 0, so it's not a good# idea to use it as its address conflicts with NULL.# Place a HALT instruction there to try to catch NULL pointer# dereferences. .data halt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -