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

📄 423quick

📁 大型risc处理器设计源代码,这是书中的代码 基于流水线的risc cpu设计
💻
字号:
         // 0000 ; Quicksort
         // 0000 ; =========
         // 0000 ;
         // 0000 ; R01: LK / -> left edge
         // 0000 ; R02: L  / -> left
         // 0000 ; R03: R  / -> right & right edge
         // 0000 ; R04: LV / left value
         // 0000 ; R05: RV / right value
         // 0000 ; R06: MV / -> value of "middle"
         // 0000 ; R15: SP / -> stack pointer
         // 0000 ; R14: H  / help
         // 0000
         // 0000 ;------------------------------------
         // 0000 ;load and begin recursion
E0080000 // 0000           LDH    R01, Data          ; begin of data field I
44084100 // 0004           OR     R01, R01, Data     ; begin of data field II
E0180000 // 0008           LDH    R03, EOData        ; end of data field I
4418C13F // 000c           OR     R03, R03, EOData   ; end of data field II
E0780000 // 0010           LDH    R15, Stack         ; load stack pointer (SP) I
447BC180 // 0014           OR     R15, R15, Stack    ; load SP II
80000009 // 0018           CALL   SORT               ; sort and
607BC00C // 001c           INC    R15, 12            ;   set SP
FF000000 // 0020           HALT                      ;
         // 0024
         // 0024 ;------------------------------------
         // 0024 ; Quicksort
         // 0024 ;>save and determine middle
EA704000 // 0024 SORT:     LRFS   R14, RPC           ; return address
2E73FFFD // 0028           ST     R14, R15, -12      ;
2E1BFFFF // 002c           ST     R03, R15, -4       ; store RK
61100001 // 0030           MOV    R02, R01           ; LV := LK
61308003 // 0034           ADD    R06, R02, R03      ; determine middle
54318001 // 0038           LSR    R06, R06, 1        ;   and
01318000 // 003c           LD.b   R06, R06, R00      ;   load value
         // 0040
         // 0040 ;------------------------------------
         // 0040 ;>work left
01208000 // 0040 LEFT:     LD.b   R04, R02, R00      ; LV := (L)
60108001 // 0044 LEFT_A:   INC    R02                ; increment L           {LD-X-CMP}
6B010006 // 0048           CMP.f  R04, R06           ; if LV < MV :
FCEFFFFE // 004c           Blt.a  LEFT_A             ;   continue
01208000 // 0050           LD.b   R04, R02, R00      ;   LV := (L)
         // 0054
68108001 // 0054           DEC    R02                ; correct L
         // 0058 ;------------------------------------
         // 0058 ;>work right
0128C000 // 0058           LD.b   R05, R03, R00      ; RV := (R)
6818C001 // 005c RIGHT_A:  DEC    R03                ; decrement R           {LD-X-CMP}
6B018005 // 0060           CMP.f  R06, R05           ; if MV < RV :
FCEFFFFE // 0064           Blt.a  RIGHT_A            ;   continue
0128C000 // 0068           LD.b   R05, R03, R00      ;   RV := (R)
         // 006c
6018C001 // 006c           INC    R03                ; correct R             {LD-X-CMP}
         // 0070
         // 0070 ;------------------------------------
         // 0070 ;>done with this part ?
6B008003 // 0070           CMP.f  R02, R03           ; if L > R :
FCB00007 // 0074           Bgt.a  L_RECU_A           ;   node is done
6B004003 // 0078           CMP.f  R01, R03           ;   LK < R or LK < new RK ?
         // 007c
         // 007c ;------------------------------------
         // 007c ;>>if not, exchange and again
21288000 // 007c           ST.b   R05, R02, R00      ; (L) := RV
2120C000 // 0080           ST.b   R04, R03, R00      ; (R) := LV
60108001 // 0084           INC    R02                ; increment L
FC7FFFEE // 0088           Bt     LEFT               ; again and
6818C001 // 008c           DEC    R03                ; decrement R
         // 0090
         // 0090 ;------------------------------------
         // 0090 ;>>if yes, sort both parts
         // 0090 ;>>>left part
FC280004 // 0090 L_RECU_A: Bge    R_RECU             ; if no, continue with right part
2E13FFFE // 0094           ST     R02, R15, -8       ; store L (new LK)
80000009 // 0098           CALL   SORT               ; sort left {8}
607BC00C // 009c           INC    R15, 12            ; set SP
         // 00a0
         // 00a0 ;------------------------------------
         // 00a0 ;>>>right part
0E1BFFFF // 00a0 R_RECU:   LD     R03, R15, -4       ; set RK to old RK
0E0BFFFE // 00a4           LD     R01, R15, -8       ; set LK to old L
49000000 // 00a8           NOP                       ;                       {LD-x-CMP)
6B004003 // 00ac           CMP.f  R01, R03           ; LK < RK ?
FCA80005 // 00b0           Bge.a  RETURN_A           ;   if not, leaf is done
0E73FFFD // 00b4           LD     R14, R15, -12      ;   load return address
80000009 // 00b8           CALL   SORT               ; right
607BC00C // 00bc           INC    R15, 12            ; set SP
         // 00c0
         // 00c0 ;------------------------------------
         // 00c0 ;branch is done
0E73FFFD // 00c0           LD     R14, R15, -12      ; load return address
687BC00C // 00c4 RETURN_A: DEC    R15, 12            ; correct SP
EB00000E // 00c8           RET    R14                ; return
49000000 // 00cc           NOP                       ;
         // 00d0 ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         // 00d0
XXXXXXXX // 00d0           ds.q   12                 ; improve readability
XXXXXXXX // 00d4
XXXXXXXX // 00d8
XXXXXXXX // 00dc
XXXXXXXX // 00e0
XXXXXXXX // 00e4
XXXXXXXX // 00e8
XXXXXXXX // 00ec
XXXXXXXX // 00f0
XXXXXXXX // 00f4
XXXXXXXX // 00f8
XXXXXXXX // 00fc
FD0122CC // 0100 Data:     dc.q   $fd0122cc, $322299a9, $a513ac72, $39237665
322299A9 // 0104
A513AC72 // 0108
39237665 // 010c
37B869EE // 0110           dc.q   $37b869ee, $2ee44342, $00ffaa23, $cefc6e5f
2EE44342 // 0114
00FFAA23 // 0118
CEFC6E5F // 011c
7A2196E1 // 0120           dc.q   $7a2196e1, $1fa55a91, $239c1a34, $c62bc1dd
1FA55A91 // 0124
239C1A34 // 0128
C62BC1DD // 012c
FC2A915F // 0130           dc.q   $fc2a915f, $3be71004, $9a323913, $deabcdef
3BE71004 // 0134
9A323913 // 0138
DEABCDEF // 013c
         // 0140 EOData    equ    !-1
XXXXXXXX // 0140           ds.q   16                 ; improve readability
XXXXXXXX // 0144
XXXXXXXX // 0148
XXXXXXXX // 014c
XXXXXXXX // 0150
XXXXXXXX // 0154
XXXXXXXX // 0158
XXXXXXXX // 015c
XXXXXXXX // 0160
XXXXXXXX // 0164
XXXXXXXX // 0168
XXXXXXXX // 016c
XXXXXXXX // 0170
XXXXXXXX // 0174
XXXXXXXX // 0178
XXXXXXXX // 017c
XXXXXXXX // 0180 Stack:    ds.w   1



⌨️ 快捷键说明

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