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

📄 424dhrys

📁 大型risc处理器设计源代码,这是书中的代码 基于流水线的risc cpu设计
💻
📖 第 1 页 / 共 4 页
字号:
         // 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 + -