2020-06-01 20:12:15 +00:00
|
|
|
@10 // push constant 10
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@LCL
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @LCL to A (for local 0)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop local 0
|
2020-06-01 20:12:15 +00:00
|
|
|
@21 // push constant 21
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@22 // push constant 22
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@ARG // argument 2
|
|
|
|
D=M
|
|
|
|
@2 // write 2 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @ARG+2 to R13
|
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @R13 to A (for argument 2)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop argument 2
|
2020-06-01 20:12:15 +00:00
|
|
|
@ARG // argument 1
|
|
|
|
D=M
|
|
|
|
@1 // write 1 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @ARG+1 to R13
|
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @R13 to A (for argument 1)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop argument 1
|
2020-06-01 20:12:15 +00:00
|
|
|
@36 // push constant 36
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@THIS // this 6
|
|
|
|
D=M
|
|
|
|
@6 // write 6 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THIS+6 to R13
|
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @R13 to A (for this 6)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop this 6
|
2020-06-01 20:12:15 +00:00
|
|
|
@42 // push constant 42
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@45 // push constant 45
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@THAT // that 5
|
|
|
|
D=M
|
|
|
|
@5 // write 5 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THAT+5 to R13
|
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @R13 to A (for that 5)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop that 5
|
2020-06-01 20:12:15 +00:00
|
|
|
@THAT // that 2
|
|
|
|
D=M
|
|
|
|
@2 // write 2 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THAT+2 to R13
|
|
|
|
@SP // pop
|
2020-06-01 21:49:28 +00:00
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-01 21:49:28 +00:00
|
|
|
A=M // Read @R13 to A (for that 2)
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop that 2
|
2020-06-01 20:12:15 +00:00
|
|
|
@510 // push constant 510
|
|
|
|
D=A
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 21:49:28 +00:00
|
|
|
@SP
|
|
|
|
AM=M-1
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
2020-06-01 21:49:28 +00:00
|
|
|
@R11
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // end pop temp 6
|
2020-06-01 21:49:28 +00:00
|
|
|
@LCL
|
2020-06-01 22:46:13 +00:00
|
|
|
A=M
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@THAT // that 5
|
|
|
|
D=M
|
|
|
|
@5 // write 5 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THAT+5 to R13
|
|
|
|
@R13
|
2020-06-01 22:46:13 +00:00
|
|
|
A=M
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // ==== add ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
A=A-1
|
|
|
|
M=D+M
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M-1 // end add
|
2020-06-01 20:12:15 +00:00
|
|
|
@ARG // argument 1
|
|
|
|
D=M
|
|
|
|
@1 // write 1 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @ARG+1 to R13
|
|
|
|
@R13
|
2020-06-01 22:46:13 +00:00
|
|
|
A=M
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // ==== sub ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
A=A-1
|
|
|
|
M=M-D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M-1 // end sub
|
2020-06-01 20:12:15 +00:00
|
|
|
@THIS // this 6
|
|
|
|
D=M
|
|
|
|
@6 // write 6 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THIS+6 to R13
|
|
|
|
@R13
|
2020-06-01 22:46:13 +00:00
|
|
|
A=M
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@THIS // this 6
|
|
|
|
D=M
|
|
|
|
@6 // write 6 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @THIS+6 to R13
|
|
|
|
@R13
|
2020-06-01 22:46:13 +00:00
|
|
|
A=M
|
2020-06-01 20:12:15 +00:00
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // ==== add ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
A=A-1
|
|
|
|
M=D+M
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M-1 // end add
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // ==== sub ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
A=A-1
|
|
|
|
M=M-D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M-1 // end sub
|
2020-06-01 20:12:15 +00:00
|
|
|
@R11 // temp 6
|
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-01 20:12:15 +00:00
|
|
|
@SP // ==== add ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
A=A-1
|
|
|
|
M=D+M
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M-1 // end add
|
2020-06-01 22:46:13 +00:00
|
|
|
@227
|
2020-06-01 20:12:15 +00:00
|
|
|
0;JMP
|