256 lines
1.7 KiB
NASM
Executable File
256 lines
1.7 KiB
NASM
Executable File
@1
|
|
D=A
|
|
@ARG
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push ARGUMENT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@4
|
|
M=D
|
|
//pop POINTER
|
|
@0
|
|
D=A
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push CONSTANT
|
|
@0
|
|
D=A
|
|
@THAT
|
|
M=M+D
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@THAT
|
|
A=M
|
|
M=D
|
|
@0
|
|
D=A
|
|
@THAT
|
|
M=M-D
|
|
//pop THAT
|
|
@1
|
|
D=A
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push CONSTANT
|
|
@1
|
|
D=A
|
|
@THAT
|
|
M=M+D
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@THAT
|
|
A=M
|
|
M=D
|
|
@1
|
|
D=A
|
|
@THAT
|
|
M=M-D
|
|
//pop THAT
|
|
@0
|
|
D=A
|
|
@ARG
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push ARGUMENT
|
|
@2
|
|
D=A
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push CONSTANT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
A=A-1
|
|
M=M-D
|
|
//SUB
|
|
@0
|
|
D=A
|
|
@ARG
|
|
M=M+D
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@ARG
|
|
A=M
|
|
M=D
|
|
@0
|
|
D=A
|
|
@ARG
|
|
M=M-D
|
|
//pop ARG
|
|
(Sys.init$MAIN_LOOP_START)
|
|
//LABEL
|
|
@0
|
|
D=A
|
|
@ARG
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push ARGUMENT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@Sys.init$COMPUTE_ELEMENT
|
|
D;JNE
|
|
//IFGOTO
|
|
@Sys.init$END_PROGRAM
|
|
0;JMP
|
|
//GOTO
|
|
(Sys.init$COMPUTE_ELEMENT)
|
|
//LABEL
|
|
@0
|
|
D=A
|
|
@THAT
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push THAT
|
|
@1
|
|
D=A
|
|
@THAT
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push THAT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
A=A-1
|
|
M=M+D
|
|
//ADD
|
|
@2
|
|
D=A
|
|
@THAT
|
|
M=M+D
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@THAT
|
|
A=M
|
|
M=D
|
|
@2
|
|
D=A
|
|
@THAT
|
|
M=M-D
|
|
//pop THAT
|
|
@4
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push POINTER
|
|
@1
|
|
D=A
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push CONSTANT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
A=A-1
|
|
M=M+D
|
|
//ADD
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@4
|
|
M=D
|
|
//pop POINTER
|
|
@0
|
|
D=A
|
|
@ARG
|
|
A=M+D
|
|
D=M
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push ARGUMENT
|
|
@1
|
|
D=A
|
|
@SP
|
|
A=M
|
|
M=D
|
|
@SP
|
|
M=M+1
|
|
//push CONSTANT
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
A=A-1
|
|
M=M-D
|
|
//SUB
|
|
@0
|
|
D=A
|
|
@ARG
|
|
M=M+D
|
|
@SP
|
|
M=M-1
|
|
A=M
|
|
D=M
|
|
@ARG
|
|
A=M
|
|
M=D
|
|
@0
|
|
D=A
|
|
@ARG
|
|
M=M-D
|
|
//pop ARG
|
|
@Sys.init$MAIN_LOOP_START
|
|
0;JMP
|
|
//GOTO
|
|
(Sys.init$END_PROGRAM)
|
|
//LABEL
|