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

📄 424dhrys

📁 大型risc处理器设计源代码,这是书中的代码 基于流水线的risc cpu设计
💻
📖 第 1 页 / 共 4 页
字号:
         // 02e8
         // 02e8    ;Int_2_Loc = 3;
60900003 // 02e8    MOV   R18,3
2E900045 // 02ec    ST    R18,R00,Int_2_Loc
         // 02f0
         // 02f0    ;strcpy(Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
60080144 // 02f0    MOV   R01,Str_2_Loc
800001FC // 02f4    CALL  strcpy
601001F0 // 02f8    MOV   R02,string2
         // 02fc
         // 02fc    ;Enum_Loc = Ident_2;
60900001 // 02fc    MOV   R18,Ident_2
         // 0300 ;D ST    R18,R00,Enum_Loc
         // 0300
         // 0300    ;Bool_Glob = !Func_2 (Str_1_Loc, Str_2_Loc);
60A80124 // 0300    MOV   R21,Str_1_Loc
60B00144 // 0304    MOV   R22,Str_2_Loc
800001C6 // 0308    CALL  Func_2
2E900048 // 030c    ST    R18,R00,Enum_Loc
         // 0310 ;D XOR   R10,R23,1
         // 0310
         // 0310    ;while(Int_1_Loc < Int_2_Loc)
         // 0310    ;{
0E900044 // 0310    LD    R18,R00,Int_1_Loc
0E980045 // 0314    LD    R19,R00,Int_2_Loc
4855C001 // 0318    XOR   R10,R23,1
         // 031c main_0:
6B048013 // 031c    CMP.f R18,R19
FC28000E // 0320    Bge   main_1
         // 0324
         // 0324    ;Int_3_Loc = 5*Int_1_Loc - Int_2_Loc;
50A48002 // 0324    LSL   R20,R18,2
         // 0328 main_0a:
61A50012 // 0328    ADD   R20,R20,R18
69A50013 // 032c    SUB   R20,R20,R19
2EA00046 // 0330    ST    R20,R00,Int_3_Loc
         // 0334
         // 0334    ;Proc_7(Int_1_Loc, Int_2_Loc, &Int_3_Loc)
61D80012 // 0334    MOV   R27,R18
61E00013 // 0338    MOV   R28,R19
8000018D // 033c    CALL  Proc_7
60E80118 // 0340    MOV   R29,Int_3_Loc
         // 0344
         // 0344    ;Int_1_Loc += 1
60948001 // 0344    INC   R18
         // 0348
6B048013 // 0348    CMP.f R18,R19
FC6FFFF7 // 034c    Blt   main_0a
50A48002 // 0350    LSL   R20,R18,2
2E900044 // 0354    ST    R18,R00,Int_1_Loc
         // 0358    ;}
         // 0358
         // 0358 main_1:                    ;end of while loop
         // 0358    ;Proc_8(Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
60A80020 // 0358    MOV   R21,Arr_1_Glob
60B01000 // 035c    MOV   R22,Arr_2_Glob
0EC00046 // 0360    LD    R24,R00,Int_3_Loc
80000192 // 0364    CALL  Proc_8
61B80012 // 0368    MOV   R23,R18
         // 036c
         // 036c    ;Proc_1(Ptr_Glob);
8000011E // 036c    CALL  Proc_1
61980007 // 0370    MOV   R19,R07
         // 0374
         // 0374    ;for(Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
60780041 // 0374    MOV   R15,'A'
         // 0378
         // 0378 main_2:
6B03C00C // 0378    CMP.f R15,R12
FC300014 // 037c    Bgt   main_4
         // 0380
         // 0380    ;{
         // 0380    ;  if(Enum_Loc == Func_1(Ch_Index, 'C'))
         // 0380    ;  {
61D8000F // 0380    MOV   R27,R15
60E00043 // 0384    MOV   R28,'C'
800001BC // 0388    CALL  Func_1
0E900048 // 038c    LD    R18,R00,Enum_Loc
         // 0390
