2020-06-03 18:20:34 +00:00
|
|
|
(SimpleFunction.test) // function SimpleFunction.test 2
|
|
|
|
@SP
|
|
|
|
A=M
|
2020-06-04 15:35:02 +00:00
|
|
|
M=0
|
2020-06-03 18:20:34 +00:00
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
AM=M+1
|
|
|
|
M=0
|
2020-06-03 18:20:34 +00:00
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
AM=M+1
|
2020-06-03 18:20:34 +00:00
|
|
|
@LCL
|
|
|
|
A=M
|
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-03 18:20:34 +00:00
|
|
|
@LCL // local 1
|
|
|
|
D=M
|
|
|
|
@1 // write 1 to A
|
|
|
|
D=D+A // D = segment+index
|
|
|
|
@R13 // save it to R13
|
|
|
|
M=D // write @LCL+1 to R13
|
|
|
|
@R13
|
|
|
|
A=M
|
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-03 18:20:34 +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-03 18:20:34 +00:00
|
|
|
@SP // ==== not ====
|
|
|
|
A=M-1
|
|
|
|
D=M
|
2020-06-04 15:35:02 +00:00
|
|
|
M=!M // end not
|
2020-06-03 18:20:34 +00:00
|
|
|
@ARG
|
|
|
|
A=M
|
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-03 18:20:34 +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-03 18:20:34 +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
|
|
|
|
A=M
|
|
|
|
D=M
|
|
|
|
@SP
|
|
|
|
A=M
|
|
|
|
M=D
|
|
|
|
@SP
|
2020-06-04 15:35:02 +00:00
|
|
|
M=M+1
|
2020-06-03 18:20:34 +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
|
|
|
|
@SP // return for SimpleFunction.test starts
|
2020-06-03 19:18:54 +00:00
|
|
|
A=M-1
|
|
|
|
D=M
|
|
|
|
@ARG
|
|
|
|
A=M
|
|
|
|
M=D
|
2020-06-03 18:20:34 +00:00
|
|
|
@ARG
|
|
|
|
D=M+1
|
|
|
|
@SP
|
|
|
|
M=D // @SP = ARG+1
|
|
|
|
@LCL
|
2020-06-03 19:18:54 +00:00
|
|
|
D=M
|
|
|
|
@R13
|
2020-06-04 15:35:02 +00:00
|
|
|
M=D // Save LCL to R13 = FRAME
|
2020-06-03 19:18:54 +00:00
|
|
|
A=D-1 // A=*LCL-1
|
|
|
|
D=M // D=*(*LCL-1)
|
|
|
|
@THAT // A=THAT
|
|
|
|
M=D // *that = *(*lcl-1)
|
|
|
|
@R13
|
|
|
|
A=M-1
|
|
|
|
A=A-1 // A=*LCL-2
|
|
|
|
D=M // D=*(*LCL-2)
|
|
|
|
@THIS // A=THIS
|
|
|
|
M=D // *THIS = *(*lcl-2)
|
|
|
|
@R13
|
|
|
|
A=M-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1 // A=*LCL-3
|
|
|
|
D=M // D=*(*LCL-3)
|
|
|
|
@ARG // A=ARG
|
|
|
|
M=D // *ARG = *(*lcl-3)
|
|
|
|
@R13
|
|
|
|
A=M-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1 // A=*LCL-4
|
|
|
|
D=M // D=*(*LCL-4)
|
|
|
|
@LCL // A=LCL
|
|
|
|
M=D // *LCL = *(*lcl-4)
|
|
|
|
@R13
|
|
|
|
A=M-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1
|
|
|
|
A=A-1 // A=*LCL-5
|
2020-06-04 15:35:02 +00:00
|
|
|
A=M // A now holds the return address
|
|
|
|
0;JMP // HyperJump to *(LCL-5)
|
|
|
|
@125
|
2020-06-03 18:20:34 +00:00
|
|
|
0;JMP
|