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_ADD_REAL,     /* addr : 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_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 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								test/add.asm
								
								
								
								
							
							
						
						
									
										12
									
								
								test/add.asm
								
								
								
								
							| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
main:
 | 
			
		||||
	loadi $0 1		;load 1 into r0
 | 
			
		||||
	pushi $0 		;push onto stack
 | 
			
		||||
	loadi $0 1		;1
 | 
			
		||||
	pushi $0
 | 
			
		||||
	lodi $0 1		;load 1 into r0
 | 
			
		||||
	pshi $0 		;push onto stack
 | 
			
		||||
	lodi $0 1		;1
 | 
			
		||||
	pshi $0
 | 
			
		||||
	call &add		; call memory location for tag "add"
 | 
			
		||||
	popi $0			;get value from function call "add"
 | 
			
		||||
	itos $1 $0		;convert int to string
 | 
			
		||||
| 
						 | 
				
			
			@ -13,5 +13,5 @@ add:
 | 
			
		|||
	popi $0			; int a
 | 
			
		||||
	popi $1			; int b
 | 
			
		||||
	addi $2 $1 $0		; a + b
 | 
			
		||||
	pushi $2
 | 
			
		||||
	return			; actually do the return
 | 
			
		||||
	pshi $2
 | 
			
		||||
	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:
 | 
			
		||||
	loadi $0 35
 | 
			
		||||
	pushi $0
 | 
			
		||||
	lodi $0 35
 | 
			
		||||
	pshi $0
 | 
			
		||||
	call &fib
 | 
			
		||||
	popi $0
 | 
			
		||||
	itos $1 $0
 | 
			
		||||
| 
						 | 
				
			
			@ -8,22 +8,22 @@ main:
 | 
			
		|||
	halt
 | 
			
		||||
fib:	
 | 
			
		||||
	popi $0
 | 
			
		||||
	loadi $1 2
 | 
			
		||||
	loadi $2 &base_case
 | 
			
		||||
	jlt $2 $0 $1
 | 
			
		||||
	loadi $2 2
 | 
			
		||||
	lodi $1 2
 | 
			
		||||
	lodi $2 &base_case
 | 
			
		||||
	jlti $2 $0 $1
 | 
			
		||||
	lodi $2 2
 | 
			
		||||
	subi $4 $0 $3
 | 
			
		||||
	pushi $4
 | 
			
		||||
	pshi $4
 | 
			
		||||
	call &fib
 | 
			
		||||
	load $2 1
 | 
			
		||||
	lodi $2 1
 | 
			
		||||
	subi $4 $0 $3
 | 
			
		||||
	pushi $4
 | 
			
		||||
	pshi $4
 | 
			
		||||
	call &fib
 | 
			
		||||
	popi $4
 | 
			
		||||
	popi $5
 | 
			
		||||
	addi $6 $5 $4
 | 
			
		||||
	pushi $6
 | 
			
		||||
	return
 | 
			
		||||
	pshi $6
 | 
			
		||||
	retn
 | 
			
		||||
base_case:	
 | 
			
		||||
	pushi $0
 | 
			
		||||
	return 
 | 
			
		||||
	pshi $0
 | 
			
		||||
	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;
 | 
			
		||||
  return fib(n - 2) + fib(n - 1);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
(puts "nuqneH 'u'?")
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +1,17 @@
 | 
			
		|||
.memory
 | 
			
		||||
.ascii Enter a string:
 | 
			
		||||
 | 
			
		||||
.code
 | 
			
		||||
main:	
 | 
			
		||||
	loadf $0 5.0
 | 
			
		||||
	loadi $1 50000
 | 
			
		||||
	loadi $2 0
 | 
			
		||||
	loadi $3 -1
 | 
			
		||||
loop:	
 | 
			
		||||
	loadf $5 5.0
 | 
			
		||||
	lodr $0 5.0
 | 
			
		||||
	lodi $1 50000
 | 
			
		||||
	lodi $2 0
 | 
			
		||||
	lodi $3 -1
 | 
			
		||||
loop_body:	
 | 
			
		||||
	lodr $5 5.0
 | 
			
		||||
	addr $0 $0 $5
 | 
			
		||||
	addi $1 $1 $3
 | 
			
		||||
	loadu $4 &loop
 | 
			
		||||
	lodu $4 &loop_body
 | 
			
		||||
	jgei $4 $1 $2
 | 
			
		||||
	rtou $1 $0
 | 
			
		||||
	loadu $5 0
 | 
			
		||||
	strs "Enter a string:"
 | 
			
		||||
	ladu $5 0
 | 
			
		||||
	puts $5
 | 
			
		||||
	gets $2
 | 
			
		||||
	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;
 | 
			
		||||
do (let i = 50000, 0, -1) {
 | 
			
		||||
  a += 5.0;
 | 
			
		||||
  a = a + 5.0;
 | 
			
		||||
}
 | 
			
		||||
let b = a as nat;
 | 
			
		||||
print("Enter a string:");
 | 
			
		||||
let user_string = gets();
 | 
			
		||||
print(a.toS());
 | 
			
		||||
print(b.toS());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue