# Encode string "Items on stack: " (0)
push 0
push 16
set
push 1
push 73
set
push 2
push 116
set
push 3
push 101
set
push 4
push 109
set
push 5
push 115
set
push 6
push 32
set
push 7
push 111
set
push 8
push 110
set
push 9
push 32
set
push 10
push 115
set
push 11
push 116
set
push 12
push 97
set
push 13
push 99
set
push 14
push 107
set
push 15
push 58
set
push 16
push 32
set
# Encode string '' (17)
# HEAP[17] already equals 0.
# Encode string 'Number to add to stack: ' (18)
push 18
push 24
set
push 19
push 78
set
push 20
push 117
set
push 21
push 109
set
push 22
push 98
set
push 23
push 101
set
push 24
push 114
set
push 25
push 32
set
push 26
push 116
set
push 27
push 111
set
push 28
push 32
set
push 29
push 97
set
push 30
push 100
set
push 31
push 100
set
push 32
push 32
set
push 33
push 116
set
push 34
push 111
set
push 35
push 32
set
push 36
push 115
set
push 37
push 116
set
push 38
push 97
set
push 39
push 99
set
push 40
push 107
set
push 41
push 58
set
push 42
push 32
set
# Encode string 'Do want to add a number? ' (43)
push 43
push 25
set
push 44
push 68
set
push 45
push 111
set
push 46
push 32
set
push 47
push 119
set
push 48
push 97
set
push 49
push 110
set
push 50
push 116
set
push 51
push 32
set
push 52
push 116
set
push 53
push 111
set
push 54
push 32
set
push 55
push 97
set
push 56
push 100
set
push 57
push 100
set
push 58
push 32
set
push 59
push 97
set
push 60
push 32
set
push 61
push 110
set
push 62
push 117
set
push 63
push 109
set
push 64
push 98
set
push 65
push 101
set
push 66
push 114
set
push 67
push 63
set
push 68
push 32
set
# Encode string 'yn' (69)
push 69
push 2
set
push 70
push 121
set
push 71
push 110
set
# Encode string '\b' (72)
push 72
push 1
set
push 73
push 8
set
# Encode string ' ' (74)
push 74
push 1
set
push 75
push 32
set
# Encode string 'MENU\n====\n+ = Add\n- = Sub\n* = Mul\n
# / = Div\n% = Mod\nT = Top\nD = Dump\nQ = Quit\nChoice? ' (76)
push 76
push 84
set
push 77
push 77
set
push 78
push 69
set
push 79
push 78
set
push 80
push 85
set
push 81
push 10
set
push 82
push 61
set
push 83
push 61
set
push 84
push 61
set
push 85
push 61
set
push 86
push 10
set
push 87
push 43
set
push 88
push 32
set
push 89
push 61
set
push 90
push 32
set
push 91
push 65
set
push 92
push 100
set
push 93
push 100
set
push 94
push 10
set
push 95
push 45
set
push 96
push 32
set
push 97
push 61
set
push 98
push 32
set
push 99
push 83
set
push 100
push 117
set
push 101
push 98
set
push 102
push 10
set
push 103
push 42
set
push 104
push 32
set
push 105
push 61
set
push 106
push 32
set
push 107
push 77
set
push 108
push 117
set
push 109
push 108
set
push 110
push 10
set
push 111
push 47
set
push 112
push 32
set
push 113
push 61
set
push 114
push 32
set
push 115
push 68
set
push 116
push 105
set
push 117
push 118
set
push 118
push 10
set
push 119
push 37
set
push 120
push 32
set
push 121
push 61
set
push 122
push 32
set
push 123
push 77
set
push 124
push 111
set
push 125
push 100
set
push 126
push 10
set
push 127
push 84
set
push 128
push 32
set
push 129
push 61
set
push 130
push 32
set
push 131
push 84
set
push 132
push 111
set
push 133
push 112
set
push 134
push 10
set
push 135
push 68
set
push 136
push 32
set
push 137
push 61
set
push 138
push 32
set
push 139
push 68
set
push 140
push 117
set
push 141
push 109
set
push 142
push 112
set
push 143
push 10
set
push 144
push 81
set
push 145
push 32
set
push 146
push 61
set
push 147
push 32
set
push 148
push 81
set
push 149
push 117
set
push 150
push 105
set
push 151
push 116
set
push 152
push 10
set
push 153
push 67
set
push 154
push 104
set
push 155
push 111
set
push 156
push 105
set
push 157
push 99
set
push 158
push 101
set
push 159
push 63
set
push 160
push 32
set
# Encode string '+-*/%tdq' (161)
push 161
push 8
set
push 162
push 43
set
push 163
push 45
set
push 164
push 42
set
push 165
push 47
set
push 166
push 37
set
push 167
push 116
set
push 168
push 100
set
push 169
push 113
set
# Encode string 'Top: ' (170)
push 170
push 5
set
push 171
push 84
set
push 172
push 111
set
push 173
push 112
set
push 174
push 58
set
push 175
push 32
set
# Encode string 'Stack[' (176)
push 176
push 6
set
push 177
push 83
set
push 178
push 116
set
push 179
push 97
set
push 180
push 99
set
push 181
push 107
set
push 182
push 91
set
# Encode string '] = ' (183)
push 183
push 4
set
push 184
push 93
set
push 185
push 32
set
push 186
push 61
set
push 187
push 32
set
# Encode string 'Error: ' (188)
push 188
push 7
set
push 189
push 69
set
push 190
push 114
set
push 191
push 114
set
push 192
push 111
set
push 193
push 114
set
push 194
push 58
set
push 195
push 32
set
# Encode string 'DIV' (196)
push 196
push 3
set
push 197
push 68
set
push 198
push 73
set
push 199
push 86
set
# Encode string ' is illegal.' (200)
push 200
push 12
set
push 201
push 32
set
push 202
push 105
set
push 203
push 115
set
push 204
push 32
set
push 205
push 105
set
push 206
push 108
set
push 207
push 108
set
push 208
push 101
set
push 209
push 103
set
push 210
push 97
set
push 211
push 108
set
push 212
push 46
set
# Encode string 'MOD' (213)
push 213
push 3
set
push 214
push 77
set
push 215
push 79
set
push 216
push 68
set
# This is the main program loop.
# Stack starts at HEAP[217]
part "MAIN"
push 217
call "STACK_SIZE"
push 217
call "GET_INPUT"
goto "MAIN"
# def get_number(stack):
# print('Number to add to stack: ')
# number = int(input())
# append(stack, number)
part "GET_NUMBER"
push 18
call "PRINT"
push -1
copy
iint
get
call "APPEND"
back
# def append(stack, number):
# ptr = arg[0]
# val = get(ptr)
# val += 1
# set(prt, val)
# #
# a = stack
# b = stack
# b = get(stack)
# ptr = a + b
# set(ptr, number)
# del stack_ptr
part "APPEND"
# Increase stack size by one
copy 1
get
push 1
add
copy 2
swap
set
# Store number in the open spot.
copy 1
copy 2
get
add
swap
set
away
back
# def in_array(array, key):
# if len(array) <= 0:
# return 0
# offset = 1
# while offset - len(array) >= 0:
# ptr = array.ptr + offset
# if array[ptr] == key:
# return 1
# offset += 1
# return 0
part "IN_ARRAY"
# Line 1-2
copy 1
get
less "__IA_RET_1"
copy 1
get
zero "__IA_RET_1"
# Line 3
push 1
# Line 4
part "__IA_LOOP"
copy
copy 3
get
swap
sub
less "__IA_RET_2"
# Line 5
copy 2
copy 1
add
# Line 6
get
copy 2
sub
zero "__IA_RET_3"
# Line 8
push 1
add
goto "__IA_LOOP"
# Line 9
part "__IA_RET_3"
away
push 1
away 2
back
part "__IA_RET_2"
away
part "__IA_RET_1"
push 0
away 2
back
# def get_key_press(array):
# while True:
# key = getch()
# found = in_array(array, key)
# if found:
# return key
# if key == '\b':
# putch(' ')
# else:
# putch('\b')
# putch(' ')
# putch('\b')
part "GET_KEY_PRESS"
# Line 2
push -1
copy
ichr
get
# Line 3
copy 1
copy 1
call "IN_ARRAY"
# Line 4
zero "__GKP_FIX"
# Line 5
away 1
back
part "__GKP_FIX"
# Line 6
push 8
sub
zero "__GKP_PRINT_SPACE"
# Line 8-11
push 72
call "PRINT"
push 74
call "PRINT"
push 72
call "PRINT"
goto "GET_KEY_PRESS"
part "__GKP_PRINT_SPACE"
# Line 7
push 74
call "PRINT"
goto "GET_KEY_PRESS"
# def get_mode():
# print('Do want to add a number? ')
# key = get_key_press('yn')
# print()
# if key == 'y':
# return 1
# return 0
part "GET_MODE"
push 43
call "PRINT"
push 69
call "GET_KEY_PRESS"
push 17
call "PRINT_LINE"
push 121
sub
zero "__GM_RETURN"
push 0
back
part "__GM_RETURN"
push 1
back
# def add_array(array):
# array.len -= 1
# end_ptr = array.ptr + array.len
# last1 = array[end_ptr + 1]
# last2 = array[end_ptr]
# end, array = last1 + last2, array
# array[array.ptr + array.len] = end
part "ADD_ARRAY"
# Line 1
copy
copy
get
push 1
sub
set
# Line 2
copy
copy
get
add
# Line 3
copy
push 1
add
get
# Line 4
swap
get
# Line 5
add
swap
# Line 6
copy
get
add
swap
set
back
# def sub_array(array):
# array.len -= 1
# end_ptr = array.ptr + array.len
# last1 = array[end_ptr + 1]
# last2 = array[end_ptr]
# end, array = last2 - last1, array
# array[array.ptr + array.len] = end
part "SUB_ARRAY"
# Line 1
copy
copy
get
push 1
sub
set
# Line 2
copy
copy
get
add
# Line 3
copy
push 1
add
get
# Line 4
swap
get
# Line 5
swap
sub
swap
# Line 6
copy
get
add
swap
set
back
# def mul_array(array):
# array.len -= 1
# end_ptr = array.ptr + array.len
# last1 = array[end_ptr + 1]
# last2 = array[end_ptr]
# end, array = last1 * last2, array
# array[array.ptr + array.len] = end
part "MUL_ARRAY"
# Line 1
copy
copy
get
push 1
sub
set
# Line 2
copy
copy
get
add
# Line 3
copy
push 1
add
get
# Line 4
swap
get
# Line 5
mul
swap
# Line 6
copy
get
add
swap
set
back
# def show_last(array):
# print('Top: ')
# ptr = len(array) + array.ptr
# print(*ptr)
# print()
part "SHOW_LAST"
# Line 1
push 170
call "PRINT"
# Line 2
copy
get
add
# Line 3
get
oint
# Line 4
push 17
call "PRINT_LINE"
back
# def dump_array(array):
# if len(array) <= 0:
# return
# offset = 1
# while len(array) - offset >= 0:
# ptr = array.ptr + offset
# sys.stdout.write('Stack[')
# sys.stdout.write(str(offset))
# sys.stdout.write('] = ')
# sys.stdout.write(array[ptr])
# print()
# offset += 1
part "DUMP_ARRAY"
# Line 1-2
copy
get
less "__DA_RET_1"
copy
get
zero "__DA_RET_1"
# Line 3
push 1
# Line 4
part "__DA_LOOP"
copy
copy 2
get
swap
sub
less "__DA_RET_2"
# Line 5
copy 1
copy 1
add
# Line 6
push 176
call "PRINT"
# Line 7
copy 1
oint
# Line 8
push 183
call "PRINT"
# Line 9
get
oint
# Line 10
push 17
call "PRINT_LINE"
# Line 11
push 1
add
goto "__DA_LOOP"
part "__DA_RET_2"
away
part "__DA_RET_1"
away
back
# def div_array(array):
# last = array[-1]
# if last == 0:
# sys.stdout.write('Error: ')
# sys.stdout.write('DIV')
# sys.stdout.write_line(' is illegal.')
# return
# array.len -= 1
# end_ptr = array.ptr + array.len
# last1 = array[end_ptr + 1]
# last2 = array[end_ptr]
# end, array = last2 / last1, array
# array[array.ptr + array.len] = end
part "DIV_ARRAY"
# Line 1
copy
copy
get
add
get
# Line 2
zero "__DA_ZERO"
goto "__DA_OKAY"
part "__DA_ZERO"
# Line 3-5
push 188
call "PRINT"
push 196
call "PRINT"
push 200
call "PRINT_LINE"
# Line 6
away
back
part "__DA_OKAY"
# Line 7
copy
copy
get
push 1
sub
set
# Line 8
copy
copy
get
add
# Line 9
copy
push 1
add
get
# Line 10
swap
get
# Line 11
swap
div
swap
# Line 12
copy
get
add
swap
set
back
# def mod_array(array):
# last = array[-1]
# if last == 0:
# sys.stdout.write('Error: ')
# sys.stdout.write('MOD')
# sys.stdout.write_line(' is illegal.')
# return
# array.len -= 1
# end_ptr = array.ptr + array.len
# last1 = array[end_ptr + 1]
# last2 = array[end_ptr]
# end, array = last2 % last1, array
# array[array.ptr + array.len] = end
part "MOD_ARRAY"
# Line 1
copy
copy
get
add
get
# Line 2
zero "__MA_ZERO"
goto "__MA_OKAY"
part "__MA_ZERO"
# Line 3-5
push 188
call "PRINT"
push 213
call "PRINT"
push 200
call "PRINT_LINE"
# Line 6
away
back
part "__MA_OKAY"
# Line 7
copy
copy
get
push 1
sub
set
# Line 8
copy
copy
get
add
# Line 9
copy
push 1
add
get
# Line 10
swap
get
# Line 11
swap
mod
swap
# Line 12
copy
get
add
swap
set
back
# def do_action(stack):
# print(MENU)
# key = get_key_press('+-*/%tdq')
# print()
# if key == '+':
# add_array(array)
# elif key == '-':
# sub_array(array)
# elif key == '*':
# mul_array(array)
# elif key == '/':
# div_array(array)
# elif key == '%':
# mod_array(array)
# elif key == 't':
# show_last(array)
# elif key == 'd':
# dump_array(array)
# else:
# sys.exit()
part "DO_ACTION"
push 76
call "PRINT"
push 161
call "GET_KEY_PRESS"
push 17
call "PRINT_LINE"
copy
push 43
sub
zero "__DA_ADD"
copy
push 45
sub
zero "__DA_SUB"
copy
push 42
sub
zero "__DA_MUL"
copy
push 47
sub
zero "__DA_DIV"
copy
push 37
sub
zero "__DA_MOD"
copy
push 116
sub
zero "__DA_TOP"
push 100
sub
zero "__DA_DUMP"
# Here are several function calls.
exit
part "__DA_DUMP"
call "DUMP_ARRAY"
back
part "__DA_TOP"
away
call "SHOW_LAST"
back
part "__DA_MOD"
away
call "MOD_ARRAY"
back
part "__DA_DIV"
away
call "DIV_ARRAY"
back
part "__DA_MUL"
away
call "MUL_ARRAY"
back
part "__DA_SUB"
away
call "SUB_ARRAY"
back
part "__DA_ADD"
away
call "ADD_ARRAY"
back
# def get_input(stack):
# if len(stack) < 2:
# get_number(stack)
# else:
# if get_mode() == 0:
# do_action(stack)
# else:
# get_number(stack)
part "GET_INPUT"
copy
get
push 2
sub
less "__GI_IF_1"
call "GET_MODE"
zero "__GI_IF_2"
part "__GI_IF_1"
call "GET_NUMBER"
back
part "__GI_IF_2"
call "DO_ACTION"
back
# Prints out size of a stack.
# push addr
# call "STACK_SIZE"
part "STACK_SIZE"
push 0
call "PRINT"
get
oint
push 17
call "PRINT_LINE"
back
# Prints a string with newline.
# push addr
# call "PRINT_LINE"
part "PRINT_LINE"
call "PRINT"
push 10
ochr
back
# def print(array):
# if len(array) <= 0:
# return
# offset = 1
# while len(array) - offset >= 0:
# ptr = array.ptr + offset
# putch(array[ptr])
# offset += 1
part "PRINT"
# Line 1-2
copy
get
less "__PRINT_RET_1"
copy
get
zero "__PRINT_RET_1"
# Line 3
push 1
# Line 4
part "__PRINT_LOOP"
copy
copy 2
get
swap
sub
less "__PRINT_RET_2"
# Line 5
copy 1
copy 1
add
# Line 6
get
ochr
# Line 7
push 1
add
goto "__PRINT_LOOP"
part "__PRINT_RET_2"
away
part "__PRINT_RET_1"
away
back