diff --git a/examples/example1.S b/examples/example1.S index 6682562..1de3116 100644 --- a/examples/example1.S +++ b/examples/example1.S @@ -1,4 +1,15 @@ ; Evaluate 2*3+5 +; +; pseudocode: +; sum(prd(2, 3), 5) +; +; sum(a, b) { +; return a+b +; } +; +; prd(a, b) { +; return a*b; +; } main: push 2 push 3 diff --git a/examples/example2.S b/examples/example2.S index ba70e57..7729654 100644 --- a/examples/example2.S +++ b/examples/example2.S @@ -1,9 +1,15 @@ ; I/O example - simple echo +; +; pseudocode: +; do { // read +; x = in() +; out(x) +; while(x - 0x0A != 0) read: in dup out push 0x0A - sub + sub jne &read ; loop until the input != new line (0x0A) halt diff --git a/examples/example3.S b/examples/example3.S index 15d29cc..8cc6b71 100644 --- a/examples/example3.S +++ b/examples/example3.S @@ -1,7 +1,23 @@ ; Evaluate 2^10 - loop variant +; +; pseudocode +; pow(2, 10) +; +; pow(base, exp) { +; acc = 1 +; +; do { // .loop +; if (exp == 0) { +; return acc // .done +; } +; +; acc = acc * base +; exp = exp - 1 +; } while(true) +; } -push 2 -push 10 +push 2 ; base +push 10 ; exp call &pow clr 2 halt @@ -14,11 +30,11 @@ pow: lda 1 ; base .loop: ldl 1 ; if exp == 0 | exp je &.done ; then return | exp pop ; | - ; | + ; | ldl 2 ; Evaluate | acc ldl 0 ; next power | acc base mul ; | acc*base - stl 2 ; | + stl 2 ; | ; | ldl 1 ; Decrement exp | exp push 1 ; | exp 1 diff --git a/examples/example4.S b/examples/example4.S index f1e3ca9..08ed568 100644 --- a/examples/example4.S +++ b/examples/example4.S @@ -1,4 +1,15 @@ ; Evaluate 2^10 - recursive variant +; +; pseudocode: +; pow(2, 10) +; +; pow(base, exp) { +; if (exp == 0) { +; return 1 // .edge +; } +; +; return base * pow(base, exp - 1) +; } push 2 ; base push 10 ; exp @@ -22,7 +33,7 @@ pow: lda 1 ; base clr 1 ; | base base^(exp-1) mul ; | base*base^(exp-1) ret ; | base*base^(exp-1) - -.edge: pop + +.edge: pop push 1 ; return 1 - ret + ret diff --git a/examples/example5.S b/examples/example5.S index 7624fde..c2d7d02 100644 --- a/examples/example5.S +++ b/examples/example5.S @@ -1,4 +1,17 @@ ; The N-th element of Fibbonaci sequence - recursive variant +; +; pseudocode: +; fibb(n) { +; if (n == 0) { +; return 1 // .done0 +; } +; +; if ((n-1) == 0) { +; return 1 // .done1 +; } +; +; return fibb(n-2) + fibb(n-1) +; } push 6 call &fibb @@ -8,7 +21,7 @@ halt fibb: lda 0 ; n | Stack: ldl 0 ; n == 0 -> return 1 | n je &.done0 ; | n - pop ; | + pop ; | ldl 0 ; n == 1 -> return 1 | n push 1 ; | n 1 sub ; | n-1 @@ -27,7 +40,7 @@ fibb: lda 0 ; n | Stack: .done1: pop push 1 ret - + .done0: pop push 1 ret