Files
N2T/projects/08/FunctionCalls/SimpleFunction/SimpleFunction.asm
2020-11-15 13:57:48 -05:00

191 lines
1.5 KiB
NASM

// function SimpleFunction.test 2
(SimpleFunction.test)
@0
D = A
@SP
A = M
M = D
@SP
M = M + 1
// ^ push 0
@SP
A = M
M = D
@SP
M = M + 1
// ^ push 0
// ^ push 0 * 2
// push local 0
@0
D = A
@LCL
A = M
A = D + A
D = M
// ^ D = *(LCL + index)
@SP
A = M
M = D
@SP
M = M + 1
// ^ push D
// push local 1
@1
D = A
@LCL
A = M
A = D + A
D = M
// ^ D = *(LCL + index)
@SP
A = M
M = D
@SP
M = M + 1
// ^ push D
// add
@SP
A = M
A = A - 1
A = A - 1
D = M
A = A + 1
D = D + M
A = A - 1
M = D
@SP
M = M - 1
// not
@SP
A = M
A = A - 1
M = !M
// push argument 0
@0
D = A
@ARG
A = M
A = D + A
D = M
// ^ D = *(LCL + index)
@SP
A = M
M = D
@SP
M = M + 1
// ^ push D
// add
@SP
A = M
A = A - 1
A = A - 1
D = M
A = A + 1
D = D + M
A = A - 1
M = D
@SP
M = M - 1
// push argument 1
@1
D = A
@ARG
A = M
A = D + A
D = M
// ^ D = *(LCL + index)
@SP
A = M
M = D
@SP
M = M + 1
// ^ push D
// sub
@SP
A = M
A = A - 1
A = A - 1
D = M
A = A + 1
D = D - M
A = A - 1
M = D
@SP
M = M - 1
// return
@LCL
D = M
@R13
M = D
// ^ R13 = FRAME = LCL
@5
D = A
@R13
D = M - D
@R14
M = D
// ^ R14 = RET = *(FRAME - 5)
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
@ARG
A = M
M = D
// ^ POP into *ARG
@ARG
D = M + 1
@SP
M = D
// ^ SP = ARG + 1
@1
D = A
@R13
A = M - D
D = M
@THAT
M = D
// ^ THAT = *(FRAME - 1)
@2
D = A
@R13
A = M - D
D = M
@THIS
M = D
// ^ THIS = *(FRAME - 2)
@3
D = A
@R13
A = M - D
D = M
@ARG
M = D
// ^ ARG = *(FRAME - 3)
@4
D = A
@R13
A = M - D
D = M
@LCL
M = D
// ^ LCL = *(FRAME - 4)
@R14
A = M
A = M
0;JMP
// ^ goto RET