summaryrefslogtreecommitdiff
path: root/ecomp-c/tests/procedure_call_value_parameters.easm
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-08-15 19:54:10 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2020-08-15 19:54:10 +0200
commit2f57b93442e14d586684c584c1edf5ee29f3d0bb (patch)
tree80ccc2e42ad5e28ff1ac2043befd891db62192b9 /ecomp-c/tests/procedure_call_value_parameters.easm
parentc096d1707246c8631219365034e11b28652c98f4 (diff)
downloadcompilertests-2f57b93442e14d586684c584c1edf5ee29f3d0bb.tar.gz
compilertests-2f57b93442e14d586684c584c1edf5ee29f3d0bb.tar.bz2
forgot to add procedure_call_value_parameters test
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