6B04801D // 0390    CMP.f R18,R29
FC87FFF9 // 0394    Bne.a main_2
607BC001 // 0398    INC   R15        ;...;++Ch_Index)
         // 039c
         // 039c    ;not executed
6008039C // 039c    MOV	R01,!
FF000000 // 03a0    HALT
         // 03a4
         // 03a4    ;     Proc_6( Ident_1, &Enum_Loc);
60B80000 // 03a4    MOV   R23,Ident_1
80000167 // 03a8    CALL  Proc_6
60C00120 // 03ac    MOV   R24,Enum_Loc
         // 03b0
         // 03b0    ;     strcpy( Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
60080144 // 03b0    MOV   R01,Str_2_Loc
800001FC // 03b4    CALL  strcpy
60100210 // 03b8    MOV   R02,string3
         // 03bc
         // 03bc    ;     Int_2_Loc = Run_Index;
2E800045 // 03bc    ST    R16,R00,Int_2_Loc
         // 03c0
         // 03c0    ;     Int_Glob = Run_Index;
61480010 // 03c0    MOV   R09,R16
         // 03c4    ;  }
         // 03c4    ;}
         // 03c4
         // 03c4    ;...;++Ch_Index)
FC7FFFED // 03c4    BT main_2
607BC001 // 03c8    INC   R15
         // 03cc
         // 03cc main_4:
         // 03cc    ;Int_2_Loc = Int_2_Loc * Int_1_Loc;
0E080045 // 03cc    LD    R01,R00,Int_2_Loc
80000220 // 03d0    CALL  Multiplication
0E100044 // 03d4    LD    R02,R00,Int_1_Loc
2E180045 // 03d8    ST    R03,R00,Int_2_Loc
         // 03dc
         // 03dc    ;Int_1_Loc = Int_2_Loc / Int_3_Loc;
0E100046 // 03dc    LD    R02,R00,Int_3_Loc
80000242 // 03e0    CALL  Division
61080003 // 03e4    MOV   R01,R03
0E900045 // 03e8    LD    R18,R00,Int_2_Loc    ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
0E980046 // 03ec    LD    R19,R00,Int_3_Loc    ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
2E180044 // 03f0    ST    R03,R00,Int_1_Loc
         // 03f4
         // 03f4    ;Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
         // 03f4 ;  LD    R18,R00,Int_2_Loc
         // 03f4 ;  LD    R19,R00,Int_3_Loc
69948013 // 03f4    SUB   R18,R18,R19
         // 03f8    ;MUL   R18,R18,7
         // 03f8    ;x*7 = x*4 + x*2 + x
509C8002 // 03f8    LSL   R19,R18,2
50A48001 // 03fc    LSL   R20,R18,1
61A50013 // 0400    ADD   R20,R20,R19
61948014 // 0404    ADD   R18,R18,R20
0E980044 // 0408    LD    R19,R00,Int_1_Loc
60D00110 // 040c    MOV   R26,Int_1_Loc     ;Proc_2(&Int_1_Loc);
69948013 // 0410    SUB   R18,R18,R19
80000143 // 0414    CALL  Proc_2            ;Proc_2(&Int_1_Loc);
2E900045 // 0418    ST    R18,R00,Int_2_Loc
         // 041c
6B040011 // 041c    CMP.f R16,R17
FC6FFFAD // 0420    Blt   for_loop_2
60840001 // 0424    INC   R16
         // 0428
         // 0428
         // 0428    ;end of main loop
         // 0428 end_loop:
2E380002 // 0428    ST    R07,R00,Ptr_Glob
2E400003 // 042c    ST    R08,R00,Next_Ptr_Glob
2E480004 // 0430    ST    R09,R00,Int_Glob
2E500005 // 0434    ST    R10,R00,Bool_Glob
2E580006 // 0438    ST    R11,R00,Ch_1_Glob
2E600007 // 043c    ST    R12,R00,Ch_2_Glob
         // 0440
         // 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         // 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         // 0440 ;
         // 0440 ; End of time measurement
         // 0440 ;
         // 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         // 0440 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         // 0440
         // 0440    ;This ends time measurement
         // 0440 time_off:
