add lisp examples
This commit is contained in:
parent
02702315cb
commit
9326d12585
|
@ -119,7 +119,7 @@ typedef enum {
|
||||||
OP_UINT_TO_REAL, /* utor : dest = src1 as f32 */
|
OP_UINT_TO_REAL, /* utor : dest = src1 as f32 */
|
||||||
OP_ADD_REAL, /* addr : dest = src1 + src2 */
|
OP_ADD_REAL, /* addr : dest = src1 + src2 */
|
||||||
OP_SUB_REAL, /* subr : dest = src1 - src2 */
|
OP_SUB_REAL, /* subr : dest = src1 - src2 */
|
||||||
OP_MUL_REAL, /* ulr : dest = src1 * src2 */
|
OP_MUL_REAL, /* mulr : dest = src1 * src2 */
|
||||||
OP_DIV_REAL, /* divr : dest = src1 / src2 */
|
OP_DIV_REAL, /* divr : dest = src1 / src2 */
|
||||||
OP_JEQ_REAL, /* jeqr : jump to address dest if src1 as real == src2 as real */
|
OP_JEQ_REAL, /* jeqr : jump to address dest if src1 as real == src2 as real */
|
||||||
OP_JGE_REAL, /* jgtr : jump to address dest if src1 as real >= src2 as real */
|
OP_JGE_REAL, /* jgtr : jump to address dest if src1 as real >= src2 as real */
|
||||||
|
|
12
test/add.asm
12
test/add.asm
|
@ -1,8 +1,8 @@
|
||||||
main:
|
main:
|
||||||
loadi $0 1 ;load 1 into r0
|
lodi $0 1 ;load 1 into r0
|
||||||
pushi $0 ;push onto stack
|
pshi $0 ;push onto stack
|
||||||
loadi $0 1 ;1
|
lodi $0 1 ;1
|
||||||
pushi $0
|
pshi $0
|
||||||
call &add ; call memory location for tag "add"
|
call &add ; call memory location for tag "add"
|
||||||
popi $0 ;get value from function call "add"
|
popi $0 ;get value from function call "add"
|
||||||
itos $1 $0 ;convert int to string
|
itos $1 $0 ;convert int to string
|
||||||
|
@ -13,5 +13,5 @@ add:
|
||||||
popi $0 ; int a
|
popi $0 ; int a
|
||||||
popi $1 ; int b
|
popi $1 ; int b
|
||||||
addi $2 $1 $0 ; a + b
|
addi $2 $1 $0 ; a + b
|
||||||
pushi $2
|
pshi $2
|
||||||
return ; actually do the return
|
retn ; actually do the return
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
(defun add (int a int b)
|
||||||
|
(return (+ a b)))
|
||||||
|
|
||||||
|
(let ((sum (add 1 1)))
|
||||||
|
(print (itos sum)))
|
26
test/fib.asm
26
test/fib.asm
|
@ -1,6 +1,6 @@
|
||||||
main:
|
main:
|
||||||
loadi $0 35
|
lodi $0 35
|
||||||
pushi $0
|
pshi $0
|
||||||
call &fib
|
call &fib
|
||||||
popi $0
|
popi $0
|
||||||
itos $1 $0
|
itos $1 $0
|
||||||
|
@ -8,22 +8,22 @@ main:
|
||||||
halt
|
halt
|
||||||
fib:
|
fib:
|
||||||
popi $0
|
popi $0
|
||||||
loadi $1 2
|
lodi $1 2
|
||||||
loadi $2 &base_case
|
lodi $2 &base_case
|
||||||
jlt $2 $0 $1
|
jlti $2 $0 $1
|
||||||
loadi $2 2
|
lodi $2 2
|
||||||
subi $4 $0 $3
|
subi $4 $0 $3
|
||||||
pushi $4
|
pshi $4
|
||||||
call &fib
|
call &fib
|
||||||
load $2 1
|
lodi $2 1
|
||||||
subi $4 $0 $3
|
subi $4 $0 $3
|
||||||
pushi $4
|
pshi $4
|
||||||
call &fib
|
call &fib
|
||||||
popi $4
|
popi $4
|
||||||
popi $5
|
popi $5
|
||||||
addi $6 $5 $4
|
addi $6 $5 $4
|
||||||
pushi $6
|
pshi $6
|
||||||
return
|
retn
|
||||||
base_case:
|
base_case:
|
||||||
pushi $0
|
pshi $0
|
||||||
return
|
retn
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
(defun fib (int n)
|
||||||
|
(if (n < 2)
|
||||||
|
(return n)
|
||||||
|
(return (+ (fib (- n 2))
|
||||||
|
(fib (- n 1))))))
|
||||||
|
|
||||||
|
(puts (itos (fib 35)))
|
|
@ -1,4 +1,4 @@
|
||||||
fn fib(n) {
|
fn fib(int n) {
|
||||||
if (n < 2) return n;
|
if (n < 2) return n;
|
||||||
return fib(n - 2) + fib(n - 1);
|
return fib(n - 2) + fib(n - 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
(puts "nuqneH 'u'?")
|
|
@ -1,20 +1,17 @@
|
||||||
.memory
|
|
||||||
.ascii Enter a string:
|
|
||||||
|
|
||||||
.code
|
|
||||||
main:
|
main:
|
||||||
loadf $0 5.0
|
lodr $0 5.0
|
||||||
loadi $1 50000
|
lodi $1 50000
|
||||||
loadi $2 0
|
lodi $2 0
|
||||||
loadi $3 -1
|
lodi $3 -1
|
||||||
loop:
|
loop_body:
|
||||||
loadf $5 5.0
|
lodr $5 5.0
|
||||||
addr $0 $0 $5
|
addr $0 $0 $5
|
||||||
addi $1 $1 $3
|
addi $1 $1 $3
|
||||||
loadu $4 &loop
|
lodu $4 &loop_body
|
||||||
jgei $4 $1 $2
|
jgei $4 $1 $2
|
||||||
rtou $1 $0
|
rtou $1 $0
|
||||||
loadu $5 0
|
strs "Enter a string:"
|
||||||
|
ladu $5 0
|
||||||
puts $5
|
puts $5
|
||||||
gets $2
|
gets $2
|
||||||
utos $3 $1
|
utos $3 $1
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
(let ((a 5.0))
|
||||||
|
(do (i (5000 0 -1))
|
||||||
|
(set a (+ a 5.0)))
|
||||||
|
(let ((b (itou a)))
|
||||||
|
(puts "Enter a string:")
|
||||||
|
(let ((user-string (gets)))
|
||||||
|
(puts (rtos a))
|
||||||
|
(puts (utos b))
|
||||||
|
(puts user-string))))
|
|
@ -1,8 +1,9 @@
|
||||||
let a = 5.0;
|
let a = 5.0;
|
||||||
do (let i = 50000, 0, -1) {
|
do (let i = 50000, 0, -1) {
|
||||||
a += 5.0;
|
a = a + 5.0;
|
||||||
}
|
}
|
||||||
let b = a as nat;
|
let b = a as nat;
|
||||||
|
print("Enter a string:");
|
||||||
let user_string = gets();
|
let user_string = gets();
|
||||||
print(a.toS());
|
print(a.toS());
|
||||||
print(b.toS());
|
print(b.toS());
|
||||||
|
|
Loading…
Reference in New Issue