diff options
Diffstat (limited to 'ecomp-c/tests/procedure_scoping.easm')
-rw-r--r-- | ecomp-c/tests/procedure_scoping.easm | 68 |
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 |