FD000004 // 0440    SWI   4               ; DO NOT CHANGE !!!
49000000 // 0444    NOP                   ; DO NOT CHANGE !!!
0E100095 // 0448    LD    R02,R00,Time2
0E180094 // 044c    LD    R03,R00,Time1
49000000 // 0450    NOP
         // 0454    ;Total time: Time3 - Time2 - (Time2 - Time1)
69188003 // 0454    SUB   R03,R02,R03
69084002 // 0458    SUB   R01,R01,R02
69184003 // 045c    SUB   R03,R01,R03
         // 0460    ;Value in R03
         // 0460    ;Value at address Time_result = address $1cc
2E180073 // 0460    ST    R03,R00,Time_result
         // 0464
         // 0464    ;Better control of array element Arr_2_Glog[8][7]
         // 0464    ;Store value at position control
60E81000 // 0464    MOV   R29,Arr_2_Glob
0EE74197 // 0468    LD    R28,R29,8*4*50+4*7
6008046C // 046c    MOV   R01,!
2EE0005A // 0470    ST    R28,R00,Control
         // 0474
FF000000 // 0474    HALT
         // 0478    ;End of program
         // 0478
         // 0478
         // 0478 ;***********
         // 0478 ;Subroutines
         // 0478 ;***********
         // 0478
         // 0478 ;******
         // 0478 Proc_1:
         // 0478 ;******
         // 0478 ; R19: Ptr_Val_Par
         // 0478 ; R20: Next_Record
         // 0478 ; R21: temp
         // 0478 ; R22: RPC
         // 0478 ;
EAB04000 // 0478    LRFS  R22,RPC
         // 047c    ;Next_Record = Ptr_Val_Par->Ptr_Comp;
0EA4C000 // 047c    LD    R20,R19,Ptr_Comp_offset
         // 0480
         // 0480    ;structassign(*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
61100007 // 0480    MOV   R02,R07
61080014 // 0484    MOV   R01,R20
80000215 // 0488    CALL  structassign
60180030 // 048c    MOV   R03,size_of_Rec_Type
         // 0490
         // 0490    ;Ptr_Val_Par->variant.var_1.Int_Comp = 5;
60A80005 // 0490    MOV   R21,5
2EACC003 // 0494    ST    R21,R19,Int_Comp_offset
         // 0498
         // 0498    ;Next_Record->variant.var_1.Int_Comp = Ptr_Val_Par->variant.var_1.Int_Comp;
2EAD0003 // 0498    ST    R21,R20,Int_Comp_offset
         // 049c
         // 049c    ;Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
0EACC000 // 049c    LD    R21,R19,Ptr_Comp_offset
60BD0000 // 04a0    ADD   R23,R20,Ptr_Comp_Offset ;Proc_3( &Next_Record->Ptr_Comp);
         // 04a4 ;D ST    R21,R20,Ptr_Comp_offset
         // 04a4
         // 04a4    ;Proc_3( &Next_Record->Ptr_Comp);
80000152 // 04a4    CALL  Proc_3
2EAD0000 // 04a8    ST    R21,R20,Ptr_Comp_offset
         // 04ac
         // 04ac    ;if(Next_Record->Discr == Ident_1)
0EAD0001 // 04ac    LD    R21,R20,Discr_offset
49000000 // 04b0    NOP
6A054000 // 04b4    CMP.f R21,Ident_1
FC00000D // 04b8    Bne   Proc_1_1
         // 04bc
         // 04bc    ;{
         // 04bc    ;  Next_Record->variant.var_1.Int_Comp = 6;
60A80006 // 04bc    MOV   R21,6
2EAD0003 // 04c0    ST    R21,R20,Int_Comp_offset
         // 04c4
         // 04c4    ;  Proc_6( Ptr_Val_Par->variant.var_1.Enum_Comp,
         // 04c4    ;         &Next_Record->variant.var_1.Enum_Comp);
