Add some pseudocode to examples
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user