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

📄 424dhrys

📁 大型risc处理器设计源代码,这是书中的代码 基于流水线的risc cpu设计
💻
📖 第 1 页 / 共 4 页
字号:
         // 0548 ; R25: temp2
         // 0548 ; R26: RPC
         // 0548 ;
         // 0548    ;if(Ptr_Glob != NULL)
EAD04000 // 0548    LRFS  R26,RPC
6B01C000 // 054c    TST.f R07
FC400005 // 0550    Beq   Proc_3_1
61E00009 // 0554    MOV   R28,R09
         // 0558
         // 0558    ;  *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
0EC9C000 // 0558    LD    R25,R07,Ptr_Comp_offset
49000000 // 055c    NOP
2FCDC000 // 0560    ST    R25,R23,R00
         // 0564
         // 0564 Proc_3_1:
         // 0564    ;Proc_7( 10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
60D8000A // 0564    MOV   R27,10
         // 0568 ;D MOV   R28,R09
8000018D // 0568    CALL  Proc_7
60E9C00C // 056c    ADD   R29,R07,Int_Comp_offset
         // 0570
EB00001A // 0570    RET   R26
49000000 // 0574    NOP
         // 0578
         // 0578 ;******
         // 0578 Proc_4:
         // 0578 ;******
         // 0578 ; R30: RPC
         // 0578 ;
         // 0578    ;Bool_Loc = Ch_1_Glob == 'A';
         // 0578    ;Bool_Glob = Bool_Loc | Bool_Glob;
6A02C041 // 0578    CMP.f R11,'A'
FC000003 // 057c    Bne   Proc_4_1
EAF04000 // 0580    LRFS  R30, RPC
60500001 // 0584    MOV   R10,1
         // 0588
         // 0588 Proc_4_1:
         // 0588    ;Ch_2_Glob = 'B';
         // 0588
EB00001E // 0588    RET   R30
60600042 // 058c    MOV   R12,'B'
         // 0590
         // 0590 ;******
         // 0590 Proc_5:
         // 0590 ;******
         // 0590 ; R29: temp
         // 0590 ; R30: RPC
EAF04000 // 0590    LRFS  R30,RPC
         // 0594    ;Ch_1_Glob = 'A';
         // 0594 ;D MOV   R11,'A'
         // 0594
         // 0594    ;Bool_Glob = false;
         // 0594
EB00001E // 0594    RET   R30
61500000 // 0598    CLR   R10                  ;store 0 in Bool_Glob
         // 059c
         // 059c
         // 059c ;******
         // 059c Proc_6:
         // 059c ;******
         // 059c ; R23: Enum_Val_Par
         // 059c ; R24: Enum_Ref_Par
         // 059c ; R25: temp1
         // 059c ; R26: temp2
         // 059c ; R27: RPC
         // 059c ;
EAD84000 // 059c    LRFS  R27,RPC
         // 05a0    ;*Enum_Ref_Par = Enum_Val_Par;
2FB80018 // 05a0    ST    R23,R00,R24
         // 05a4
         // 05a4    ;if(!Func_3( Enum_Val_Par))
800001F3 // 05a4    CALL  Func_3
61E00017 // 05a8    MOV   R28,R23
         // 05ac
4AEF4001 // 05ac    XOR.f R29,R29,1
FC400005 // 05b0    Beq   Proc_6_1
         // 05b4
         // 05b4    ;  *Enum_Ref_Par = Ident_4;
60C80003 // 05b4    MOV   R25,Ident_4
2FC80018 // 05b8    ST    R25,R00,R24
         // 05bc
         // 05bc    ;not executed
600805BC // 05bc    MOV	R01,!
FF000000 // 05c0    HALT
         // 05c4
         // 05c4 Proc_6_1:
         // 05c4    ;switch(Enum_Val_Par)
         // 05c4    ;{
         // 05c4    ;  case Ident_1:
