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