📄 dhry_1.s79
字号:
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 + -