0EBCC002 // 04c4    LD    R23,R19,Enum_Comp_offset
80000167 // 04c8    CALL  Proc_6
60C50008 // 04cc    ADD   R24,R20,Enum_Comp_offset
         // 04d0
         // 04d0    ;  Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
0EA9C000 // 04d0    LD    R21,R07,Ptr_Comp_offset
0EDD0003 // 04d4    LD    R27,R20,Int_Comp_offset
         // 04d8 ;v ST    R21,R20,Ptr_Comp_offset
         // 04d8
         // 04d8    ;  Proc_7(Next_Record->variant.var_1.Int_Comp, 10,
         // 04d8    ;         &Next_Record->variant.var_1.Int_Comp);
         // 04d8    ;}
         // 04d8 ;D LD    R27,R20,Int_Comp_offset
60E0000A // 04d8    MOV   R28,10
8000018D // 04dc    CALL  Proc_7
60ED000C // 04e0    ADD   R29,R20,Int_Comp_offset
         // 04e4
EB000016 // 04e4    RET   R22
2EAD0000 // 04e8    ST    R21,R20,Ptr_Comp_offset
         // 04ec
         // 04ec Proc_1_1:
         // 04ec    ;not executed
600804EC // 04ec    MOV	R01,!
FF000000 // 04f0    HALT
         // 04f4
         // 04f4    ;else
         // 04f4    ;  struct_assign(*Ptr_Val_Par,*Ptr_Val_Par->Ptr_Comp);
61080013 // 04f4    MOV   R01,R19
0E14C000 // 04f8    LD    R02,R19,Ptr_Comp_offset
80000215 // 04fc    CALL  structassign
60180030 // 0500    MOV   R03,size_of_Rec_Type
         // 0504
EB000016 // 0504    RET   R22
49000000 // 0508    NOP
         // 050c
         // 050c ;******
         // 050c Proc_2:
         // 050c ;******
         // 050c ; R26: Int_Par_Ref
         // 050c ; R27: Int_Loc
         // 050c ; R28: Enum_Loc
         // 050c ; R29: temp
         // 050c ; R30: RPC
         // 050c ;
         // 050c    ;Int_Loc = *Int_Par_Ref + 10;
0FD8001A // 050c    LD    R27,R00,R26
EAF04000 // 0510    LRFS  R30,RPC
60DEC00A // 0514    ADD   R27,R27,10
         // 0518
         // 0518 proc_2_1:
         // 0518    ;do
         // 0518    ;  if(Ch_1_Glob == 'A')
         // 0518    ;  {
6A02C041 // 0518    CMP.f R11,'A'
         // 051c proc_2_1a:
FC000006 // 051c    Bne   proc_2_2
49000000 // 0520    NOP
         // 0524
         // 0524    ;     Int_Loc -= 1;
68DEC001 // 0524    DEC   R27
         // 0528
         // 0528    ;     *Int_Par_Ref = Int_Loc - Int_Glob;
69EEC009 // 0528    SUB   R29,R27,R09
2FE8001A // 052c    ST    R29,R00,R26
         // 0530
         // 0530    ;     Enum_Loc = Ident_1;
60E00000 // 0530    MOV   R28,Ident_1
         // 0534    ;  }
         // 0534
         // 0534 proc_2_2:
6A070000 // 0534    CMP.f R28,Ident_1
         // 0538    ;while(Enum_Loc != Ident_1);
FC87FFF9 // 0538    Bne.a proc_2_1a
6A02C041 // 053c    CMP.f R11,'A'
         // 0540
EB00001E // 0540    RET   R30
49000000 // 0544    NOP
         // 0548
         // 0548 ;******
         // 0548 Proc_3:
         // 0548 ;******
         // 0548 ; R23: Ptr_Ref_Par
         // 0548 ; R24: temp1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -