Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. def WritePushPop(self, commandType, segment, index):
  2.  
  3. if commandType == C_PUSH:
  4.  
  5. if segment == 'static':
  6. self._StaticLabel += '@' + str(index), 'D=M'
  7.  
  8. elif segment == 'constant':
  9. self._WriteCode += '@' + str(index), 'D=A'
  10.  
  11. elif segment == 'pointer':
  12. self._WriteCode += '@' + str(3 + index), 'D=M' #holds the addresses for this and that segments
  13.  
  14. elif segment == 'temp':
  15. self._WriteCode += '@' + str(5 + index), 'D=M' #temp location starts at 5, Stack pointer at 0, local at 1 and argument at 2, pointer at 3 & 4
  16.  
  17. elif segment == 'this':
  18. self._WriteCode += '@THIS, A=M, D=M'
  19.  
  20. elif segment == 'that':
  21. self._WriteCode += '@THAT, A=M, D=M'
  22.  
  23. elif segment == 'local':
  24. self._WriteCode += '@LCL, A=M, D=M'
  25.  
  26. elif segment == 'argument':
  27. self._WriteCode += '@ARG, A=M, D=M'
  28.  
  29. self._WriteCode += ',@SP, AM=M+1, A=A-1, M=D'
  30.  
  31.  
  32. else: #else pop
  33. self._WriteCode += '@SP, AM=M-1, D=M,'
  34. if segment == 'static':
  35. self._WriteCode += '@' + str(5 + index) + ',M=D'
  36.  
  37. elif segment == 'pointer':
  38. self._WriteCode += '@' + str(3 + index), 'M=D'
  39.  
  40. elif segmnet == 'temp':
  41. self._WriteCode += '@' + str(5 + index), 'M=D'
  42.  
  43. elif segment == 'this':
  44. self._WriteCode += '@THIS, A=M, M=D'
  45.  
  46. elif segment == 'that':
  47. self._WriteCode += '@THAT, A=M, M=D'
  48.  
  49. elif segment == 'local':
  50. self._WriteCode += '@LCL, A=M, M=D'
  51.  
  52. elif segment == 'argument':
  53. self._WriteCode += '@ARG, A=M, M=D'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement