diff --git a/src/Nand2Tetris/VM.hs b/src/Nand2Tetris/VM.hs index 89fc2aa..343a2ea 100644 --- a/src/Nand2Tetris/VM.hs +++ b/src/Nand2Tetris/VM.hs @@ -310,11 +310,18 @@ compileInstruction instr = do compileInstruction' (VMFunction (FFunction name nvars)) = do modify' (\s -> s { ceCurrentFunction = Just name }) return ([ ALabel name, - Code (A (Label "SP")) ]<> + Code (A (Label "SP")), + Code (C [RegA] (SReg RegM) JNone) + ] <> (concat . replicate nvars $ [ Code (C [RegM] S0 JNone), Code (C [RegA] (SRegPlus1 RegA) JNone) - ])) + ]) <> + [ Code (C [RegD] (SReg RegA) JNone), + Code (A (Label "SP")), + Code (C [RegM] (SReg RegD) JNone) + ] + ) compileInstruction' (VMFunction (FCall name nargs)) = do lab <- nextLabelId