# PM Opc POP

From SublabWiki

## POP = Pop Register from Stack

Hex | Mnemonic | Cycles | Regs stacked from top to bottom |
---|---|---|---|

A8 | POP BA | 12 | B, A |

A9 | POP HL | 12 | H, L |

AA | POP X | 12 | X(Hi), X(Lo) |

AB | POP Y | 12 | Y(Hi), Y(Lo) |

AC | POP N | 8 | N |

AD | POP I | 8 | I |

AE | POPX | 12 | XI, YI |

AF | POP F | 8 | F |

CF B4 | POP A | 12 | A |

CF B5 | POP B | 12 | B |

CF B6 | POP L | 12 | L |

CF B7 | POP H | 12 | H |

CF BC | POPA | 44 | B, A, H, L, X(Hi:Lo), Y(Hi:Lo), N |

CF BD | POPAX | 56 | B, A, H, L, X(Hi:Lo), Y(Hi:Lo), N, I, XI, YI |

### Execute

A = Register A B = Register B L = Register L H = Register H N = Register N F = Register F I = Register I XI = Register XI YI = Register YI BA = Register BA: (B shl 8) or A HL = Register HL: (H shl 8) or L X = Register X Y = Register Y SP = Register SP (Stack Pointer)

; POP r16 ; ; r16 = 16-Bits Register (BA, HL, X or Y) r16 = (Memory[SP+1] SHL 8) OR Memory[SP] SP = SP + 2

; POP r8 ; ; r8 = 8-Bits Register (A, B, L, H, N, I and F) r8 = Memory[SP] SP = SP + 1

; POPX XI = Memory[SP+1] YI = Memory[SP] SP = SP + 2

; POPA B = Memory[SP+8] = B A = Memory[SP+7] = A H = Memory[SP+6] = H L = Memory[SP+5] = L X = (Memory[SP+4] SHL 8) OR Memory[SP+3] Y = (Memory[SP+2] SHL 8) OR Memory[SP+1] N = Memory[SP] SP = SP + 9

; POPAX B = Memory[SP+11] A = Memory[SP+10] H = Memory[SP+9] L = Memory[SP+8] X = (Memory[SP+7] SHL 8) OR Memory[SP+6] Y = (Memory[SP+5] SHL 8) OR Memory[SP+4] N = Memory[SP+3] I = Memory[SP+2] XI = Memory[SP+1] YI = Memory[SP] SP = SP + 12

### Description

Pop register(s) from the stack.

### Conditions

None

### Examples

; BA = 0x1337 ; SP = 0x2000 PUSH BA ; BA = 0x1337 ; SP = 0x1FFE MOV A, 0x80 ; BA = 0x1380 ; SP = 0x1FFE INC B ; BA = 0x1480 ; SP = 0x1FFEPOP BA; BA = 0x1337 ; SP = 0x2000