Very similar to the "stack memory" puzzle, just with handling lists' zero terminators:
@start: subleq @tmp, @IN subleq @tmp2, @tmp, @end subleq @arg, @tmp @stack_push: subleq @stack, @arg subleq @stack_push, @n_one subleq @count, @n_one subleq @arg, @arg subleq @tmp2, @tmp2 subleq @tmp, @tmp, @start @end: subleq @tmp, @tmp subleq @tmp, @stack_push subleq @stack_pop_read+1, @stack_pop_read+1 subleq @stack_pop_read+1, @tmp @stack_pop: subleq @count, @one, @reset subleq @stack_pop_read+1, @one @stack_pop_read: subleq @OUT, @stack subleq @tmp, @tmp, @stack_pop @reset: subleq @OUT, @zero subleq @count, @count subleq @count, @n_one subleq @tmp2, @tmp2 subleq @tmp, @tmp, @start ; Constants @zero: .data 0 @one: .data 1 @n_one: .data -1 ; Variables @tmp: .data 0 @tmp2: .data 0 @count: .data 1 @arg: .data 0 @result: .data 0 @stack: .data 0