📄 crtavr.lis
字号:
.area func_lit(rom)
0000 __func_lit_start::
.area lit(rom)
0000 __lit_start::
.area idata(rom)
0000 __idata_start::
.area text(rom)
0000 __text_start::
.area data(ram)
0000 __data_start::
.area bss(ram)
0000 __bss_start::
.text
0000 __start:: ; entry point
0000 A49A sbi 0x14,4
0002 AC9A sbi 0x15,4
; to be included by the crt*.s files
;
; initialize stacks
;
; set the hardware stack to ram_end, and the software stack some
; bytes below that
0004 C0E0 ldi R28,<ram_end
0006 D0E0 ldi R29,>ram_end
0008 CDBF out $3D,R28
000A DEBF out $3E,R29
000C C050 subi R28,<hwstk_size
000E D040 sbci R29,>hwstk_size
0010 0AEA ldi R16,0xAA ; sentenial
0012 0883 std Y+0,R16 ; put sentenial at bottom of HW stack
0014 0024 clr R0
0016 E0E0 ldi R30,<__bss_start
0018 F0E0 ldi R31,>__bss_start
001A 10E0 ldi R17,>__bss_end
; this loop zeros out all the data in the bss area
;
001C init_loop:
001C E030 cpi R30,<__bss_end
001E F107 cpc R31,R17
0020 11F0 breq init_done
0022 0192 st Z+,R0
0024 FBCF rjmp init_loop
0026 init_done:
0026 0083 std Z+0,R16 ; put sentenial at bottom of SW stack
; copy data from idata to data
; idata contains the initialized values of the global variables
0028 E0E0 ldi R30,<__idata_start
002A F0E0 ldi R31,>__idata_start
002C A0E0 ldi R26,<__data_start
002E B0E0 ldi R27,>__data_start
0030 10E0 ldi R17,>__idata_end
0032 copy_loop:
0032 E030 cpi R30,<__idata_end
0034 F107 cpc R31,R17
0036 21F0 breq copy_done
0038 C895 lpm ; load (Z) byte into R0
003A 3196 adiw R30,1
003C 0D92 st X+,R0
003E F9CF rjmp copy_loop
0040 copy_done:
; call user main routine
0040 00D0 rcall _main
0042 _exit::
0042 FFCF rjmp _exit
; interrupt vectors. The first entry is the reset vector
;
.area vector(abs)
.org 0
0000 00C0 rjmp __start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -