summaryrefslogtreecommitdiff
path: root/ecomp-c/tests/example_reverse_array.easm
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-c/tests/example_reverse_array.easm')
-rw-r--r--ecomp-c/tests/example_reverse_array.easm74
1 files changed, 74 insertions, 0 deletions
diff --git a/ecomp-c/tests/example_reverse_array.easm b/ecomp-c/tests/example_reverse_array.easm
new file mode 100644
index 0000000..e4d0c54
--- /dev/null
+++ b/ecomp-c/tests/example_reverse_array.easm
@@ -0,0 +1,74 @@
+format binary
+use32
+org $1000000
+; CONST N -> integer, 10
+; DECL i -> integer, 0
+; DECL a -> array 10 of integer, array 10 of integer = { ... }
+; LET i <- 0
+mov eax, 0
+push eax
+pop eax
+mov [i], eax
+; WHILE i 10 <
+__global_0:
+mov eax, [i]
+push eax
+mov eax, 10
+push eax
+pop ebx
+pop eax
+cmp eax, ebx
+jb __global_4
+mov eax, 0
+jmp __global_5
+__global_4: mov eax, 1
+__global_5:
+push eax
+pop eax
+mov ebx, 0
+cmp eax, ebx
+je __global_2
+jmp __global_3
+__global_2: jmp __global_1
+__global_3:
+; LET a[i ] <- i
+mov eax, [i]
+push eax
+pop eax
+mov ebx, 4
+mul ebx
+push eax
+mov eax, a
+pop ebx
+add eax, ebx
+push eax
+mov eax, [i]
+push eax
+pop eax
+pop ebx
+mov [ebx], eax
+; LET i <- i 1 +
+mov eax, [i]
+push eax
+mov eax, 1
+push eax
+pop ebx
+pop eax
+add eax, ebx
+push eax
+pop eax
+mov [i], eax
+jmp __global_0
+__global_1:
+hlt
+a: dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+dd $00000000
+i: dd $00000000