⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v6boot.asm

📁 J-link v6版反汇编的启动代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
  00000000  EA00002E  B            0x000000C0               ; RESET 
  00000004  E59FF014  LDR          PC, [PC, #+20]           ; UND   [0x20] =0x100004
  00000008  E59FF014  LDR          PC, [PC, #+20]           ; SWI   [0x24] =0x100008
  0000000C  E59FF014  LDR          PC, [PC, #+20]           ; P ABT [0x28] =0x10000C
  00000010  E59FF014  LDR          PC, [PC, #+20]           ; D ABT [0x2C] =0x100010
  00000014  FFFFFFFF  DW           0xFFFFFFFF
  00000018  E59FF014  LDR          PC, [PC, #+20]           ; IRQ   [0x34] =0x10010C
  0000001C  E59FF014  LDR          PC, [PC, #+20]           ; FIQ   [0x38] =0x10001C
;==================================================================================================
  00000020  00100004  DW           0x00100004
  00000024  00100008  DW           0x00100008
  00000028  0010000C  DW           0x0010000C
  0000002C  00100010  DW           0x00100010
  00000030  FFFFFFFF  DW           0xFFFFFFFF
  00000034  0010010C  DW           0x0010010C
  00000038  0010001C  DW           0x0010001C
  0000003C  FFFFFFFF  DW           0xFFFFFFFF
  00000040  FFFFFFFF  DW           0xFFFFFFFF
;==================================================================================================
?cstartup:
  000000C0  E10F0000  MRS          R0, CPSR
  000000C4  E3C0001F  BIC          R0, R0, #0x1F
  000000C8  E3800012  ORR          R0, R0, #0x12
  000000CC  E121F000  MSR          CPSR_c, R0
  000000D0  E59FD090  LDR          SP, [PC, #+144]          ; [0x168] =0x203F10 = SFE(IRQ_STACK)
  000000D4  E3C0001F  BIC          R0, R0, #0x1F
  000000D8  E380001F  ORR          R0, R0, #0x1F
  000000DC  E121F000  MSR          CPSR_c, R0
  000000E0  E59FD084  LDR          SP, [PC, #+132]          ; [0x16C] =0x203ED0 = SFE(CSTACK)
  000000E4  E59F0084  LDR          R0, [PC, #+132]          ; [0x170] =0x1001F5 = ?main  ;thumb mode!!!
  000000E8  E1A0E00F  MOV          LR, PC
  000000EC  E12FFF10  BX           R0                       ; call ?main
;-----------------------------------------------------------
  000000F0  E59F007C  LDR          R0, [PC, #+124]          ; [0x174] =0x1001B1
  000000F4  E1A0E00F  MOV          LR, PC
;-----------------------------------------------------------
  000000F8  E12FFF10  BX           R0                       ; call 0x001001B0   thumb   __segment_init
  000000FC  E59FE074  LDR          LR, [PC, #+116]          ; [0x178] =0x100108
  00000100  E59F0074  LDR          R0, [PC, #+116]          ; [0x17C] =0x100331
  00000104  E12FFF10  BX           R0                       ; call 0x00100330   thumb
  00000108  EAFFFFFE  B            0x000108                 ; while(1)
;==================================================================================================
IRQ_handler:
  0000010C  E24EE004  SUB          LR, LR, #0x4
  00000110  E92D4000  STMDB        SP!, {LR}
  00000114  E14FE000  MRS          LR, SPSR
  00000118  E92D4000  STMDB        SP!, {LR}
  0000011C  E92D0001  STMDB        SP!, {R0}
  00000120  E59FE058  LDR          LR, [PC, #+88]           ; [0x180] =AIC_SMR (0xFFFFF000)
  00000124  E59E0100  LDR          R0, [LR, #+256]
  00000128  E58EE100  STR          LR, [LR, #+256]
  0000012C  E321F013  MSR          CPSR_c, #0x13
  00000130  E92D500E  STMDB        SP!, {R1,R2,R3,R12,LR}
  00000134  E1A0E00F  MOV          LR, PC
  00000138  E12FFF10  BX           R0
;==================================================================================================
  0000013C  E8BD500E  LDMIA        SP!, {R1,R2,R3,R12,LR}
  00000140  E321F092  MSR          CPSR_c, #0x92
  00000144  E59FE034  LDR          LR, [PC, #+52]           ; [0x180] =AIC_SMR (0xFFFFF000)
  00000148  E58EE130  STR          LR, [LR, #+304]
  0000014C  E8BD0001  LDMIA        SP!, {R0}
  00000150  E8BD4000  LDMIA        SP!, {LR}
  00000154  E16FF00E  MSR          SPSR_cxsf, LR
  00000158  E8FD8000  LDMIA        SP!, {PC}^
  0000015C  EAFFFFFE  B            0x00015C
  00000160  EAFFFFFE  B            0x000160
  00000164  EAFFFFFE  B            0x000164
;==================================================================================================
  00000168  00203F10  DW           0x00203F10
  0000016C  00203ED0  DW           0x00203ED0
  00000170  001001F5  DW           0x001001F5
  00000174  001001B1  DW           0x001001B1
  00000178  00100108  DW           0x00100108
  0000017C  00100331  DW           0x00100331
  00000180  FFFFF000  DW           0xFFFFF000
;==================================================================================================
; not use
  00000184  E10F0000  MRS          R0, CPSR
  00000188  E3C000C0  BIC          R0, R0, #0xC0
  0000018C  E121F000  MSR          CPSR_c, R0
  00000190  E12FFF1E  BX           LR
;==================================================================================================
; not use
  00000194  E10F0000  MRS          R0, CPSR
  00000198  E38000C0  ORR          R0, R0, #0xC0
  0000019C  E121F000  MSR          CPSR_c, R0
  000001A0  E10F0000  MRS          R0, CPSR
  000001A4  E21000C0  ANDS         R0, R0, #0xC0
;==================================================================================================
  001001A8  FFF9      BL           0x10119C
  001001AA  0AFF      LSR          R7, R7, #11
  001001AC  FF1E      BL           0x100FEA
  001001AE  E12F      B            0x100410
;==================================================================================================
;==================================================================================================
__segment_init:
  001001B0  B570      PUSH         {R4,R5,R6, LR}
  001001B2  4E0E      LDR          R6, [PC,#0x038]          ; [0x1001EC] =0x1003C4 =__sfb( "INITTAB" ) =0x001003C4
  001001B4  4C0E      LDR          R4, [PC,#0x038]          ; [0x1001F0] =0x1003D0 =__sfe( "INITTAB" ) =0x001003D0
  001001B6  B082      SUB          SP, SP, #8
  001001B8  0035      LSL          R5, R6, #0
  001001BA  1D36      ADD          R6, R6, #4
  001001BC  E005      B            0x1001CA                 ; call memcpy
;-----------------------------------------------------------
  001001BE  0001      LSL          R1, R0, #0               ; R1 = R0
  001001C0  6830      LDR          R0, [R6, #0]             ; R0 = __sfb( "INITTAB" )
  001001C2  F000      ; pre BL/BLX 
  001001C4  F8E5      BL           0x100390                 ; call memread
;-----------------------------------------------------------
  001001C6  350C      ADD          R5, #12
  001001C8  360C      ADD          R6, #12
memcpy:
  001001CA  42A5      CMP          R5, R4
  001001CC  D209      BCS          0x1001E2                 ; return
  001001CE  6870      LDR          R0, [R6, #4]
  001001D0  6831      LDR          R1, [R6, #0]
  001001D2  682A      LDR          R2, [R5, #0]
  001001D4  4288      CMP          R0, R1
  001001D6  D1F2      BNE          0x1001BE
  001001D8  6830      LDR          R0, [R6, #0]
  001001DA  2100      MOV          R1, #0
  001001DC  F000      ; pre BL/BLX 
  001001DE  F8E6      BL           0x1003AC
  001001E0  E7F1      B            0x1001C6
  001001E2  B002      ADD          SP, SP, #8
  001001E4  BC70      POP          {R4,R5,R6}
  001001E6  BC01      POP          {R0}
  001001E8  4700      BX           R0
  001001EA  46C0      ; fill blank          
  001001EC  001003C4  DW           0x001003C4
  001001F0  001003D0  DW           0x001003D0
;==================================================================================================
?main
  001001F4  B510      PUSH         {R4, LR}
  001001F6  209F      MOV          R0, #159                 ; R0 = 0x9F
  001001F8  43C0      MVN          R0, R0                   ; R0 = AT91C_MC_FMR(0xFFFFFF60)
  001001FA  2180      MOV          R1, #128                 ; R1 = 0x80
  001001FC  0049      LSL          R1, R1, #1               ; R1 = 0x00000100
  001001FE  6001      STR          R1, [R0, #0]             ; AT91C_MC_FMR(0xFFFFFF60) = 0x00000100
  00100200  4819      LDR          R0, [PC,#0x064]          ; R0 = [0x100268] =AT91C_WDTC_WDMR (0xFFFFFD44)
  00100202  01C9      LSL          R1, R1, #7               ; R1 = 0x00008000
  00100204  6001      STR          R1, [R0, #0]             ; AT91C_WDTC_WDMR (0xFFFFFD44) = 0x00008000
  00100206  4819      LDR          R0, [PC,#0x064]          ; R0 = [0x10026C] =AT91C_CKGR_MOR (0xFFFFFC20)
  00100208  4919      LDR          R1, [PC,#0x064]          ; [0x100270] =0x4001
  0010020A  6001      STR          R1, [R0, #0]             ; AT91C_CKGR_MOR (0xFFFFFC20) = 0x00004001
  0010020C  4819      LDR          R0, [PC,#0x064]          ; R0 = [0x100274] =AT91C_PMC_SR (0xFFFFFC68)
  0010020E  6801      LDR          R1, [R0, #0]             ; R1 = AT91C_PMC_SR (0xFFFFFC68)
  00100210  07C9      LSL          R1, R1, #31
  00100212  D5FC      BPL          0x10020E                 ; while(!MOSCS);
;-----------------------------------------------------------
  00100214  4918      LDR          R1, [PC,#0x060]          ; [0x100278] =AT91C_CKGR_PLLR (0xFFFFFC2C)
  00100216  4A19      LDR          R2, [PC,#0x064]          ; [0x10027C] =0x1048100E
  00100218  600A      STR          R2, [R1, #0]             ; AT91C_CKGR_PLLR (0xFFFFFC2C) = 0x1048100E
  0010021A  2204      MOV          R2, #4                   ; R2 = 4
  0010021C  2304      MOV          R3, #4                   ; R3 = 4
  0010021E  6801      LDR          R1, [R0, #0]             ; R1 = AT91C_PMC_SR (0xFFFFFC68)
  00100220  4219      TST          R1, R3
  00100222  D0FC      BEQ          0x10021E                 ; while(!PLLLOCK);
  00100224  2108      MOV          R1, #8                   ; R1 = 8
  00100226  6803      LDR          R3, [R0, #0]             ; R3 = AT91C_PMC_SR (0xFFFFFC68)
  00100228  420B      TST          R3, R1
  0010022A  D0FB      BEQ          0x100224                 ; while(!MCKRDY);
  0010022C  4B14      LDR          R3, [PC,#0x050]          ; R3 = [0x100280] =AT91C_PMC_MCKR (0xFFFFFC30)
  0010022E  601A      STR          R2, [R3, #0]             ; AT91C_PMC_MCKR (0xFFFFFC30) = 4
  00100230  6802      LDR          R2, [R0, #0]             ; R2 = AT91C_PMC_SR (0xFFFFFC68)
  00100232  420A      TST          R2, R1
  00100234  D0FC      BEQ          0x100230                 ; while(!MCKRDY);
  00100236  681A      LDR          R2, [R3, #0]             ; R2 = AT91C_PMC_MCKR (0xFFFFFC30)
  00100238  2403      MOV          R4, #3                   ; R4 = 3
  0010023A  4314      ORR          R4, R2                   ; R4 = AT91C_PMC_MCKR (0xFFFFFC30) | 0x03
  0010023C  601C      STR          R4, [R3, #0]             ; AT91C_PMC_MCKR (0xFFFFFC30) = R4
  0010023E  6802      LDR          R2, [R0, #0]             ; R2 = AT91C_PMC_SR (0xFFFFFC68)
  00100240  420A      TST          R2, R1
  00100242  D0FC      BEQ          0x10023E                 ; while(!MCKRDY);
  00100244  480F      LDR          R0, [PC,#0x03C]          ; [0x100284] =AIC_SVR (0xFFFFF080)
  00100246  4910      LDR          R1, [PC,#0x040]          ; [0x100288] =0x10015C
  00100248  6001      STR          R1, [R0, #0]
  0010024A  2001      MOV          R0, #1
  0010024C  4A0D      LDR          R2, [PC,#0x034]          ; [0x100284] =AIC_SVR (0xFFFFF080)
  0010024E  4B0F      LDR          R3, [PC,#0x03C]          ; [0x10028C] =0x100160
  00100250  0081      LSL          R1, R0, #2
  00100252  5053      STR          R3, [R2, R1]
  00100254  1C40      ADD          R0, R0, #1
  00100256  281F      CMP          R0, #31
  00100258  DBFA      BLT          0x100250
  0010025A  480D      LDR          R0, [PC,#0x034]          ; R0 = [0x100290] =AIC_SPU (0xFFFFF134)
  0010025C  490D      LDR          R1, [PC,#0x034]          ; R1 = [0x100294] =0x100164
  0010025E  6001      STR          R1, [R0, #0]             ; AIC_SPU (0xFFFFF134) = 0x00100164
  00100260  BC10      POP          {R4}
  00100262  BC01      POP          {R0}
  00100264  4700      BX           R0
  00100266  46C0      ; fill blank         
  00100268  FFFFFD44  DW           0xFFFFFD44
  0010026C  FFFFFC20  DW           0xFFFFFC20
  00100270  00004001  DW           0x00004001
  00100274  FFFFFC68  DW           0xFFFFFC68
  00100278  FFFFFC2C  DW           0xFFFFFC2C
  0010027C  1048100E  DW           0x1048100E
  00100280  FFFFFC30  DW           0xFFFFFC30
  00100284  FFFFF080  DW           0xFFFFF080
  00100288  0010015C  DW           0x0010015C
  0010028C  00100160  DW           0x00100160
  00100290  FFFFF134  DW           0xFFFFF134
  00100294  00100164  DW           0x00100164
;==================================================================================================
; R0 dest
; R1 bytes
; R2 source
flashwrite:
  00100298  B5F0      PUSH         {R4,R5,R6,R7, LR}
  0010029A  0007      LSL          R7, R0, #0               ; R7 = R0   dest
  0010029C  000D      LSL          R5, R1, #0               ; R5 = R1   bytes
  0010029E  0014      LSL          R4, R2, #0               ; R4 = R2   source
  001002A0  2000      MOV          R0, #0
  001002A2  43C0      MVN          R0, R0                   ; R0 = 0xFFFFFFFF
;-----------------------------------------------------------
  001002A4  2D01      CMP          R5, #1
  001002A6  DB15      BLT          0x1002D4                 ; if(R5 bytes < 1) then return
  001002A8  2D81      CMP          R5, #129
  001002AA  DA01      BGE          0x1002B0                 ; if(R5 bytes >= 129) R6 = 128;
  001002AC  002E      LSL          R6, R5, #0               ; else R6 = R5;
  001002AE  E000      B            0x1002B2
;-----------------------------------------------------------
  001002B0  2680      MOV          R6, #128                 ; R6 = 128
;-----------------------------------------------------------
  001002B2  480A      LDR          R0, [PC,#0x028]          ; R0 = [0x1002DC] =0xFFF00000
  001002B4  1838      ADD          R0, R7, R0               ; R0 = 0xFFF00000 + R7 dest
  001002B6  09C0      LSR          R0, R0, #7               ; R0 = R0 << 7                  
                                                            ; e.g. R0 = (0x102000 + 0xFFF00000) >> 7 = 0x40
  001002B8  F0FF      ; pre BL/BLX 
  001002BA  FEAA      BL           0x200010                 ; call 0x200010     unlock flash
  001002BC  0022      LSL          R2, R4, #0               ; R2 = R4   source
  001002BE  0031      LSL          R1, R6, #0               ; R1 = R6   bytes
  001002C0  0038      LSL          R0, R7, #0               ; R0 = R7   dest
  001002C2  F0FF      ; pre BL/BLX 
  001002C4  FEBF      BL           0x200044                 ; call 0x200044
  001002C6  1BAD      SUB          R5, R5, R6               ; R5 = R5 - R6
  001002C8  3480      ADD          R4, #128                 ; R4 = R4 + 128
  001002CA  3780      ADD          R7, #128                 ; R7 = R7 + 128
  001002CC  2100      MOV          R1, #0
  001002CE  43C9      MVN          R1, R1                   ; R1 = 0xFFFFFFFF( -1 )
  001002D0  4288      CMP          R0, R1
  001002D2  D0E7      BEQ          0x1002A4                 ; if(return == -1) goto 0x1002A4
  001002D4  BCF0      POP          {R4,R5,R6,R7}
  001002D6  BC02      POP          {R1}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -