38 lines
1.3 KiB
Plaintext
38 lines
1.3 KiB
Plaintext
// Little Man Computer
|
|
// Reads an integer n and prints n factorial
|
|
// Works for n = 0..6
|
|
LDA one // initialize factorial to 1
|
|
STA fac
|
|
INP // get n from user
|
|
BRZ done // if n = 0, return 1
|
|
STA n // else store n
|
|
LDA one // initialize k = 1
|
|
outer STA k // outer loop: store latest k
|
|
LDA n // test for k = n
|
|
SUB k
|
|
BRZ done // done if so
|
|
LDA fac // save previous factorial
|
|
STA prev
|
|
LDA k // initialize i = k
|
|
inner STA i // inner loop: store latest i
|
|
LDA fac // build factorial by repeated addition
|
|
ADD prev
|
|
STA fac
|
|
LDA i // decrement i
|
|
SUB one
|
|
BRZ next_k // if i = 0, move on to next k
|
|
BRA inner // else loop for another addition
|
|
next_k LDA k // increment k
|
|
ADD one
|
|
BRA outer // back to start of outer loop
|
|
done LDA fac // done, load the result
|
|
OUT // print it
|
|
HLT // halt
|
|
n DAT 0 // input value
|
|
k DAT 0 // outer loop counter, 1 up to n
|
|
i DAT 0 // inner loop counter, k down to 0
|
|
fac DAT 0 // holds k!, i.e. n! when done
|
|
prev DAT 0 // previous value of fac
|
|
one DAT 1 // constant 1
|
|
// end
|