summaryrefslogtreecommitdiff
path: root/ecomp-c/tests/procedure_call_value_parameters.easm
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-c/tests/procedure_call_value_parameters.easm')
-rw-r--r--ecomp-c/tests/procedure_call_value_parameters.easm54
1 files changed, 54 insertions, 0 deletions
diff --git a/ecomp-c/tests/procedure_call_value_parameters.easm b/ecomp-c/tests/procedure_call_value_parameters.easm
new file mode 100644
index 0000000..a44959e
--- /dev/null
+++ b/ecomp-c/tests/procedure_call_value_parameters.easm
@@ -0,0 +1,54 @@
+format binary
+use32
+org $1000000
+jmp __global_0
+; DECL i -> integer, 1
+; param x, offset: -8, size: 4
+; PROC proc
+__global_proc:
+push ebp
+push esp
+pop ebp
+; DECL l -> integer, 0
+; local l, offset: 4, size: 4
+mov eax, 4
+sub esp, eax
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+mov eax, 0
+mov [ebx], eax
+; LET l <- x
+push ebp
+pop ebx
+mov eax, -8
+sub ebx, eax
+mov eax, [ebx]
+push eax
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+pop eax
+mov [ebx], eax
+; LET i <- l
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+mov eax, [ebx]
+push eax
+pop eax
+mov [i], eax
+mov eax, 4
+add esp, eax
+pop ebp
+ret 4
+__global_0:
+; CALL __global_proc( 42 )
+mov eax, 42
+push eax
+call __global_proc
+hlt
+i: dd $00000001