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

📄 dhry_1.s79

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 S79
📖 第 1 页 / 共 2 页
字号:
        NAME dhry_1

        RTMODEL "__code_model", "small"
        RTMODEL "__cpu_mode", "arm"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "2"
        RTMODEL "__thumb_aware", "enabled"

        RSEG CSTACK:DATA:NOROOT(2)
        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)

        EXTERN Proc_7
        FUNCTION Proc_7,0202H
        EXTERN Proc_6
        FUNCTION Proc_6,0202H
        EXTERN malloc
        FUNCTION malloc,010202H
        EXTERN Func_1
        FUNCTION Func_1,0202H
        EXTERN Func_2
        FUNCTION Func_2,0202H
        EXTERN Proc_8
        FUNCTION Proc_8,0202H

        PUBWEAK ?init?tab?HUGE_Z
        PUBLIC Arr_1_Glob
        PUBLIC Arr_2_Glob
        PUBLIC Begin_Time
        PUBLIC Bool_Glob
        PUBLIC Ch_1_Glob
        PUBLIC Ch_2_Glob
        PUBLIC Dhrystones_Per_Second
        PUBLIC End_Time
        PUBLIC Int_Glob
        PUBLIC Microseconds
        PUBLIC Next_Ptr_Glob
        PUBLIC Proc_1
        FUNCTION Proc_1,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC Proc_2
        FUNCTION Proc_2,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC Proc_3
        FUNCTION Proc_3,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC Proc_4
        FUNCTION Proc_4,0203H
        PUBLIC Proc_5
        FUNCTION Proc_5,0203H
        PUBLIC Ptr_Glob
        PUBLIC Reg
        PUBLIC User_Time
        PUBLIC testloop
        FUNCTION testloop,0203H
        LOCFRAME CSTACK, 96, STACK
; C:\At91\software\projects\bench\Source\dhry_1.c
;     1 /*
;     2  ****************************************************************************
;     3  *
;     4  *                   "DHRYSTONE" Benchmark Program
;     5  *                   -----------------------------
;     6  *
;     7  *  Version:    C, Version 2.1
;     8  *
;     9  *  File:       dhry_1.c (part 2 of 3)
;    10  *
;    11  *  Date:       May 25, 1988
;    12  *
;    13  *  Author:     Reinhold P. Weicker
;    14  *
;    15  ****************************************************************************
;    16  */
;    17 
;    18 #include <string.h>
;    19 #include <stdlib.h>
;    20 #include "dhry.h"
;    21 
;    22 
;    23 /* Global Variables: */
;    24 

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    25 Rec_Pointer     Ptr_Glob,
;    26                 Next_Ptr_Glob;
;    27 int             Int_Glob;
;    28 Boolean         Bool_Glob;
;    29 char            Ch_1_Glob,
;    30                 Ch_2_Glob;
;    31 int             Arr_1_Glob [50];
Arr_1_Glob:
	DS8 200
Ch_1_Glob:
	DS8 1
Ch_2_Glob:
	DS8 1
	DS8 2
Bool_Glob:
	DS8 4
Int_Glob:
	DS8 4
Next_Ptr_Glob:
	DS8 4
Ptr_Glob:
	DS8 4

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    32 int             Arr_2_Glob [50] [50];
Arr_2_Glob:
	DS8 10000
;    33 
;    34 //extern char     *malloc (int i );
;    35 extern Enumeration Func_1 (Capital_Letter Ch_1_Par_Val, Capital_Letter Ch_2_Par_Val);
;    36 extern Boolean Func_2 (Str_30  Str_1_Par_Ref, Str_30  Str_2_Par_Ref) ;
;    37   /* forward declaration necessary since Enumeration may not simply be int */
;    38 extern Boolean Func_3 (Enumeration Enum_Par_Val);
;    39 extern void Proc_6 ( Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par) ;
;    40 extern void Proc_7 ( One_Fifty Int_1_Par_Val,
;    41               One_Fifty Int_2_Par_Val,
;    42               One_Fifty *Int_Par_Ref ) ;
;    43 extern void Proc_8 ( Arr_1_Dim Arr_1_Par_Ref,
;    44               Arr_2_Dim Arr_2_Par_Ref,
;    45               int Int_1_Par_Val,
;    46               int Int_2_Par_Val) ;
;    47 void Proc_1 (Rec_Pointer Ptr_Val_Par) ;
;    48 void Proc_2 (One_Fifty *Int_Par_Ref) ;
;    49 void Proc_3 (Rec_Pointer *Ptr_Ref_Par) ;
;    50 void Proc_4 ( void ) ;
;    51 void Proc_5 ( void ) ;
;    52 
;    53 
;    54 #ifndef REG

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    55         Boolean Reg = false;
Reg:
	DS8 4
;    56 #define REG
;    57         /* REG becomes defined as empty */
;    58         /* i.e. no register variables   */
;    59 #else
;    60         Boolean Reg = true;
;    61 #endif
;    62 
;    63 /* variables for time measurement: */

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    64 long            Begin_Time,
Begin_Time:
	DS8 4

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    65                 End_Time,
End_Time:
	DS8 4

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    66                 User_Time;
User_Time:
	DS8 4

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    67 float           Microseconds,
Microseconds:
	DS8 4

        RSEG HUGE_Z:HUGEDATA:SORT:NOROOT(2)
;    68                 Dhrystones_Per_Second;
Dhrystones_Per_Second:
	DS8 4
;    69 
;    70 /* end of variables for time measurement */
;    71 
;    72 

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        
        CFI Names cfiNames0
        CFI StackFrame CFA SP HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, SP:32, LR:32
        CFI VirtualResource RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress RET CODE
        CFI CFA SP+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI LR Undefined
        CFI RET LR
        CFI EndCommon cfiCommon0
        
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function Proc_1
   CODE32   
