📄 424dhrys
字号:
// 0000 ; DHRYSTONE Benchmark Program
// 0000 ; ===========================
// 0000 ;
// 0000 ; This program was developed to evaluate processor performance. The
// 0000 ; (Ada) original version was published in
// 0000 ; "Communications of the ACM" Vol.27, no. 10 (Oct. 1984),
// 0000 ; pp. 1013 - 1030.
// 0000 ;
// 0000 ; Further versions:
// 0000 ; SIGPLAN 1988, Aug, pp.49-62 (C-Version 2.0)
// 0000 ; IEEE Computer 1990, Dec, pp. 65-75 (discussion, comparison)
// 0000 ;
// 0000 ; This program is based on the C version 2.1 of Reinhold P. Weicker.
// 0000 ; The corresponding C instruction precedes the instructions. In the
// 0000 ; present version optimized manually, a D precedes optimized instructions,
// 0000 ; if this was moved in earlier delay slots of branch instructions or as
// 0000 ; a delayed load instruction.
// 0000 ;
// 0000 ; Time measurement only occurs between the two labels time_on and
// 0000 ; time_off, as irrelevant initializations are done before. The time
// 0000 ; computed by SWI 4 is found in register 03 and at address &1cc.
// 0000 ; Value control is then accomplished by checking memory variables.
// 0000 ; The final values are noted after the variables in {} parenthesis.
// 0000 ; Except for strings, all values are noted in quadbytes.
// 0000
// 0000
// 0000 ;This constant gives the number of executions of the main loop.
// 0000
// 0000 Number_Of_Runs equ 100
// 0000
// 0000 org $0
// 0000
80000096 // 0000 call main ;branch to main program
60F800E8 // 0004 MOV R31,Stack ;set stack pointer to first element
// 0008
// 0008 size_of_Rec_Type equ 48
// 0008 Ptr_Comp_offset equ 0
// 0008 Discr_offset equ 4
// 0008 Enum_Comp_offset equ 8
// 0008 Int_Comp_offset equ 12
// 0008 Str_Comp_offset equ 16
// 0008 Ident_1 equ 0
// 0008 Ident_2 equ 1
// 0008 Ident_3 equ 2
// 0008 Ident_4 equ 3
// 0008 Ident_5 equ 4
// 0008
// 0008 ;********************
// 0008 ;Variable definitions
// 0008 ;********************
XXXXXXXX // 0008 Ptr_Glob: ds.q 1 ;$008 R07 {$0000019c}
// 000c Next_Ptr_Glob: ;$00c R08 {$0000016c}
XXXXXXXX // 000c ds.q 1
XXXXXXXX // 0010 Int_Glob: ds.q 1 ;$010 R09 {$00000005}
XXXXXXXX // 0014 Bool_Glob: ds.q 1 ;$014 R10 {$00000001}
XXXXXXXX // 0018 Ch_1_Glob: ds.q 1 ;$018 R11 {$00000041}
XXXXXXXX // 001c Ch_2_Glob: ds.q 1 ;$01c R12 {$00000042}
XXXXXXXX // 0020 Arr_1_Glob: ds.q 50 ;$020-$0e7 {Arr_1_Glob[8]=$040 = {$00000007}}
XXXXXXXX // 0024
XXXXXXXX // 0028
XXXXXXXX // 002c
XXXXXXXX // 0030
XXXXXXXX // 0034
XXXXXXXX // 0038
XXXXXXXX // 003c
XXXXXXXX // 0040
XXXXXXXX // 0044
XXXXXXXX // 0048
XXXXXXXX // 004c
XXXXXXXX // 0050
XXXXXXXX // 0054
XXXXXXXX // 0058
XXXXXXXX // 005c
XXXXXXXX // 0060
XXXXXXXX // 0064
XXXXXXXX // 0068
XXXXXXXX // 006c
XXXXXXXX // 0070
XXXXXXXX // 0074
XXXXXXXX // 0078
XXXXXXXX // 007c
XXXXXXXX // 0080
XXXXXXXX // 0084
XXXXXXXX // 0088
XXXXXXXX // 008c
XXXXXXXX // 0090
XXXXXXXX // 0094
XXXXXXXX // 0098
XXXXXXXX // 009c
XXXXXXXX // 00a0
XXXXXXXX // 00a4
XXXXXXXX // 00a8
XXXXXXXX // 00ac
XXXXXXXX // 00b0
XXXXXXXX // 00b4
XXXXXXXX // 00b8
XXXXXXXX // 00bc
XXXXXXXX // 00c0
XXXXXXXX // 00c4
XXXXXXXX // 00c8
XXXXXXXX // 00cc
XXXXXXXX // 00d0
XXXXXXXX // 00d4
XXXXXXXX // 00d8
XXXXXXXX // 00dc
XXXXXXXX // 00e0
XXXXXXXX // 00e4
// 00e8 even
// 00e8 Arr_2_Glob equ $1000 ;$1000 {Arr_2_Glob[8][7] = control}
// 00e8
XXXXXXXX // 00e8 Stack: ds.q 10 ;$0e8-$10f
XXXXXXXX // 00ec
XXXXXXXX // 00f0
XXXXXXXX // 00f4
XXXXXXXX // 00f8
XXXXXXXX // 00fc
XXXXXXXX // 0100
XXXXXXXX // 0104
XXXXXXXX // 0108
XXXXXXXX // 010c
// 0110
XXXXXXXX // 0110 Int_1_Loc: ds.q 1 ;$110 {$00000005}
XXXXXXXX // 0114 Int_2_Loc: ds.q 1 ;$114 {$0000000d}
XXXXXXXX // 0118 Int_3_Loc: ds.q 1 ;$118 {$00000007}
XXXXXXXX // 011c Ch_Index: ds.q 1 ;$11c R15
XXXXXXXX // 0120 Enum_Loc: ds.q 1 ;$120
XXXXXXXX // 0124 Str_1_Loc: ds.b 31 ;$124-$143 {"DHRYSTONE PROGRAM, 1'ST STRING"}
XXXXXXXX // 0128
XXXXXXXX // 012c
XXXXXXXX // 0130
XXXXXXXX // 0134
XXXXXXXX // 0138
XXXXXXXX // 013c
XXXXXXXX // 0140
// 0144 even
XXXXXXXX // 0144 Str_2_Loc: ds.b 31 ;$144-$163 {~DHRYSTONE PROGRAM, 2'ND STRING"}
XXXXXXXX // 0148
XXXXXXXX // 014c
XXXXXXXX // 0150
XXXXXXXX // 0154
XXXXXXXX // 0158
XXXXXXXX // 015c
XXXXXXXX // 0160
// 0164 even
XXXXXXXX // 0164 Run_Index: ds.q 1 ;$164 R16
// 0168
// 0168 ;For a better control, the element Arr_2_Glob[8][7] will later stand here
XXXXXXXX // 0168 Control: ds.q 1 ;$168 {number of runs + 10}
// 016c
// 016c ;Structure of record:
// 016c ;typedef struct record
// 016c ;{
// 016c ; struct record *Ptr_Comp;
// 016c ; Enumeration Discr;
// 016c ; struct
// 016c ; {
// 016c ; Enumeration Enum_Comp;
// 016c ; int Int_Comp;
// 016c ; char Str_Comp[31];
// 016c ; }
// 016c ;}
// 016c
// 016c Rec_Type1: ;$16c-$19b {$0000016c,$00000000,$00000001,$00000012,
// 016c ; "DHRYSTONE PROGRAM, SOME STRING"}
00000000 // 016c dcb.q 1+1+1+1+32/4(0)
00000000 // 0170
00000000 // 0174
00000000 // 0178
00000000 // 017c
00000000 // 0180
00000000 // 0184
00000000 // 0188
00000000 // 018c
00000000 // 0190
00000000 // 0194
00000000 // 0198
// 019c
// 019c Rec_Type2: ;$19c-$1cb {$0000016C,$00000000,$00000002,$00000011,
// 019c ; "DHRYSTONE PROGRAM, SOME STRING"}
00000000 // 019c dcb.q 1+1+1+1+32/4(0)
00000000 // 01a0
00000000 // 01a4
00000000 // 01a8
00000000 // 01ac
00000000 // 01b0
00000000 // 01b4
00000000 // 01b8
00000000 // 01bc
00000000 // 01c0
00000000 // 01c4
00000000 // 01c8
// 01cc even
// 01cc Time_result: ;$1cc
00000000 // 01cc dc.q 0
// 01d0 string1: ;$1d0-$1ef
59524844 // 01d0 dc.b 'DHRYSTONE PROGRAM, 1',39,'ST STRING',0
4E4F5453 // 01d4
52502045 // 01d8
4152474F // 01dc
31202C4D // 01e0
20545327 // 01e4
49525453 // 01e8
XX00474E // 01ec
// 01f0 even
// 01f0 string2: ;$1f0-$20f
59524844 // 01f0 dc.b 'DHRYSTONE PROGRAM, 2',39,'ND STRING',0
4E4F5453 // 01f4
52502045 // 01f8
4152474F // 01fc
32202C4D // 0200
20444E27 // 0204
49525453 // 0208
XX00474E // 020c
// 0210 even
// 0210 string3: ;$210-$22f
59524844 // 0210 dc.b 'DHRYSTONE PROGRAM, 3',39,'RD STRING',0
4E4F5453 // 0214
52502045 // 0218
4152474F // 021c
33202C4D // 0220
20445227 // 0224
49525453 // 0228
XX00474E // 022c
// 0230 even
// 0230 string4: ;$230-$24f
59524844 // 0230 dc.b 'DHRYSTONE PROGRAM, SOME STRING',0
4E4F5453 // 0234
52502045 // 0238
4152474F // 023c
53202C4D // 0240
20454D4F // 0244
49525453 // 0248
XX00474E // 024c
// 0250 even
// 0250 ;Two values for time measurement
// 0250 Time1:
00000001 // 0250 dc.q 1
// 0254 Time2:
00000002 // 0254 dc.q 2
// 0258
// 0258
// 0258 ;****
// 0258 main:
// 0258 ;****
// 0258 ;Begin of main program with initializations.
// 0258
// 0258 ;D MOV R31,Stack ;set stack pointer to first element
// 0258
// 0258 ;Next_Ptr_Glob = (Rec_Pointer) malloc( sizeof( Rec_Type));
6040016C // 0258 MOV R08,Rec_Type1
// 025c
// 025c ;Ptr_Glob = (Rec_Pointer) malloc( sizeof( Rec_Type));
6038019C // 025c MOV R07,Rec_Type2
// 0260
// 0260 ;Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
2E41C000 // 0260 ST R08,R07,Ptr_Comp_offset
// 0264
// 0264 ;Ptr_Glob->Discr = Ident_1;
60680000 // 0264 MOV R13,Ident_1
2E69C001 // 0268 ST R13,R07,Discr_offset
// 026c
// 026c ;Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
60680002 // 026c MOV R13,Ident_3
2E69C002 // 0270 ST R13,R07,Enum_Comp_offset
// 0274
// 0274 ;Ptr_Glob->variant.var_1.Int_Comp = 40
60680028 // 0274 MOV R13,40
2E69C003 // 0278 ST R13,R07,Int_Comp_offset
// 027c
// 027c ;strcpy(Ptr_Glob->variant.var_1.Str_Comp,"DHRYSTONE PROGRAM, SOME STRING");
6009C010 // 027c ADD R01,R07,Str_Comp_offset
800001FC // 0280 CALL strcpy
60100230 // 0284 MOV R02,string4
// 0288
// 0288 ;strcpy(Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
60080124 // 0288 MOV R01,Str_1_Loc
800001FC // 028c CALL strcpy
601001D0 // 0290 MOV R02,string1
// 0294
// 0294 ;Arr_2_Glob [8][7] = 10;
60681000 // 0294 MOV R13,Arr_2_Glob
606B465C // 0298 ADD R13,R13,8*4*50+7*4
6070000A // 029c MOV R14,10
2F70000D // 02a0 ST.q R14,R00,R13
// 02a4
// 02a4 time_on:
// 02a4 ;Run time is measured from here on,
// 02a4 ;the end is at time_off.
FD000004 // 02a4 SWI 4 ; DO NOT CHANGE !!!
49000000 // 02a8 NOP ; DO NOT CHANGE !!!
2E080094 // 02ac ST R01,R00,Time1 ; DO NOT CHANGE !!!
FD000004 // 02b0 SWI 4 ; DO NOT CHANGE !!!
49000000 // 02b4 NOP ; DO NOT CHANGE !!!
2E080095 // 02b8 ST R01,R00,Time2 ; DO NOT CHANGE !!!
// 02bc
// 02bc ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 02bc ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 02bc ;
// 02bc ; Start of time measurement
// 02bc ;
// 02bc ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 02bc ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// 02bc
// 02bc ;for(Run_Index=1;Run_Index <= Number_Of_Runs; ++Run_Index)
60800001 // 02bc MOV R16,1
E0880000 // 02c0 LDH R17,Number_Of_Runs
448C4064 // 02c4 OR R17,R17,Number_Of_Runs
// 02c8 for_loop:
6B040011 // 02c8 CMP.f R16,R17
FC300057 // 02cc Bgt end_loop
49000000 // 02d0 NOP
// 02d4 for_loop_2:
// 02d4 ;Proc_5(); ;call of procedure
80000164 // 02d4 CALL Proc_5
60580041 // 02d8 MOV R11,'A'
// 02dc
// 02dc ;Proc_4(); ;call of procedure
8000015E // 02dc CALL Proc_4
// 02e0
// 02e0 ;Int_1_Loc = 2;
60900002 // 02e0 MOV R18,2
2E900044 // 02e4 ST R18,R00,Int_1_Loc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -