Browse Source

VM: fix pop instruction compilation

master
Denis Tereshkin 4 years ago
parent
commit
9c3a49350a
  1. 8
      src/Nand2Tetris/VM.hs
  2. 8
      test/Test/Nand2Tetris/VM.hs

8
src/Nand2Tetris/VM.hs

@ -311,11 +311,15 @@ compileInstruction instr = do @@ -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 = [

8
test/Test/Nand2Tetris/VM.hs

@ -227,11 +227,15 @@ compilePopInstructionSpec = do @@ -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)
]

Loading…
Cancel
Save