📄 dhry_2.s79
字号:
NAME dhry_2
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)
EXTERN Int_Glob
EXTERN Ch_1_Glob
PUBLIC Func_1
FUNCTION Func_1,0203H
PUBLIC Func_2
FUNCTION Func_2,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC Func_3
FUNCTION Func_3,0203H
PUBLIC Proc_6
FUNCTION Proc_6,0203H
LOCFRAME CSTACK, 4, STACK
PUBLIC Proc_7
FUNCTION Proc_7,0203H
PUBLIC Proc_8
FUNCTION Proc_8,0203H
LOCFRAME CSTACK, 16, STACK
; C:\At91\software\projects\bench\Source\dhry_2.c
; 1 /*
; 2 ****************************************************************************
; 3 *
; 4 * "DHRYSTONE" Benchmark Program
; 5 * -----------------------------
; 6 *
; 7 * Version: C, Version 2.1
; 8 *
; 9 * File: dhry_2.c (part 3 of 3)
; 10 *
; 11 * Date: May 25, 1988
; 12 *
; 13 * Author: Reinhold P. Weicker
; 14 *
; 15 ****************************************************************************
; 16 */
; 17
; 18 #include "dhry.h"
; 19 #include <string.h>
; 20
; 21 #ifndef REG
; 22 #define REG
; 23 /* REG becomes defined as empty */
; 24 /* i.e. no register variables */
; 25 #endif
; 26
; 27 extern int Int_Glob;
; 28 extern char Ch_1_Glob;
; 29
RSEG NEARFUNC_A:CODE:REORDER: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 Func_3
CODE32
; 30 Boolean Func_3 (Enumeration Enum_Par_Val)
; 31 /***************************/
; 32 /* executed once */
; 33 /* Enum_Par_Val == Ident_3 */
; 34 {
; 35 Enumeration Enum_Loc;
; 36
; 37 Enum_Loc = Enum_Par_Val;
; 38 if (Enum_Loc == Ident_3)
Func_3:
AND R0,R0,#+0xFF ;; Zero extend
CMP R0,#+0x2
; 39 return (true);
MOVEQ R0,#+0x1
MOVEQ PC,LR ;; return
; 40 else /* not executed */
; 41 return (false);
MOV R0,#+0x0
MOV PC,LR ;; return
CFI EndBlock cfiBlock0
; 42 } /* Func_3 */
; 43
RSEG NEARFUNC_A:CODE:NOROOT(2)
CFI Block cfiBlock1 Using cfiCommon0
CFI Function Proc_6
CODE32
; 44 void Proc_6 ( Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par)
; 45 /*********************************/
; 46 /* executed once */
; 47 /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
; 48 {
Proc_6:
STMDB SP!,{LR} ;; Push
CFI RET Frame(CFA, -4)
CFI CFA SP+4
; 49 *Enum_Ref_Par = Enum_Val_Par;
STRB R0,[R1, #+0]
; 50 if (! Func_3 (Enum_Val_Par))
AND R0,R0,#+0xFF ;; Zero extend
CMP R0,#+0x2
; 51 /* then, not executed */
; 52 *Enum_Ref_Par = Ident_4;
MOVNE R2,#+0x3
STRNEB R2,[R1, #+0]
; 53 switch (Enum_Val_Par)
CMP R0,#+0x0
BEQ ??Proc_6_0
CMP R0,#+0x1
BEQ ??Proc_6_1
CMP R0,#+0x2
BEQ ??Proc_6_2
CMP R0,#+0x4
BEQ ??Proc_6_3
; 54 {
; 55 case Ident_1:
; 56 *Enum_Ref_Par = Ident_1;
; 57 break;
; 58 case Ident_2:
; 59 if (Int_Glob > 100)
; 60 *Enum_Ref_Par = Ident_1;
; 61 else
; 62 *Enum_Ref_Par = Ident_4;
; 63 break;
; 64 case Ident_3: /* executed */
; 65 *Enum_Ref_Par = Ident_2;
; 66 break;
; 67 case Ident_4:
; 68 break;
; 69 case Ident_5:
; 70 *Enum_Ref_Par = Ident_3;
; 71 break;
; 72 } /* switch */
; 73 } /* Proc_6 */
LDMIA SP!,{PC} ;; return
??Proc_6_0:
MOV R0,#+0x0
B ??Proc_6_4
??Proc_6_1:
LDR R0,??Proc_6_5 ;; #Int_Glob
LDR R2,[R0, #+0]
CMP R2,#+0x65
MOVGE R0,#+0x0
BGE ??Proc_6_4
MOV R0,#+0x3
B ??Proc_6_4
??Proc_6_2:
MOV R0,#+0x1
B ??Proc_6_4
??Proc_6_3:
MOV R0,#+0x2
??Proc_6_4:
STRB R0,[R1, #+0]
LDMIA SP!,{PC} ;; return
DATA
??Proc_6_5:
DC32 Int_Glob
CFI EndBlock cfiBlock1
; 74
; 75
RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
CFI Block cfiBlock2 Using cfiCommon0
CFI Function Proc_7
CODE32
; 76 void Proc_7 ( One_Fifty Int_1_Par_Val,
; 77 One_Fifty Int_2_Par_Val,
; 78 One_Fifty *Int_Par_Ref )
; 79 /**********************************************/
; 80 /* executed three times */
; 81 /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */
; 82 /* Int_Par_Ref becomes 7 */
; 83 /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
; 84 /* Int_Par_Ref becomes 17 */
; 85 /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
; 86 /* Int_Par_Ref becomes 18 */
; 87 {
; 88 One_Fifty Int_Loc;
; 89
; 90 Int_Loc = Int_1_Par_Val + 2;
; 91 *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
Proc_7:
ADD R0,R0,R1
ADD R0,R0,#+0x2
STR R0,[R2, #+0]
; 92 } /* Proc_7 */
MOV PC,LR ;; return
CFI EndBlock cfiBlock2
; 93
; 94
RSEG NEARFUNC_A:CODE:NOROOT(2)
CFI Block cfiBlock3 Using cfiCommon0
CFI Function Proc_8
CODE32
; 95 void Proc_8 ( Arr_1_Dim Arr_1_Par_Ref,
; 96 Arr_2_Dim Arr_2_Par_Ref,
; 97 int Int_1_Par_Val,
; 98 int Int_2_Par_Val)
; 99 /*********************************************************************/
; 100 /* executed once */
; 101 /* Int_Par_Val_1 == 3 */
; 102 /* Int_Par_Val_2 == 7 */
; 103 {
Proc_8:
STMDB SP!,{R4-R7} ;; Push
CFI R7 Frame(CFA, -4)
CFI R6 Frame(CFA, -8)
CFI R5 Frame(CFA, -12)
CFI R4 Frame(CFA, -16)
CFI CFA SP+16
; 104 REG One_Fifty Int_Index;
; 105 REG One_Fifty Int_Loc;
; 106
; 107 Int_Loc = Int_1_Par_Val + 5;
ADD R2,R2,#+0x5
; 108 Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
MOV R4,R2, LSL #+2
STR R3,[R4, +R0]
; 109 Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
ADD R3,R2,#+0x1
LDR R5,[R4, +R0]
STR R5,[R0, +R3, LSL #+2]
; 110 Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
ADD R5,R2,#+0x1E
STR R2,[R0, +R5, LSL #+2]
; 111 for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index)
MOV R5,R2
MOV R6,#+0xC8
MUL R7,R2,R6
ADD R6,R7,R1
ADD R6,R4,R6
MOV R7,R3
B ??Proc_8_0
; 112 Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc;
??Proc_8_1:
STR R2,[R6, #+0]
ADD R5,R5,#+0x1
ADD R6,R6,#+0x4
??Proc_8_0:
CMP R7,R5
BGE ??Proc_8_1
; 113 Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
MOV R3,#+0xC8
MUL R5,R2,R3
ADD R3,R5,R1
SUB R5,R2,#+0x1
LDR R6,[R3, +R5, LSL #+2]
ADD R6,R6,#+0x1
STR R6,[R3, +R5, LSL #+2]
; 114 Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc];
LDR R3,[R4, +R0]
ADD R0,R2,#+0x14
MOV R2,#+0xC8
MUL R5,R0,R2
ADD R0,R5,R1
STR R3,[R4, +R0]
; 115 Int_Glob = 5;
MOV R0,#+0x5
LDR R1,??Proc_8_2 ;; #Int_Glob
STR R0,[R1, #+0]
; 116 } /* Proc_8 */
LDMIA SP!,{R4-R7} ;; Pop
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI CFA SP+0
MOV PC,LR ;; return
DATA
??Proc_8_2:
DC32 Int_Glob
CFI EndBlock cfiBlock3
; 117
; 118
RSEG NEARFUNC_A:CODE:REORDER:NOROOT(2)
CFI Block cfiBlock4 Using cfiCommon0
CFI Function Func_1
CODE32
; 119 Enumeration Func_1 (Capital_Letter Ch_1_Par_Val, Capital_Letter Ch_2_Par_Val)
; 120 /*************************************************/
; 121 /* executed three times */
; 122 /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */
; 123 /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */
; 124 /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */
; 125 {
; 126 Capital_Letter Ch_1_Loc;
; 127 Capital_Letter Ch_2_Loc;
; 128
; 129 Ch_1_Loc = Ch_1_Par_Val;
; 130 Ch_2_Loc = Ch_1_Loc;
; 131 if (Ch_2_Loc != Ch_2_Par_Val)
Func_1:
AND R2,R0,#+0xFF ;; Zero extend
AND R1,R1,#+0xFF ;; Zero extend
CMP R2,R1
; 132 /* then, executed */
; 133 return (Ident_1);
MOVNE R0,#+0x0
; 134 else /* not executed */
; 135 {
; 136 Ch_1_Glob = Ch_1_Loc;
LDREQ R0,??Func_1_0 ;; #Ch_1_Glob
STREQB R2,[R0, #+0]
; 137 return (Ident_2);
MOVEQ R0,#+0x1
AND R0,R0,#+0xFF ;; Zero extend
MOV PC,LR ;; return
DATA
??Func_1_0:
DC32 Ch_1_Glob
CFI EndBlock cfiBlock4
; 138 }
; 139 } /* Func_1 */
; 140
; 141
RSEG NEARFUNC_A:CODE:NOROOT(2)
CFI Block cfiBlock5 Using cfiCommon0
CFI Function Func_2
CODE32
; 142 Boolean Func_2 (Str_30 Str_1_Par_Ref, Str_30 Str_2_Par_Ref)
; 143 /*************************************************/
; 144 /* executed once */
; 145 /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */
; 146 /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */
; 147
; 148 {
Func_2:
STMDB SP!,{R4,R5} ;; Push
CFI R5 Frame(CFA, -4)
CFI R4 Frame(CFA, -8)
CFI CFA SP+8
; 149 REG One_Thirty Int_Loc;
; 150 Capital_Letter Ch_Loc;
; 151
; 152 Int_Loc = 2;
MOV R2,#+0x2
B ??Func_2_0
; 153 while (Int_Loc <= 2) /* loop body executed once */
; 154 if (Func_1 (Str_1_Par_Ref[Int_Loc],
; 155 Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
; 156 /* then, executed */
; 157 {
; 158 Ch_Loc = 'A';
; 159 Int_Loc += 1;
??Func_2_1:
ADD R2,R2,#+0x1
; 160 } /* if, while */
CMP R2,#+0x3
BGE ??Func_2_2
??Func_2_0:
LDRB R3,[R2, +R0]
ADD R4,R2,#+0x1
LDRB R5,[R4, +R1]
CMP R3,R5
BNE ??Func_2_1
LDR R4,??Func_2_3 ;; #Ch_1_Glob
STRB R3,[R4, #+0]
B ??Func_2_0
; 161
; 162 if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
; 163 /* then, not executed */
; 164 Int_Loc = 7;
; 165 if (Ch_Loc == 'R')
; 166 /* then, not executed */
; 167 return (true);
; 168 else /* executed */
; 169 {
; 170 if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
??Func_2_2:
LDRB R4,[R1], #+1
LDRB R3,[R0], #+1
CMP R3,R4
BNE ??Func_2_4
CMP R3,#+0x0
BNE ??Func_2_2
MOV R5,#+0x0
B ??Func_2_5
??Func_2_4:
SUB R5,R3,R4
??Func_2_5:
CMP R5,#+0x1
BLT ??Func_2_6
; 171 /* then, not executed */
; 172 {
; 173 Int_Loc += 7;
; 174 Int_Glob = Int_Loc;
ADD R0,R2,#+0x7
LDR R1,??Func_2_3+4 ;; #Int_Glob
STR R0,[R1, #+0]
; 175 return (true);
MOV R0,#+0x1
B ??Func_2_7
; 176 }
; 177 else /* executed */
; 178 return (false);
??Func_2_6:
MOV R0,#+0x0
??Func_2_7:
LDMIA SP!,{R4,R5} ;; Pop
CFI R4 SameValue
CFI R5 SameValue
CFI CFA SP+0
MOV PC,LR ;; return
DATA
??Func_2_3:
DC32 Ch_1_Glob
DC32 Int_Glob
CFI EndBlock cfiBlock5
; 179 } /* if Ch_Loc */
; 180 } /* Func_2 */
END
; 181
; 182
; 183
;
; 500 bytes in segment NEARFUNC_A
;
; 500 bytes of CODE memory
;
;Errors: none
;Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -