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

📄 421acker

📁 大型risc处理器设计源代码,这是书中的代码 基于流水线的risc cpu设计
💻
字号:
         // 000 ; Ackermann Function
         // 000 ; ==================
         // 000 ;
         // 000 ; ack(m,n) = (m=0): n+1
         // 000 ;            (n=0): ack(m-1,1)
         // 000 ;             else: ack(m-1,ack(m,n-1))
         // 000 ;
         // 000 ; ack(1,1) = 3
         // 000 ; ack(2,2) = 7
         // 000 ; ack(3,3) = 61
         // 000
         // 000
60080001 // 000             MOV    R01, 1              ; m
60100001 // 004             MOV    R02, 1              ; n
         // 008 ;
E0F80000 // 008             LDH    R31, Stack          ; stack pointer
80000006 // 00c             CALL   ack                 ;
44FFC060 // 010             OR     R31, R31, Stack & $1FFF ;
FF000000 // 014             HALT                       ;
         // 018
EAF04000 // 018 ack:        LRFS   R30, RPC            ; save RPC
60FFC008 // 01c             INC    R31, 8              ; increase SP
         // 020             ;
6B004000 // 020             TST.f  R01                 ; A(0,n) ?
FCC0000D // 024             Beq.a  ack_Ret             ; if yes,
60108001 // 028             INC    R02                 ;   compute and return
         // 02c             ;
2EF7FFFE // 02c             ST     R30, R31, -8        ; save return address and
2E0FFFFF // 030             ST     R01, R31, -4        ;   n on stack
         // 034             ;
6B008000 // 034             TST.f  R02                 ; A(m,0) ?
FCC00004 // 038             Beq.a  ack_L1              ; if yes, branch to computation
60100001 // 03c             MOV    R02, 1              ;   of A(m-1,1)
         // 040             ;
80000006 // 040             CALL   ack                 ; compute A(m,n), hence
68108001 // 044             DEC    R02                 ;   first n=A(m,n-1)
         // 048             ;
80000006 // 048 ack_L1:     CALL   ack                 ; compute
68084001 // 04c             DEC    R01                 ; A(m-1,n)
         // 050             ;
0EF7FFFE // 050             LD     R30, R31, -8        ; load RPC
0E0FFFFF // 054             LD     R01, R31, -4        ; load m
         // 058             ;
EB00001E // 058 ack_Ret:    RET    R30                 ; correct SP
68FFC008 // 05c             DEC    R31, 8              ;   and return
         // 060
XXXXXXXX // 060 Stack:      ds.w   1                   ; stack

⌨️ 快捷键说明

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