;    73 void Proc_1 (Rec_Pointer Ptr_Val_Par)
;    74 /******************/
;    75 
;    76     /* executed once */
;    77 {
Proc_1:
   STMDB    SP!,{R4-R6,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA SP+16
   MOV      R4,R0
;    78     REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
   LDR      R0,[R4, #+0]
   MOV      R5,R0
;    79                                         /* == Ptr_Glob_Next */
;    80     /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp,    */
;    81     /* corresponds to "rename" in Ada, "with" in Pascal           */
;    82 
;    83     structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
   LDR      R6,??Proc_1_0      ;; #Arr_1_Glob
   LDR      R1,[R6, #+216]
   MOV      R3,#+0x30
??Proc_1_1:
   SUBS     R3,R3,#+0x4
   LDR      R2,[R1, R3]
   STR      R2,[R0, R3]
   BNE      ??Proc_1_1
;    84     Ptr_Val_Par->variant.var_1.Int_Comp = 5;
   MOV      R0,#+0x5
   STR      R0,[R4, #+12]
;    85     Next_Record->variant.var_1.Int_Comp = Ptr_Val_Par->variant.var_1.Int_Comp;
   STR      R0,[R5, #+12]
;    86     Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
   LDR      R0,[R4, #+0]
   STR      R0,[R5, #+0]
;    87     Proc_3 (&Next_Record->Ptr_Comp);
   MOV      R0,R5
;    88     /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp == Ptr_Glob->Ptr_Comp */
;    89     if (Next_Record->Discr == Ident_1)
;    90     {
;    91         Next_Record->variant.var_1.Int_Comp = 6;
;    92         Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
;    93                 &Next_Record->variant.var_1.Enum_Comp);
;    94         Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
;    95         Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
;    96                 &Next_Record->variant.var_1.Int_Comp);
;    97     }
;    98     else
;    99         structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
;   100 } /* Proc_1 */
;   101 
;   102 
;   103 void Proc_2 (One_Fifty *Int_Par_Ref)
;   104 /******************/
;   105     /* executed once */
;   106     /* *Int_Par_Ref == 1, becomes 4 */
;   107 
;   108 {
;   109     One_Fifty  Int_Loc;
;   110     Enumeration   Enum_Loc;
;   111 
;   112     Int_Loc = *Int_Par_Ref + 10;
;   113     do /* executed once */
;   114         if (Ch_1_Glob == 'A')
;   115         {
;   116             Int_Loc -= 1;
;   117             *Int_Par_Ref = Int_Loc - Int_Glob;
;   118             Enum_Loc = Ident_1;
;   119         }
;   120     while (Enum_Loc != Ident_1); /* true */
;   121 } /* Proc_2 */
;   122 
;   123 
;   124 void Proc_3 (Rec_Pointer *Ptr_Ref_Par)
;   125 /******************/
;   126     /* executed once */
;   127     /* Ptr_Ref_Par becomes Ptr_Glob */
;   128 {
;   129     if (Ptr_Glob != Null)
   LDR      R1,[R6, #+216]
   CMP      R1,#+0x0
;   130         *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
   LDRNE    R2,[R1, #+0]
   STRNE    R2,[R0, #+0]
;   131     Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
   LDR      R0,[R6, #+216]
   ADD      R2,R0,#+0xC
   LDR      R1,[R6, #+208]
   MOV      R0,#+0xA
   BL       Proc_7
;   132 } /* Proc_3 */
   LDRB     R0,[R5, #+4]
   CMP      R0,#+0x0
   BNE      ??Proc_1_2
   MOV      R0,#+0x6
   STR      R0,[R5, #+12]
   ADD      R1,R5,#+0x8
   LDRB     R0,[R4, #+8]
   BL       Proc_6
   LDR      R0,[R6, #+216]
   LDR      R1,[R0, #+0]
   STR      R1,[R5, #+0]
   ADD      R2,R5,#+0xC
   MOV      R1,#+0xA
   LDR      R0,[R5, #+12]
   BL       Proc_7
   LDMIA    SP!,{R4-R6,PC}     ;; return
??Proc_1_2:
   LDR      R0,[R4, #+0]
   MOV      R2,#+0x30
??Proc_1_3:
   SUBS     R2,R2,#+0x4
   LDR      R1,[R0, R2]
   STR      R1,[R4, R2]
   BNE      ??Proc_1_3
   LDMIA    SP!,{R4-R6,PC}     ;; return
   DATA     
??Proc_1_0:
   DC32     Arr_1_Glob
        CFI EndBlock cfiBlock0

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function Proc_2
   CODE32   
Proc_2:
   STMDB    SP!,{R4}           ;; Push
        CFI R4 Frame(CFA, -4)
        CFI CFA SP+4
   LDR      R2,[R0, #+0]
   ADD      R2,R2,#+0xA
   LDR      R3,??Proc_2_0      ;; #Arr_1_Glob
   LDRB     R4,[R3, #+200]
   CMP      R4,#+0x41
   BNE      ??Proc_2_1
   SUB      R1,R2,#+0x1
   LDR      R2,[R3, #+208]
   SUB      R1,R1,R2
   STR      R1,[R0, #+0]
   B        ??Proc_2_2
??Proc_2_1:
   AND      R1,R1,#+0xFF       ;; Zero extend
   CMP      R1,#+0x0
   BNE      ??Proc_2_1
??Proc_2_2:
   LDMIA    SP!,{R4}           ;; Pop
        CFI R4 SameValue
        CFI CFA SP+0

⌨️ 快捷键说明

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