summaryrefslogtreecommitdiff
path: root/ecomp-c/tests/procedure_scoping.easm
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-c/tests/procedure_scoping.easm')
-rw-r--r--ecomp-c/tests/procedure_scoping.easm68
1 files changed, 68 insertions, 0 deletions
diff --git a/ecomp-c/tests/procedure_scoping.easm b/ecomp-c/tests/procedure_scoping.easm
new file mode 100644
index 0000000..afcc70c
--- /dev/null
+++ b/ecomp-c/tests/procedure_scoping.easm
@@ -0,0 +1,68 @@
+format binary
+use32
+org $1000000
+jmp __global_0
+; CONST N -> integer, 1
+; CONST M -> integer, 3
+; DECL x -> integer, 1
+; DECL y -> array 3 of integer, array 3 of integer = { ... }
+; PROC A
+; CONST N -> integer, 2
+; DECL x -> array 2 of integer, array 2 of integer = { ... }
+; DECL y -> array 3 of integer, array 3 of integer = { ... }
+; DECL z -> integer, 0
+__global_A:
+; LET x[2 ] <- 3
+mov eax, 2
+push eax
+pop eax
+mov ebx, 4
+mul ebx
+push eax
+mov eax, x
+pop ebx
+add eax, ebx
+push eax
+mov eax, 3
+push eax
+pop eax
+pop ebx
+mov [ebx], eax
+; LET z <- 4
+mov eax, 4
+push eax
+pop eax
+mov [z], eax
+ret
+; PROC B
+__global_B:
+; LET x <- 1
+mov eax, 1
+push eax
+pop eax
+mov [x], eax
+ret
+__global_0:
+; LET y[0 ] <- 7
+mov eax, 0
+push eax
+pop eax
+mov ebx, 4
+mul ebx
+push eax
+mov eax, y
+pop ebx
+add eax, ebx
+push eax
+mov eax, 7
+push eax
+pop eax
+pop ebx
+mov [ebx], eax
+call __global_A
+call __global_B
+hlt
+y: dd $00000000
+dd $00000000
+dd $00000000
+x: dd $00000001