Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // bootstrap
- @256
- D=A
- @SP
- M=D
- @Sys.init:RETURN_ADDRESS_0
- 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
- (Sys.init:RETURN_ADDRESS_0)
- // function Sys.init 0
- (Sys.init)
- // push constant 6
- @6
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // push constant 8
- @8
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // call Class1.set 2
- @Class1.set:RETURN_ADDRESS_1
- 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
- @2
- D=D-A
- @5
- D=D-A
- @ARG
- M=D
- @SP
- D=M
- @LCL
- M=D
- @Class1.set
- 0;JMP
- (Class1.set:RETURN_ADDRESS_1)
- // pop temp 0
- @R5
- D=M
- @R13
- M=D
- @SP
- AM=M-1
- D=M
- @R13
- A=M
- M=D
- // push constant 23
- @23
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // push constant 15
- @15
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // call Class2.set 2
- @Class2.set:RETURN_ADDRESS_2
- 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
- @2
- D=D-A
- @5
- D=D-A
- @ARG
- M=D
- @SP
- D=M
- @LCL
- M=D
- @Class2.set
- 0;JMP
- (Class2.set:RETURN_ADDRESS_2)
- // pop temp 0
- @R5
- D=M
- @R13
- M=D
- @SP
- AM=M-1
- D=M
- @R13
- A=M
- M=D
- // call Class1.get 0
- @Class1.get:RETURN_ADDRESS_3
- 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
- @Class1.get
- 0;JMP
- (Class1.get:RETURN_ADDRESS_3)
- // call Class2.get 0
- @Class2.get:RETURN_ADDRESS_4
- 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
- @Class2.get
- 0;JMP
- (Class2.get:RETURN_ADDRESS_4)
- // label WHILE
- (Sys.init$WHILE)
- // goto WHILE
- @Sys.init$WHILE
- 0;JMP
- // function Class1.set 0
- (Class1.set)
- // push argument 0
- @ARG
- D=M
- A=D
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // pop static 0
- @SP
- AM=M-1
- D=M
- @Class1.0
- M=D
- // push argument 1
- @ARG
- D=M
- @1
- D=D+A
- A=D
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // pop static 1
- @SP
- AM=M-1
- D=M
- @Class1.1
- M=D
- // push constant 0
- @0
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // return
- @LCL
- D=M
- @frame
- M=D
- @frame
- D=M
- @5
- A=D-A
- D=M
- @returnAddress
- M=D
- @SP
- AM=M-1
- D=M
- @ARG
- A=M
- M=D
- @ARG
- D=M+1
- @SP
- M=D
- @frame
- D=M
- @1
- A=D-A
- D=M
- @THAT
- M=D
- @frame
- D=M
- @2
- A=D-A
- D=M
- @THIS
- M=D
- @frame
- D=M
- @3
- A=D-A
- D=M
- @ARG
- M=D
- @frame
- D=M
- @4
- A=D-A
- D=M
- @LCL
- M=D
- @returnAddress
- A=M
- 0;JMP
- // function Class1.get 0
- (Class1.get)
- // push static 0
- @Class1.0
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // push static 1
- @Class1.1
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // sub
- @SP
- AM=M-1
- D=M
- A=A-1
- M=M-D
- // return
- @LCL
- D=M
- @frame
- M=D
- @frame
- D=M
- @5
- A=D-A
- D=M
- @returnAddress
- M=D
- @SP
- AM=M-1
- D=M
- @ARG
- A=M
- M=D
- @ARG
- D=M+1
- @SP
- M=D
- @frame
- D=M
- @1
- A=D-A
- D=M
- @THAT
- M=D
- @frame
- D=M
- @2
- A=D-A
- D=M
- @THIS
- M=D
- @frame
- D=M
- @3
- A=D-A
- D=M
- @ARG
- M=D
- @frame
- D=M
- @4
- A=D-A
- D=M
- @LCL
- M=D
- @returnAddress
- A=M
- 0;JMP
- // function Class2.set 0
- (Class2.set)
- // push argument 0
- @ARG
- D=M
- A=D
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // pop static 0
- @SP
- AM=M-1
- D=M
- @Class2.0
- M=D
- // push argument 1
- @ARG
- D=M
- @1
- D=D+A
- A=D
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // pop static 1
- @SP
- AM=M-1
- D=M
- @Class2.1
- M=D
- // push constant 0
- @0
- D=A
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // return
- @LCL
- D=M
- @frame
- M=D
- @frame
- D=M
- @5
- A=D-A
- D=M
- @returnAddress
- M=D
- @SP
- AM=M-1
- D=M
- @ARG
- A=M
- M=D
- @ARG
- D=M+1
- @SP
- M=D
- @frame
- D=M
- @1
- A=D-A
- D=M
- @THAT
- M=D
- @frame
- D=M
- @2
- A=D-A
- D=M
- @THIS
- M=D
- @frame
- D=M
- @3
- A=D-A
- D=M
- @ARG
- M=D
- @frame
- D=M
- @4
- A=D-A
- D=M
- @LCL
- M=D
- @returnAddress
- A=M
- 0;JMP
- // function Class2.get 0
- (Class2.get)
- // push static 0
- @Class2.0
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // push static 1
- @Class2.1
- D=M
- @SP
- A=M
- M=D
- @SP
- M=M+1
- // sub
- @SP
- AM=M-1
- D=M
- A=A-1
- M=M-D
- // return
- @LCL
- D=M
- @frame
- M=D
- @frame
- D=M
- @5
- A=D-A
- D=M
- @returnAddress
- M=D
- @SP
- AM=M-1
- D=M
- @ARG
- A=M
- M=D
- @ARG
- D=M+1
- @SP
- M=D
- @frame
- D=M
- @1
- A=D-A
- D=M
- @THAT
- M=D
- @frame
- D=M
- @2
- A=D-A
- D=M
- @THIS
- M=D
- @frame
- D=M
- @3
- A=D-A
- D=M
- @ARG
- M=D
- @frame
- D=M
- @4
- A=D-A
- D=M
- @LCL
- M=D
- @returnAddress
- A=M
- 0;JMP
- // end of program
- (INFINITE_LOOP)
- @INFINITE_LOOP
- 0;JMP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement