summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-06-28 20:18:33 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2020-06-28 20:18:33 +0200
commit93fb293b9cbed65c5324c51632ef6951c5c23cd5 (patch)
tree3131b86bb07420e24711c96c23be96bd85e564f9
parent6832eb323e51af3a05e9f4ee62e7c9cc358cb863 (diff)
downloadcompilertests-93fb293b9cbed65c5324c51632ef6951c5c23cd5.tar.gz
compilertests-93fb293b9cbed65c5324c51632ef6951c5c23cd5.tar.bz2
some work on procedure scopes
-rw-r--r--ecomp-c/ec.c46
-rwxr-xr-xecomp-c/test.sh1
-rw-r--r--ecomp-c/test1.e1
-rw-r--r--ecomp-c/tests/procedure_forward_declaration.e2
-rw-r--r--ecomp-c/tests/procedure_scoping.e38
-rw-r--r--ecomp-c/tests/procedure_scoping.easm68
-rw-r--r--ecomp-c/tests/procedure_scoping.easm_err0
-rw-r--r--ecomp-c/tests/procedure_scoping.ecomp_err0
-rw-r--r--ecomp-c/tests/procedure_scoping.erun769
9 files changed, 905 insertions, 20 deletions
diff --git a/ecomp-c/ec.c b/ecomp-c/ec.c
index 2b88b0e..dd95fe7 100644
--- a/ecomp-c/ec.c
+++ b/ecomp-c/ec.c
@@ -672,6 +672,7 @@ typedef struct Symbol {
int dim;
/* procedure type */
char *label;
+ struct Scope *scope;
} Symbol;
static Symbol *integer_type;
@@ -718,23 +719,15 @@ static void free_symbol( Symbol *sym )
static void free_scope( Scope *scope )
{
Symbol *sym, *next;
- Scope *next_scope;
- while( scope != NULL ) {
- sym = scope->symbol;
- while( sym != NULL ) {
- next = sym->next;
- free_symbol( sym );
- sym = next;
- }
- next_scope = scope->parent;
- if( scope->parent != NULL ) {
- free_scope( scope->parent );
- }
- free( scope->name );
- free( scope );
- scope = next_scope;
+ sym = scope->symbol;
+ while( sym != NULL ) {
+ next = sym->next;
+ free_symbol( sym );
+ sym = next;
}
+ free( scope->name );
+ free( scope );
}
char *get_local_label( Scope *scope )
@@ -780,7 +773,13 @@ static Symbol *insert_symbol( Scope *scope, char *name, SymbolClass class )
{
Symbol *sym;
- sym = get_symbol( scope, name );
+ sym = scope->symbol;
+ while( sym != NULL ) {
+ if( strcmp( sym->name, name ) == 0 ) {
+ return sym;
+ }
+ sym = sym->next;
+ }
if( sym != NULL ) {
Abort( "'%s' is already defined.", name );
}
@@ -1952,12 +1951,23 @@ static void parseProcedureBlock( Scope *scope )
Expect( S_semicolon );
if( sym == S_const || sym == S_var || sym == S_begin ) {
- parseProcedureDeclarationBlock( scope );
Emit( "; PROC %s\n", symbol->name );
+
+ symbol->scope = create_scope( scope, symbol->name );
+
+ parseProcedureDeclarationBlock( symbol->scope );
+
+ /* TODO: allocate space for local variables on stack, set
+ * stack pointer */
+ /* TODO: assign symbols to relative addresses (base pointer) */
Emit( "%s:\n", symbol->label );
- parseStatementBlock( scope );
+ parseStatementBlock( symbol->scope );
+
+ free_scope( symbol->scope );
+
+ /* TODO: discard locals here, reset base pointer */
Emit( "ret\n" );
}
diff --git a/ecomp-c/test.sh b/ecomp-c/test.sh
index a284678..9f192f3 100755
--- a/ecomp-c/test.sh
+++ b/ecomp-c/test.sh
@@ -24,6 +24,7 @@ type_check_comparision
while_statement
procedure_call
procedure_forward_declaration
+procedure_scoping
example_divisors
example_divisors_array_result
example_reverse_array
diff --git a/ecomp-c/test1.e b/ecomp-c/test1.e
index a9fbbe8..49418db 100644
--- a/ecomp-c/test1.e
+++ b/ecomp-c/test1.e
@@ -43,7 +43,6 @@ end
procedure B;
begin
a1[4] := 44;
- A;
end
begin
diff --git a/ecomp-c/tests/procedure_forward_declaration.e b/ecomp-c/tests/procedure_forward_declaration.e
index 7129184..f2eff36 100644
--- a/ecomp-c/tests/procedure_forward_declaration.e
+++ b/ecomp-c/tests/procedure_forward_declaration.e
@@ -1,5 +1,5 @@
/*
- * forware declaration of procedure
+ * forward declaration of a procedure
*/
module procedure_forward_declaration;
diff --git a/ecomp-c/tests/procedure_scoping.e b/ecomp-c/tests/procedure_scoping.e
new file mode 100644
index 0000000..31d1444
--- /dev/null
+++ b/ecomp-c/tests/procedure_scoping.e
@@ -0,0 +1,38 @@
+/*
+ * scopes in procedures
+ */
+
+module procedure_scoping;
+
+const
+ N : integer = 1;
+ M : integer = 3;
+
+var
+ x : integer := N;
+ y : array M of integer;
+
+procedure A;
+const
+ N : integer = 2;
+
+var
+ x : array N of integer;
+ y : array M of integer;
+ z : integer;
+
+begin
+ x[N] := M;
+ z := 4;
+end
+
+procedure B;
+begin
+ x := N;
+end
+
+begin
+ y[0] := 7;
+ A;
+ B;
+end
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
diff --git a/ecomp-c/tests/procedure_scoping.easm_err b/ecomp-c/tests/procedure_scoping.easm_err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ecomp-c/tests/procedure_scoping.easm_err
diff --git a/ecomp-c/tests/procedure_scoping.ecomp_err b/ecomp-c/tests/procedure_scoping.ecomp_err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ecomp-c/tests/procedure_scoping.ecomp_err
diff --git a/ecomp-c/tests/procedure_scoping.erun b/ecomp-c/tests/procedure_scoping.erun
new file mode 100644
index 0000000..f2685b5
--- /dev/null
+++ b/ecomp-c/tests/procedure_scoping.erun
@@ -0,0 +1,769 @@
+Read 111 bytes of code and static data..
+1000000: EB30 jmp 0x1000032
+1000002: B802000000 mov eax, 2
+1000007: 50 push eax
+1000008: 58 pop eax
+1000009: BB04000000 mov ebx, 4
+100000E: F7E3 mul ebx
+1000010: 50 push eax
+1000011: B86B000001 mov eax, 0x100006b
+1000016: 5B pop ebx
+1000017: 01D8 add eax, ebx
+1000019: 50 push eax
+100001A: B803000000 mov eax, 3
+100001F: 50 push eax
+1000020: 58 pop eax
+1000021: 5B pop ebx
+1000022: 8903 mov dword ptr [ebx], eax
+1000024: C3 ret
+1000025: B801000000 mov eax, 1
+100002A: 50 push eax
+100002B: 58 pop eax
+100002C: A36B000001 mov dword ptr [0x100006b], eax
+1000031: C3 ret
+1000032: B800000000 mov eax, 0
+1000037: 50 push eax
+1000038: 58 pop eax
+1000039: BB04000000 mov ebx, 4
+100003E: F7E3 mul ebx
+1000040: 50 push eax
+1000041: B85F000001 mov eax, 0x100005f
+1000046: 5B pop ebx
+1000047: 01D8 add eax, ebx
+1000049: 50 push eax
+100004A: B807000000 mov eax, 7
+100004F: 50 push eax
+1000050: 58 pop eax
+1000051: 5B pop ebx
+1000052: 8903 mov dword ptr [ebx], eax
+1000054: E8A9FFFFFF call 0x1000002
+1000059: E8C7FFFFFF call 0x1000025
+100005E: F4 hlt
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+core start 1000000
+data start 100005f
+data size 10
+stack start 1800000
+Single step execution:
+-- iteration 1
+1000000: EB30 jmp 0x1000032
+EIP: 01000032
+ESP: 01800000
+EBP: 00000000
+EAX: 00000000
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 2
+1000032: B800000000 mov eax, 0
+EIP: 01000037
+ESP: 01800000
+EBP: 00000000
+EAX: 00000000
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 3
+1000037: 50 push eax
+EIP: 01000038
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000000
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 00000000
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 4
+1000038: 58 pop eax
+EIP: 01000039
+ESP: 01800000
+EBP: 00000000
+EAX: 00000000
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 5
+1000039: BB04000000 mov ebx, 4
+EIP: 0100003E
+ESP: 01800000
+EBP: 00000000
+EAX: 00000000
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 6
+100003E: F7E3 mul ebx
+EIP: 01000040
+ESP: 01800000
+EBP: 00000000
+EAX: 00000000
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 7
+1000040: 50 push eax
+EIP: 01000041
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000000
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 00000000
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 8
+1000041: B85F000001 mov eax, 0x100005f
+EIP: 01000046
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 0100005F
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 00000000
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 9
+1000046: 5B pop ebx
+EIP: 01000047
+ESP: 01800000
+EBP: 00000000
+EAX: 0100005F
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 10
+1000047: 01D8 add eax, ebx
+EIP: 01000049
+ESP: 01800000
+EBP: 00000000
+EAX: 0100005F
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 11
+1000049: 50 push eax
+EIP: 0100004A
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 0100005F
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005F
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 12
+100004A: B807000000 mov eax, 7
+EIP: 0100004F
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000007
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005F
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 13
+100004F: 50 push eax
+EIP: 01000050
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000007
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 00000007
+017FFFFC: 0100005F
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 14
+1000050: 58 pop eax
+EIP: 01000051
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000007
+EBX: 00000000
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005F
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 15
+1000051: 5B pop ebx
+EIP: 01000052
+ESP: 01800000
+EBP: 00000000
+EAX: 00000007
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 00000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 16
+1000052: 8903 mov dword ptr [ebx], eax
+EIP: 01000054
+ESP: 01800000
+EBP: 00000000
+EAX: 00000007
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 17
+1000054: E8A9FFFFFF call 0x1000002
+EIP: 01000002
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000007
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 18
+1000002: B802000000 mov eax, 2
+EIP: 01000007
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000002
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 19
+1000007: 50 push eax
+EIP: 01000008
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000002
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 00000002
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 20
+1000008: 58 pop eax
+EIP: 01000009
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000002
+EBX: 0100005F
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 21
+1000009: BB04000000 mov ebx, 4
+EIP: 0100000E
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000002
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 22
+100000E: F7E3 mul ebx
+EIP: 01000010
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000008
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 23
+1000010: 50 push eax
+EIP: 01000011
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000008
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 00000008
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 24
+1000011: B86B000001 mov eax, 0x100006b
+EIP: 01000016
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 0100006B
+EBX: 00000004
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 00000008
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 25
+1000016: 5B pop ebx
+EIP: 01000017
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 0100006B
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 26
+1000017: 01D8 add eax, ebx
+EIP: 01000019
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 01000073
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 27
+1000019: 50 push eax
+EIP: 0100001A
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 01000073
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 01000073
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 28
+100001A: B803000000 mov eax, 3
+EIP: 0100001F
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000003
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 01000073
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 29
+100001F: 50 push eax
+EIP: 01000020
+ESP: 017FFFF4
+EBP: 00000000
+EAX: 00000003
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF4: 00000003
+017FFFF8: 01000073
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 30
+1000020: 58 pop eax
+EIP: 01000021
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000003
+EBX: 00000008
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 01000073
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 31
+1000021: 5B pop ebx
+EIP: 01000022
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000003
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 32
+1000022: 8903 mov dword ptr [ebx], eax
+EIP: 01000024
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000003
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 01000059
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 33
+1000024: C3 ret
+EIP: 01000059
+ESP: 01800000
+EBP: 00000000
+EAX: 00000003
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 34
+1000059: E8C7FFFFFF call 0x1000025
+EIP: 01000025
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000003
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005E
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 35
+1000025: B801000000 mov eax, 1
+EIP: 0100002A
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005E
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 36
+100002A: 50 push eax
+EIP: 0100002B
+ESP: 017FFFF8
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFF8: 00000001
+017FFFFC: 0100005E
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 37
+100002B: 58 pop eax
+EIP: 0100002C
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005E
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 38
+100002C: A36B000001 mov dword ptr [0x100006b], eax
+EIP: 01000031
+ESP: 017FFFFC
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+017FFFFC: 0100005E
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 39
+1000031: C3 ret
+EIP: 0100005E
+ESP: 01800000
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000
+-- iteration 40
+100005E: F4 hlt
+EIP: 0100005F
+ESP: 01800000
+EBP: 00000000
+EAX: 00000001
+EBX: 01000073
+ECX: 00000000
+EDX: 00000000
+ESI: 00000000
+EDI: 00000000
+stack:
+data:
+0100005F: 07000000
+01000063: 00000000
+01000067: 00000000
+0100006B: 01000000