summaryrefslogtreecommitdiff
path: root/data/examples/test11.asm
diff options
context:
space:
mode:
Diffstat (limited to 'data/examples/test11.asm')
-rw-r--r--data/examples/test11.asm92
1 files changed, 92 insertions, 0 deletions
diff --git a/data/examples/test11.asm b/data/examples/test11.asm
new file mode 100644
index 0000000..f72fb29
--- /dev/null
+++ b/data/examples/test11.asm
@@ -0,0 +1,92 @@
+# All program code is placed after the
+# .text assembler directive
+.text
+
+# Declare main as a global function
+.globl main
+
+j main
+
+# code for main
+main:
+# Entering a new scope.
+# Symbols in symbol table:
+# println
+# i
+# return
+# Update the stack pointer.
+addi $sp $sp -0
+# Get i's offset from $sp from the symbol table and initialize i's address with it. We'll add $sp later.
+li $t0 -4
+# Add the stack pointer address to the offset.
+add $t0 $t0 $sp
+# Compute rhs for assignment =
+li $t1 0
+# complete assignment statement with store
+sw $t1 0($t0)
+# println
+la $a0 datalabel0
+li $v0 4
+syscall
+la $a0 newline
+li $v0 4
+syscall
+datalabel1:
+# Get i's offset from $sp from the symbol table and initialize i's address with it. We'll add $sp later.
+li $t1 -4
+# Add the stack pointer address to the offset.
+add $t1 $t1 $sp
+# Load the value of i.
+lw $t0 0($t1)
+li $t1 10
+slt $t0 $t0 $t1
+subi $t0 $t0 1
+bne $t0 $zero datalabel2
+# Entering a new scope.
+# Symbols in symbol table:
+# println
+# Update the stack pointer.
+addi $sp $sp -4
+# println
+# Get i's offset from $sp from the symbol table and initialize i's address with it. We'll add $sp later.
+li $t1 0
+# Add the stack pointer address to the offset.
+add $t1 $t1 $sp
+# Load the value of i.
+lw $t0 0($t1)
+move $a0 $t0
+li $v0 1
+syscall
+la $a0 newline
+li $v0 4
+syscall
+# Get i's offset from $sp from the symbol table and initialize i's address with it. We'll add $sp later.
+li $t0 0
+# Add the stack pointer address to the offset.
+add $t0 $t0 $sp
+# Compute rhs for assignment =
+# Get i's offset from $sp from the symbol table and initialize i's address with it. We'll add $sp later.
+li $t2 0
+# Add the stack pointer address to the offset.
+add $t2 $t2 $sp
+# Load the value of i.
+lw $t1 0($t2)
+li $t2 1
+add $t1 $t1 $t2
+# complete assignment statement with store
+sw $t1 0($t0)
+# Exiting scope.
+addi $sp $sp 4
+j datalabel1
+datalabel2:
+# Exiting scope.
+addi $sp $sp 0
+li $v0 10
+syscall
+
+# All memory structures are placed after the
+# .data assembler directive
+.data
+
+newline: .asciiz "\n"
+datalabel0: .asciiz "This program prints 0 through 9."