16442 lines
362 KiB
Plaintext
16442 lines
362 KiB
Plaintext
|
|
# 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_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %577
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %384
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_open
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_fopen_0
|
|
|
|
:ELSE_fopen_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_open
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_fopen_0
|
|
|
|
# IF_fopen_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_close
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #error
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_memset_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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 %FOR_ITER_memset_0
|
|
|
|
:FOR_END_memset_0
|
|
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function calloc
|
|
:FUNCTION_calloc
|
|
# Defining local ret
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_malloc
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ret
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_memset
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
# IF_match_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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
|
|
LOAD_IMMEDIATE_eax %16
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_number_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_number_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETL
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_numerate_number_3
|
|
# THEN_while_numerate_number_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_numerate_number_3
|
|
:END_WHILE_numerate_number_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %97
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %65
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %20
|
|
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_EFFECTIVE_ADDRESS %16
|
|
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_EFFECTIVE_ADDRESS %20
|
|
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_EFFECTIVE_ADDRESS %20
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_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
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_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_EFFECTIVE_ADDRESS %20
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_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
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_char2dec
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_char2dec
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_numerate_string_6
|
|
:END_WHILE_numerate_string_6
|
|
:_END_IF_numerate_string_1
|
|
:_END_IF_numerate_string_0
|
|
|
|
# IF_numerate_string_8
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_numerate_string_8
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %12
|
|
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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_fputc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_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_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function postpend_char
|
|
:FUNCTION_postpend_char
|
|
# Defining local ret
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ret
|
|
# Defining local hold
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #hold
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function prepend_char
|
|
:FUNCTION_prepend_char
|
|
# Defining local ret
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ret
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function prepend_string
|
|
:FUNCTION_prepend_string
|
|
# Defining local ret
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ret
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_copy_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_string_length_0
|
|
|
|
:END_WHILE_string_length_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %9
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_clearWhiteSpace_0
|
|
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
JUMP %_END_IF_clearWhiteSpace_0
|
|
|
|
:ELSE_clearWhiteSpace_0
|
|
|
|
# IF_clearWhiteSpace_1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
JUMP %_END_IF_clearWhiteSpace_1
|
|
:ELSE_clearWhiteSpace_1
|
|
:_END_IF_clearWhiteSpace_1
|
|
:_END_IF_clearWhiteSpace_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function consume_byte
|
|
:FUNCTION_consume_byte
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
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_EFFECTIVE_ADDRESS %8
|
|
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
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %92
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_consume_word_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_consume_word_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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
|
|
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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 %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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 preserve_keyword
|
|
:FUNCTION_preserve_keyword
|
|
:WHILE_preserve_keyword_0
|
|
|
|
LOAD_IMMEDIATE_eax %97
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %122
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %65
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %90
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %57
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %95
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %END_WHILE_preserve_keyword_0
|
|
|
|
# THEN_while_preserve_keyword_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_preserve_keyword_0
|
|
|
|
:END_WHILE_preserve_keyword_0
|
|
|
|
# IF_preserve_keyword_1
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_preserve_keyword_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fixup_label
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %32
|
|
RETURN
|
|
JUMP %_END_IF_preserve_keyword_1
|
|
:ELSE_preserve_keyword_1
|
|
:_END_IF_preserve_keyword_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function preserve_symbol
|
|
:FUNCTION_preserve_symbol
|
|
:WHILE_preserve_symbol_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %60
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %61
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %62
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %124
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %38
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %33
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %45
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %END_WHILE_preserve_symbol_0
|
|
|
|
# THEN_while_preserve_symbol_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_preserve_symbol_0
|
|
|
|
:END_WHILE_preserve_symbol_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function purge_macro
|
|
:FUNCTION_purge_macro
|
|
:WHILE_purge_macro_0
|
|
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_purge_macro_0
|
|
|
|
# THEN_while_purge_macro_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_purge_macro_0
|
|
|
|
:END_WHILE_purge_macro_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function get_token
|
|
:FUNCTION_get_token
|
|
# Defining local current
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #current
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:reset #C goto label
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_index
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_clearWhiteSpace
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_0
|
|
|
|
LOAD_IMMEDIATE_eax %35
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_purge_macro
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_0
|
|
|
|
:ELSE_get_token_0
|
|
|
|
# IF_get_token_1
|
|
LOAD_IMMEDIATE_eax %97
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %122
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %65
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %90
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %48
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %57
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %95
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_preserve_keyword
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_1
|
|
:ELSE_get_token_1
|
|
# IF_get_token_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %60
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %61
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %62
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %124
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %38
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %33
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %45
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_preserve_symbol
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_2
|
|
:ELSE_get_token_2
|
|
# IF_get_token_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %39
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %39
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_word
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_3
|
|
:ELSE_get_token_3
|
|
# IF_get_token_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %34
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %34
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_word
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_get_token_4
|
|
:ELSE_get_token_4
|
|
# IF_get_token_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_6
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_6
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_get_token_7
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_get_token_7
|
|
# THEN_while_get_token_7
|
|
:WHILE_get_token_8
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_get_token_8
|
|
# THEN_while_get_token_8
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_9
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_9
|
|
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_9
|
|
:ELSE_get_token_9
|
|
:_END_IF_get_token_9
|
|
JUMP %WHILE_get_token_8
|
|
:END_WHILE_get_token_8
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_get_token_10
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_10
|
|
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_10
|
|
:ELSE_get_token_10
|
|
:_END_IF_get_token_10
|
|
JUMP %WHILE_get_token_7
|
|
:END_WHILE_get_token_7
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_6
|
|
:ELSE_get_token_6
|
|
# IF_get_token_11
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %47
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_11
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %reset
|
|
JUMP %_END_IF_get_token_11
|
|
:ELSE_get_token_11
|
|
:_END_IF_get_token_11
|
|
:_END_IF_get_token_6
|
|
JUMP %_END_IF_get_token_5
|
|
:ELSE_get_token_5
|
|
# IF_get_token_12
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETL
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_get_token_12
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_free
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_get_token_12
|
|
:ELSE_get_token_12
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_consume_byte
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_get_token_12
|
|
:_END_IF_get_token_5
|
|
:_END_IF_get_token_4
|
|
:_END_IF_get_token_3
|
|
:_END_IF_get_token_2
|
|
:_END_IF_get_token_1
|
|
:_END_IF_get_token_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #next
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %WHILE_reverse_list_0
|
|
|
|
:END_WHILE_reverse_list_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %16
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local ch
|
|
LOAD_IMMEDIATE_eax &GLOBAL_input
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_fgetc
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ch
|
|
:WHILE_read_all_tokens_0
|
|
|
|
LOAD_IMMEDIATE_eax %0xFFFFFFFF
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_get_token
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
|
|
LOAD_IMMEDIATE_eax %97
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %122
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETGE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_upcase_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function hexify
|
|
:FUNCTION_hexify
|
|
# Defining local i
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_char2hex
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #i
|
|
# IF_hexify_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_hexify_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_0
|
|
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_hexify_0
|
|
|
|
:ELSE_hexify_0
|
|
|
|
:_END_IF_hexify_0
|
|
|
|
# IF_hexify_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_hexify_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
COPY_eax_to_ecx
|
|
POP_eax
|
|
SAL_eax_cl
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_hexify_1
|
|
:ELSE_hexify_1
|
|
:_END_IF_hexify_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function weird
|
|
:FUNCTION_weird
|
|
# IF_weird_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_weird_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
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_EFFECTIVE_ADDRESS %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_weird_1
|
|
# IF_weird_2
|
|
LOAD_IMMEDIATE_eax %120
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
# IF_weird_3
|
|
LOAD_IMMEDIATE_eax %48
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_3
|
|
:ELSE_weird_3
|
|
# IF_weird_4
|
|
LOAD_IMMEDIATE_eax %49
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_4
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_4
|
|
:ELSE_weird_4
|
|
# IF_weird_5
|
|
LOAD_IMMEDIATE_eax %50
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_5
|
|
# IF_weird_6
|
|
LOAD_IMMEDIATE_eax %50
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_6
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_6
|
|
:ELSE_weird_6
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
:_END_IF_weird_6
|
|
JUMP %_END_IF_weird_5
|
|
:ELSE_weird_5
|
|
# IF_weird_7
|
|
LOAD_IMMEDIATE_eax %51
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_7
|
|
# IF_weird_8
|
|
LOAD_IMMEDIATE_eax %65
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_weird_8
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_8
|
|
:ELSE_weird_8
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
:_END_IF_weird_8
|
|
JUMP %_END_IF_weird_7
|
|
:ELSE_weird_7
|
|
# IF_weird_9
|
|
LOAD_IMMEDIATE_eax %56
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_9
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_9
|
|
:ELSE_weird_9
|
|
# IF_weird_10
|
|
LOAD_IMMEDIATE_eax %57
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_10
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_10
|
|
:ELSE_weird_10
|
|
# IF_weird_11
|
|
LOAD_IMMEDIATE_eax %97
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_11
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_11
|
|
:ELSE_weird_11
|
|
# IF_weird_12
|
|
LOAD_IMMEDIATE_eax %65
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_12
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_12
|
|
:ELSE_weird_12
|
|
# IF_weird_13
|
|
LOAD_IMMEDIATE_eax %98
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_13
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_13
|
|
:ELSE_weird_13
|
|
# IF_weird_14
|
|
LOAD_IMMEDIATE_eax %66
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_14
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_14
|
|
:ELSE_weird_14
|
|
# IF_weird_15
|
|
LOAD_IMMEDIATE_eax %99
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_15
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_15
|
|
:ELSE_weird_15
|
|
# IF_weird_16
|
|
LOAD_IMMEDIATE_eax %67
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_16
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_16
|
|
:ELSE_weird_16
|
|
# IF_weird_17
|
|
LOAD_IMMEDIATE_eax %100
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_17
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_17
|
|
:ELSE_weird_17
|
|
# IF_weird_18
|
|
LOAD_IMMEDIATE_eax %68
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_18
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_18
|
|
:ELSE_weird_18
|
|
# IF_weird_19
|
|
LOAD_IMMEDIATE_eax %101
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_19
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_19
|
|
:ELSE_weird_19
|
|
# IF_weird_20
|
|
LOAD_IMMEDIATE_eax %69
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_20
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_20
|
|
:ELSE_weird_20
|
|
# IF_weird_21
|
|
LOAD_IMMEDIATE_eax %102
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_21
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_21
|
|
:ELSE_weird_21
|
|
# IF_weird_22
|
|
LOAD_IMMEDIATE_eax %70
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_22
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_22
|
|
:ELSE_weird_22
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
:_END_IF_weird_22
|
|
:_END_IF_weird_21
|
|
:_END_IF_weird_20
|
|
:_END_IF_weird_19
|
|
:_END_IF_weird_18
|
|
:_END_IF_weird_17
|
|
:_END_IF_weird_16
|
|
:_END_IF_weird_15
|
|
:_END_IF_weird_14
|
|
:_END_IF_weird_13
|
|
:_END_IF_weird_12
|
|
:_END_IF_weird_11
|
|
:_END_IF_weird_10
|
|
:_END_IF_weird_9
|
|
:_END_IF_weird_7
|
|
:_END_IF_weird_5
|
|
:_END_IF_weird_4
|
|
:_END_IF_weird_3
|
|
JUMP %_END_IF_weird_2
|
|
:ELSE_weird_2
|
|
# IF_weird_23
|
|
LOAD_IMMEDIATE_eax %110
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_23
|
|
# IF_weird_24
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_weird_24
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_24
|
|
:ELSE_weird_24
|
|
:_END_IF_weird_24
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
JUMP %_END_IF_weird_23
|
|
:ELSE_weird_23
|
|
# IF_weird_25
|
|
LOAD_IMMEDIATE_eax %116
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_25
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %2
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
JUMP %_END_IF_weird_25
|
|
:ELSE_weird_25
|
|
# IF_weird_26
|
|
LOAD_IMMEDIATE_eax %34
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_26
|
|
LOAD_IMMEDIATE_eax %1
|
|
RETURN
|
|
JUMP %_END_IF_weird_26
|
|
:ELSE_weird_26
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
:_END_IF_weird_26
|
|
:_END_IF_weird_25
|
|
:_END_IF_weird_23
|
|
:_END_IF_weird_2
|
|
JUMP %_END_IF_weird_1
|
|
:ELSE_weird_1
|
|
:_END_IF_weird_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
# Defining function escape_lookup
|
|
:FUNCTION_escape_lookup
|
|
# IF_escape_lookup_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_escape_lookup_0
|
|
|
|
# Defining local t1
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
CALL_IMMEDIATE %FUNCTION_hexify
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #t1
|
|
# Defining local t2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_hexify
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #t2
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_0
|
|
|
|
:ELSE_escape_lookup_0
|
|
|
|
# IF_escape_lookup_1
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_1
|
|
LOAD_IMMEDIATE_eax %10
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_1
|
|
:ELSE_escape_lookup_1
|
|
# IF_escape_lookup_2
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
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_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_3
|
|
LOAD_IMMEDIATE_eax %92
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_3
|
|
:ELSE_escape_lookup_3
|
|
# IF_escape_lookup_4
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_4
|
|
LOAD_IMMEDIATE_eax %39
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_4
|
|
:ELSE_escape_lookup_4
|
|
# IF_escape_lookup_5
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_5
|
|
LOAD_IMMEDIATE_eax %34
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_5
|
|
:ELSE_escape_lookup_5
|
|
# IF_escape_lookup_6
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_escape_lookup_6
|
|
LOAD_IMMEDIATE_eax %13
|
|
RETURN
|
|
JUMP %_END_IF_escape_lookup_6
|
|
:ELSE_escape_lookup_6
|
|
:_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
|
|
:_END_IF_escape_lookup_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_2
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
# Defining function collect_regular_string
|
|
:FUNCTION_collect_regular_string
|
|
# Defining local j
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #j
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #i
|
|
# Defining local message
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #message
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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 %34
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
:WHILE_collect_regular_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
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 %END_WHILE_collect_regular_string_0
|
|
|
|
# THEN_while_collect_regular_string_0
|
|
|
|
# IF_collect_regular_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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
|
|
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_collect_regular_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
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
|
|
# IF_collect_regular_string_2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
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_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_2
|
|
:ELSE_collect_regular_string_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
:_END_IF_collect_regular_string_2
|
|
:_END_IF_collect_regular_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_collect_regular_string_0
|
|
|
|
:END_WHILE_collect_regular_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function collect_weird_string
|
|
:FUNCTION_collect_weird_string
|
|
# Defining local j
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #j
|
|
# Defining local k
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #k
|
|
# Defining local table
|
|
LOAD_IMMEDIATE_eax &STRING_3
|
|
PUSH_eax #table
|
|
# Defining local hold
|
|
LOAD_IMMEDIATE_eax %4096
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #hold
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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
|
|
:WHILE_collect_weird_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
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 %END_WHILE_collect_weird_string_0
|
|
|
|
# THEN_while_collect_weird_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %32
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
# IF_collect_weird_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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
|
|
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_collect_weird_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_upcase
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_upcase
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
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
|
|
# IF_collect_weird_string_2
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %110
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_weird_string_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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 %65
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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
|
|
# IF_collect_weird_string_3
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %116
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_weird_string_3
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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 %57
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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_3
|
|
:ELSE_collect_weird_string_3
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
COPY_eax_to_ecx
|
|
POP_eax
|
|
SAR_eax_cl
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
STORE_CHAR
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
:_END_IF_collect_weird_string_3
|
|
:_END_IF_collect_weird_string_2
|
|
:_END_IF_collect_weird_string_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %3
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_collect_weird_string_0
|
|
|
|
:END_WHILE_collect_weird_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_weird
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %58
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_parse_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_collect_weird_string
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
JUMP %_END_IF_parse_string_0
|
|
|
|
:ELSE_parse_string_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_collect_regular_string
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
:_END_IF_parse_string_0
|
|
|
|
RETURN
|
|
# Defining function initialize_types
|
|
:FUNCTION_initialize_types
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_4
|
|
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
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_5
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local b
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #b
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_6
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local c
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #c
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_7
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local d
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #d
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_8
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local e
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #e
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_9
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local f
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #f
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_10
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %24
|
|
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
|
|
RETURN
|
|
# Defining function lookup_type
|
|
:FUNCTION_lookup_type
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_lookup_type_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_types
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_lookup_type_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_lookup_type_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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 build_member
|
|
:FUNCTION_build_member
|
|
# Defining local member_type
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
PUSH_eax #member_type
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #i
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_member_size
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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
|
|
LOAD_IMMEDIATE_eax &STRING_11
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_12
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
:WHILE_build_union_0
|
|
|
|
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_0
|
|
|
|
# THEN_while_build_union_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_build_member
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_build_union_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_build_union_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_build_union_1
|
|
:ELSE_build_union_1
|
|
:_END_IF_build_union_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 &STRING_13
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_14
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %WHILE_build_union_0
|
|
|
|
:END_WHILE_build_union_0
|
|
|
|
LOAD_IMMEDIATE_eax &GLOBAL_member_size
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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
|
|
# Defining local head
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #head
|
|
# Defining local i
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #i
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
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 &STRING_15
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_16
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# Defining local last
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #last
|
|
:WHILE_create_struct_0
|
|
|
|
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_0
|
|
|
|
# THEN_while_create_struct_0
|
|
|
|
# IF_create_struct_1
|
|
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_17
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_create_struct_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_build_union
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_create_struct_1
|
|
:ELSE_create_struct_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_build_member
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_create_struct_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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
|
|
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 &STRING_18
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_19
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %WHILE_create_struct_0
|
|
|
|
:END_WHILE_create_struct_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_IMMEDIATE_eax &STRING_20
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_21
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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 %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #structure
|
|
# IF_type_name_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_type_name_0
|
|
|
|
:ELSE_type_name_0
|
|
|
|
:_END_IF_type_name_0
|
|
|
|
# Defining local ret
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_lookup_type
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #ret
|
|
# IF_type_name_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_1
|
|
LOAD_IMMEDIATE_eax &STRING_23
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_24
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_type_name_1
|
|
:ELSE_type_name_1
|
|
# IF_type_name_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_type_name_2
|
|
CALL_IMMEDIATE %FUNCTION_create_struct
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_type_name_2
|
|
:ELSE_type_name_2
|
|
:_END_IF_type_name_2
|
|
:_END_IF_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
|
|
:WHILE_type_name_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 %42
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_type_name_3
|
|
# THEN_while_type_name_3
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_3
|
|
:END_WHILE_type_name_3
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function line_error
|
|
:FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax &STRING_25
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_26
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
# Defining function require_match
|
|
:FUNCTION_require_match
|
|
# IF_require_match_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
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 #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_require_match_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
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 emit
|
|
:FUNCTION_emit
|
|
# Defining local t
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #t
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function sym_declare
|
|
:FUNCTION_sym_declare
|
|
# Defining local a
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_sym_lookup_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_lookup_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
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 stack_index
|
|
:FUNCTION_stack_index
|
|
# Defining local depth
|
|
LOAD_IMMEDIATE_eax %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
MULTIPLY_eax_by_ebx_into_eax
|
|
PUSH_eax #depth
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_stack_index_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_stack_index_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_stack_index_0
|
|
|
|
JUMP %FOR_THEN_stack_index_0
|
|
|
|
:FOR_ITER_stack_index_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_stack_index_0
|
|
|
|
:FOR_THEN_stack_index_0
|
|
|
|
# IF_stack_index_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_stack_index_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_stack_index_1
|
|
:ELSE_stack_index_1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_stack_index_1
|
|
JUMP %FOR_ITER_stack_index_0
|
|
|
|
:FOR_END_stack_index_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# FOR_initialization_stack_index_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_stack_index_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_stack_index_2
|
|
JUMP %FOR_THEN_stack_index_2
|
|
:FOR_ITER_stack_index_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_stack_index_2
|
|
:FOR_THEN_stack_index_2
|
|
# IF_stack_index_3
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_stack_index_3
|
|
# IF_stack_index_4
|
|
LOAD_IMMEDIATE_eax &STRING_27
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_stack_index_4
|
|
# IF_stack_index_5
|
|
LOAD_IMMEDIATE_eax &STRING_28
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_stack_index_5
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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 # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_stack_index_5
|
|
:ELSE_stack_index_5
|
|
# IF_stack_index_6
|
|
LOAD_IMMEDIATE_eax &STRING_29
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_stack_index_6
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_stack_index_6
|
|
:ELSE_stack_index_6
|
|
:_END_IF_stack_index_6
|
|
:_END_IF_stack_index_5
|
|
JUMP %_END_IF_stack_index_4
|
|
:ELSE_stack_index_4
|
|
:_END_IF_stack_index_4
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_stack_index_3
|
|
:ELSE_stack_index_3
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %4
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_stack_index_3
|
|
JUMP %FOR_ITER_stack_index_2
|
|
:FOR_END_stack_index_2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_30
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %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 %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_31
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function function_call
|
|
:FUNCTION_function_call
|
|
LOAD_IMMEDIATE_eax &STRING_32
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_33
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# Defining local passed
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #passed
|
|
# IF_function_call_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 %41
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_function_call_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_34
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_function_call_1
|
|
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_1
|
|
# THEN_while_function_call_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_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_35
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_function_call_1
|
|
:END_WHILE_function_call_1
|
|
JUMP %_END_IF_function_call_0
|
|
|
|
:ELSE_function_call_0
|
|
|
|
:_END_IF_function_call_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_36
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_37
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# IF_function_call_2
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_function_call_2
|
|
# Defining local a
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_38
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_39
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_function_call_2
|
|
:ELSE_function_call_2
|
|
# IF_function_call_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_function_call_3
|
|
# Defining local a
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_40
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_41
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %32
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_function_call_3
|
|
:ELSE_function_call_3
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_42
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postpend_char
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_function_call_3
|
|
:_END_IF_function_call_2
|
|
# FOR_initialization_function_call_4
|
|
:FOR_function_call_4
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETG
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_function_call_4
|
|
JUMP %FOR_THEN_function_call_4
|
|
:FOR_ITER_function_call_4
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
STORE_INTEGER
|
|
JUMP %FOR_function_call_4
|
|
:FOR_THEN_function_call_4
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_43
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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_ITER_function_call_4
|
|
:FOR_END_function_call_4
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function sym_get_value
|
|
:FUNCTION_sym_get_value
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
# IF_sym_get_value_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_44
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postpend_char
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_0
|
|
|
|
:ELSE_sym_get_value_0
|
|
|
|
:_END_IF_sym_get_value_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_1
|
|
# IF_sym_get_value_2
|
|
LOAD_IMMEDIATE_eax &STRING_45
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_2
|
|
# IF_sym_get_value_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_46
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_3
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_47
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_48
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_3
|
|
:ELSE_sym_get_value_3
|
|
:_END_IF_sym_get_value_3
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_function_call
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_2
|
|
:ELSE_sym_get_value_2
|
|
:_END_IF_sym_get_value_2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_49
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_50
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_4
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_51
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_4
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_52
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_sym_get_value_4
|
|
:ELSE_sym_get_value_4
|
|
:_END_IF_sym_get_value_4
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_1
|
|
:ELSE_sym_get_value_1
|
|
:_END_IF_sym_get_value_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_5
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_5
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_6
|
|
LOAD_IMMEDIATE_eax &STRING_53
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_6
|
|
# IF_sym_get_value_7
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_54
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_7
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_55
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_56
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_7
|
|
:ELSE_sym_get_value_7
|
|
:_END_IF_sym_get_value_7
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_function_call
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_6
|
|
:ELSE_sym_get_value_6
|
|
:_END_IF_sym_get_value_6
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_57
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_stack_index
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_58
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_8
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_59
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_60
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_8
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_61
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_sym_get_value_8
|
|
:ELSE_sym_get_value_8
|
|
:_END_IF_sym_get_value_8
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_5
|
|
:ELSE_sym_get_value_5
|
|
:_END_IF_sym_get_value_5
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_9
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_9
|
|
# IF_sym_get_value_10
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_62
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_10
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_63
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postpend_char
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_10
|
|
:ELSE_sym_get_value_10
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_function_call
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
:_END_IF_sym_get_value_10
|
|
JUMP %_END_IF_sym_get_value_9
|
|
:ELSE_sym_get_value_9
|
|
:_END_IF_sym_get_value_9
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_11
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_11
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_64
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postpend_char
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_sym_get_value_12
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_65
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_sym_get_value_12
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_66
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_sym_get_value_12
|
|
:ELSE_sym_get_value_12
|
|
:_END_IF_sym_get_value_12
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_sym_get_value_11
|
|
:ELSE_sym_get_value_11
|
|
:_END_IF_sym_get_value_11
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_67
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
RETURN
|
|
# Defining function primary_expr
|
|
:FUNCTION_primary_expr
|
|
# IF_primary_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %48
|
|
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
|
|
SETLE
|
|
MOVEZBL
|
|
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
|
|
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_primary_expr_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_68
|
|
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_expression1
|
|
LOAD_IMMEDIATE_eax %10
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postpend_char
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
|
|
# IF_primary_expr_1
|
|
LOAD_IMMEDIATE_eax %97
|
|
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
|
|
SETLE
|
|
MOVEZBL
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %122
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %65
|
|
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
|
|
SETLE
|
|
MOVEZBL
|
|
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
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %90
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETLE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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 #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_get_value
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_primary_expr_1
|
|
:ELSE_primary_expr_1
|
|
# IF_primary_expr_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 %40
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_69
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_70
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_primary_expr_2
|
|
:ELSE_primary_expr_2
|
|
# IF_primary_expr_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 %39
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_71
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_primary_expr_4
|
|
LOAD_IMMEDIATE_eax %92
|
|
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 %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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 %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_escape_lookup
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_primary_expr_4
|
|
:ELSE_primary_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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 %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
LOAD_BYTE
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_primary_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_72
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_3
|
|
:ELSE_primary_expr_3
|
|
# IF_primary_expr_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 %34
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_primary_expr_5
|
|
# Defining local number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #number_string
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_73
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_74
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_75
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_76
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
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 #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_parse_string
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_IMMEDIATE_eax &GLOBAL_string_num
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_string_num
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_primary_expr_5
|
|
:ELSE_primary_expr_5
|
|
LOAD_IMMEDIATE_eax &STRING_77
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_78
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
:_END_IF_primary_expr_5
|
|
:_END_IF_primary_expr_3
|
|
:_END_IF_primary_expr_2
|
|
:_END_IF_primary_expr_1
|
|
:_END_IF_primary_expr_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function pre_recursion
|
|
:FUNCTION_pre_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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_79
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function promote_type
|
|
:FUNCTION_promote_type
|
|
# IF_promote_type_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_1
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_promote_type_3
|
|
:ELSE_promote_type_3
|
|
:_END_IF_promote_type_3
|
|
# IF_promote_type_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_promote_type_4
|
|
:ELSE_promote_type_4
|
|
:_END_IF_promote_type_4
|
|
# IF_promote_type_5
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_5
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
JUMP %_END_IF_promote_type_5
|
|
:ELSE_promote_type_5
|
|
:_END_IF_promote_type_5
|
|
# IF_promote_type_6
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_promote_type_6
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
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_IMMEDIATE_eax %0
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function post_recursion
|
|
:FUNCTION_post_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_last_type
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_promote_type
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_80
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function ceil_log2
|
|
:FUNCTION_ceil_log2
|
|
# Defining local result
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #result
|
|
# IF_ceil_log2_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
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_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
COPY_eax_to_ecx
|
|
POP_eax
|
|
SAR_eax_cl
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_ceil_log2_1
|
|
:END_WHILE_ceil_log2_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function postfix_expr
|
|
:FUNCTION_postfix_expr
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_primary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_postfix_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_postfix_expr_0
|
|
|
|
# THEN_while_postfix_expr_0
|
|
|
|
# IF_postfix_expr_1
|
|
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 %91
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_1
|
|
# Defining local target
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #target
|
|
# Defining local a
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_postfix_expr_2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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 %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_81
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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 %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_ceil_log2
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_82
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_2
|
|
:ELSE_postfix_expr_2
|
|
:_END_IF_postfix_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_83
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_postfix_expr_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_84
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_3
|
|
# IF_postfix_expr_4
|
|
LOAD_IMMEDIATE_eax %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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 %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_85
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_4
|
|
:ELSE_postfix_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_86
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_postfix_expr_4
|
|
JUMP %_END_IF_postfix_expr_3
|
|
:ELSE_postfix_expr_3
|
|
:_END_IF_postfix_expr_3
|
|
LOAD_IMMEDIATE_eax &STRING_87
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_88
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_postfix_expr_1
|
|
:ELSE_postfix_expr_1
|
|
# IF_postfix_expr_5
|
|
LOAD_IMMEDIATE_eax &STRING_89
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_90
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_postfix_expr_6
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_postfix_expr_6
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_postfix_expr_6
|
|
JUMP %FOR_THEN_postfix_expr_6
|
|
:FOR_ITER_postfix_expr_6
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_postfix_expr_6
|
|
:FOR_THEN_postfix_expr_6
|
|
# IF_postfix_expr_7
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_7
|
|
JUMP %FOR_END_postfix_expr_6
|
|
JUMP %_END_IF_postfix_expr_7
|
|
:ELSE_postfix_expr_7
|
|
:_END_IF_postfix_expr_7
|
|
JUMP %FOR_ITER_postfix_expr_6
|
|
:FOR_END_postfix_expr_6
|
|
# IF_postfix_expr_8
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_8
|
|
LOAD_IMMEDIATE_eax &STRING_91
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_92
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_93
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_postfix_expr_8
|
|
:ELSE_postfix_expr_8
|
|
:_END_IF_postfix_expr_8
|
|
# IF_postfix_expr_9
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_9
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_94
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_95
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_96
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_9
|
|
:ELSE_postfix_expr_9
|
|
:_END_IF_postfix_expr_9
|
|
# IF_postfix_expr_10
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_97
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_postfix_expr_10
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_98
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_postfix_expr_10
|
|
:ELSE_postfix_expr_10
|
|
:_END_IF_postfix_expr_10
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_postfix_expr_5
|
|
:ELSE_postfix_expr_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_postfix_expr_5
|
|
:_END_IF_postfix_expr_1
|
|
JUMP %WHILE_postfix_expr_0
|
|
|
|
:END_WHILE_postfix_expr_0
|
|
|
|
RETURN
|
|
# Defining function unary_expr
|
|
:FUNCTION_unary_expr
|
|
# IF_unary_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_99
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_unary_expr_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_100
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_101
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_unary_expr_0
|
|
|
|
:ELSE_unary_expr_0
|
|
|
|
# IF_unary_expr_1
|
|
LOAD_IMMEDIATE_eax &STRING_102
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_unary_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_103
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_104
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_unary_expr_1
|
|
:ELSE_unary_expr_1
|
|
# IF_unary_expr_2
|
|
LOAD_IMMEDIATE_eax &STRING_105
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_unary_expr_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
|
|
LOAD_IMMEDIATE_eax &STRING_106
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_107
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# Defining local a
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
PUSH_eax #a
|
|
LOAD_IMMEDIATE_eax &STRING_108
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_109
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_110
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_111
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_unary_expr_2
|
|
:ELSE_unary_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_postfix_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_unary_expr_2
|
|
:_END_IF_unary_expr_1
|
|
:_END_IF_unary_expr_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function additive_expr
|
|
:FUNCTION_additive_expr
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_additive_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_additive_expr_0
|
|
|
|
# THEN_while_additive_expr_0
|
|
|
|
# IF_additive_expr_1
|
|
LOAD_IMMEDIATE_eax &STRING_112
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_additive_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_113
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_additive_expr_1
|
|
:ELSE_additive_expr_1
|
|
# IF_additive_expr_2
|
|
LOAD_IMMEDIATE_eax &STRING_114
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_additive_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_115
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_additive_expr_2
|
|
:ELSE_additive_expr_2
|
|
# IF_additive_expr_3
|
|
LOAD_IMMEDIATE_eax &STRING_116
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_additive_expr_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_117
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_additive_expr_3
|
|
:ELSE_additive_expr_3
|
|
# IF_additive_expr_4
|
|
LOAD_IMMEDIATE_eax &STRING_118
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_additive_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_119
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_additive_expr_4
|
|
:ELSE_additive_expr_4
|
|
# IF_additive_expr_5
|
|
LOAD_IMMEDIATE_eax &STRING_120
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_additive_expr_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_unary_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_121
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_additive_expr_5
|
|
:ELSE_additive_expr_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_additive_expr_5
|
|
:_END_IF_additive_expr_4
|
|
:_END_IF_additive_expr_3
|
|
:_END_IF_additive_expr_2
|
|
:_END_IF_additive_expr_1
|
|
JUMP %WHILE_additive_expr_0
|
|
|
|
:END_WHILE_additive_expr_0
|
|
|
|
RETURN
|
|
# Defining function shift_expr
|
|
:FUNCTION_shift_expr
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_additive_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_shift_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_shift_expr_0
|
|
|
|
# THEN_while_shift_expr_0
|
|
|
|
# IF_shift_expr_1
|
|
LOAD_IMMEDIATE_eax &STRING_122
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_shift_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_additive_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local old
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #old
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_free
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_123
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_shift_expr_1
|
|
:ELSE_shift_expr_1
|
|
# IF_shift_expr_2
|
|
LOAD_IMMEDIATE_eax &STRING_124
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_shift_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_additive_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local old
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #old
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_free
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_125
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_shift_expr_2
|
|
:ELSE_shift_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_shift_expr_2
|
|
:_END_IF_shift_expr_1
|
|
JUMP %WHILE_shift_expr_0
|
|
|
|
:END_WHILE_shift_expr_0
|
|
|
|
RETURN
|
|
# Defining function relational_expr
|
|
:FUNCTION_relational_expr
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_shift_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_relational_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_relational_expr_0
|
|
|
|
# THEN_while_relational_expr_0
|
|
|
|
# IF_relational_expr_1
|
|
LOAD_IMMEDIATE_eax &STRING_126
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_relational_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_shift_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_127
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_relational_expr_1
|
|
:ELSE_relational_expr_1
|
|
# IF_relational_expr_2
|
|
LOAD_IMMEDIATE_eax &STRING_128
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_relational_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_shift_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_129
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_relational_expr_2
|
|
:ELSE_relational_expr_2
|
|
# IF_relational_expr_3
|
|
LOAD_IMMEDIATE_eax &STRING_130
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_relational_expr_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_shift_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_131
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_relational_expr_3
|
|
:ELSE_relational_expr_3
|
|
# IF_relational_expr_4
|
|
LOAD_IMMEDIATE_eax &STRING_132
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_relational_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_shift_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_133
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_relational_expr_4
|
|
:ELSE_relational_expr_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_relational_expr_4
|
|
:_END_IF_relational_expr_3
|
|
:_END_IF_relational_expr_2
|
|
:_END_IF_relational_expr_1
|
|
JUMP %WHILE_relational_expr_0
|
|
|
|
:END_WHILE_relational_expr_0
|
|
|
|
RETURN
|
|
# Defining function equality_expr
|
|
:FUNCTION_equality_expr
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_relational_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_equality_expr_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_equality_expr_0
|
|
|
|
# THEN_while_equality_expr_0
|
|
|
|
# IF_equality_expr_1
|
|
LOAD_IMMEDIATE_eax &STRING_134
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_equality_expr_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_relational_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_135
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_equality_expr_1
|
|
:ELSE_equality_expr_1
|
|
# IF_equality_expr_2
|
|
LOAD_IMMEDIATE_eax &STRING_136
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_equality_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_relational_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_137
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_equality_expr_2
|
|
:ELSE_equality_expr_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_equality_expr_2
|
|
:_END_IF_equality_expr_1
|
|
JUMP %WHILE_equality_expr_0
|
|
|
|
:END_WHILE_equality_expr_0
|
|
|
|
RETURN
|
|
# Defining function bitwise
|
|
:FUNCTION_bitwise
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_equality_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:WHILE_bitwise_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
TEST
|
|
JUMP_EQ %END_WHILE_bitwise_0
|
|
|
|
# THEN_while_bitwise_0
|
|
|
|
# IF_bitwise_1
|
|
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 %38
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_bitwise_1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_equality_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_138
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_bitwise_1
|
|
:ELSE_bitwise_1
|
|
# IF_bitwise_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 %124
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_bitwise_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_equality_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_139
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_bitwise_2
|
|
:ELSE_bitwise_2
|
|
# IF_bitwise_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 %94
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_bitwise_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_equality_expr
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_140
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_bitwise_3
|
|
:ELSE_bitwise_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
:_END_IF_bitwise_3
|
|
:_END_IF_bitwise_2
|
|
:_END_IF_bitwise_1
|
|
JUMP %WHILE_bitwise_0
|
|
|
|
:END_WHILE_bitwise_0
|
|
|
|
RETURN
|
|
# Defining function expression
|
|
:FUNCTION_expression
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_bitwise
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_expression_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 %61
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_0
|
|
|
|
# Defining local target
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #target
|
|
# Defining local member
|
|
LOAD_IMMEDIATE_eax &STRING_141
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #member
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_pre_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_post_recursion
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_expression_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_1
|
|
# IF_expression_2
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_142
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_expression_2
|
|
:ELSE_expression_2
|
|
# IF_expression_3
|
|
LOAD_IMMEDIATE_eax %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_expression_3
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_143
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_expression_3
|
|
:ELSE_expression_3
|
|
:_END_IF_expression_3
|
|
:_END_IF_expression_2
|
|
JUMP %_END_IF_expression_1
|
|
:ELSE_expression_1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_144
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:_END_IF_expression_1
|
|
POP_ebx # _recursive_statement_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_expression_0
|
|
|
|
:ELSE_expression_0
|
|
|
|
:_END_IF_expression_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function collect_local
|
|
:FUNCTION_collect_local
|
|
# Defining local type_size
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
PUSH_eax #type_size
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_145
|
|
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_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_146
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local a
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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
|
|
# IF_collect_local_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 %61
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_local_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_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_local_0
|
|
|
|
:ELSE_collect_local_0
|
|
|
|
:_END_IF_collect_local_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %24
|
|
ADD_ebx_to_eax
|
|
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 &STRING_147
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_148
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_149
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_150
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function process_if
|
|
:FUNCTION_process_if
|
|
# Defining local number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_151
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_152
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_153
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_IMMEDIATE_eax &STRING_154
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_155
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_156
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_157
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_158
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_159
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_160
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_161
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_162
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_163
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_164
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_165
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_process_if_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_166
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_process_if_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_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_process_if_0
|
|
|
|
:ELSE_process_if_0
|
|
|
|
:_END_IF_process_if_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_167
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_168
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_169
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function process_for
|
|
:FUNCTION_process_for
|
|
# Defining local number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
# Defining local nested_break
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_170
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_171
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_172
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_173
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_174
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_IMMEDIATE_eax &STRING_175
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_176
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# IF_process_for_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_177
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_process_for_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_process_for_0
|
|
|
|
:ELSE_process_for_0
|
|
|
|
:_END_IF_process_for_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_178
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_179
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_180
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_181
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_182
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_183
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_184
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_185
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_186
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_187
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_188
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_189
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_190
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_191
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_192
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_193
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_194
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_195
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_196
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_197
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_198
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_199
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_200
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_201
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_202
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_203
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_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
|
|
LOAD_IMMEDIATE_eax &STRING_204
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_205
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
:WHILE_process_asm_0
|
|
|
|
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_0
|
|
|
|
# THEN_while_process_asm_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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 %1
|
|
POP_ebx # _common_recursion
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_206
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_process_asm_0
|
|
|
|
:END_WHILE_process_asm_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_207
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_208
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_209
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_210
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
RETURN
|
|
# Defining function process_do
|
|
:FUNCTION_process_do
|
|
# Defining local number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
# Defining local nested_break
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_211
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_212
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_213
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_214
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_215
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_216
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_217
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_218
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_219
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_220
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_221
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_222
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_223
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_224
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_225
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_226
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_227
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_228
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function process_while
|
|
:FUNCTION_process_while
|
|
# Defining local number_string
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_numerate_number
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
# Defining local nested_break
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_break
|
|
# Defining local nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
LOAD_INTEGER
|
|
PUSH_eax #nested_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
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_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_229
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_230
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_231
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_232
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_233
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_IMMEDIATE_eax &STRING_234
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_235
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_236
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_237
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_238
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_239
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_240
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_241
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_242
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_243
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_244
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_245
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_246
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_247
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_return_result_0
|
|
|
|
:ELSE_return_result_0
|
|
|
|
:_END_IF_return_result_0
|
|
|
|
LOAD_IMMEDIATE_eax &STRING_248
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_249
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_return_result_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_return_result_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_return_result_1
|
|
JUMP %FOR_THEN_return_result_1
|
|
:FOR_ITER_return_result_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_return_result_1
|
|
:FOR_THEN_return_result_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_250
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_ITER_return_result_1
|
|
:FOR_END_return_result_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_251
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #frame
|
|
:WHILE_recursive_statement_0
|
|
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_252
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %END_WHILE_recursive_statement_0
|
|
|
|
# THEN_while_recursive_statement_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
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_1
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_recursive_statement_1
|
|
# Defining local i
|
|
PUSH_eax #i
|
|
# FOR_initialization_recursive_statement_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
:FOR_recursive_statement_2
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %FOR_END_recursive_statement_2
|
|
JUMP %FOR_THEN_recursive_statement_2
|
|
:FOR_ITER_recursive_statement_2
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_recursive_statement_2
|
|
:FOR_THEN_recursive_statement_2
|
|
# IF_recursive_statement_3
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_253
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_recursive_statement_3
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_254
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_recursive_statement_3
|
|
:ELSE_recursive_statement_3
|
|
:_END_IF_recursive_statement_3
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %FOR_ITER_recursive_statement_2
|
|
:FOR_END_recursive_statement_2
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_recursive_statement_1
|
|
:ELSE_recursive_statement_1
|
|
:_END_IF_recursive_statement_1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_recursive_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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 #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_255
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_statement_1
|
|
:ELSE_statement_1
|
|
# IF_statement_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
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 #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
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 #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_lookup
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
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 #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_lookup_type
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
POP_ebx # _common_recursion
|
|
AND_eax_ebx
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_256
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_2
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_collect_local
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_2
|
|
:ELSE_statement_2
|
|
# IF_statement_3
|
|
LOAD_IMMEDIATE_eax &STRING_257
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_3
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_process_if
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_3
|
|
:ELSE_statement_3
|
|
# IF_statement_4
|
|
LOAD_IMMEDIATE_eax &STRING_258
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_process_do
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_4
|
|
:ELSE_statement_4
|
|
# IF_statement_5
|
|
LOAD_IMMEDIATE_eax &STRING_259
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_5
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_process_while
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_5
|
|
:ELSE_statement_5
|
|
# IF_statement_6
|
|
LOAD_IMMEDIATE_eax &STRING_260
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_6
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_process_for
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_6
|
|
:ELSE_statement_6
|
|
# IF_statement_7
|
|
LOAD_IMMEDIATE_eax &STRING_261
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_7
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_process_asm
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_7
|
|
:ELSE_statement_7
|
|
# IF_statement_8
|
|
LOAD_IMMEDIATE_eax &STRING_262
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_263
|
|
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_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_264
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_IMMEDIATE_eax &STRING_265
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_266
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_statement_8
|
|
:ELSE_statement_8
|
|
# IF_statement_9
|
|
LOAD_IMMEDIATE_eax &STRING_267
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_9
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_return_result
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_statement_9
|
|
:ELSE_statement_9
|
|
# IF_statement_10
|
|
LOAD_IMMEDIATE_eax &STRING_268
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_10
|
|
# IF_statement_11
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_11
|
|
LOAD_IMMEDIATE_eax &STRING_269
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_statement_11
|
|
:ELSE_statement_11
|
|
:_END_IF_statement_11
|
|
# Defining local i
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %20
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #i
|
|
:WHILE_statement_12
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_locals
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_statement_12
|
|
# THEN_while_statement_12
|
|
# IF_statement_13
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_13
|
|
JUMP %END_WHILE_statement_12
|
|
JUMP %_END_IF_statement_13
|
|
:ELSE_statement_13
|
|
:_END_IF_statement_13
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_270
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %WHILE_statement_12
|
|
:END_WHILE_statement_12
|
|
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_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_271
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_break_target
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_272
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_273
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_274
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_statement_10
|
|
:ELSE_statement_10
|
|
# IF_statement_14
|
|
LOAD_IMMEDIATE_eax &STRING_275
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_statement_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
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_276
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_277
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_278
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_statement_14
|
|
:ELSE_statement_14
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_expression
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &STRING_279
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_280
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_require_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
:_END_IF_statement_14
|
|
:_END_IF_statement_10
|
|
:_END_IF_statement_9
|
|
:_END_IF_statement_8
|
|
:_END_IF_statement_7
|
|
:_END_IF_statement_6
|
|
:_END_IF_statement_5
|
|
:_END_IF_statement_4
|
|
:_END_IF_statement_3
|
|
:_END_IF_statement_2
|
|
:_END_IF_statement_1
|
|
:_END_IF_statement_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
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
|
|
LOAD_IMMEDIATE_eax &STRING_281
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
PUSH_eax #type_size
|
|
# IF_collect_arguments_1
|
|
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_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %4
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_collect_arguments_1
|
|
:ELSE_collect_arguments_1
|
|
# 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 %44
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_2
|
|
# Defining local a
|
|
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_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #a
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %16
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
POP_ebx # _recursive_statement_locals
|
|
JUMP %_END_IF_collect_arguments_2
|
|
:ELSE_collect_arguments_2
|
|
:_END_IF_collect_arguments_2
|
|
:_END_IF_collect_arguments_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
|
|
# 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
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_collect_arguments_3
|
|
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_3
|
|
:ELSE_collect_arguments_3
|
|
:_END_IF_collect_arguments_3
|
|
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
|
|
# Defining local essential
|
|
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 #essential
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_function
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_current_count
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %0
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# Defining local func
|
|
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 %1
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %28
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_calloc
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #func
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %12
|
|
ADD_ebx_to_eax
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_collect_arguments
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_function_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# 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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_282
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_283
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_284
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_285
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_statement
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_declare_function_1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_286
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_declare_function_1
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_287
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_declare_function_1
|
|
:ELSE_declare_function_1
|
|
:_END_IF_declare_function_1
|
|
:_END_IF_declare_function_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function program
|
|
:FUNCTION_program
|
|
# Defining local type_size
|
|
PUSH_eax #type_size
|
|
:WHILE_program_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETNE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %END_WHILE_program_0
|
|
|
|
# THEN_while_program_0
|
|
|
|
:new_type #C goto label
|
|
# IF_program_1
|
|
LOAD_IMMEDIATE_eax &STRING_288
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
TEST
|
|
JUMP_EQ %ELSE_program_1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_constant_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
# 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
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_1
|
|
:ELSE_program_1
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
CALL_IMMEDIATE %FUNCTION_type_name
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_program_2
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_program_2
|
|
JUMP %new_type
|
|
JUMP %_END_IF_program_2
|
|
:ELSE_program_2
|
|
:_END_IF_program_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
|
|
# IF_program_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 %59
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_program_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
PUSH_eax #_common_recursion
|
|
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_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_symbol_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_sym_declare
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_289
|
|
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_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_290
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_prepend_string
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &STRING_291
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_emit
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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_3
|
|
:ELSE_program_3
|
|
# IF_program_4
|
|
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_program_4
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_declare_function
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_program_4
|
|
:ELSE_program_4
|
|
LOAD_IMMEDIATE_eax &STRING_292
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_293
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
CALL_IMMEDIATE %FUNCTION_line_error
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
:_END_IF_program_4
|
|
:_END_IF_program_3
|
|
:_END_IF_program_1
|
|
JUMP %WHILE_program_0
|
|
|
|
:END_WHILE_program_0
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _return_result_locals
|
|
RETURN
|
|
# Defining function recursive_output
|
|
:FUNCTION_recursive_output
|
|
# IF_recursive_output_0
|
|
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
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
|
|
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
# looking up offset
|
|
# -> offset calculation
|
|
LOAD_IMMEDIATE_ebx %8
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
RETURN
|
|
# Defining function main
|
|
:FUNCTION_main
|
|
# 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_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
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_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_main_1
|
|
:ELSE_main_1
|
|
# IF_main_2
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_294
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_295
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_2
|
|
# Defining local name
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_296
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_fopen
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_main_3
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_3
|
|
LOAD_IMMEDIATE_eax &STRING_297
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_298
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_3
|
|
:ELSE_main_3
|
|
:_END_IF_main_3
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_read_all_tokens
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_4
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_299
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_300
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_4
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
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_301
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_fopen
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
# IF_main_5
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_5
|
|
LOAD_IMMEDIATE_eax &STRING_302
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
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
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_303
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_5
|
|
:ELSE_main_5
|
|
:_END_IF_main_5
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_main_4
|
|
:ELSE_main_4
|
|
# IF_main_6
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_304
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_305
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_6
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax %1
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %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_main_6
|
|
:ELSE_main_6
|
|
# IF_main_7
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_306
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_307
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_7
|
|
LOAD_IMMEDIATE_eax &STRING_308
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_7
|
|
:ELSE_main_7
|
|
# IF_main_8
|
|
LOAD_EFFECTIVE_ADDRESS %24
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %4
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_309
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %28
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %8
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
SAL_eax_Immediate8 !2
|
|
ADD_ebx_to_eax
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &STRING_310
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_match
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
OR_eax_ebx
|
|
TEST
|
|
JUMP_EQ %ELSE_main_8
|
|
LOAD_IMMEDIATE_eax &STRING_311
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_8
|
|
:ELSE_main_8
|
|
LOAD_IMMEDIATE_eax &STRING_312
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
:_END_IF_main_8
|
|
:_END_IF_main_7
|
|
:_END_IF_main_6
|
|
:_END_IF_main_4
|
|
:_END_IF_main_2
|
|
:_END_IF_main_1
|
|
JUMP %WHILE_main_0
|
|
|
|
:END_WHILE_main_0
|
|
|
|
# IF_main_9
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
CMP
|
|
SETE
|
|
MOVEZBL
|
|
TEST
|
|
JUMP_EQ %ELSE_main_9
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
LOAD_IMMEDIATE_eax &STRING_313
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_read_all_tokens
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
JUMP %_END_IF_main_9
|
|
:ELSE_main_9
|
|
:_END_IF_main_9
|
|
# IF_main_10
|
|
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_10
|
|
LOAD_IMMEDIATE_eax &STRING_314
|
|
PUSH_eax #_process_expression1
|
|
LOAD_IMMEDIATE_eax %2
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_exit
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_10
|
|
:ELSE_main_10
|
|
:_END_IF_main_10
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
PUSH_eax #_common_recursion
|
|
LOAD_IMMEDIATE_eax &GLOBAL_global_token
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_reverse_list
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _common_recursion
|
|
STORE_INTEGER
|
|
CALL_IMMEDIATE %FUNCTION_initialize_types
|
|
# Defining local output_list
|
|
LOAD_IMMEDIATE_eax %0
|
|
PUSH_eax #_process_expression1
|
|
CALL_IMMEDIATE %FUNCTION_program
|
|
POP_ebx # _process_expression_locals
|
|
PUSH_eax #output_list
|
|
LOAD_IMMEDIATE_eax &STRING_315
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_EFFECTIVE_ADDRESS %0
|
|
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# IF_main_11
|
|
LOAD_EFFECTIVE_ADDRESS %16
|
|
LOAD_INTEGER
|
|
TEST
|
|
JUMP_EQ %ELSE_main_11
|
|
LOAD_IMMEDIATE_eax &STRING_316
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_11
|
|
:ELSE_main_11
|
|
:_END_IF_main_11
|
|
LOAD_IMMEDIATE_eax &STRING_317
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_globals_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &STRING_318
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
LOAD_IMMEDIATE_eax &GLOBAL_strings_list
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_recursive_output
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
# IF_main_12
|
|
LOAD_IMMEDIATE_eax %1
|
|
PUSH_eax #_common_recursion
|
|
LOAD_EFFECTIVE_ADDRESS %20
|
|
LOAD_INTEGER
|
|
POP_ebx # _common_recursion
|
|
XOR_ebx_eax_into_eax
|
|
TEST
|
|
JUMP_EQ %ELSE_main_12
|
|
LOAD_IMMEDIATE_eax &STRING_319
|
|
PUSH_eax #_process_expression1
|
|
LOAD_EFFECTIVE_ADDRESS %12
|
|
LOAD_INTEGER
|
|
PUSH_eax #_process_expression2
|
|
CALL_IMMEDIATE %FUNCTION_file_print
|
|
POP_ebx # _process_expression_locals
|
|
POP_ebx # _process_expression_locals
|
|
JUMP %_END_IF_main_12
|
|
:ELSE_main_12
|
|
:_END_IF_main_12
|
|
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
|
|
|
|
# Program global variables
|
|
|
|
:GLOBAL_global_types
|
|
NOP
|
|
:GLOBAL_global_token
|
|
NOP
|
|
:GLOBAL_strings_list
|
|
NOP
|
|
:GLOBAL_globals_list
|
|
NOP
|
|
:GLOBAL_input
|
|
NOP
|
|
:GLOBAL_token
|
|
NOP
|
|
:GLOBAL_line
|
|
NOP
|
|
:GLOBAL_file
|
|
NOP
|
|
:GLOBAL_string_index
|
|
NOP
|
|
:GLOBAL_member_size
|
|
NOP
|
|
:GLOBAL_global_symbol_list
|
|
NOP
|
|
:GLOBAL_global_function_list
|
|
NOP
|
|
:GLOBAL_global_constant_list
|
|
NOP
|
|
:GLOBAL_break_locals
|
|
NOP
|
|
:GLOBAL_current_target
|
|
NOP
|
|
:GLOBAL_break_target
|
|
NOP
|
|
:GLOBAL_current_function
|
|
NOP
|
|
:GLOBAL_current_count
|
|
NOP
|
|
:GLOBAL_string_num
|
|
NOP
|
|
:GLOBAL_last_type
|
|
NOP
|
|
|
|
# Program strings
|
|
|
|
:STRING_0
|
|
|
|
"Tried to print non-hex number
|
|
"
|
|
:STRING_1
|
|
"Unknown escape recieved: "
|
|
:STRING_2
|
|
" Unable to process
|
|
"
|
|
:STRING_3
|
|
"0123456789ABCDEF"
|
|
:STRING_4
|
|
"void"
|
|
:STRING_5
|
|
"int"
|
|
:STRING_6
|
|
"char*"
|
|
:STRING_7
|
|
"char"
|
|
:STRING_8
|
|
"FILE"
|
|
:STRING_9
|
|
"FUNCTION"
|
|
:STRING_10
|
|
"unsigned"
|
|
:STRING_11
|
|
"ERROR in build_union
|
|
Missing {
|
|
"
|
|
:STRING_12
|
|
"{"
|
|
:STRING_13
|
|
"ERROR in build_union
|
|
Missing ;
|
|
"
|
|
:STRING_14
|
|
";"
|
|
:STRING_15
|
|
' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 7B 0A 00'
|
|
:STRING_16
|
|
"{"
|
|
:STRING_17
|
|
"union"
|
|
:STRING_18
|
|
' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 3B 0A 00'
|
|
:STRING_19
|
|
";"
|
|
:STRING_20
|
|
' 45 52 52 4F 52 20 69 6E 20 63 72 65 61 74 65 5F 73 74 72 75 63 74 0A 20 4D 69 73 73 69 6E 67 20 3B 0A 00'
|
|
:STRING_21
|
|
";"
|
|
:STRING_22
|
|
"struct"
|
|
:STRING_23
|
|
"Unknown type "
|
|
:STRING_24
|
|
' 0A 00'
|
|
:STRING_25
|
|
"In file: "
|
|
:STRING_26
|
|
" On line: "
|
|
:STRING_27
|
|
"main"
|
|
:STRING_28
|
|
"argc"
|
|
:STRING_29
|
|
"argv"
|
|
:STRING_30
|
|
" does not exist in function "
|
|
:STRING_31
|
|
"
|
|
"
|
|
:STRING_32
|
|
"ERROR in process_expression_list
|
|
No ( was found
|
|
"
|
|
:STRING_33
|
|
"("
|
|
:STRING_34
|
|
"PUSH_eax #_process_expression1
|
|
"
|
|
:STRING_35
|
|
"PUSH_eax #_process_expression2
|
|
"
|
|
:STRING_36
|
|
"ERROR in process_expression_list
|
|
No ) was found
|
|
"
|
|
:STRING_37
|
|
")"
|
|
:STRING_38
|
|
"LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_39
|
|
"
|
|
LOAD_INTEGER
|
|
CALL_eax
|
|
"
|
|
:STRING_40
|
|
"LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_41
|
|
"
|
|
LOAD_INTEGER
|
|
CALL_eax
|
|
"
|
|
:STRING_42
|
|
"CALL_IMMEDIATE %FUNCTION_"
|
|
:STRING_43
|
|
"POP_ebx # _process_expression_locals
|
|
"
|
|
:STRING_44
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_45
|
|
"FUNCTION"
|
|
:STRING_46
|
|
"("
|
|
:STRING_47
|
|
"#Loading address of function
|
|
LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_48
|
|
"
|
|
LOAD_INTEGER
|
|
"
|
|
:STRING_49
|
|
"LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_50
|
|
"
|
|
"
|
|
:STRING_51
|
|
"="
|
|
:STRING_52
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_53
|
|
"FUNCTION"
|
|
:STRING_54
|
|
"("
|
|
:STRING_55
|
|
"#Loading address of function
|
|
LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_56
|
|
"
|
|
LOAD_INTEGER
|
|
"
|
|
:STRING_57
|
|
"LOAD_EFFECTIVE_ADDRESS %"
|
|
:STRING_58
|
|
"
|
|
"
|
|
:STRING_59
|
|
"="
|
|
:STRING_60
|
|
"argv"
|
|
:STRING_61
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_62
|
|
"("
|
|
:STRING_63
|
|
"LOAD_IMMEDIATE_eax &FUNCTION_"
|
|
:STRING_64
|
|
"LOAD_IMMEDIATE_eax &GLOBAL_"
|
|
:STRING_65
|
|
"="
|
|
:STRING_66
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_67
|
|
" is not a defined symbol
|
|
"
|
|
:STRING_68
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_69
|
|
"Error in Primary expression
|
|
Didn't get )
|
|
"
|
|
:STRING_70
|
|
")"
|
|
:STRING_71
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_72
|
|
"
|
|
"
|
|
:STRING_73
|
|
"LOAD_IMMEDIATE_eax &STRING_"
|
|
:STRING_74
|
|
"
|
|
"
|
|
:STRING_75
|
|
' 3A 53 54 52 49 4E 47 5F 00'
|
|
:STRING_76
|
|
"
|
|
"
|
|
:STRING_77
|
|
"Recieved "
|
|
:STRING_78
|
|
" in primary_expr
|
|
"
|
|
:STRING_79
|
|
"PUSH_eax #_common_recursion
|
|
"
|
|
:STRING_80
|
|
"POP_ebx # _common_recursion
|
|
"
|
|
:STRING_81
|
|
"SAL_eax_Immediate8 !"
|
|
:STRING_82
|
|
"
|
|
"
|
|
:STRING_83
|
|
"ADD_ebx_to_eax
|
|
"
|
|
:STRING_84
|
|
"="
|
|
:STRING_85
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_86
|
|
"LOAD_BYTE
|
|
"
|
|
:STRING_87
|
|
"ERROR in postfix_expr
|
|
Missing ]
|
|
"
|
|
:STRING_88
|
|
"]"
|
|
:STRING_89
|
|
"->"
|
|
:STRING_90
|
|
"# looking up offset
|
|
"
|
|
:STRING_91
|
|
"ERROR in postfix_expr "
|
|
:STRING_92
|
|
"->"
|
|
:STRING_93
|
|
" does not exist
|
|
"
|
|
:STRING_94
|
|
"# -> offset calculation
|
|
"
|
|
:STRING_95
|
|
"LOAD_IMMEDIATE_ebx %"
|
|
:STRING_96
|
|
"
|
|
ADD_ebx_to_eax
|
|
"
|
|
:STRING_97
|
|
"="
|
|
:STRING_98
|
|
"LOAD_INTEGER
|
|
"
|
|
:STRING_99
|
|
"-"
|
|
:STRING_100
|
|
"LOAD_IMMEDIATE_eax %0
|
|
"
|
|
:STRING_101
|
|
"SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
"
|
|
:STRING_102
|
|
"!"
|
|
:STRING_103
|
|
"LOAD_IMMEDIATE_eax %1
|
|
"
|
|
:STRING_104
|
|
"XOR_ebx_eax_into_eax
|
|
"
|
|
:STRING_105
|
|
"sizeof"
|
|
:STRING_106
|
|
"ERROR in unary_expr
|
|
Missing (
|
|
"
|
|
:STRING_107
|
|
"("
|
|
:STRING_108
|
|
"ERROR in unary_expr
|
|
Missing )
|
|
"
|
|
:STRING_109
|
|
")"
|
|
:STRING_110
|
|
"LOAD_IMMEDIATE_eax %"
|
|
:STRING_111
|
|
"
|
|
"
|
|
:STRING_112
|
|
"+"
|
|
:STRING_113
|
|
"ADD_ebx_to_eax
|
|
"
|
|
:STRING_114
|
|
"-"
|
|
:STRING_115
|
|
"SUBTRACT_eax_from_ebx_into_ebx
|
|
MOVE_ebx_to_eax
|
|
"
|
|
:STRING_116
|
|
"*"
|
|
:STRING_117
|
|
"MULTIPLY_eax_by_ebx_into_eax
|
|
"
|
|
:STRING_118
|
|
"/"
|
|
:STRING_119
|
|
"XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
DIVIDE_eax_by_ebx_into_eax
|
|
"
|
|
:STRING_120
|
|
"%"
|
|
:STRING_121
|
|
"XCHG_eax_ebx
|
|
LOAD_IMMEDIATE_edx %0
|
|
MODULUS_eax_from_ebx_into_ebx
|
|
MOVE_edx_to_eax
|
|
"
|
|
:STRING_122
|
|
"<<"
|
|
:STRING_123
|
|
"COPY_eax_to_ecx
|
|
POP_eax
|
|
SAL_eax_cl
|
|
"
|
|
:STRING_124
|
|
">>"
|
|
:STRING_125
|
|
"COPY_eax_to_ecx
|
|
POP_eax
|
|
SAR_eax_cl
|
|
"
|
|
:STRING_126
|
|
"<"
|
|
:STRING_127
|
|
"CMP
|
|
SETL
|
|
MOVEZBL
|
|
"
|
|
:STRING_128
|
|
"<="
|
|
:STRING_129
|
|
"CMP
|
|
SETLE
|
|
MOVEZBL
|
|
"
|
|
:STRING_130
|
|
">="
|
|
:STRING_131
|
|
"CMP
|
|
SETGE
|
|
MOVEZBL
|
|
"
|
|
:STRING_132
|
|
">"
|
|
:STRING_133
|
|
"CMP
|
|
SETG
|
|
MOVEZBL
|
|
"
|
|
:STRING_134
|
|
"=="
|
|
:STRING_135
|
|
"CMP
|
|
SETE
|
|
MOVEZBL
|
|
"
|
|
:STRING_136
|
|
"!="
|
|
:STRING_137
|
|
"CMP
|
|
SETNE
|
|
MOVEZBL
|
|
"
|
|
:STRING_138
|
|
"AND_eax_ebx
|
|
"
|
|
:STRING_139
|
|
"OR_eax_ebx
|
|
"
|
|
:STRING_140
|
|
"XOR_ebx_eax_into_eax
|
|
"
|
|
:STRING_141
|
|
"]"
|
|
:STRING_142
|
|
"STORE_CHAR
|
|
"
|
|
:STRING_143
|
|
"STORE_INTEGER
|
|
"
|
|
:STRING_144
|
|
"STORE_INTEGER
|
|
"
|
|
:STRING_145
|
|
"# Defining local "
|
|
:STRING_146
|
|
"
|
|
"
|
|
:STRING_147
|
|
"ERROR in collect_local
|
|
Missing ;
|
|
"
|
|
:STRING_148
|
|
";"
|
|
:STRING_149
|
|
"PUSH_eax #"
|
|
:STRING_150
|
|
"
|
|
"
|
|
:STRING_151
|
|
"# IF_"
|
|
:STRING_152
|
|
"_"
|
|
:STRING_153
|
|
"
|
|
"
|
|
:STRING_154
|
|
"ERROR in process_if
|
|
MISSING (
|
|
"
|
|
:STRING_155
|
|
"("
|
|
:STRING_156
|
|
"TEST
|
|
JUMP_EQ %ELSE_"
|
|
:STRING_157
|
|
"_"
|
|
:STRING_158
|
|
"
|
|
"
|
|
:STRING_159
|
|
"ERROR in process_if
|
|
MISSING )
|
|
"
|
|
:STRING_160
|
|
")"
|
|
:STRING_161
|
|
"JUMP %_END_IF_"
|
|
:STRING_162
|
|
"_"
|
|
:STRING_163
|
|
' 0A 3A 45 4C 53 45 5F 00'
|
|
:STRING_164
|
|
"_"
|
|
:STRING_165
|
|
"
|
|
"
|
|
:STRING_166
|
|
"else"
|
|
:STRING_167
|
|
' 3A 5F 45 4E 44 5F 49 46 5F 00'
|
|
:STRING_168
|
|
"_"
|
|
:STRING_169
|
|
"
|
|
"
|
|
:STRING_170
|
|
"FOR_END_"
|
|
:STRING_171
|
|
"_"
|
|
:STRING_172
|
|
"# FOR_initialization_"
|
|
:STRING_173
|
|
"_"
|
|
:STRING_174
|
|
"
|
|
"
|
|
:STRING_175
|
|
"ERROR in process_for
|
|
MISSING (
|
|
"
|
|
:STRING_176
|
|
"("
|
|
:STRING_177
|
|
";"
|
|
:STRING_178
|
|
' 3A 46 4F 52 5F 00'
|
|
:STRING_179
|
|
"_"
|
|
:STRING_180
|
|
"
|
|
"
|
|
:STRING_181
|
|
"ERROR in process_for
|
|
MISSING ;1
|
|
"
|
|
:STRING_182
|
|
";"
|
|
:STRING_183
|
|
"TEST
|
|
JUMP_EQ %FOR_END_"
|
|
:STRING_184
|
|
"_"
|
|
:STRING_185
|
|
"
|
|
JUMP %FOR_THEN_"
|
|
:STRING_186
|
|
"_"
|
|
:STRING_187
|
|
' 0A 3A 46 4F 52 5F 49 54 45 52 5F 00'
|
|
:STRING_188
|
|
"_"
|
|
:STRING_189
|
|
"
|
|
"
|
|
:STRING_190
|
|
"ERROR in process_for
|
|
MISSING ;2
|
|
"
|
|
:STRING_191
|
|
";"
|
|
:STRING_192
|
|
"JUMP %FOR_"
|
|
:STRING_193
|
|
"_"
|
|
:STRING_194
|
|
' 0A 3A 46 4F 52 5F 54 48 45 4E 5F 00'
|
|
:STRING_195
|
|
"_"
|
|
:STRING_196
|
|
"
|
|
"
|
|
:STRING_197
|
|
"ERROR in process_for
|
|
MISSING )
|
|
"
|
|
:STRING_198
|
|
")"
|
|
:STRING_199
|
|
"JUMP %FOR_ITER_"
|
|
:STRING_200
|
|
"_"
|
|
:STRING_201
|
|
' 0A 3A 46 4F 52 5F 45 4E 44 5F 00'
|
|
:STRING_202
|
|
"_"
|
|
:STRING_203
|
|
"
|
|
"
|
|
:STRING_204
|
|
"ERROR in process_asm
|
|
MISSING (
|
|
"
|
|
:STRING_205
|
|
"("
|
|
:STRING_206
|
|
"
|
|
"
|
|
:STRING_207
|
|
"ERROR in process_asm
|
|
MISSING )
|
|
"
|
|
:STRING_208
|
|
")"
|
|
:STRING_209
|
|
"ERROR in process_asm
|
|
MISSING ;
|
|
"
|
|
:STRING_210
|
|
";"
|
|
:STRING_211
|
|
"DO_END_"
|
|
:STRING_212
|
|
"_"
|
|
:STRING_213
|
|
' 3A 44 4F 5F 00'
|
|
:STRING_214
|
|
"_"
|
|
:STRING_215
|
|
"
|
|
"
|
|
:STRING_216
|
|
"ERROR in process_do
|
|
MISSING while
|
|
"
|
|
:STRING_217
|
|
"while"
|
|
:STRING_218
|
|
"ERROR in process_do
|
|
MISSING (
|
|
"
|
|
:STRING_219
|
|
"("
|
|
:STRING_220
|
|
"ERROR in process_do
|
|
MISSING )
|
|
"
|
|
:STRING_221
|
|
")"
|
|
:STRING_222
|
|
"ERROR in process_do
|
|
MISSING ;
|
|
"
|
|
:STRING_223
|
|
";"
|
|
:STRING_224
|
|
"TEST
|
|
JUMP_NE %DO_"
|
|
:STRING_225
|
|
"_"
|
|
:STRING_226
|
|
' 0A 3A 44 4F 5F 45 4E 44 5F 00'
|
|
:STRING_227
|
|
"_"
|
|
:STRING_228
|
|
"
|
|
"
|
|
:STRING_229
|
|
"END_WHILE_"
|
|
:STRING_230
|
|
"_"
|
|
:STRING_231
|
|
' 3A 57 48 49 4C 45 5F 00'
|
|
:STRING_232
|
|
"_"
|
|
:STRING_233
|
|
"
|
|
"
|
|
:STRING_234
|
|
"ERROR in process_while
|
|
MISSING (
|
|
"
|
|
:STRING_235
|
|
"("
|
|
:STRING_236
|
|
"TEST
|
|
JUMP_EQ %END_WHILE_"
|
|
:STRING_237
|
|
"_"
|
|
:STRING_238
|
|
"
|
|
# THEN_while_"
|
|
:STRING_239
|
|
"_"
|
|
:STRING_240
|
|
"
|
|
"
|
|
:STRING_241
|
|
"ERROR in process_while
|
|
MISSING )
|
|
"
|
|
:STRING_242
|
|
")"
|
|
:STRING_243
|
|
"JUMP %WHILE_"
|
|
:STRING_244
|
|
"_"
|
|
:STRING_245
|
|
' 0A 3A 45 4E 44 5F 57 48 49 4C 45 5F 00'
|
|
:STRING_246
|
|
"_"
|
|
:STRING_247
|
|
"
|
|
"
|
|
:STRING_248
|
|
"ERROR in return_result
|
|
MISSING ;
|
|
"
|
|
:STRING_249
|
|
";"
|
|
:STRING_250
|
|
"POP_ebx # _return_result_locals
|
|
"
|
|
:STRING_251
|
|
"RETURN
|
|
"
|
|
:STRING_252
|
|
"}"
|
|
:STRING_253
|
|
"RETURN
|
|
"
|
|
:STRING_254
|
|
"POP_ebx # _recursive_statement_locals
|
|
"
|
|
:STRING_255
|
|
" #C goto label
|
|
"
|
|
:STRING_256
|
|
"struct"
|
|
:STRING_257
|
|
"if"
|
|
:STRING_258
|
|
"do"
|
|
:STRING_259
|
|
"while"
|
|
:STRING_260
|
|
"for"
|
|
:STRING_261
|
|
"asm"
|
|
:STRING_262
|
|
"goto"
|
|
:STRING_263
|
|
"JUMP %"
|
|
:STRING_264
|
|
"
|
|
"
|
|
:STRING_265
|
|
"ERROR in statement
|
|
Missing ;
|
|
"
|
|
:STRING_266
|
|
";"
|
|
:STRING_267
|
|
"return"
|
|
:STRING_268
|
|
"break"
|
|
:STRING_269
|
|
"Not inside of a loop or case statement"
|
|
:STRING_270
|
|
"POP_ebx # break_cleanup_locals
|
|
"
|
|
:STRING_271
|
|
"JUMP %"
|
|
:STRING_272
|
|
"
|
|
"
|
|
:STRING_273
|
|
"ERROR in statement
|
|
Missing ;
|
|
"
|
|
:STRING_274
|
|
";"
|
|
:STRING_275
|
|
"continue"
|
|
:STRING_276
|
|
"
|
|
#continue statement
|
|
"
|
|
:STRING_277
|
|
"ERROR in statement
|
|
Missing ;
|
|
"
|
|
:STRING_278
|
|
";"
|
|
:STRING_279
|
|
"ERROR in statement
|
|
MISSING ;
|
|
"
|
|
:STRING_280
|
|
";"
|
|
:STRING_281
|
|
")"
|
|
:STRING_282
|
|
"# Defining function "
|
|
:STRING_283
|
|
"
|
|
"
|
|
:STRING_284
|
|
' 3A 46 55 4E 43 54 49 4F 4E 5F 00'
|
|
:STRING_285
|
|
"
|
|
"
|
|
:STRING_286
|
|
"RETURN
|
|
"
|
|
:STRING_287
|
|
"RETURN
|
|
"
|
|
:STRING_288
|
|
"CONSTANT"
|
|
:STRING_289
|
|
' 3A 47 4C 4F 42 41 4C 5F 00'
|
|
:STRING_290
|
|
"
|
|
"
|
|
:STRING_291
|
|
"NOP
|
|
"
|
|
:STRING_292
|
|
"Recieved "
|
|
:STRING_293
|
|
" in program
|
|
"
|
|
:STRING_294
|
|
"-f"
|
|
:STRING_295
|
|
"--file"
|
|
:STRING_296
|
|
"r"
|
|
:STRING_297
|
|
"Unable to open for reading file: "
|
|
:STRING_298
|
|
' 0A 20 41 62 6F 72 74 69 6E 67 20 74 6F 20 61 76 6F 69 64 20 70 72 6F 62 6C 65 6D 73 0A 00'
|
|
:STRING_299
|
|
"-o"
|
|
:STRING_300
|
|
"--output"
|
|
:STRING_301
|
|
"w"
|
|
:STRING_302
|
|
"Unable to open for writing file: "
|
|
:STRING_303
|
|
' 0A 20 41 62 6F 72 74 69 6E 67 20 74 6F 20 61 76 6F 69 64 20 70 72 6F 62 6C 65 6D 73 0A 00'
|
|
:STRING_304
|
|
"-g"
|
|
:STRING_305
|
|
"--debug"
|
|
:STRING_306
|
|
"-h"
|
|
:STRING_307
|
|
"--help"
|
|
:STRING_308
|
|
' 20 2D 66 20 69 6E 70 75 74 20 66 69 6C 65 0A 20 2D 6F 20 6F 75 74 70 75 74 20 66 69 6C 65 0A 20 2D 2D 68 65 6C 70 20 66 6F 72 20 74 68 69 73 20 6D 65 73 73 61 67 65 0A 20 2D 2D 76 65 72 73 69 6F 6E 20 66 6F 72 20 66 69 6C 65 20 76 65 72 73 69 6F 6E 0A 00'
|
|
:STRING_309
|
|
"-V"
|
|
:STRING_310
|
|
"--version"
|
|
:STRING_311
|
|
' 42 61 73 69 63 20 74 65 73 74 20 76 65 72 73 69 6F 6E 20 30 2E 30 2E 30 2E 31 61 0A 00'
|
|
:STRING_312
|
|
' 55 4E 4B 4E 4F 57 4E 20 41 52 47 55 4D 45 4E 54 0A 00'
|
|
:STRING_313
|
|
"STDIN"
|
|
:STRING_314
|
|
"Either no input files were given or they were empty
|
|
"
|
|
:STRING_315
|
|
"
|
|
# Core program
|
|
|
|
"
|
|
:STRING_316
|
|
' 0A 3A 45 4C 46 5F 64 61 74 61 0A 00'
|
|
:STRING_317
|
|
"
|
|
# Program global variables
|
|
|
|
"
|
|
:STRING_318
|
|
"
|
|
# Program strings
|
|
|
|
"
|
|
:STRING_319
|
|
' 0A 3A 45 4C 46 5F 65 6E 64 0A 00'
|
|
|
|
:ELF_end
|