365 lines
2.8 KiB
NASM
365 lines
2.8 KiB
NASM
// push constant 10
|
|
@10
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// pop local 0
|
|
@0
|
|
D = A
|
|
@LCL
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = local + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// push constant 21
|
|
@21
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// push constant 22
|
|
@22
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// pop argument 2
|
|
@2
|
|
D = A
|
|
@ARG
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = argument + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// pop argument 1
|
|
@1
|
|
D = A
|
|
@ARG
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = argument + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// push constant 36
|
|
@36
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// pop this 6
|
|
@6
|
|
D = A
|
|
@THIS
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = this + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// push constant 42
|
|
@42
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// push constant 45
|
|
@45
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// pop that 5
|
|
@5
|
|
D = A
|
|
@THAT
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = that + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// pop that 2
|
|
@2
|
|
D = A
|
|
@THAT
|
|
A = M
|
|
D = D + A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = that + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// push constant 510
|
|
@510
|
|
D = A
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
|
|
// pop temp 6
|
|
@6
|
|
D = A
|
|
@5
|
|
A = D + A
|
|
D = A
|
|
@R13
|
|
M = D
|
|
// ^ R13 = temp + index
|
|
@SP
|
|
A = M
|
|
A = A - 1
|
|
D = M
|
|
@SP
|
|
M = M - 1
|
|
// ^ pop into D
|
|
@R13
|
|
A = M
|
|
M = D
|
|
// ^ *R13 = D
|
|
|
|
// 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 that 5
|
|
@5
|
|
D = A
|
|
@THAT
|
|
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
|
|
|
|
// push this 6
|
|
@6
|
|
D = A
|
|
@THIS
|
|
A = M
|
|
A = D + A
|
|
D = M
|
|
// ^ D = *(LCL + index)
|
|
@SP
|
|
A = M
|
|
M = D
|
|
@SP
|
|
M = M + 1
|
|
// ^ push D
|
|
|
|
// push this 6
|
|
@6
|
|
D = A
|
|
@THIS
|
|
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
|
|
|
|
// 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
|
|
|
|
// push temp 6
|
|
@6
|
|
D = A
|
|
@5
|
|
A = D + A
|
|
D = M
|
|
// ^ D = *(temp + 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
|
|
|