nand2tetris/projects/07/MemoryAccess/BasicTest/BasicTest.asm

225 lines
2.6 KiB
NASM

@10 // push constant 10
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 10
@SP // pop
A=M-1
D=M
@LCL
A=M // Read @LCL to A
M=D // Write D to *A
@21 // push constant 21
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 21
@22 // push constant 22
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 22
@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
A=M-1
D=M
@R13
A=M // Read @R13 to A
M=D // Write D to *A
@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
A=M-1
D=M
@R13
A=M // Read @R13 to A
M=D // Write D to *A
@36 // push constant 36
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 36
@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
A=M-1
D=M
@R13
A=M // Read @R13 to A
M=D // Write D to *A
@42 // push constant 42
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 42
@45 // push constant 45
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 45
@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
A=M-1
D=M
@R13
A=M // Read @R13 to A
M=D // Write D to *A
@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
A=M-1
D=M
@R13
A=M // Read @R13 to A
M=D // Write D to *A
@510 // push constant 510
D=A
@SP
A=M
M=D
@SP
M=M+1 // end push constant 510
@LCL // local 0
D=M
@0 // write 0 to A
D=D+A // D = segment+index
@R13 // save it to R13
M=D // write @LCL+0 to R13
@R13
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push local 0
@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
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push that 5
@SP // ==== add ====
A=M-1
D=M
A=A-1
M=D+M
@SP
M=M-1
@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
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push argument 1
@SP // ==== sub ====
A=M-1
D=M
A=A-1
M=M-D
@SP
M=M-1
@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
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push this 6
@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
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push this 6
@SP // ==== add ====
A=M-1
D=M
A=A-1
M=D+M
@SP
M=M-1
@SP // ==== sub ====
A=M-1
D=M
A=A-1
M=M-D
@SP
M=M-1
@R11 // temp 6
D=M
@SP
A=M
M=D
@SP
M=M+1 // end push temp 6
@SP // ==== add ====
A=M-1
D=M
A=A-1
M=D+M
@SP
M=M-1
@223
0;JMP