15101 lines
384 KiB
Plaintext
15101 lines
384 KiB
Plaintext
# This file was generated by running:
|
|
# ./bin/vm --rom roms/cc_x86 --memory 4M --tape_01 stage3/M2-Planet_x86.c --tape_02 ../M2-Planet/seed.M1
|
|
# In stage0
|
|
|
|
# Core program
|
|
# Defining function fgetc
|
|
:FUNCTION_fgetc
|
|
LOAD_IMMEDIATE_eax %3
|
|
LOAD_EFFECTIVE_ADDRESS_ebx %4
|
|
LOAD_INTEGER_ebx
|
|
PUSH_ebx
|
|
COPY_esp_to_ecx
|
|
LOAD_IMMEDIATE_edx %1
|
|
INT_80
|
|
TEST
|
|
POP_eax
|
|
JUMP_NE8 !FUNCTION_fgetc_Done
|
|
LOAD_IMMEDIATE_eax %-1
|
|
:FUNCTION_fgetc_Done
|
|
RETURN
|
|
# Defining function fputc
|
|
:FUNCTION_fputc
|
|
LOAD_IMMEDIATE_eax %4
|
|
LOAD_EFFECTIVE_ADDRESS_ebx %4
|
|
LOAD_INTEGER_ebx
|
|
LOAD_EFFECTIVE_ADDRESS_ecx %8
|
|
LOAD_IMMEDIATE_edx %1
|
|
INT_80
|
|
RETURN
|
|
# Defining function open
|
|
:FUNCTION_open
|
|
LOAD_EFFECTIVE_ADDRESS_ebx %12
|
|
LOAD_INTEGER_ebx
|
|
LOAD_EFFECTIVE_ADDRESS_ecx %8
|
|
LOAD_INTEGER_ecx
|
|
LOAD_EFFECTIVE_ADDRESS_edx %4
|
|
LOAD_INTEGER_edx
|
|
LOAD_IMMEDIATE_eax %5
|
|
INT_80
|
|
RETURN
|
|
# Defining function fopen
|
|
:FUNCTION_fopen
|
|
# Defining local f
|
|
PUSH_eax #f
|
|
# IF_fopen_0
|
|
LOAD_IMMEDIATE_eax %119
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_fopen_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %577
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %384
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_open
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_fopen_0
|
|
:ELSE_fopen_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_open
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_fopen_0
|
|
# IF_fopen_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_fopen_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_fopen_1
|
|
:ELSE_fopen_1
|
|
:_END_IF_fopen_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function close
|
|
:FUNCTION_close
|
|
LOAD_EFFECTIVE_ADDRESS_ebx %4
|
|
LOAD_IMMEDIATE_eax %6
|
|
INT_80
|
|
RETURN
|
|
# Defining function fclose
|
|
:FUNCTION_fclose
|
|
# Defining local error
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_close
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #error
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function malloc
|
|
:FUNCTION_malloc
|
|
STORE_eax_into_ESP_IMMEDIATE8 !4
|
|
PUSH_eax
|
|
LOAD_IMMEDIATE_eax %45
|
|
LOAD_IMMEDIATE_ebx %0
|
|
INT_80
|
|
POP_ebx
|
|
ADD_eax_to_ebx
|
|
PUSH_eax
|
|
PUSH_ebx
|
|
LOAD_IMMEDIATE_eax %45
|
|
INT_80
|
|
POP_ebx
|
|
CMP
|
|
POP_eax
|
|
JUMP_EQ8 !FUNCTION_malloc_Done
|
|
LOAD_IMMEDIATE_eax %-1
|
|
:FUNCTION_malloc_Done
|
|
RETURN
|
|
# Defining function memset
|
|
:FUNCTION_memset
|
|
# Defining local s
|
|
PUSH_eax #s
|
|
# FOR_initialization_memset_0
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_memset_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETL
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_memset_0
|
|
JUMP %FOR_THEN_memset_0
|
|
:FOR_ITER_memset_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_memset_0
|
|
:FOR_THEN_memset_0
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_ITER_memset_0
|
|
:FOR_END_memset_0
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function calloc
|
|
:FUNCTION_calloc
|
|
# Defining local ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_malloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_memset
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function free
|
|
:FUNCTION_free
|
|
RETURN
|
|
# Defining function exit
|
|
:FUNCTION_exit
|
|
POP_ebx
|
|
POP_ebx
|
|
LOAD_IMMEDIATE_eax %1
|
|
INT_80
|
|
RETURN
|
|
# Defining function match
|
|
:FUNCTION_match
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
PUSH_eax #i
|
|
:DO_match_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_match_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_match_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_match_1
|
|
:ELSE_match_1
|
|
:_END_IF_match_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_NE %DO_match_0
|
|
:DO_END_match_0
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function numerate_number
|
|
:FUNCTION_numerate_number
|
|
# Defining local result
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %16
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #result
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #i
|
|
# IF_numerate_number_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_number_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_numerate_number_0
|
|
:ELSE_numerate_number_0
|
|
:_END_IF_numerate_number_0
|
|
# IF_numerate_number_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_number_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %45
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_numerate_number_1
|
|
:ELSE_numerate_number_1
|
|
:_END_IF_numerate_number_1
|
|
# Defining local divisor
|
|
LOAD_IMMEDIATE_eax %0x3B9ACA00
|
|
PUSH_eax #divisor
|
|
:WHILE_numerate_number_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_numerate_number_2
|
|
# THEN_while_numerate_number_2
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_numerate_number_2
|
|
:END_WHILE_numerate_number_2
|
|
:WHILE_numerate_number_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETL
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_numerate_number_3
|
|
# THEN_while_numerate_number_3
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
MODULUS_eax_from_ebx_into_ebx
|
|
MOVE_edx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_numerate_number_3
|
|
:END_WHILE_numerate_number_3
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function char2hex
|
|
:FUNCTION_char2hex
|
|
# IF_char2hex_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %57
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_char2hex_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_char2hex_0
|
|
:ELSE_char2hex_0
|
|
# IF_char2hex_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %97
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %102
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_char2hex_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %87
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_char2hex_1
|
|
:ELSE_char2hex_1
|
|
# IF_char2hex_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %65
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %70
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_char2hex_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %55
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_char2hex_2
|
|
:ELSE_char2hex_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
:_END_IF_char2hex_2
|
|
:_END_IF_char2hex_1
|
|
:_END_IF_char2hex_0
|
|
RETURN
|
|
# Defining function hex2char
|
|
:FUNCTION_hex2char
|
|
# IF_hex2char_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %9
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_hex2char_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_hex2char_0
|
|
:ELSE_hex2char_0
|
|
# IF_hex2char_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %15
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_hex2char_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %55
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_hex2char_1
|
|
:ELSE_hex2char_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
:_END_IF_hex2char_1
|
|
:_END_IF_hex2char_0
|
|
RETURN
|
|
# Defining function char2dec
|
|
:FUNCTION_char2dec
|
|
# IF_char2dec_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %57
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_char2dec_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_char2dec_0
|
|
:ELSE_char2dec_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
:_END_IF_char2dec_0
|
|
RETURN
|
|
# Defining function dec2char
|
|
:FUNCTION_dec2char
|
|
# IF_dec2char_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %9
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_dec2char_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
RETURN
|
|
JUMP %_END_IF_dec2char_0
|
|
:ELSE_dec2char_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
RETURN
|
|
:_END_IF_dec2char_0
|
|
RETURN
|
|
# Defining function numerate_string
|
|
:FUNCTION_numerate_string
|
|
# Defining local count
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #count
|
|
# Defining local index
|
|
PUSH_eax #index
|
|
# Defining local negative
|
|
PUSH_eax #negative
|
|
# IF_numerate_string_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_numerate_string_0
|
|
:ELSE_numerate_string_0
|
|
# IF_numerate_string_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %120
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_1
|
|
# IF_numerate_string_2
|
|
LOAD_IMMEDIATE_eax %45
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_2
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_numerate_string_2
|
|
:ELSE_numerate_string_2
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_numerate_string_2
|
|
:WHILE_numerate_string_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_numerate_string_3
|
|
# THEN_while_numerate_string_3
|
|
# IF_numerate_string_4
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_4
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_numerate_string_4
|
|
:ELSE_numerate_string_4
|
|
:_END_IF_numerate_string_4
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_numerate_string_3
|
|
:END_WHILE_numerate_string_3
|
|
JUMP %_END_IF_numerate_string_1
|
|
:ELSE_numerate_string_1
|
|
# IF_numerate_string_5
|
|
LOAD_IMMEDIATE_eax %45
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_5
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_numerate_string_5
|
|
:ELSE_numerate_string_5
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_numerate_string_5
|
|
:WHILE_numerate_string_6
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_numerate_string_6
|
|
# THEN_while_numerate_string_6
|
|
# IF_numerate_string_7
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_char2dec
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_7
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_numerate_string_7
|
|
:ELSE_numerate_string_7
|
|
:_END_IF_numerate_string_7
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_char2dec
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_numerate_string_6
|
|
:END_WHILE_numerate_string_6
|
|
:_END_IF_numerate_string_1
|
|
:_END_IF_numerate_string_0
|
|
# IF_numerate_string_8
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_8
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_numerate_string_8
|
|
:ELSE_numerate_string_8
|
|
:_END_IF_numerate_string_8
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function file_print
|
|
:FUNCTION_file_print
|
|
:WHILE_file_print_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_file_print_0
|
|
# THEN_while_file_print_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fputc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_file_print_0
|
|
:END_WHILE_file_print_0
|
|
RETURN
|
|
# Defining function copy_string
|
|
:FUNCTION_copy_string
|
|
:WHILE_copy_string_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_copy_string_0
|
|
# THEN_while_copy_string_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_copy_string_0
|
|
:END_WHILE_copy_string_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function postpend_char
|
|
:FUNCTION_postpend_char
|
|
# Defining local ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ret
|
|
# Defining local hold
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #hold
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function prepend_char
|
|
:FUNCTION_prepend_char
|
|
# Defining local ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ret
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function prepend_string
|
|
:FUNCTION_prepend_string
|
|
# Defining local ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function string_length
|
|
:FUNCTION_string_length
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #i
|
|
:WHILE_string_length_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_string_length_0
|
|
# THEN_while_string_length_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_string_length_0
|
|
:END_WHILE_string_length_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function clearWhiteSpace
|
|
:FUNCTION_clearWhiteSpace
|
|
# IF_clearWhiteSpace_0
|
|
LOAD_IMMEDIATE_eax %32
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %9
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_clearWhiteSpace_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
JUMP %_END_IF_clearWhiteSpace_0
|
|
:ELSE_clearWhiteSpace_0
|
|
# IF_clearWhiteSpace_1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_clearWhiteSpace_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
JUMP %_END_IF_clearWhiteSpace_1
|
|
:ELSE_clearWhiteSpace_1
|
|
:_END_IF_clearWhiteSpace_1
|
|
:_END_IF_clearWhiteSpace_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function consume_byte
|
|
:FUNCTION_consume_byte
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function consume_word
|
|
:FUNCTION_consume_word
|
|
# Defining local escape
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #escape
|
|
:DO_consume_word_0
|
|
# IF_consume_word_1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %92
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_consume_word_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_consume_word_1
|
|
:ELSE_consume_word_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_consume_word_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_NE %DO_consume_word_0
|
|
:DO_END_consume_word_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function fixup_label
|
|
:FUNCTION_fixup_label
|
|
# Defining local hold
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #hold
|
|
# Defining local prev
|
|
PUSH_eax #prev
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #i
|
|
:DO_fixup_label_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_NE %DO_fixup_label_0
|
|
:DO_END_fixup_label_0
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function in_set
|
|
:FUNCTION_in_set
|
|
:WHILE_in_set_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_in_set_0
|
|
# THEN_while_in_set_0
|
|
# IF_in_set_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_in_set_1
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_in_set_1
|
|
:ELSE_in_set_1
|
|
:_END_IF_in_set_1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_in_set_0
|
|
:END_WHILE_in_set_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
RETURN
|
|
# Defining function preserve_keyword
|
|
:FUNCTION_preserve_keyword
|
|
:WHILE_preserve_keyword_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_preserve_keyword_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %END_WHILE_preserve_keyword_0
|
|
# THEN_while_preserve_keyword_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_preserve_keyword_0
|
|
:END_WHILE_preserve_keyword_0
|
|
# IF_preserve_keyword_2
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_preserve_keyword_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fixup_label
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax %32
|
|
RETURN
|
|
JUMP %_END_IF_preserve_keyword_2
|
|
:ELSE_preserve_keyword_2
|
|
:_END_IF_preserve_keyword_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function preserve_symbol
|
|
:FUNCTION_preserve_symbol
|
|
:WHILE_preserve_symbol_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_preserve_symbol_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %END_WHILE_preserve_symbol_0
|
|
# THEN_while_preserve_symbol_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_preserve_symbol_0
|
|
:END_WHILE_preserve_symbol_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function purge_macro
|
|
:FUNCTION_purge_macro
|
|
:WHILE_purge_macro_0
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_purge_macro_0
|
|
# THEN_while_purge_macro_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_purge_macro_0
|
|
:END_WHILE_purge_macro_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function reset_hold_string
|
|
:FUNCTION_reset_hold_string
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #i
|
|
:WHILE_reset_hold_string_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_reset_hold_string_0
|
|
# THEN_while_reset_hold_string_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_reset_hold_string_0
|
|
:END_WHILE_reset_hold_string_0
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function get_token
|
|
:FUNCTION_get_token
|
|
# Defining local current
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %20
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #current
|
|
:reset #C goto label
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_reset_hold_string
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_0
|
|
LOAD_IMMEDIATE_eax %35
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_purge_macro
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_0
|
|
:ELSE_get_token_0
|
|
# IF_get_token_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_get_token_2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_preserve_keyword
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_1
|
|
:ELSE_get_token_1
|
|
# IF_get_token_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_get_token_4
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_3
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_preserve_symbol
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_3
|
|
:ELSE_get_token_3
|
|
# IF_get_token_5
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_5
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %39
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_word
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_5
|
|
:ELSE_get_token_5
|
|
# IF_get_token_6
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %34
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_6
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %34
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_word
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_6
|
|
:ELSE_get_token_6
|
|
# IF_get_token_7
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_7
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_8
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_8
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_get_token_9
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_get_token_9
|
|
# THEN_while_get_token_9
|
|
:WHILE_get_token_10
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_get_token_10
|
|
# THEN_while_get_token_10
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_11
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_11
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_11
|
|
:ELSE_get_token_11
|
|
:_END_IF_get_token_11
|
|
JUMP %WHILE_get_token_10
|
|
:END_WHILE_get_token_10
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_12
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_12
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_12
|
|
:ELSE_get_token_12
|
|
:_END_IF_get_token_12
|
|
JUMP %WHILE_get_token_9
|
|
:END_WHILE_get_token_9
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_8
|
|
:ELSE_get_token_8
|
|
# IF_get_token_13
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_13
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_13
|
|
:ELSE_get_token_13
|
|
:_END_IF_get_token_13
|
|
:_END_IF_get_token_8
|
|
JUMP %_END_IF_get_token_7
|
|
:ELSE_get_token_7
|
|
# IF_get_token_14
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0xFFFFFFFF
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_14
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_free
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_get_token_14
|
|
:ELSE_get_token_14
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_get_token_14
|
|
:_END_IF_get_token_7
|
|
:_END_IF_get_token_6
|
|
:_END_IF_get_token_5
|
|
:_END_IF_get_token_3
|
|
:_END_IF_get_token_1
|
|
:_END_IF_get_token_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_file
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function reverse_list
|
|
:FUNCTION_reverse_list
|
|
# Defining local root
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #root
|
|
:WHILE_reverse_list_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_reverse_list_0
|
|
# THEN_while_reverse_list_0
|
|
# Defining local next
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #next
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %WHILE_reverse_list_0
|
|
:END_WHILE_reverse_list_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function read_all_tokens
|
|
:FUNCTION_read_all_tokens
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_line
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_file
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local ch
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ch
|
|
:WHILE_read_all_tokens_0
|
|
LOAD_IMMEDIATE_eax %0xFFFFFFFF
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_read_all_tokens_0
|
|
# THEN_while_read_all_tokens_0
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_get_token
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_read_all_tokens_0
|
|
:END_WHILE_read_all_tokens_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function upcase
|
|
:FUNCTION_upcase
|
|
# IF_upcase_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_upcase_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_upcase_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %32
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_upcase_0
|
|
:ELSE_upcase_0
|
|
:_END_IF_upcase_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function hexify
|
|
:FUNCTION_hexify
|
|
# Defining local i
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #i
|
|
# IF_hexify_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_hexify_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_hexify_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_hexify_0
|
|
:ELSE_hexify_0
|
|
:_END_IF_hexify_0
|
|
# IF_hexify_2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_hexify_2
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
COPY_eax_to_ecx
|
|
COPY_ebx_to_eax
|
|
SAL_eax_cl
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_hexify_2
|
|
:ELSE_hexify_2
|
|
:_END_IF_hexify_2
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function weird
|
|
:FUNCTION_weird
|
|
# Defining local c
|
|
PUSH_eax #c
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:weird_reset #C goto label
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_weird_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_weird_0
|
|
:ELSE_weird_0
|
|
:_END_IF_weird_0
|
|
# IF_weird_1
|
|
LOAD_IMMEDIATE_eax %92
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_weird_2
|
|
LOAD_IMMEDIATE_eax %120
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_weird_2
|
|
:ELSE_weird_2
|
|
:_END_IF_weird_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_weird_1
|
|
:ELSE_weird_1
|
|
:_END_IF_weird_1
|
|
# IF_weird_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_weird_4
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_weird_3
|
|
:ELSE_weird_3
|
|
:_END_IF_weird_3
|
|
# IF_weird_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_weird_6
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_5
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_weird_5
|
|
:ELSE_weird_5
|
|
:_END_IF_weird_5
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %weird_reset
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function escape_lookup
|
|
:FUNCTION_escape_lookup
|
|
# IF_escape_lookup_0
|
|
LOAD_IMMEDIATE_eax %92
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_0
|
|
:ELSE_escape_lookup_0
|
|
:_END_IF_escape_lookup_0
|
|
# IF_escape_lookup_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %120
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_1
|
|
# Defining local t1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_hexify
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #t1
|
|
# Defining local t2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_hexify
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #t2
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_1
|
|
:ELSE_escape_lookup_1
|
|
# IF_escape_lookup_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %116
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_2
|
|
LOAD_IMMEDIATE_eax %9
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_2
|
|
:ELSE_escape_lookup_2
|
|
# IF_escape_lookup_3
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %110
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_3
|
|
LOAD_IMMEDIATE_eax %10
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_3
|
|
:ELSE_escape_lookup_3
|
|
# IF_escape_lookup_4
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %118
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_4
|
|
LOAD_IMMEDIATE_eax %11
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_4
|
|
:ELSE_escape_lookup_4
|
|
# IF_escape_lookup_5
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %102
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_5
|
|
LOAD_IMMEDIATE_eax %12
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_5
|
|
:ELSE_escape_lookup_5
|
|
# IF_escape_lookup_6
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %114
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_6
|
|
LOAD_IMMEDIATE_eax %13
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_6
|
|
:ELSE_escape_lookup_6
|
|
# IF_escape_lookup_7
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %101
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_7
|
|
LOAD_IMMEDIATE_eax %27
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_7
|
|
:ELSE_escape_lookup_7
|
|
# IF_escape_lookup_8
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %34
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_8
|
|
LOAD_IMMEDIATE_eax %34
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_8
|
|
:ELSE_escape_lookup_8
|
|
# IF_escape_lookup_9
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_9
|
|
LOAD_IMMEDIATE_eax %39
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_9
|
|
:ELSE_escape_lookup_9
|
|
# IF_escape_lookup_10
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %92
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_10
|
|
LOAD_IMMEDIATE_eax %92
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_10
|
|
:ELSE_escape_lookup_10
|
|
:_END_IF_escape_lookup_10
|
|
:_END_IF_escape_lookup_9
|
|
:_END_IF_escape_lookup_8
|
|
:_END_IF_escape_lookup_7
|
|
:_END_IF_escape_lookup_6
|
|
:_END_IF_escape_lookup_5
|
|
:_END_IF_escape_lookup_4
|
|
:_END_IF_escape_lookup_3
|
|
:_END_IF_escape_lookup_2
|
|
:_END_IF_escape_lookup_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_escape_lookup_11
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_escape_lookup_12
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function collect_regular_string
|
|
:FUNCTION_collect_regular_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:collect_regular_string_reset #C goto label
|
|
# IF_collect_regular_string_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %92
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_regular_string_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
# IF_collect_regular_string_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %120
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_regular_string_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_regular_string_1
|
|
:ELSE_collect_regular_string_1
|
|
:_END_IF_collect_regular_string_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_regular_string_0
|
|
:ELSE_collect_regular_string_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_collect_regular_string_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_collect_regular_string_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_regular_string_2
|
|
JUMP %collect_regular_string_reset
|
|
JUMP %_END_IF_collect_regular_string_2
|
|
:ELSE_collect_regular_string_2
|
|
:_END_IF_collect_regular_string_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %34
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
# Defining local message
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #message
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_reset_hold_string
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function collect_weird_string
|
|
:FUNCTION_collect_weird_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local temp
|
|
PUSH_eax #temp
|
|
# Defining local table
|
|
LOAD_IMMEDIATE_eax &STRING_collect_weird_string_0
|
|
PUSH_eax #table
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
:collect_weird_string_reset #C goto label
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %32
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
COPY_eax_to_ecx
|
|
COPY_ebx_to_eax
|
|
SAR_eax_cl
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %15
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
# IF_collect_weird_string_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %92
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_weird_string_1
|
|
# IF_collect_weird_string_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %120
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_weird_string_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_weird_string_2
|
|
:ELSE_collect_weird_string_2
|
|
:_END_IF_collect_weird_string_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_weird_string_1
|
|
:ELSE_collect_weird_string_1
|
|
:_END_IF_collect_weird_string_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_collect_weird_string_3
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_weird_string_3
|
|
JUMP %collect_weird_string_reset
|
|
JUMP %_END_IF_collect_weird_string_3
|
|
:ELSE_collect_weird_string_3
|
|
:_END_IF_collect_weird_string_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %32
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
# Defining local hold
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %6
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #hold
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_reset_hold_string
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function parse_string
|
|
:FUNCTION_parse_string
|
|
# IF_parse_string_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_parse_string_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_collect_weird_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
JUMP %_END_IF_parse_string_0
|
|
:ELSE_parse_string_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_collect_regular_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
:_END_IF_parse_string_0
|
|
RETURN
|
|
# Defining function initialize_types
|
|
:FUNCTION_initialize_types
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local b
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #b
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_2
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local c
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #c
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_3
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local d
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #d
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local e
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #e
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_5
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local f
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #f
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_6
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local g
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #g
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_initialize_types_7
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_prim_types
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function lookup_type
|
|
:FUNCTION_lookup_type
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_lookup_type_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_lookup_type_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_lookup_type_0
|
|
JUMP %FOR_THEN_lookup_type_0
|
|
:FOR_ITER_lookup_type_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_lookup_type_0
|
|
:FOR_THEN_lookup_type_0
|
|
# IF_lookup_type_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_lookup_type_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_lookup_type_1
|
|
:ELSE_lookup_type_1
|
|
:_END_IF_lookup_type_1
|
|
JUMP %FOR_ITER_lookup_type_0
|
|
:FOR_END_lookup_type_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function lookup_member
|
|
:FUNCTION_lookup_member
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_lookup_member_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_lookup_member_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_lookup_member_0
|
|
JUMP %FOR_THEN_lookup_member_0
|
|
:FOR_ITER_lookup_member_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_lookup_member_0
|
|
:FOR_THEN_lookup_member_0
|
|
# IF_lookup_member_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_lookup_member_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_lookup_member_1
|
|
:ELSE_lookup_member_1
|
|
:_END_IF_lookup_member_1
|
|
JUMP %FOR_ITER_lookup_member_0
|
|
:FOR_END_lookup_member_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_lookup_member_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_lookup_member_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_lookup_member_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_lookup_member_5
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function build_member
|
|
:FUNCTION_build_member
|
|
# Defining local member_type
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #member_type
|
|
# Defining local i
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #i
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_build_member_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_build_member_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_build_member_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_build_member_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_build_member_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_build_member_0
|
|
:ELSE_build_member_0
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_build_member_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function build_union
|
|
:FUNCTION_build_union
|
|
# Defining local size
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #size
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_build_union_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_build_union_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:WHILE_build_union_2
|
|
LOAD_IMMEDIATE_eax %125
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_build_union_2
|
|
# THEN_while_build_union_2
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_build_member
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_build_union_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_build_union_3
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_build_union_3
|
|
:ELSE_build_union_3
|
|
:_END_IF_build_union_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_build_union_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_build_union_5
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %WHILE_build_union_2
|
|
:END_WHILE_build_union_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function create_struct
|
|
:FUNCTION_create_struct
|
|
# Defining local offset
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #offset
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local head
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #head
|
|
# Defining local i
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #i
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# Defining local last
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #last
|
|
:WHILE_create_struct_2
|
|
LOAD_IMMEDIATE_eax %125
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_create_struct_2
|
|
# THEN_while_create_struct_2
|
|
# IF_create_struct_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_4
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_create_struct_3
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_build_union
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_create_struct_3
|
|
:ELSE_create_struct_3
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_build_member
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_create_struct_3
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_5
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_6
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %WHILE_create_struct_2
|
|
:END_WHILE_create_struct_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_create_struct_8
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function type_name
|
|
:FUNCTION_type_name
|
|
# Defining local structure
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_type_name_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #structure
|
|
# IF_type_name_1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_type_name_1
|
|
:ELSE_type_name_1
|
|
:_END_IF_type_name_1
|
|
# Defining local ret
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_lookup_type
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #ret
|
|
# IF_type_name_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_type_name_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_type_name_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_type_name_2
|
|
:ELSE_type_name_2
|
|
# IF_type_name_5
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_create_struct
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_type_name_5
|
|
:ELSE_type_name_5
|
|
:_END_IF_type_name_5
|
|
:_END_IF_type_name_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_type_name_6
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_type_name_6
|
|
# THEN_while_type_name_6
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_type_name_6
|
|
:END_WHILE_type_name_6
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function emit
|
|
:FUNCTION_emit
|
|
# Defining local t
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %20
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #t
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function emit_out
|
|
:FUNCTION_emit_out
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function uniqueID
|
|
:FUNCTION_uniqueID
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_uniqueID_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_uniqueID_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function uniqueID_out
|
|
:FUNCTION_uniqueID_out
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function sym_declare
|
|
:FUNCTION_sym_declare
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %20
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function sym_lookup
|
|
:FUNCTION_sym_lookup
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_sym_lookup_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_sym_lookup_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_sym_lookup_0
|
|
JUMP %FOR_THEN_sym_lookup_0
|
|
:FOR_ITER_sym_lookup_0
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_sym_lookup_0
|
|
:FOR_THEN_sym_lookup_0
|
|
# IF_sym_lookup_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_lookup_1
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_lookup_1
|
|
:ELSE_sym_lookup_1
|
|
:_END_IF_sym_lookup_1
|
|
JUMP %FOR_ITER_sym_lookup_0
|
|
:FOR_END_sym_lookup_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function line_error
|
|
:FUNCTION_line_error
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_line_error_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_line_error_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function require_match
|
|
:FUNCTION_require_match
|
|
# IF_require_match_0
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_require_match_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_require_match_0
|
|
:ELSE_require_match_0
|
|
:_END_IF_require_match_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function function_call
|
|
:FUNCTION_function_call
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# Defining local passed
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #passed
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_2
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_function_call_5
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %41
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_function_call_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_function_call_7
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %44
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_function_call_7
|
|
# THEN_while_function_call_7
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_8
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_function_call_7
|
|
:END_WHILE_function_call_7
|
|
JUMP %_END_IF_function_call_5
|
|
:ELSE_function_call_5
|
|
:_END_IF_function_call_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_9
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_10
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_function_call_11
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_function_call_11
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_12
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_13
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_14
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_15
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_function_call_11
|
|
:ELSE_function_call_11
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_16
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_17
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_18
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_function_call_11
|
|
# FOR_initialization_function_call_19
|
|
:FOR_function_call_19
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_function_call_19
|
|
JUMP %FOR_THEN_function_call_19
|
|
:FOR_ITER_function_call_19
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_function_call_19
|
|
:FOR_THEN_function_call_19
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_20
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %FOR_ITER_function_call_19
|
|
:FOR_END_function_call_19
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_21
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_call_22
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function constant_load
|
|
:FUNCTION_constant_load
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_constant_load_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_constant_load_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function variable_load
|
|
:FUNCTION_variable_load
|
|
# IF_variable_load_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_variable_load_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_function_call
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
JUMP %_END_IF_variable_load_0
|
|
:ELSE_variable_load_0
|
|
:_END_IF_variable_load_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_variable_load_5
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_Address_of
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_variable_load_5
|
|
RETURN
|
|
JUMP %_END_IF_variable_load_5
|
|
:ELSE_variable_load_5
|
|
:_END_IF_variable_load_5
|
|
# IF_variable_load_6
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_variable_load_6
|
|
RETURN
|
|
JUMP %_END_IF_variable_load_6
|
|
:ELSE_variable_load_6
|
|
:_END_IF_variable_load_6
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_variable_load_8
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function function_load
|
|
:FUNCTION_function_load
|
|
# IF_function_load_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_load_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_function_load_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_function_call
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
JUMP %_END_IF_function_load_0
|
|
:ELSE_function_load_0
|
|
:_END_IF_function_load_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_load_2
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_function_load_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function global_load
|
|
:FUNCTION_global_load
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_global_load_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_global_load_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_global_load_2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_global_load_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_global_load_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_global_load_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_global_load_2
|
|
:ELSE_global_load_2
|
|
:_END_IF_global_load_2
|
|
RETURN
|
|
# Defining function primary_expr_failure
|
|
:FUNCTION_primary_expr_failure
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_failure_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_failure_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function primary_expr_string
|
|
:FUNCTION_primary_expr_string
|
|
# Defining local number_string
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_string_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_string_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_parse_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function primary_expr_char
|
|
:FUNCTION_primary_expr_char
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_char_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_char_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function primary_expr_number
|
|
:FUNCTION_primary_expr_number
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_number_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_number_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function primary_expr_variable
|
|
:FUNCTION_primary_expr_variable
|
|
# Defining local s
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #s
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
# IF_primary_expr_variable_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_variable_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_constant_load
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_primary_expr_variable_0
|
|
:ELSE_primary_expr_variable_0
|
|
:_END_IF_primary_expr_variable_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_primary_expr_variable_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_variable_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_variable_load
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_primary_expr_variable_1
|
|
:ELSE_primary_expr_variable_1
|
|
:_END_IF_primary_expr_variable_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_primary_expr_variable_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_variable_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_variable_load
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_primary_expr_variable_2
|
|
:ELSE_primary_expr_variable_2
|
|
:_END_IF_primary_expr_variable_2
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_primary_expr_variable_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_variable_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_function_load
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_primary_expr_variable_3
|
|
:ELSE_primary_expr_variable_3
|
|
:_END_IF_primary_expr_variable_3
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_primary_expr_variable_4
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_variable_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_global_load
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_primary_expr_variable_4
|
|
:ELSE_primary_expr_variable_4
|
|
:_END_IF_primary_expr_variable_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_variable_5
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function promote_type
|
|
:FUNCTION_promote_type
|
|
# IF_promote_type_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
JUMP %_END_IF_promote_type_0
|
|
:ELSE_promote_type_0
|
|
:_END_IF_promote_type_0
|
|
# IF_promote_type_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
JUMP %_END_IF_promote_type_1
|
|
:ELSE_promote_type_1
|
|
:_END_IF_promote_type_1
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_promote_type_2
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_promote_type_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_promote_type_2
|
|
JUMP %FOR_THEN_promote_type_2
|
|
:FOR_ITER_promote_type_2
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_promote_type_2
|
|
:FOR_THEN_promote_type_2
|
|
# IF_promote_type_3
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_3
|
|
JUMP %FOR_END_promote_type_2
|
|
JUMP %_END_IF_promote_type_3
|
|
:ELSE_promote_type_3
|
|
:_END_IF_promote_type_3
|
|
# IF_promote_type_4
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_4
|
|
JUMP %FOR_END_promote_type_2
|
|
JUMP %_END_IF_promote_type_4
|
|
:ELSE_promote_type_4
|
|
:_END_IF_promote_type_4
|
|
# IF_promote_type_5
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_5
|
|
JUMP %FOR_END_promote_type_2
|
|
JUMP %_END_IF_promote_type_5
|
|
:ELSE_promote_type_5
|
|
:_END_IF_promote_type_5
|
|
# IF_promote_type_6
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_6
|
|
JUMP %FOR_END_promote_type_2
|
|
JUMP %_END_IF_promote_type_6
|
|
:ELSE_promote_type_6
|
|
:_END_IF_promote_type_6
|
|
JUMP %FOR_ITER_promote_type_2
|
|
:FOR_END_promote_type_2
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function common_recursion
|
|
:FUNCTION_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_last_type
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_common_recursion_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
COPY_edi_to_ebp
|
|
CALL_eax
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_last_type
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_promote_type
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_common_recursion_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function general_recursion
|
|
:FUNCTION_general_recursion
|
|
# IF_general_recursion_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_general_recursion_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_common_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
COPY_edi_to_ebp
|
|
CALL_eax
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_general_recursion_0
|
|
:ELSE_general_recursion_0
|
|
:_END_IF_general_recursion_0
|
|
RETURN
|
|
# Defining function ceil_log2
|
|
:FUNCTION_ceil_log2
|
|
# Defining local result
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #result
|
|
# IF_ceil_log2_0
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_ceil_log2_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_ceil_log2_0
|
|
:ELSE_ceil_log2_0
|
|
:_END_IF_ceil_log2_0
|
|
:WHILE_ceil_log2_1
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_ceil_log2_1
|
|
# THEN_while_ceil_log2_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
COPY_eax_to_ecx
|
|
COPY_ebx_to_eax
|
|
SAR_eax_cl
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_ceil_log2_1
|
|
:END_WHILE_ceil_log2_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function postfix_expr_arrow
|
|
:FUNCTION_postfix_expr_arrow
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local i
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_lookup_member
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #i
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_postfix_expr_arrow_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_arrow_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_2
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_postfix_expr_arrow_1
|
|
:ELSE_postfix_expr_arrow_1
|
|
:_END_IF_postfix_expr_arrow_1
|
|
# IF_postfix_expr_arrow_5
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_arrow_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_arrow_7
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_postfix_expr_arrow_5
|
|
:ELSE_postfix_expr_arrow_5
|
|
:_END_IF_postfix_expr_arrow_5
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function postfix_expr_array
|
|
:FUNCTION_postfix_expr_array
|
|
# Defining local array
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #array
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_expression
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_common_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local assign
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_0
|
|
PUSH_eax #assign
|
|
# IF_postfix_expr_array_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_array_1
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_3
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_array_1
|
|
:ELSE_postfix_expr_array_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_ceil_log2
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_postfix_expr_array_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_8
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_postfix_expr_array_9
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_10
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_array_9
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_array_11
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_array_9
|
|
:ELSE_postfix_expr_array_9
|
|
:_END_IF_postfix_expr_array_9
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function unary_expr_sizeof
|
|
:FUNCTION_unary_expr_sizeof
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_unary_expr_sizeof_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function postfix_expr_stub
|
|
:FUNCTION_postfix_expr_stub
|
|
# IF_postfix_expr_stub_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_stub_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_stub_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr_array
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_postfix_expr_stub_0
|
|
:ELSE_postfix_expr_stub_0
|
|
:_END_IF_postfix_expr_stub_0
|
|
# IF_postfix_expr_stub_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_postfix_expr_stub_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_stub_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr_arrow
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_postfix_expr_stub_2
|
|
:ELSE_postfix_expr_stub_2
|
|
:_END_IF_postfix_expr_stub_2
|
|
RETURN
|
|
# Defining function postfix_expr
|
|
:FUNCTION_postfix_expr
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function additive_expr_stub
|
|
:FUNCTION_additive_expr_stub
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_1
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_2
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_3
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_4
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_5
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_6
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_7
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_8
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_9
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_10
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_11
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_12
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_additive_expr_stub_13
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function additive_expr
|
|
:FUNCTION_additive_expr
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_additive_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function relational_expr_stub
|
|
:FUNCTION_relational_expr_stub
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_1
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_2
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_3
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_4
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_5
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_6
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_7
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_8
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_9
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_additive_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_10
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_relational_expr_stub_11
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function relational_expr
|
|
:FUNCTION_relational_expr
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_additive_expr
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_relational_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function bitwise_expr_stub
|
|
:FUNCTION_bitwise_expr_stub
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_1
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_2
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_3
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_4
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_5
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_6
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_7
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_relational_expr
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_8
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_bitwise_expr_stub_9
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &FUNCTION_bitwise_expr_stub
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_general_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function bitwise_expr
|
|
:FUNCTION_bitwise_expr
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_relational_expr
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_bitwise_expr_stub
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function primary_expr
|
|
:FUNCTION_primary_expr
|
|
# IF_primary_expr_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_Address_of
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_primary_expr_0
|
|
:ELSE_primary_expr_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_Address_of
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_primary_expr_0
|
|
# IF_primary_expr_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr_sizeof
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_2
|
|
:ELSE_primary_expr_2
|
|
# IF_primary_expr_4
|
|
LOAD_IMMEDIATE_eax %45
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_primary_expr
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_common_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_4
|
|
:ELSE_primary_expr_4
|
|
# IF_primary_expr_7
|
|
LOAD_IMMEDIATE_eax %33
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_7
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_8
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_postfix_expr
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_common_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_9
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_7
|
|
:ELSE_primary_expr_7
|
|
# IF_primary_expr_10
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %40
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_10
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_11
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_12
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_10
|
|
:ELSE_primary_expr_10
|
|
# IF_primary_expr_13
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_13
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr_char
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_13
|
|
:ELSE_primary_expr_13
|
|
# IF_primary_expr_14
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %34
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_14
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr_string
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_14
|
|
:ELSE_primary_expr_14
|
|
# IF_primary_expr_15
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_16
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_15
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr_variable
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_15
|
|
:ELSE_primary_expr_15
|
|
# IF_primary_expr_17
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_primary_expr_18
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_17
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr_number
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_primary_expr_17
|
|
:ELSE_primary_expr_17
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr_failure
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_primary_expr_17
|
|
:_END_IF_primary_expr_15
|
|
:_END_IF_primary_expr_14
|
|
:_END_IF_primary_expr_13
|
|
:_END_IF_primary_expr_10
|
|
:_END_IF_primary_expr_7
|
|
:_END_IF_primary_expr_4
|
|
:_END_IF_primary_expr_2
|
|
RETURN
|
|
# Defining function expression
|
|
:FUNCTION_expression
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_bitwise_expr
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_expression_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_expression_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_0
|
|
# Defining local store
|
|
PUSH_eax #store
|
|
# IF_expression_2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_expression_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_expression_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_expression_5
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_expression_2
|
|
:ELSE_expression_2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_expression_6
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_expression_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &FUNCTION_expression
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_common_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_expression_0
|
|
:ELSE_expression_0
|
|
:_END_IF_expression_0
|
|
RETURN
|
|
# Defining function collect_local
|
|
:FUNCTION_collect_local
|
|
# Defining local type_size
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #type_size
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
# IF_collect_local_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_local_0
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %20
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_local_0
|
|
:ELSE_collect_local_0
|
|
# IF_collect_local_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_local_2
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %8
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_local_2
|
|
:ELSE_collect_local_2
|
|
# IF_collect_local_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_local_3
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %8
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_local_3
|
|
:ELSE_collect_local_3
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_collect_local_3
|
|
:_END_IF_collect_local_2
|
|
:_END_IF_collect_local_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_collect_local_6
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_local_6
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_collect_local_6
|
|
:ELSE_collect_local_6
|
|
:_END_IF_collect_local_6
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_8
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_9
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_10
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_local_11
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function process_if
|
|
:FUNCTION_process_if
|
|
# Defining local number_string
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_5
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_7
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_process_if_8
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_9
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_process_if_8
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_process_if_8
|
|
:ELSE_process_if_8
|
|
:_END_IF_process_if_8
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_if_10
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function process_for
|
|
:FUNCTION_process_for
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
# Defining local nested_break_head
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_head
|
|
# Defining local nested_break_func
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_func
|
|
# Defining local nested_break_num
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_num
|
|
# Defining local number_string
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_process_for_4
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_5
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_process_for_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_process_for_4
|
|
:ELSE_process_for_4
|
|
:_END_IF_process_for_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_8
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_9
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_10
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_11
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_12
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_13
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_14
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_15
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_16
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_17
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_18
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_for_19
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function process_asm
|
|
:FUNCTION_process_asm
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_0
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:WHILE_process_asm_2
|
|
LOAD_IMMEDIATE_eax %34
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_process_asm_2
|
|
# THEN_while_process_asm_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_process_asm_2
|
|
:END_WHILE_process_asm_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_5
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_asm_7
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function process_do
|
|
:FUNCTION_process_do
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
# Defining local nested_break_head
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_head
|
|
# Defining local nested_break_func
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_func
|
|
# Defining local nested_break_num
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_num
|
|
# Defining local number_string
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_5
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_7
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_8
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_9
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_10
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_do_11
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function process_while
|
|
:FUNCTION_process_while
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
# Defining local nested_break_head
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_head
|
|
# Defining local nested_break_func
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_func
|
|
# Defining local nested_break_num
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break_num
|
|
# Defining local number_string
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_7
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_8
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_while_9
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_uniqueID_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function return_result
|
|
:FUNCTION_return_result
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_return_result_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %59
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_return_result_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_return_result_0
|
|
:ELSE_return_result_0
|
|
:_END_IF_return_result_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_return_result_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_return_result_2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_return_result_3
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_return_result_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_return_result_3
|
|
JUMP %FOR_THEN_return_result_3
|
|
:FOR_ITER_return_result_3
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_return_result_3
|
|
:FOR_THEN_return_result_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_return_result_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %FOR_ITER_return_result_3
|
|
:FOR_END_return_result_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_return_result_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function process_break
|
|
:FUNCTION_process_break
|
|
# IF_process_break_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_process_break_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_process_break_0
|
|
:ELSE_process_break_0
|
|
:_END_IF_process_break_0
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #i
|
|
:WHILE_process_break_2
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_frame
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_process_break_2
|
|
# THEN_while_process_break_2
|
|
# IF_process_break_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_process_break_3
|
|
JUMP %END_WHILE_process_break_2
|
|
JUMP %_END_IF_process_break_3
|
|
:ELSE_process_break_3
|
|
:_END_IF_process_break_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_process_break_2
|
|
:END_WHILE_process_break_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_head
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_func
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_6
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_7
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_8
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_process_break_9
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function recursive_statement
|
|
:FUNCTION_recursive_statement
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local frame
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #frame
|
|
:WHILE_recursive_statement_0
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_recursive_statement_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %END_WHILE_recursive_statement_0
|
|
# THEN_while_recursive_statement_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %WHILE_recursive_statement_0
|
|
:END_WHILE_recursive_statement_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_recursive_statement_2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_recursive_statement_3
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_recursive_statement_2
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_recursive_statement_4
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_recursive_statement_4
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_recursive_statement_4
|
|
JUMP %FOR_THEN_recursive_statement_4
|
|
:FOR_ITER_recursive_statement_4
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_recursive_statement_4
|
|
:FOR_THEN_recursive_statement_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_recursive_statement_5
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %FOR_ITER_recursive_statement_4
|
|
:FOR_END_recursive_statement_4
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_recursive_statement_2
|
|
:ELSE_recursive_statement_2
|
|
:_END_IF_recursive_statement_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function statement
|
|
:FUNCTION_statement
|
|
# IF_statement_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %123
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_recursive_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_0
|
|
:ELSE_statement_0
|
|
# IF_statement_1
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_2
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_1
|
|
:ELSE_statement_1
|
|
# IF_statement_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_prim_types
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_lookup_type
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_4
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_3
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_collect_local
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_3
|
|
:ELSE_statement_3
|
|
# IF_statement_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_if
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_5
|
|
:ELSE_statement_5
|
|
# IF_statement_7
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_8
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_7
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_do
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_7
|
|
:ELSE_statement_7
|
|
# IF_statement_9
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_10
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_9
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_while
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_9
|
|
:ELSE_statement_9
|
|
# IF_statement_11
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_12
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_11
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_for
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_11
|
|
:ELSE_statement_11
|
|
# IF_statement_13
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_14
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_13
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_asm
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_13
|
|
:ELSE_statement_13
|
|
# IF_statement_15
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_16
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_15
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_17
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_18
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_19
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_statement_20
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_15
|
|
:ELSE_statement_15
|
|
# IF_statement_21
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_22
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_21
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_return_result
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_21
|
|
:ELSE_statement_21
|
|
# IF_statement_23
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_24
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_23
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_process_break
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_23
|
|
:ELSE_statement_23
|
|
# IF_statement_25
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_26
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_25
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_27
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_28
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_statement_29
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_statement_25
|
|
:ELSE_statement_25
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_statement_30
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_statement_31
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_statement_25
|
|
:_END_IF_statement_23
|
|
:_END_IF_statement_21
|
|
:_END_IF_statement_15
|
|
:_END_IF_statement_13
|
|
:_END_IF_statement_11
|
|
:_END_IF_statement_9
|
|
:_END_IF_statement_7
|
|
:_END_IF_statement_5
|
|
:_END_IF_statement_3
|
|
:_END_IF_statement_1
|
|
:_END_IF_statement_0
|
|
RETURN
|
|
# Defining function collect_arguments
|
|
:FUNCTION_collect_arguments
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_collect_arguments_0
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_collect_arguments_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %END_WHILE_collect_arguments_0
|
|
# THEN_while_collect_arguments_0
|
|
# Defining local type_size
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #type_size
|
|
# IF_collect_arguments_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %41
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_2
|
|
|
|
#continue statement
|
|
JUMP %_END_IF_collect_arguments_2
|
|
:ELSE_collect_arguments_2
|
|
# IF_collect_arguments_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %44
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_3
|
|
# Defining local a
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #a
|
|
# IF_collect_arguments_4
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_4
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_arguments_4
|
|
:ELSE_collect_arguments_4
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_collect_arguments_4
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_collect_arguments_3
|
|
:ELSE_collect_arguments_3
|
|
:_END_IF_collect_arguments_3
|
|
:_END_IF_collect_arguments_2
|
|
# IF_collect_arguments_5
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %44
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_5
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_arguments_5
|
|
:ELSE_collect_arguments_5
|
|
:_END_IF_collect_arguments_5
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %WHILE_collect_arguments_0
|
|
:END_WHILE_collect_arguments_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
RETURN
|
|
# Defining function declare_function
|
|
:FUNCTION_declare_function
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_collect_arguments
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_declare_function_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %59
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_declare_function_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_declare_function_0
|
|
:ELSE_declare_function_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_2
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_3
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_4
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_declare_function_5
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_declare_function_5
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_declare_function_7
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit_out
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_declare_function_5
|
|
:ELSE_declare_function_5
|
|
:_END_IF_declare_function_5
|
|
:_END_IF_declare_function_0
|
|
RETURN
|
|
# Defining function program
|
|
:FUNCTION_program
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_function
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_Address_of
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local type_size
|
|
PUSH_eax #type_size
|
|
:new_type #C goto label
|
|
# IF_program_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_program_0
|
|
LOAD_IMMEDIATE_eax &GLOBAL_out
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_program_0
|
|
:ELSE_program_0
|
|
:_END_IF_program_0
|
|
# IF_program_1
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_program_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_1
|
|
:ELSE_program_1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_program_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_program_3
|
|
JUMP %new_type
|
|
JUMP %_END_IF_program_3
|
|
:ELSE_program_3
|
|
:_END_IF_program_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_program_4
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_5
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_program_4
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_6
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_4
|
|
:ELSE_program_4
|
|
# IF_program_8
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_9
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_program_8
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_declare_function
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_program_8
|
|
:ELSE_program_8
|
|
# IF_program_10
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_11
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_program_10
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_12
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_13
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_program_14
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_program_15
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_in_set
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
TEST
|
|
JUMP_EQ %ELSE_program_14
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_16
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_17
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_14
|
|
:ELSE_program_14
|
|
# IF_program_18
|
|
LOAD_IMMEDIATE_eax %34
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_program_18
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_parse_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_18
|
|
:ELSE_program_18
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_19
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_20
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_program_18
|
|
:_END_IF_program_14
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_21
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_program_22
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_program_10
|
|
:ELSE_program_10
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_23
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_program_24
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_program_10
|
|
:_END_IF_program_8
|
|
:_END_IF_program_4
|
|
:_END_IF_program_1
|
|
JUMP %new_type
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function recursive_output
|
|
:FUNCTION_recursive_output
|
|
# IF_recursive_output_0
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_recursive_output_0
|
|
RETURN
|
|
JUMP %_END_IF_recursive_output_0
|
|
:ELSE_recursive_output_0
|
|
:_END_IF_recursive_output_0
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
RETURN
|
|
# Defining function main
|
|
:FUNCTION_main
|
|
LOAD_IMMEDIATE_eax &GLOBAL_hold_string
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local DEBUG
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #DEBUG
|
|
# Defining local in
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #in
|
|
# Defining local destination_file
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #destination_file
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #i
|
|
:WHILE_main_0
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_main_0
|
|
# THEN_while_main_0
|
|
# IF_main_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_1
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_main_1
|
|
:ELSE_main_1
|
|
# IF_main_2
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_3
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_4
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_2
|
|
# Defining local name
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #name
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-36
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_5
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fopen
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_main_6
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_6
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_7
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-36
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_8
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_6
|
|
:ELSE_main_6
|
|
:_END_IF_main_6
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_BASE_ADDRESS_eax %-36
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_read_all_tokens
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_main_2
|
|
:ELSE_main_2
|
|
# IF_main_9
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_10
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_11
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_9
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_12
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_fopen
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_main_13
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_13
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_14
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_15
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_13
|
|
:ELSE_main_13
|
|
:_END_IF_main_13
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_main_9
|
|
:ELSE_main_9
|
|
# IF_main_16
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_17
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_18
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_16
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_main_16
|
|
:ELSE_main_16
|
|
# IF_main_19
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_20
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_21
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_19
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_22
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_19
|
|
:ELSE_main_19
|
|
# IF_main_23
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_24
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-32
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_main_25
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_23
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_26
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_23
|
|
:ELSE_main_23
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_27
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
:_END_IF_main_23
|
|
:_END_IF_main_19
|
|
:_END_IF_main_16
|
|
:_END_IF_main_9
|
|
:_END_IF_main_2
|
|
:_END_IF_main_1
|
|
JUMP %WHILE_main_0
|
|
:END_WHILE_main_0
|
|
# IF_main_28
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_28
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_main_29
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_read_all_tokens
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_main_28
|
|
:ELSE_main_28
|
|
:_END_IF_main_28
|
|
# IF_main_30
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_30
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_31
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_30
|
|
:ELSE_main_30
|
|
:_END_IF_main_30
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_reverse_list
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_initialize_types
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_reset_hold_string
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# Defining local output_list
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_program
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_eax #output_list
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_32
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_BASE_ADDRESS_eax %-36
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_main_33
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_main_33
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_34
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_33
|
|
:ELSE_main_33
|
|
:_END_IF_main_33
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_35
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_36
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
# IF_main_37
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_BASE_ADDRESS_eax %-20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_main_37
|
|
PUSH_edi # Prevent overwriting in recursion
|
|
PUSH_ebp # Protect the old base pointer
|
|
COPY_esp_to_edi # Copy new base pointer
|
|
LOAD_IMMEDIATE_eax &STRING_main_38
|
|
PUSH_eax #_process_expression1
|
|
LOAD_BASE_ADDRESS_eax %-28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
COPY_edi_to_ebp
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebp # Restore old base pointer
|
|
POP_edi # Prevent overwrite
|
|
JUMP %_END_IF_main_37
|
|
:ELSE_main_37
|
|
:_END_IF_main_37
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
|
|
:ELF_data
|
|
|
|
# Program global variables
|
|
:GLOBAL_global_types
|
|
NOP
|
|
:GLOBAL_prim_types
|
|
NOP
|
|
:GLOBAL_global_token
|
|
NOP
|
|
:GLOBAL_strings_list
|
|
NOP
|
|
:GLOBAL_globals_list
|
|
NOP
|
|
:GLOBAL_hold_string
|
|
NOP
|
|
:GLOBAL_string_index
|
|
NOP
|
|
:GLOBAL_input
|
|
NOP
|
|
:GLOBAL_token
|
|
NOP
|
|
:GLOBAL_line
|
|
NOP
|
|
:GLOBAL_file
|
|
NOP
|
|
:GLOBAL_member_size
|
|
NOP
|
|
:GLOBAL_global_symbol_list
|
|
NOP
|
|
:GLOBAL_global_function_list
|
|
NOP
|
|
:GLOBAL_global_constant_list
|
|
NOP
|
|
:GLOBAL_function
|
|
NOP
|
|
:GLOBAL_out
|
|
NOP
|
|
:GLOBAL_current_target
|
|
NOP
|
|
:GLOBAL_break_target_head
|
|
NOP
|
|
:GLOBAL_break_target_func
|
|
NOP
|
|
:GLOBAL_break_target_num
|
|
NOP
|
|
:GLOBAL_break_frame
|
|
NOP
|
|
:GLOBAL_current_count
|
|
NOP
|
|
:GLOBAL_last_type
|
|
NOP
|
|
:GLOBAL_Address_of
|
|
NOP
|
|
|
|
# Program strings
|
|
:STRING_preserve_keyword_1
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
|
|
:STRING_preserve_symbol_1
|
|
"<=>|&!-"
|
|
:STRING_get_token_2
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
|
|
:STRING_get_token_4
|
|
"<=>|&!-"
|
|
:STRING_upcase_1
|
|
"abcdefghijklmnopqrstuvwxyz"
|
|
:STRING_hexify_1
|
|
"Tried to print non-hex number
|
|
"
|
|
:STRING_weird_4
|
|
"
|
|
!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
|
|
:STRING_weird_6
|
|
' 20 09 0A 0D 00'
|
|
:STRING_escape_lookup_11
|
|
"Unknown escape recieved: "
|
|
:STRING_escape_lookup_12
|
|
" Unable to process
|
|
"
|
|
:STRING_collect_weird_string_0
|
|
"0123456789ABCDEF"
|
|
:STRING_initialize_types_0
|
|
"void"
|
|
:STRING_initialize_types_1
|
|
"int"
|
|
:STRING_initialize_types_2
|
|
"char*"
|
|
:STRING_initialize_types_3
|
|
"char"
|
|
:STRING_initialize_types_4
|
|
"char**"
|
|
:STRING_initialize_types_5
|
|
"FILE"
|
|
:STRING_initialize_types_6
|
|
"FUNCTION"
|
|
:STRING_initialize_types_7
|
|
"unsigned"
|
|
:STRING_lookup_member_2
|
|
"ERROR in lookup_member "
|
|
:STRING_lookup_member_3
|
|
"->"
|
|
:STRING_lookup_member_4
|
|
" does not exist
|
|
"
|
|
:STRING_lookup_member_5
|
|
"
|
|
"
|
|
:STRING_build_member_1
|
|
"["
|
|
:STRING_build_member_2
|
|
"Struct only supports [num] form
|
|
"
|
|
:STRING_build_member_3
|
|
"]"
|
|
:STRING_build_union_0
|
|
"ERROR in build_union
|
|
Missing {
|
|
"
|
|
:STRING_build_union_1
|
|
"{"
|
|
:STRING_build_union_4
|
|
"ERROR in build_union
|
|
Missing ;
|
|
"
|
|
:STRING_build_union_5
|
|
";"
|
|
:STRING_create_struct_0
|
|
"ERROR in create_struct
|
|
Missing {
|
|
"
|
|
:STRING_create_struct_1
|
|
"{"
|
|
:STRING_create_struct_4
|
|
"union"
|
|
:STRING_create_struct_5
|
|
"ERROR in create_struct
|
|
Missing ;
|
|
"
|
|
:STRING_create_struct_6
|
|
";"
|
|
:STRING_create_struct_7
|
|
"ERROR in create_struct
|
|
Missing ;
|
|
"
|
|
:STRING_create_struct_8
|
|
";"
|
|
:STRING_type_name_0
|
|
"struct"
|
|
:STRING_type_name_3
|
|
"Unknown type "
|
|
:STRING_type_name_4
|
|
"
|
|
"
|
|
:STRING_uniqueID_0
|
|
"_"
|
|
:STRING_uniqueID_1
|
|
"
|
|
"
|
|
:STRING_line_error_0
|
|
":"
|
|
:STRING_line_error_1
|
|
":"
|
|
:STRING_function_call_0
|
|
"ERROR in process_expression_list
|
|
No ( was found
|
|
"
|
|
:STRING_function_call_1
|
|
"("
|
|
:STRING_function_call_2
|
|
"PUSH_edi # Prevent overwriting in recursion
|
|
"
|
|
:STRING_function_call_3
|
|
"PUSH_ebp # Protect the old base pointer
|
|
"
|
|
:STRING_function_call_4
|
|
"COPY_esp_to_edi # Copy new base pointer
|
|
"
|
|
:STRING_function_call_6
|
|
"PUSH_eax #_process_expression1
|
|
"
|
|
:STRING_function_call_8
|
|
"PUSH_eax #_process_expression2
|
|
"
|
|
:STRING_function_call_9
|
|
"ERROR in process_expression_list
|
|
No ) was found
|
|
"
|
|
:STRING_function_call_10
|
|
")"
|
|
:STRING_function_call_12
|
|
"LOAD_BASE_ADDRESS_eax %"
|
|
:STRING_function_call_13
|
|
"
|
|
LOAD_INTEGER
|
|
"
|
|
:STRING_function_call_14
|
|
"COPY_edi_to_ebp
|
|
"
|
|
:STRING_function_call_15
|
|
"CALL_eax
|
|
"
|
|
:STRING_function_call_16
|
|
"COPY_edi_to_ebp
|
|
"
|
|
:STRING_function_call_17
|
|
"CALL_IMMEDIATE %FUNCTION_"
|
|
:STRING_function_call_18
|
|
"
|
|
"
|
|
:STRING_function_call_20
|
|
"POP_ebx # _process_expression_locals
|
|
"
|
|
:STRING_function_call_21
|
|
"POP_ebp # Restore old base pointer
|
|
"
|
|
:STRING_function_call_22
|
|
"POP_edi # Prevent overwrite
|
|
"
|
|
:STRING_constant_load_0
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_constant_load_1
|
|
"
|
|
"
|
|
:STRING_variable_load_1
|
|
"FUNCTION"
|
|
:STRING_variable_load_2
|
|
"("
|
|
:STRING_variable_load_3
|
|
"LOAD_BASE_ADDRESS_eax %"
|
|
:STRING_variable_load_4
|
|
"
|
|
"
|
|
:STRING_variable_load_7
|
|
"="
|
|
:STRING_variable_load_8
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_function_load_1
|
|
"("
|
|
:STRING_function_load_2
|
|
"LOAD_IMMEDIATE_eax &FUNCTION_"
|
|
:STRING_function_load_3
|
|
"
|
|
"
|
|
:STRING_global_load_0
|
|
"LOAD_IMMEDIATE_eax &GLOBAL_"
|
|
:STRING_global_load_1
|
|
"
|
|
"
|
|
:STRING_global_load_3
|
|
"="
|
|
:STRING_global_load_4
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_primary_expr_failure_0
|
|
"Recieved "
|
|
:STRING_primary_expr_failure_1
|
|
" in primary_expr
|
|
"
|
|
:STRING_primary_expr_string_0
|
|
"LOAD_IMMEDIATE_eax &STRING_"
|
|
:STRING_primary_expr_string_1
|
|
":STRING_"
|
|
:STRING_primary_expr_char_0
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_primary_expr_char_1
|
|
"
|
|
"
|
|
:STRING_primary_expr_number_0
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_primary_expr_number_1
|
|
"
|
|
"
|
|
:STRING_primary_expr_variable_5
|
|
" is not a defined symbol
|
|
"
|
|
:STRING_common_recursion_0
|
|
"PUSH_eax #_common_recursion
|
|
"
|
|
:STRING_common_recursion_1
|
|
"POP_ebx # _common_recursion
|
|
"
|
|
:STRING_postfix_expr_arrow_0
|
|
"# looking up offset
|
|
"
|
|
:STRING_postfix_expr_arrow_2
|
|
"# -> offset calculation
|
|
"
|
|
:STRING_postfix_expr_arrow_3
|
|
"LOAD_IMMEDIATE_ebx %"
|
|
:STRING_postfix_expr_arrow_4
|
|
"
|
|
ADD_ebx_to_eax
|
|
"
|
|
:STRING_postfix_expr_arrow_6
|
|
"="
|
|
:STRING_postfix_expr_arrow_7
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_postfix_expr_array_0
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_postfix_expr_array_2
|
|
"char*"
|
|
:STRING_postfix_expr_array_3
|
|
"LOAD_BYTE
|
|
"
|
|
:STRING_postfix_expr_array_4
|
|
"SAL_eax_Immediate8 !"
|
|
:STRING_postfix_expr_array_5
|
|
"
|
|
"
|
|
:STRING_postfix_expr_array_6
|
|
"ADD_ebx_to_eax
|
|
"
|
|
:STRING_postfix_expr_array_7
|
|
"ERROR in postfix_expr
|
|
Missing ]
|
|
"
|
|
:STRING_postfix_expr_array_8
|
|
"]"
|
|
:STRING_postfix_expr_array_10
|
|
"="
|
|
:STRING_postfix_expr_array_11
|
|
""
|
|
:STRING_unary_expr_sizeof_0
|
|
"ERROR in unary_expr
|
|
Missing (
|
|
"
|
|
:STRING_unary_expr_sizeof_1
|
|
"("
|
|
:STRING_unary_expr_sizeof_2
|
|
"ERROR in unary_expr
|
|
Missing )
|
|
"
|
|
:STRING_unary_expr_sizeof_3
|
|
")"
|
|
:STRING_unary_expr_sizeof_4
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_unary_expr_sizeof_5
|
|
"
|
|
"
|
|
:STRING_postfix_expr_stub_1
|
|
"["
|
|
:STRING_postfix_expr_stub_3
|
|
"->"
|
|
:STRING_additive_expr_stub_0
|
|
"ADD_ebx_to_eax
|
|
"
|
|
:STRING_additive_expr_stub_1
|
|
"+"
|
|
:STRING_additive_expr_stub_2
|
|
"SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
"
|
|
:STRING_additive_expr_stub_3
|
|
"-"
|
|
:STRING_additive_expr_stub_4
|
|
"MULTIPLY_eax_by_ebx_into_eax
|
|
"
|
|
:STRING_additive_expr_stub_5
|
|
"*"
|
|
:STRING_additive_expr_stub_6
|
|
"XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
"
|
|
:STRING_additive_expr_stub_7
|
|
"/"
|
|
:STRING_additive_expr_stub_8
|
|
"XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
MODULUS_eax_from_ebx_into_ebx
|
|
MOVE_edx_to_eax
|
|
"
|
|
:STRING_additive_expr_stub_9
|
|
"%"
|
|
:STRING_additive_expr_stub_10
|
|
"COPY_eax_to_ecx
|
|
COPY_ebx_to_eax
|
|
SAL_eax_cl
|
|
"
|
|
:STRING_additive_expr_stub_11
|
|
"<<"
|
|
:STRING_additive_expr_stub_12
|
|
"COPY_eax_to_ecx
|
|
COPY_ebx_to_eax
|
|
SAR_eax_cl
|
|
"
|
|
:STRING_additive_expr_stub_13
|
|
">>"
|
|
:STRING_relational_expr_stub_0
|
|
"CMP
|
|
SETL
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_1
|
|
"<"
|
|
:STRING_relational_expr_stub_2
|
|
"CMP
|
|
SETLE
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_3
|
|
"<="
|
|
:STRING_relational_expr_stub_4
|
|
"CMP
|
|
SETGE
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_5
|
|
">="
|
|
:STRING_relational_expr_stub_6
|
|
"CMP
|
|
SETG
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_7
|
|
">"
|
|
:STRING_relational_expr_stub_8
|
|
"CMP
|
|
SETE
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_9
|
|
"=="
|
|
:STRING_relational_expr_stub_10
|
|
"CMP
|
|
SETNE
|
|
MOVEZBL
|
|
"
|
|
:STRING_relational_expr_stub_11
|
|
"!="
|
|
:STRING_bitwise_expr_stub_0
|
|
"AND_eax_ebx
|
|
"
|
|
:STRING_bitwise_expr_stub_1
|
|
"&"
|
|
:STRING_bitwise_expr_stub_2
|
|
"AND_eax_ebx
|
|
"
|
|
:STRING_bitwise_expr_stub_3
|
|
"&&"
|
|
:STRING_bitwise_expr_stub_4
|
|
"OR_eax_ebx
|
|
"
|
|
:STRING_bitwise_expr_stub_5
|
|
"|"
|
|
:STRING_bitwise_expr_stub_6
|
|
"OR_eax_ebx
|
|
"
|
|
:STRING_bitwise_expr_stub_7
|
|
"||"
|
|
:STRING_bitwise_expr_stub_8
|
|
"XOR_ebx_eax_into_eax
|
|
"
|
|
:STRING_bitwise_expr_stub_9
|
|
"^"
|
|
:STRING_primary_expr_1
|
|
"&"
|
|
:STRING_primary_expr_3
|
|
"sizeof"
|
|
:STRING_primary_expr_5
|
|
"LOAD_IMMEDIATE_eax %0
|
|
"
|
|
:STRING_primary_expr_6
|
|
"SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
"
|
|
:STRING_primary_expr_8
|
|
"LOAD_IMMEDIATE_eax %1
|
|
"
|
|
:STRING_primary_expr_9
|
|
"XOR_ebx_eax_into_eax
|
|
"
|
|
:STRING_primary_expr_11
|
|
"Error in Primary expression
|
|
Didn't get )
|
|
"
|
|
:STRING_primary_expr_12
|
|
")"
|
|
:STRING_primary_expr_16
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
|
|
:STRING_primary_expr_18
|
|
"0123456789"
|
|
:STRING_expression_1
|
|
"="
|
|
:STRING_expression_3
|
|
"]"
|
|
:STRING_expression_4
|
|
"char*"
|
|
:STRING_expression_5
|
|
"STORE_INTEGER
|
|
"
|
|
:STRING_expression_6
|
|
"STORE_CHAR
|
|
"
|
|
:STRING_collect_local_1
|
|
"main"
|
|
:STRING_collect_local_4
|
|
"# Defining local "
|
|
:STRING_collect_local_5
|
|
"
|
|
"
|
|
:STRING_collect_local_7
|
|
"="
|
|
:STRING_collect_local_8
|
|
"ERROR in collect_local
|
|
Missing ;
|
|
"
|
|
:STRING_collect_local_9
|
|
";"
|
|
:STRING_collect_local_10
|
|
"PUSH_eax #"
|
|
:STRING_collect_local_11
|
|
"
|
|
"
|
|
:STRING_process_if_0
|
|
"# IF_"
|
|
:STRING_process_if_1
|
|
"ERROR in process_if
|
|
MISSING (
|
|
"
|
|
:STRING_process_if_2
|
|
"("
|
|
:STRING_process_if_3
|
|
"TEST
|
|
JUMP_EQ %ELSE_"
|
|
:STRING_process_if_4
|
|
"ERROR in process_if
|
|
MISSING )
|
|
"
|
|
:STRING_process_if_5
|
|
")"
|
|
:STRING_process_if_6
|
|
"JUMP %_END_IF_"
|
|
:STRING_process_if_7
|
|
":ELSE_"
|
|
:STRING_process_if_9
|
|
"else"
|
|
:STRING_process_if_10
|
|
":_END_IF_"
|
|
:STRING_process_for_0
|
|
"FOR_END_"
|
|
:STRING_process_for_1
|
|
"# FOR_initialization_"
|
|
:STRING_process_for_2
|
|
"ERROR in process_for
|
|
MISSING (
|
|
"
|
|
:STRING_process_for_3
|
|
"("
|
|
:STRING_process_for_5
|
|
";"
|
|
:STRING_process_for_6
|
|
":FOR_"
|
|
:STRING_process_for_7
|
|
"ERROR in process_for
|
|
MISSING ;1
|
|
"
|
|
:STRING_process_for_8
|
|
";"
|
|
:STRING_process_for_9
|
|
"TEST
|
|
JUMP_EQ %FOR_END_"
|
|
:STRING_process_for_10
|
|
"JUMP %FOR_THEN_"
|
|
:STRING_process_for_11
|
|
":FOR_ITER_"
|
|
:STRING_process_for_12
|
|
"ERROR in process_for
|
|
MISSING ;2
|
|
"
|
|
:STRING_process_for_13
|
|
";"
|
|
:STRING_process_for_14
|
|
"JUMP %FOR_"
|
|
:STRING_process_for_15
|
|
":FOR_THEN_"
|
|
:STRING_process_for_16
|
|
"ERROR in process_for
|
|
MISSING )
|
|
"
|
|
:STRING_process_for_17
|
|
")"
|
|
:STRING_process_for_18
|
|
"JUMP %FOR_ITER_"
|
|
:STRING_process_for_19
|
|
":FOR_END_"
|
|
:STRING_process_asm_0
|
|
"ERROR in process_asm
|
|
MISSING (
|
|
"
|
|
:STRING_process_asm_1
|
|
"("
|
|
:STRING_process_asm_3
|
|
"
|
|
"
|
|
:STRING_process_asm_4
|
|
"ERROR in process_asm
|
|
MISSING )
|
|
"
|
|
:STRING_process_asm_5
|
|
")"
|
|
:STRING_process_asm_6
|
|
"ERROR in process_asm
|
|
MISSING ;
|
|
"
|
|
:STRING_process_asm_7
|
|
";"
|
|
:STRING_process_do_0
|
|
"DO_END_"
|
|
:STRING_process_do_1
|
|
":DO_"
|
|
:STRING_process_do_2
|
|
"ERROR in process_do
|
|
MISSING while
|
|
"
|
|
:STRING_process_do_3
|
|
"while"
|
|
:STRING_process_do_4
|
|
"ERROR in process_do
|
|
MISSING (
|
|
"
|
|
:STRING_process_do_5
|
|
"("
|
|
:STRING_process_do_6
|
|
"ERROR in process_do
|
|
MISSING )
|
|
"
|
|
:STRING_process_do_7
|
|
")"
|
|
:STRING_process_do_8
|
|
"ERROR in process_do
|
|
MISSING ;
|
|
"
|
|
:STRING_process_do_9
|
|
";"
|
|
:STRING_process_do_10
|
|
"TEST
|
|
JUMP_NE %DO_"
|
|
:STRING_process_do_11
|
|
":DO_END_"
|
|
:STRING_process_while_0
|
|
"END_WHILE_"
|
|
:STRING_process_while_1
|
|
":WHILE_"
|
|
:STRING_process_while_2
|
|
"ERROR in process_while
|
|
MISSING (
|
|
"
|
|
:STRING_process_while_3
|
|
"("
|
|
:STRING_process_while_4
|
|
"TEST
|
|
JUMP_EQ %END_WHILE_"
|
|
:STRING_process_while_5
|
|
"# THEN_while_"
|
|
:STRING_process_while_6
|
|
"ERROR in process_while
|
|
MISSING )
|
|
"
|
|
:STRING_process_while_7
|
|
")"
|
|
:STRING_process_while_8
|
|
"JUMP %WHILE_"
|
|
:STRING_process_while_9
|
|
":END_WHILE_"
|
|
:STRING_return_result_1
|
|
"ERROR in return_result
|
|
MISSING ;
|
|
"
|
|
:STRING_return_result_2
|
|
";"
|
|
:STRING_return_result_4
|
|
"POP_ebx # _return_result_locals
|
|
"
|
|
:STRING_return_result_5
|
|
"RETURN
|
|
"
|
|
:STRING_process_break_1
|
|
"Not inside of a loop or case statement"
|
|
:STRING_process_break_4
|
|
"POP_ebx # break_cleanup_locals
|
|
"
|
|
:STRING_process_break_5
|
|
"JUMP %"
|
|
:STRING_process_break_6
|
|
"_"
|
|
:STRING_process_break_7
|
|
"
|
|
"
|
|
:STRING_process_break_8
|
|
"ERROR in break statement
|
|
Missing ;
|
|
"
|
|
:STRING_process_break_9
|
|
";"
|
|
:STRING_recursive_statement_1
|
|
"}"
|
|
:STRING_recursive_statement_3
|
|
"RETURN
|
|
"
|
|
:STRING_recursive_statement_5
|
|
"POP_ebx # _recursive_statement_locals
|
|
"
|
|
:STRING_statement_2
|
|
" #C goto label
|
|
"
|
|
:STRING_statement_4
|
|
"struct"
|
|
:STRING_statement_6
|
|
"if"
|
|
:STRING_statement_8
|
|
"do"
|
|
:STRING_statement_10
|
|
"while"
|
|
:STRING_statement_12
|
|
"for"
|
|
:STRING_statement_14
|
|
"asm"
|
|
:STRING_statement_16
|
|
"goto"
|
|
:STRING_statement_17
|
|
"JUMP %"
|
|
:STRING_statement_18
|
|
"
|
|
"
|
|
:STRING_statement_19
|
|
"ERROR in statement
|
|
Missing ;
|
|
"
|
|
:STRING_statement_20
|
|
";"
|
|
:STRING_statement_22
|
|
"return"
|
|
:STRING_statement_24
|
|
"break"
|
|
:STRING_statement_26
|
|
"continue"
|
|
:STRING_statement_27
|
|
"
|
|
#continue statement
|
|
"
|
|
:STRING_statement_28
|
|
"ERROR in statement
|
|
Missing ;
|
|
"
|
|
:STRING_statement_29
|
|
";"
|
|
:STRING_statement_30
|
|
"ERROR in statement
|
|
MISSING ;
|
|
"
|
|
:STRING_statement_31
|
|
";"
|
|
:STRING_collect_arguments_1
|
|
")"
|
|
:STRING_declare_function_1
|
|
"# Defining function "
|
|
:STRING_declare_function_2
|
|
"
|
|
"
|
|
:STRING_declare_function_3
|
|
":FUNCTION_"
|
|
:STRING_declare_function_4
|
|
"
|
|
"
|
|
:STRING_declare_function_6
|
|
"RETURN
|
|
"
|
|
:STRING_declare_function_7
|
|
"RETURN
|
|
"
|
|
:STRING_program_2
|
|
"CONSTANT"
|
|
:STRING_program_5
|
|
";"
|
|
:STRING_program_6
|
|
":GLOBAL_"
|
|
:STRING_program_7
|
|
"
|
|
NOP
|
|
"
|
|
:STRING_program_9
|
|
"("
|
|
:STRING_program_11
|
|
"="
|
|
:STRING_program_12
|
|
":GLOBAL_"
|
|
:STRING_program_13
|
|
"
|
|
"
|
|
:STRING_program_15
|
|
"0123456789"
|
|
:STRING_program_16
|
|
"%"
|
|
:STRING_program_17
|
|
"
|
|
"
|
|
:STRING_program_19
|
|
"Recieved "
|
|
:STRING_program_20
|
|
" in program
|
|
"
|
|
:STRING_program_21
|
|
"ERROR in Program
|
|
Missing ;
|
|
"
|
|
:STRING_program_22
|
|
";"
|
|
:STRING_program_23
|
|
"Recieved "
|
|
:STRING_program_24
|
|
" in program
|
|
"
|
|
:STRING_main_3
|
|
"-f"
|
|
:STRING_main_4
|
|
"--file"
|
|
:STRING_main_5
|
|
"r"
|
|
:STRING_main_7
|
|
"Unable to open for reading file: "
|
|
:STRING_main_8
|
|
"
|
|
Aborting to avoid problems
|
|
"
|
|
:STRING_main_10
|
|
"-o"
|
|
:STRING_main_11
|
|
"--output"
|
|
:STRING_main_12
|
|
"w"
|
|
:STRING_main_14
|
|
"Unable to open for writing file: "
|
|
:STRING_main_15
|
|
"
|
|
Aborting to avoid problems
|
|
"
|
|
:STRING_main_17
|
|
"-g"
|
|
:STRING_main_18
|
|
"--debug"
|
|
:STRING_main_20
|
|
"-h"
|
|
:STRING_main_21
|
|
"--help"
|
|
:STRING_main_22
|
|
" -f input file
|
|
-o output file
|
|
--help for this message
|
|
--version for file version
|
|
"
|
|
:STRING_main_24
|
|
"-V"
|
|
:STRING_main_25
|
|
"--version"
|
|
:STRING_main_26
|
|
"M2-Planet v1.0.0
|
|
"
|
|
:STRING_main_27
|
|
"UNKNOWN ARGUMENT
|
|
"
|
|
:STRING_main_29
|
|
"STDIN"
|
|
:STRING_main_31
|
|
"Either no input files were given or they were empty
|
|
"
|
|
:STRING_main_32
|
|
"
|
|
# Core program
|
|
"
|
|
:STRING_main_34
|
|
' 0A 3A 45 4C 46 5F 64 61 74 61 0A 00'
|
|
:STRING_main_35
|
|
"
|
|
# Program global variables
|
|
"
|
|
:STRING_main_36
|
|
"
|
|
# Program strings
|
|
"
|
|
:STRING_main_38
|
|
' 0A 3A 45 4C 46 5F 65 6E 64 0A 00'
|