6A05C000 // 05c4    CMP.f R23,Ident_1
FC000004 // 05c8    Bne   Proc_6_2
         // 05cc    ;     *Enum_Ref_Par = Ident_1;
60C80000 // 05cc    MOV   R25,Ident_1
         // 05d0    ;     break;
FC780017 // 05d0    Bt    Proc_6_7
2FC80018 // 05d4    ST    R25,R00,R24
         // 05d8
         // 05d8 Proc_6_2:
         // 05d8    ;  case Ident_2:
6A05C001 // 05d8    CMP.f R23,Ident_2
FC000008 // 05dc    Bne   Proc_6_4
60C80000 // 05e0    MOV   R25,Ident_1
         // 05e4
         // 05e4    ;     if(Int_Glob>100)
6A024064 // 05e4    CMP.f R09,100
FCB00011 // 05e8    Bgt.a Proc_6_7
         // 05ec    ;        *Enum_Ref_Par = Ident_1;
         // 05ec ;D MOV   R25,Ident_1
2FC80018 // 05ec    ST    R25,R00,R24
         // 05f0
         // 05f0 Proc_6_3:
         // 05f0    ;     else
         // 05f0    ;        *Enum_Ref_Par = Ident_4;
60C80003 // 05f0    MOV   R25,Ident_4
         // 05f4    ;     break;
FC78000E // 05f4    Bt    Proc_6_7
2FC80018 // 05f8    ST    R25,R00,R24
         // 05fc
         // 05fc Proc_6_4:
         // 05fc    ;  case Ident_3:
6A05C002 // 05fc    CMP.f R23,Ident_3
FC000004 // 0600    Bne   Proc_6_5
         // 0604
         // 0604    ;     *Enum_Ref_Par = Ident_2;
60C80001 // 0604    MOV   R25,Ident_2
         // 0608    ;     break;
FC780009 // 0608    Bt    Proc_6_7
2FC80018 // 060c    ST    R25,R00,R24
         // 0610
         // 0610 Proc_6_5:
         // 0610    ;  case Ident_4: break;
6A05C003 // 0610    CMP.f R23,Ident_4
FC400006 // 0614    Beq   Proc_6_7
49000000 // 0618    NOP
         // 061c
         // 061c Proc_6_6:
         // 061c    ;  case Ident_5:
6A05C004 // 061c    CMP.f R23,Ident_5
FC000003 // 0620    Bne   Proc_6_7
         // 0624
         // 0624    ;     *Enum_Ref_Par = Ident_3;
60C80002 // 0624    MOV   R25,Ident_3
2FC80018 // 0628    ST    R25,R00,R24
         // 062c    ;     break;
         // 062c    ;}
         // 062c
         // 062c Proc_6_7:
EB00001B // 062c    RET   R27
49000000 // 0630    NOP
         // 0634
         // 0634 ;******
         // 0634 Proc_7:
         // 0634 ;******
         // 0634 ; R27: Int_1_Par_Val
         // 0634 ; R28: Int_2_Par_Val
         // 0634 ; R29: Int_Par_Ref
         // 0634 ; R30: RPC
         // 0634 ;
EAF04000 // 0634    LRFS  R30,RPC
         // 0638
         // 0638    ;Int_Loc = Int_1_Par_Val+2
60DEC002 // 0638    INC   R27,2
         // 063c
         // 063c    ;*Int_Par_Ref = Int_2_Par_Val + Int_Loc
61DEC01C // 063c    ADD   R27,R27,R28
         // 0640
