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

📄 dhry_1.s79

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 S79
📖 第 1 页 / 共 2 页
字号:
   MOV      PC,LR              ;; return
   DATA     
??Proc_2_0:
   DC32     Arr_1_Glob
        CFI EndBlock cfiBlock1

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function Proc_3
   CODE32   
Proc_3:
   STMDB    SP!,{LR}           ;; Push
        CFI RET Frame(CFA, -4)
        CFI CFA SP+4
   LDR      R3,??Proc_3_0      ;; #Arr_1_Glob
   LDR      R1,[R3, #+216]
   CMP      R1,#+0x0
   LDRNE    R2,[R1, #+0]
   STRNE    R2,[R0, #+0]
   LDR      R0,[R3, #+216]
   ADD      R2,R0,#+0xC
   LDR      R1,[R3, #+208]
   MOV      R0,#+0xA
   BL       Proc_7
   LDMIA    SP!,{PC}           ;; return
   DATA     
??Proc_3_0:
   DC32     Arr_1_Glob
        CFI EndBlock cfiBlock2
;   133 
;   134 

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function Proc_4
   CODE32   
;   135 void Proc_4 ( void )
;   136 /*******/
;   137     /* executed once */
;   138 {
;   139     Boolean Bool_Loc;
;   140 
;   141     Bool_Loc = Ch_1_Glob == 'A';
Proc_4:
   LDR      R0,??Proc_4_0      ;; #Arr_1_Glob
   LDRB     R1,[R0, #+200]
   CMP      R1,#+0x41
   MOVEQ    R1,#+0x1
   MOVNE    R1,#+0x0
   MOV      R2,R1
;   142     Bool_Glob = Bool_Loc | Bool_Glob;
   LDR      R1,[R0, #+204]
   ORR      R1,R1,R2
   STR      R1,[R0, #+204]
;   143     Ch_2_Glob = 'B';
   MOV      R1,#+0x42
   STRB     R1,[R0, #+201]
;   144 } /* Proc_4 */
   MOV      PC,LR              ;; return
   DATA     
??Proc_4_0:
   DC32     Arr_1_Glob
        CFI EndBlock cfiBlock3
;   145 
;   146 

        RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function Proc_5
   CODE32   
;   147 void Proc_5 ( void )
;   148 /*******/
;   149 {
;   150     Ch_1_Glob = 'A';
Proc_5:
   LDR      R0,??Proc_5_0      ;; #Arr_1_Glob
   MOV      R1,#+0x41
   STRB     R1,[R0, #+200]
;   151     Bool_Glob = false;
   MOV      R1,#+0x0
   STR      R1,[R0, #+204]
;   152 } /* Proc_5 */
   MOV      PC,LR              ;; return
   DATA     
??Proc_5_0:
   DC32     Arr_1_Glob
        CFI EndBlock cfiBlock4
;   153 
;   154 
;   155 //int main ( void )

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function testloop
   CODE32   
;   156 void testloop ( int Number_Of_Runs )
;   157 /*****/
;   158 
;   159 /* main program, corresponds to procedures        */
;   160 /* Main and Proc_0 in the Ada version             */
;   161 {
testloop:
   STMDB    SP!,{R4-R9,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R9 Frame(CFA, -8)
        CFI R8 Frame(CFA, -12)
        CFI R7 Frame(CFA, -16)
        CFI R6 Frame(CFA, -20)
        CFI R5 Frame(CFA, -24)
        CFI R4 Frame(CFA, -28)
        CFI CFA SP+28
   SUB      SP,SP,#+0x44
        CFI CFA SP+96
   MOV      R4,R0
;   162     One_Fifty       Int_1_Loc;
;   163     REG One_Fifty   Int_2_Loc;
;   164     One_Fifty       Int_3_Loc;
;   165     REG char        Ch_Index;
;   166     Enumeration     Enum_Loc;
;   167     Str_30          Str_1_Loc;
;   168     Str_30          Str_2_Loc;
;   169     REG int         Run_Index;
;   170   
;   171 
;   172     /* Initializations */
;   173     Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
   LDR      R5,??testloop_0    ;; #Arr_1_Glob
   MOV      R0,#+0x30
   BL       malloc
   STR      R0,[R5, #+212]
;   174     Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
   MOV      R0,#+0x30
   BL       malloc
   STR      R0,[R5, #+216]
;   175 
;   176     Ptr_Glob->Ptr_Comp                    = Next_Ptr_Glob;
   LDR      R0,[R5, #+212]
   LDR      R1,[R5, #+216]
   STR      R0,[R1, #+0]
;   177     Ptr_Glob->Discr                       = Ident_1;
   MOV      R0,#+0x0
   LDR      R1,[R5, #+216]
   STRB     R0,[R1, #+4]
;   178     Ptr_Glob->variant.var_1.Enum_Comp     = Ident_3;
   MOV      R0,#+0x2
   LDR      R1,[R5, #+216]
   STRB     R0,[R1, #+8]
;   179     Ptr_Glob->variant.var_1.Int_Comp      = 40;
   MOV      R0,#+0x28
   LDR      R1,[R5, #+216]
   STR      R0,[R1, #+12]
;   180     strcpy (Ptr_Glob->variant.var_1.Str_Comp,
;   181             "DHRYSTONE PROGRAM, SOME STRING");
   LDR      R0,??testloop_0+4  ;; #`?<Constant "DHRYSTONE PROGRAM, SO...">`
   LDR      R1,[R5, #+216]
   ADD      R1,R1,#+0x10
??testloop_1:
   LDRB     R2,[R0], #+1
   STRB     R2,[R1], #+1
   CMP      R2,#+0x0
   BNE      ??testloop_1
;   182     strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
   LDR      R0,??testloop_0+8  ;; #`?<Constant "DHRYSTONE PROGRAM, 1\\'...">`
   ADD      R1,SP,#+0x24
??testloop_2:
   LDRB     R2,[R0], #+1
   STRB     R2,[R1], #+1
   CMP      R2,#+0x0
   BNE      ??testloop_2
;   183 
;   184     Arr_2_Glob [8][7] = 10;
   LDR      R6,??testloop_0+12  ;; #Arr_2_Glob
   MOV      R0,#+0xA
   STR      R0,[R6, #+1628]
;   185         /* Was missing in published program. Without this statement,    */
;   186         /* Arr_2_Glob [8][7] would have an undefined value.             */
;   187         /* Warning: With 16-Bit processors and Number_Of_Runs > 32000,  */
;   188         /* overflow may occur for this array element.                   */
;   189 
;   190 
;   191     /***************/
;   192     /* Start loop */
;   193     /***************/
;   194 
;   195     for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
   MOV      R7,#+0x1
   B        ??testloop_3
;   196     {
;   197         Proc_5();
;   198         Proc_4();
;   199         /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
;   200         Int_1_Loc = 2;
;   201         Int_2_Loc = 3;
;   202         strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
;   203         Enum_Loc = Ident_2;
;   204         Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
;   205         /* Bool_Glob == 1 */
;   206         while (Int_1_Loc < Int_2_Loc)  /* loop body executed once */
;   207         {
;   208             Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
;   209             /* Int_3_Loc == 7 */
;   210             Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
;   211             /* Int_3_Loc == 7 */
;   212             Int_1_Loc += 1;
;   213         } /* while */
;   214         /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
;   215         Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
;   216         /* Int_Glob == 5 */
;   217         Proc_1 (Ptr_Glob);
;   218         for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
;   219                              /* loop body executed twice */
;   220         {
;   221             if (Enum_Loc == Func_1 (Ch_Index, 'C'))
??testloop_4:
   LDRB     R9,[SP, #+4]
   MOV      R1,#+0x43
   MOV      R0,R8
   BL       Func_1
   AND      R0,R0,#+0xFF       ;; Zero extend
   CMP      R9,R0
   BNE      ??testloop_5
;   222             /* then, not executed */
;   223             {
;   224                 Proc_6 (Ident_1, &Enum_Loc);
   ADD      R1,SP,#+0x4
   MOV      R0,#+0x0
   BL       Proc_6
;   225                 strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
   LDR      R0,??testloop_0+16  ;; #`?<Constant "DHRYSTONE PROGRAM, 3\\'...">`
   ADD      R1,SP,#+0x5
??testloop_6:
   LDRB     R2,[R0], #+1
   STRB     R2,[R1], #+1
   CMP      R2,#+0x0
   BNE      ??testloop_6
;   226                 Int_2_Loc = Run_Index;
;   227                 Int_Glob = Run_Index;
   STR      R7,[R5, #+208]
;   228             }
;   229         }
??testloop_5:
   ADD      R8,R8,#+0x1
??testloop_7:
   LDRB     R0,[R5, #+201]
   AND      R8,R8,#+0xFF       ;; Zero extend
   CMP      R0,R8
   BCS      ??testloop_4
;   230         /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
;   231         Int_2_Loc = Int_2_Loc * Int_1_Loc;
;   232         Int_1_Loc = Int_2_Loc / Int_3_Loc;
;   233         Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
;   234         /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
;   235         Proc_2 (&Int_1_Loc);
   LDRB     R1,[R5, #+200]
   CMP      R1,#+0x41
   BEQ      ??testloop_8
??testloop_9:
   AND      R0,R0,#+0xFF       ;; Zero extend
   CMP      R0,#+0x0
   BNE      ??testloop_9
??testloop_8:
   ADD      R7,R7,#+0x1
??testloop_3:
   CMP      R4,R7
   BLT      ??testloop_10
   MOV      R0,#+0x41
   STRB     R0,[R5, #+200]
   MOV      R0,#+0x1
   STR      R0,[R5, #+204]
   MOV      R0,#+0x42
   STRB     R0,[R5, #+201]
   LDR      R0,??testloop_0+20  ;; #`?<Constant "DHRYSTONE PROGRAM, 2\\'...">`
   ADD      R1,SP,#+0x5
??testloop_11:
   LDRB     R2,[R0], #+1
   STRB     R2,[R1], #+1
   CMP      R2,#+0x0
   BNE      ??testloop_11
   MOV      R0,#+0x1
   STRB     R0,[SP, #+4]
   ADD      R1,SP,#+0x5
   ADD      R0,SP,#+0x24
   BL       Func_2
   CMP      R0,#+0x0
   MOVEQ    R0,#+0x1
   MOVNE    R0,#+0x0
   STR      R0,[R5, #+204]
   MOV      R0,#+0x7
   STR      R0,[SP, #+0]
   MOV      R2,SP
   MOV      R1,#+0x3
   MOV      R0,#+0x2
   BL       Proc_7
   LDR      R3,[SP, #+0]
   MOV      R2,#+0x3
   MOV      R1,R6
   MOV      R0,R5
   BL       Proc_8
   LDR      R0,[R5, #+216]
   BL       Proc_1
   MOV      R8,#+0x41
   B        ??testloop_7
;   236         /* Int_1_Loc == 5 */
;   237 
;   238     } /* loop "for Run_Index" */
;   239 
;   240 }
??testloop_10:
   ADD      SP,SP,#+0x44       ;; stack cleaning
        CFI CFA SP+28
   LDMIA    SP!,{R4-R9,PC}     ;; return
   DATA     
??testloop_0:
   DC32     Arr_1_Glob
   DC32     `?<Constant "DHRYSTONE PROGRAM, SO...">`
   DC32     `?<Constant "DHRYSTONE PROGRAM, 1\\'...">`
   DC32     Arr_2_Glob
   DC32     `?<Constant "DHRYSTONE PROGRAM, 3\\'...">`
   DC32     `?<Constant "DHRYSTONE PROGRAM, 2\\'...">`
        CFI EndBlock cfiBlock5

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(0)
`?<Constant "DHRYSTONE PROGRAM, SO...">`:
	DC8 "DHRYSTONE PROGRAM, SOME STRING"

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(0)
`?<Constant "DHRYSTONE PROGRAM, 1\\'...">`:
	DC8 "DHRYSTONE PROGRAM, 1'ST STRING"

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(0)
`?<Constant "DHRYSTONE PROGRAM, 2\\'...">`:
	DC8 "DHRYSTONE PROGRAM, 2'ND STRING"

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(0)
`?<Constant "DHRYSTONE PROGRAM, 3\\'...">`:
	DC8 "DHRYSTONE PROGRAM, 3'RD STRING"

        RSEG INITTAB:CODE:ROOT(2)
?init?tab?HUGE_Z:
   DCD      sfe(HUGE_Z) - sfb(HUGE_Z), sfb(HUGE_Z), sfb(HUGE_Z)

        END
;   241 
;   242 
;   243 
; 
;    124 bytes in segment HUGE_C    
; 10 244 bytes in segment HUGE_Z    
;     12 bytes in segment INITTAB   
;    864 bytes in segment NEARFUNC_A
; 
;    864 bytes of CODE      memory (+ 12 bytes shared)
;    124 bytes of HUGECONST memory
; 10 244 bytes of HUGEDATA  memory
;
;Errors: none
;Warnings: none

⌨️ 快捷键说明

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