From 93fb293b9cbed65c5324c51632ef6951c5c23cd5 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 28 Jun 2020 20:18:33 +0200 Subject: some work on procedure scopes --- ecomp-c/ec.c | 46 +- ecomp-c/test.sh | 1 + ecomp-c/test1.e | 1 - ecomp-c/tests/procedure_forward_declaration.e | 2 +- ecomp-c/tests/procedure_scoping.e | 38 ++ ecomp-c/tests/procedure_scoping.easm | 68 +++ ecomp-c/tests/procedure_scoping.easm_err | 0 ecomp-c/tests/procedure_scoping.ecomp_err | 0 ecomp-c/tests/procedure_scoping.erun | 769 ++++++++++++++++++++++++++ 9 files changed, 905 insertions(+), 20 deletions(-) create mode 100644 ecomp-c/tests/procedure_scoping.e create mode 100644 ecomp-c/tests/procedure_scoping.easm create mode 100644 ecomp-c/tests/procedure_scoping.easm_err create mode 100644 ecomp-c/tests/procedure_scoping.ecomp_err create mode 100644 ecomp-c/tests/procedure_scoping.erun 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 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 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 -- cgit v1.2.3-54-g00ecf