EB00001E // 0640    RET   R30
2FD8001D // 0644    ST    R27,R00,R29
         // 0648
         // 0648
         // 0648 ;******
         // 0648 Proc_8:
         // 0648 ;******
         // 0648 ; R21: Arr_1_Ref
         // 0648 ; R22: Arr_2_Ref
         // 0648 ; R23: Int_1_Par_Val
         // 0648 ; R24: Int_2_Par_Val
         // 0648 ; R25: Int_Index
         // 0648 ; R26: Int_Loc
         // 0648 ; R27: temp1
         // 0648 ; R28: temp2
         // 0648 ; R29: temp3
         // 0648 ; R30: RPC
         // 0648 ;
         // 0648    ;Int_Loc = Int_1_Par_Val + 5;
60D5C005 // 0648    ADD   R26,R23,5
         // 064c
         // 064c    ;Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
50DE8002 // 064c    LSL   R27,R26,2
2FC5401B // 0650    ST.q  R24,R21,R27
         // 0654
         // 0654    ;Arr_1_Par_Ref[ Int_Loc+1 ] = Arr_1_Par_Ref[ Int_Loc ];
60DE8001 // 0654    ADD   R27,R26,1
50DEC002 // 0658    LSL   R27,R27,2
2FC5401B // 065c    ST.q  R24,R21,R27
         // 0660
         // 0660    ;Arr_1_Par_Ref[ Int_Loc+30 ] = Int_Loc;
60DE801E // 0660    ADD   R27,R26,30
50DEC002 // 0664    LSL   R27,R27,2
2FD5401B // 0668    ST.q  R26,R21,R27
         // 066c
         // 066c    ;for(Int_Index = Int_Loc; Int_Index <= Int_Loc+1, ++Int_Index)
61C8001A // 066c    MOV   R25,R26
         // 0670    ;MUL   R27,R26,50*4
         // 0670    ;Construct x*200 = x*128 + x*64 + x*8
50DE8007 // 0670    LSL    R27,R26,7
50E68006 // 0674    LSL    R28,R26,6
61DEC01C // 0678    ADD    R27,R27,R28
50E68003 // 067c    LSL    R28,R26,3
61DEC01C // 0680    ADD    R27,R27,R28
61DD801B // 0684    ADD    R27,R22,R27       ;R27 = Arr_2_Par_Ref [Int_Loc][0]
         // 0688
         // 0688    ;...; Int_Index <= Int_Loc+1;...
60E68001 // 0688    ADD   R28,R26,1
         // 068c Proc_8_1:
6B06401C // 068c    CMP.f R25,R28
FC300007 // 0690    Bgt   Proc_8_2
68E68001 // 0694    SUB   R28,R26,1
         // 0698
         // 0698    ;  Arr_2_Par_Ref [Int_Loc][Int_Index] = Int_Loc;
50E64002 // 0698    LSL   R28,R25,2
2FD6C01C // 069c    ST.q  R26,R27,R28
         // 06a0
         // 06a0    ;...;++Int_Index)
60CE4001 // 06a0    INC   R25
FC7FFFFA // 06a4    Bt    Proc_8_1
60E68001 // 06a8    ADD   R28,R26,1
         // 06ac
         // 06ac Proc_8_2:
         // 06ac    ;Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
         // 06ac ;D SUB   R28,R26,1
50E70002 // 06ac    LSL   R28,R28,2
0FEEC01C // 06b0    LD.q  R29,R27,R28
EAF04000 // 06b4    LRFS  R30,RPC
60EF4001 // 06b8    INC   R29
2FEEC01C // 06bc    ST.q  R29,R27,R28
         // 06c0
         // 06c0    ;Arr_2_Par_Ref [Int_Loc+20][Int_Loc] = Arr_1_Par_Ref[Int_Loc];
60EE8014 // 06c0    ADD   R29,R26,20        ;R28 = Int_Loc.b+20
         // 06c4    ;MUL   R27,R29,50*4      ;R28 = [Int_Loc.b+20].q
         // 06c4    ;Construct LSL x*200 = x*$c8 = x*%11001000 = x*(128+64+8) = x*128+x*64+x*8
