Files
nand2tetris/projects/08/FunctionCalls/NestedCall/NestedCall.asm
T
QkoSad 7894b48931 .
2025-07-16 13:00:37 +03:00

599 lines
3.7 KiB
NASM
Executable File

@256
D=A
@SP
M=D
@MainLoopXYZRA
D=A
@SP
A=M
M=D
@SP
M=M+1
@LCL
D=M
@SP
A=M
M=D
@SP
M=M+1
@ARG
D=M
@SP
A=M
M=D
@SP
M=M+1
@THIS
D=M
@SP
A=M
M=D
@SP
M=M+1
@THAT
D=M
@SP
A=M
M=D
@SP
M=M+1
@SP
D=M
@0
D=D-A
@5
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@Sys.init
0;JMP
(MainLoopXYZRARA)
//CALLFUNC
(Sys.init)
@4000
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
@3
M=D
//pop POINTER
@5000
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
@4
M=D
//pop POINTER
@Sys.main3RA
D=A
@SP
A=M
M=D
@SP
M=M+1
@LCL
D=M
@SP
A=M
M=D
@SP
M=M+1
@ARG
D=M
@SP
A=M
M=D
@SP
M=M+1
@THIS
D=M
@SP
A=M
M=D
@SP
M=M+1
@THAT
D=M
@SP
A=M
M=D
@SP
M=M+1
@SP
D=M
@0
D=D-A
@5
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@Sys.main
0;JMP
(Sys.main3RA)
//CALLFUNC
@SP
M=M-1
A=M
D=M
@6
M=D
//pop TMP
(Sys.init$LOOP)
//LABEL
@Sys.init$LOOP
0;JMP
//GOTO
(Sys.main)
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//DEFINEFUNC
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//DEFINEFUNC
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//DEFINEFUNC
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//DEFINEFUNC
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//DEFINEFUNC
@4001
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
@3
M=D
//pop POINTER
@5001
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
@4
M=D
//pop POINTER
@200
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@1
D=A
@LCL
M=M+D
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D
@1
D=A
@LCL
M=M-D
//pop LOCAL
@40
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@2
D=A
@LCL
M=M+D
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D
@2
D=A
@LCL
M=M-D
//pop LOCAL
@6
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@3
D=A
@LCL
M=M+D
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D
@3
D=A
@LCL
M=M-D
//pop LOCAL
@123
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@Sys.add124RA
D=A
@SP
A=M
M=D
@SP
M=M+1
@LCL
D=M
@SP
A=M
M=D
@SP
M=M+1
@ARG
D=M
@SP
A=M
M=D
@SP
M=M+1
@THIS
D=M
@SP
A=M
M=D
@SP
M=M+1
@THAT
D=M
@SP
A=M
M=D
@SP
M=M+1
@SP
D=M
@1
D=D-A
@5
D=D-A
@ARG
M=D
@SP
D=M
@LCL
M=D
@Sys.add12
0;JMP
(Sys.add124RA)
//CALLFUNC
@SP
M=M-1
A=M
D=M
@5
M=D
//pop TMP
@0
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@1
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@2
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@3
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@4
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@LCL
D=M
@R13
M=D
@5
D=A
@R13
D=M-D
A=D
D=M
@R14
M=D
@SP
A=M-1
D=M
@ARG
A=M
M=D
@ARG
D=M+1
@SP
M=D
@R13
M=M-1
A=M
D=M
@THAT
M=D
@R13
M=M-1
A=M
D=M
@THIS
M=D
@R13
M=M-1
A=M
D=M
@ARG
M=D
@R13
M=M-1
A=M
D=M
@LCL
M=D
@R14
A=M
0;JMP
//RETURN
(Sys.add12)
@4002
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
@3
M=D
//pop POINTER
@5002
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@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
@12
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
@LCL
D=M
@R13
M=D
@5
D=A
@R13
D=M-D
A=D
D=M
@R14
M=D
@SP
A=M-1
D=M
@ARG
A=M
M=D
@ARG
D=M+1
@SP
M=D
@R13
M=M-1
A=M
D=M
@THAT
M=D
@R13
M=M-1
A=M
D=M
@THIS
M=D
@R13
M=M-1
A=M
D=M
@ARG
M=D
@R13
M=M-1
A=M
D=M
@LCL
M=D
@R14
A=M
0;JMP
//RETURN