@opcode(<EOL><NUM_LIT>, <EOL><NUM_LIT>, <EOL>)<EOL><INDENT>def instruction_PUL(self, opcode, m, register):<DEDENT>
assert register in (self.system_stack_pointer, self.user_stack_pointer)<EOL>def pull(register_str, stack_pointer):<EOL><INDENT>reg_obj = self.register_str2object[register_str]<EOL>reg_width = reg_obj.WIDTH <EOL>if reg_width == <NUM_LIT:8>:<EOL><INDENT>data = self.pull_byte(stack_pointer)<EOL><DEDENT>else:<EOL><INDENT>assert reg_width == <NUM_LIT:16><EOL>data = self.pull_word(stack_pointer)<EOL><DEDENT>reg_obj.set(data)<EOL>
All, some, or none of the processor registers are pulled from stack
(with the exception of stack pointer itself).

A single register may be pulled from the stack with condition codes set
by doing an autoincrement load from the stack (example: LDX ,S++).

source code forms: b7 b6 b5 b4 b3 b2 b1 b0 PC U Y X DP B A CC = pull
order

CC bits "HNZVC": ccccc