📄 422facto
字号:
// 000 ; Factorial without interlocks
// 000 ; ============================
// 000 ;
// 000 ; f(n) = n*f(n-1)
// 000 ; f(n) = R7; n = R6
// 000 ; SP = R31
60F80064 // 000 MOV R31, stack ; R31 as SP
0E380018 // 004 LDu R07, R00, data ; R7 := <data>
80000006 // 008 CALL calcfact ; factorial
60FFC008 // 00c INC R31, 8 ; update SP
2E380017 // 010 ST R07, R00, resu ; store result
FF000000 // 014 HALT ; done
// 018 ;-----------------------------
EA084000 // 018 calcfact:LRFS R01, RPC ; save RPC
6A39C001 // 01c DEC.f R07 ; decrement R7
2E3FFFFF // 020 ST R07, R31, -4 ; R7 on stack
FC40000C // 024 Beq one ; R7=0?
2E0FFFFE // 028 ST R01, R31, -8 ; RPC on stack
80000006 // 02c CALL calcfact ; recursion
60FFC008 // 030 INC R31, 8 ; update SP
// 034
0E37FFFF // 034 LDu R06, R31, -4 ; load present factor
0E0FFFFE // 038 LDu R01, R31, -8 ; load RPC
61280007 // 03c MOV R05, R07 ; R5 := factorial(R7)
6A318001 // 040 mult: DEC.f R06 ; decrement count(R6)
FC07FFFF // 044 Bne mult ; done?
6139C005 // 048 ADD R07, R07, R05 ; factorial(R7) := R7+R5
EB000001 // 04c return: RET R01 ; update SP
68FFC008 // 050 DEC R31, 8 ; and return
// 054
FC7FFFFE // 054 one: Bt return ; return
60380001 // 058 MOV R07, 1 ; factorial(R7) := 1
// 05c ;-----------------------------
XXXXXXXX // 05c resu: ds.w 1
00000003 // 060 data: dc.w $3
XXXXXXXX // 064 stack: ds.w 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -