diff --git a/src/Nand2Tetris/VM.hs b/src/Nand2Tetris/VM.hs index 1b69363..c298467 100644 --- a/src/Nand2Tetris/VM.hs +++ b/src/Nand2Tetris/VM.hs @@ -311,11 +311,15 @@ compileInstruction instr = do Code (A (Imm offset)), Code (C [RegD] (SReg RegA) JNone), Code (A (Label regName)), - Code (C [RegA] SDPlusM JNone), - Code (C [RegD] (SReg RegM) JNone), + Code (C [RegD] SDPlusM JNone), + Code (A (Label "R15")), + Code (C [RegM] (SReg RegD) JNone), Code (A (Label "SP")), Code (C [RegA] (SReg RegM) JNone), + Code (C [RegD] (SReg RegM) JNone), + Code (A (Label "R15")), + Code (C [RegA] (SReg RegM) JNone), Code (C [RegM] (SReg RegD) JNone) ] popLabelValue label = [ diff --git a/test/Test/Nand2Tetris/VM.hs b/test/Test/Nand2Tetris/VM.hs index 86adcbb..ec11b83 100644 --- a/test/Test/Nand2Tetris/VM.hs +++ b/test/Test/Nand2Tetris/VM.hs @@ -227,11 +227,15 @@ compilePopInstructionSpec = do Code (A (Imm value)), Code (C [RegD] (SReg RegA) JNone), Code (A (Label reg)), - Code (C [RegA] SDPlusM JNone), - Code (C [RegD] (SReg RegM) JNone), + Code (C [RegD] SDPlusM JNone), + Code (A (Label "R15")), + Code (C [RegM] (SReg RegD) JNone), Code (A (Label "SP")), Code (C [RegA] (SReg RegM) JNone), + Code (C [RegD] (SReg RegM) JNone), + Code (A (Label "R15")), + Code (C [RegA] (SReg RegM) JNone), Code (C [RegM] (SReg RegD) JNone) ]