Add some pseudocode to examples
This commit is contained in:
@@ -1,4 +1,15 @@
|
|||||||
; Evaluate 2*3+5
|
; 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
|
main: push 2
|
||||||
push 3
|
push 3
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
; I/O example - simple echo
|
; I/O example - simple echo
|
||||||
|
;
|
||||||
|
; pseudocode:
|
||||||
|
; do { // read
|
||||||
|
; x = in()
|
||||||
|
; out(x)
|
||||||
|
; while(x - 0x0A != 0)
|
||||||
|
|
||||||
read: in
|
read: in
|
||||||
dup
|
dup
|
||||||
out
|
out
|
||||||
push 0x0A
|
push 0x0A
|
||||||
sub
|
sub
|
||||||
jne &read ; loop until the input != new line (0x0A)
|
jne &read ; loop until the input != new line (0x0A)
|
||||||
halt
|
halt
|
||||||
|
|||||||
@@ -1,7 +1,23 @@
|
|||||||
; Evaluate 2^10 - loop variant
|
; 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 2 ; base
|
||||||
push 10
|
push 10 ; exp
|
||||||
call &pow
|
call &pow
|
||||||
clr 2
|
clr 2
|
||||||
halt
|
halt
|
||||||
@@ -14,11 +30,11 @@ pow: lda 1 ; base
|
|||||||
.loop: ldl 1 ; if exp == 0 | exp
|
.loop: ldl 1 ; if exp == 0 | exp
|
||||||
je &.done ; then return | exp
|
je &.done ; then return | exp
|
||||||
pop ; |
|
pop ; |
|
||||||
; |
|
; |
|
||||||
ldl 2 ; Evaluate | acc
|
ldl 2 ; Evaluate | acc
|
||||||
ldl 0 ; next power | acc base
|
ldl 0 ; next power | acc base
|
||||||
mul ; | acc*base
|
mul ; | acc*base
|
||||||
stl 2 ; |
|
stl 2 ; |
|
||||||
; |
|
; |
|
||||||
ldl 1 ; Decrement exp | exp
|
ldl 1 ; Decrement exp | exp
|
||||||
push 1 ; | exp 1
|
push 1 ; | exp 1
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
; Evaluate 2^10 - recursive variant
|
; 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 2 ; base
|
||||||
push 10 ; exp
|
push 10 ; exp
|
||||||
@@ -22,7 +33,7 @@ pow: lda 1 ; base
|
|||||||
clr 1 ; | base base^(exp-1)
|
clr 1 ; | base base^(exp-1)
|
||||||
mul ; | base*base^(exp-1)
|
mul ; | base*base^(exp-1)
|
||||||
ret ; | base*base^(exp-1)
|
ret ; | base*base^(exp-1)
|
||||||
|
|
||||||
.edge: pop
|
.edge: pop
|
||||||
push 1 ; return 1
|
push 1 ; return 1
|
||||||
ret
|
ret
|
||||||
|
|||||||
@@ -1,4 +1,17 @@
|
|||||||
; The N-th element of Fibbonaci sequence - recursive variant
|
; 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
|
push 6
|
||||||
call &fibb
|
call &fibb
|
||||||
@@ -8,7 +21,7 @@ halt
|
|||||||
fibb: lda 0 ; n | Stack:
|
fibb: lda 0 ; n | Stack:
|
||||||
ldl 0 ; n == 0 -> return 1 | n
|
ldl 0 ; n == 0 -> return 1 | n
|
||||||
je &.done0 ; | n
|
je &.done0 ; | n
|
||||||
pop ; |
|
pop ; |
|
||||||
ldl 0 ; n == 1 -> return 1 | n
|
ldl 0 ; n == 1 -> return 1 | n
|
||||||
push 1 ; | n 1
|
push 1 ; | n 1
|
||||||
sub ; | n-1
|
sub ; | n-1
|
||||||
@@ -27,7 +40,7 @@ fibb: lda 0 ; n | Stack:
|
|||||||
.done1: pop
|
.done1: pop
|
||||||
push 1
|
push 1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.done0: pop
|
.done0: pop
|
||||||
push 1
|
push 1
|
||||||
ret
|
ret
|
||||||
|
|||||||
Reference in New Issue
Block a user