50DF4007 // 06c4    LSL   R27,R29,7         ;a = Int_Loc*2^7
50E74006 // 06c8    LSL   R28,R29,6         ;b = Int_Loc*2^6
61DEC01C // 06cc    ADD   R27,R27,R28       ;c = a+b
50E74003 // 06d0    LSL   R28,R29,3         ;a = Int_Loc*2^3
61DEC01C // 06d4    ADD   R27,R27,R28       ;R27 = Int_Loc * 200
50E68002 // 06d8    LSL   R28,R26,2         ;R28 = [Int_Loc].q
         // 06dc ;v ADD   R27,R27,R28       ;R27 = [Int_Loc+20][Int_Loc].q
         // 06dc
0FED401C // 06dc    LD.q  R29,R21,R28
61DEC01C // 06e0    ADD   R27,R27,R28       ;R27 = [Int_Loc+20][Int_Loc].q
2FED801B // 06e4    ST.q  R29,R22,R27
         // 06e8
         // 06e8    ;Int_Glob = 5;
EB00001E // 06e8    RET   R30
60480005 // 06ec    MOV   R09,5
         // 06f0
         // 06f0
         // 06f0
         // 06f0 ;******
         // 06f0 Func_1:
         // 06f0 ;******
         // 06f0 ; R27: Ch_1_Par_Val
         // 06f0 ; R28: Ch_2_Par_Val
         // 06f0 ; R29: return
         // 06f0 ; R30: RPC
         // 06f0 ;
         // 06f0    ;Ch_1_Loc = Ch_1_Par_Val;
         // 06f0    ;Ch_2_Loc = Ch_1_Loc;
         // 06f0    ;if(Ch_2_Loc != Ch_2_Par_Val)
6B06C01C // 06f0    CMP.f R27,R28
FC400004 // 06f4    Beq   Func_1_1
EAF04000 // 06f8    LRFS  R30,RPC
         // 06fc
         // 06fc    ;   return(Ident_1);
EB00001E // 06fc    RET   R30
60E80000 // 0700    MOV   R29,Ident_1
         // 0704
         // 0704 Func_1_1:
         // 0704    ;else
         // 0704    ;{
         // 0704    ;not executed
60080704 // 0704    MOV	R01,!
FF000000 // 0708    HALT
         // 070c
         // 070c    ;  Ch_1_Glob = Ch_1_Loc;
6158001B // 070c    MOV   R11,R27
         // 0710
         // 0710    ;  return(Ident_2);
         // 0710    ;}
EB00001E // 0710    RET   R30
60E80001 // 0714    MOV   R29,Ident_2
         // 0718
         // 0718 ;******
         // 0718 Func_2:
         // 0718 ;******
         // 0718 ; R21: Str_1_Par_Ref
         // 0718 ; R22: Str_2_Par_Ref
         // 0718 ; R23: return
         // 0718 ; R24: Int_Loc
         // 0718 ; R25: Ch_Loc
         // 0718 ; R26: RPC
         // 0718 ;
         // 0718    ;Int_Loc = 2;
60C00002 // 0718    MOV   R24,2
         // 071c
         // 071c    ;while (Int_Loc <= 2)
6A060002 // 071c    CMP.f R24,2
FC30000F // 0720    Bgt   Func_2_2
EAD04000 // 0724    LRFS  R26,RPC
         // 0728
         // 0728    ;if(Func_1(Str_1_Par_Ref[Int_Loc],
         // 0728    ;          Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
01DD4018 // 0728    LD.b  R27,R21,R24
         // 072c Func_2_1:
61E58018 // 072c    ADD   R28,R22,R24
02E70000 // 0730    LD.b  R28,R28,1
800001BC // 0734    CALL  Func_1
49000000 // 0738    NOP
6A074000 // 073c    CMP.f R29,Ident_1
FC87FFFB // 0740    Bne.a Func_2_1
01DD4018 // 0744    LD.b  R27,R21,R24

⌨️ 快捷键说明

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