Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def WritePushPop(self, commandType, segment, index):
- if commandType == C_PUSH:
- if segment == 'static':
- self._StaticLabel += '@' + str(index), 'D=M'
- elif segment == 'constant':
- self._WriteCode += '@' + str(index), 'D=A'
- elif segment == 'pointer':
- self._WriteCode += '@' + str(3 + index), 'D=M' #holds the addresses for this and that segments
- elif segment == 'temp':
- 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
- elif segment == 'this':
- self._WriteCode += '@THIS, A=M, D=M'
- elif segment == 'that':
- self._WriteCode += '@THAT, A=M, D=M'
- elif segment == 'local':
- self._WriteCode += '@LCL, A=M, D=M'
- elif segment == 'argument':
- self._WriteCode += '@ARG, A=M, D=M'
- self._WriteCode += ',@SP, AM=M+1, A=A-1, M=D'
- else: #else pop
- self._WriteCode += '@SP, AM=M-1, D=M,'
- if segment == 'static':
- self._WriteCode += '@' + str(5 + index) + ',M=D'
- elif segment == 'pointer':
- self._WriteCode += '@' + str(3 + index), 'M=D'
- elif segmnet == 'temp':
- self._WriteCode += '@' + str(5 + index), 'M=D'
- elif segment == 'this':
- self._WriteCode += '@THIS, A=M, M=D'
- elif segment == 'that':
- self._WriteCode += '@THAT, A=M, M=D'
- elif segment == 'local':
- self._WriteCode += '@LCL, A=M, M=D'
- elif segment == 'argument':
- self._WriteCode += '@ARG, A=M, M=D'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement