nand2tetris/projects/08/FunctionCalls/StaticsTest/StaticsTest.asm

657 lines
34 KiB
NASM

@256 // (L0:0) (writeConstantToRegister(SP, 256):256)
D=A // (L0:1) (writeConstantToRegister(SP, 256):256)
@SP // (L0:2) (writeConstantToRegister(SP, 256):261)
M=D // initialized SP to 256 // (L0:3) (writeConstantToRegister(SP, 256):261)
@1 // (L0:4) (writeConstantToRegister(LCL, 1):249)
D=-A // (L0:5) (writeConstantToRegister(LCL, 1):249)
@LCL // (L0:6) (writeConstantToRegister(LCL, 1):261)
M=D // initialized LCL to 1 // (L0:7) (writeConstantToRegister(LCL, 1):261)
@2 // (L0:8) (writeConstantToRegister(ARG, 2):249)
D=-A // (L0:9) (writeConstantToRegister(ARG, 2):249)
@ARG // (L0:10) (writeConstantToRegister(ARG, 2):261)
M=D // initialized ARG to 2 // (L0:11) (writeConstantToRegister(ARG, 2):261)
@3 // (L0:12) (writeConstantToRegister(THIS, 3):249)
D=-A // (L0:13) (writeConstantToRegister(THIS, 3):249)
@THIS // (L0:14) (writeConstantToRegister(THIS, 3):261)
M=D // initialized THIS to 3 // (L0:15) (writeConstantToRegister(THIS, 3):261)
@4 // (L0:16) (writeConstantToRegister(THAT, 4):249)
D=-A // (L0:17) (writeConstantToRegister(THAT, 4):249)
@THAT // (L0:18) (writeConstantToRegister(THAT, 4):261)
M=D // initialized THAT to 4 // (L0:19) (writeConstantToRegister(THAT, 4):261)
@33b1f99614b7ceb21fb78d26e579bf9e // (L0:20) (push(label, 33b1f99614b7ceb21fb78d26e579bf9e):53)
D=A // (L0:21) (push(label, 33b1f99614b7ceb21fb78d26e579bf9e):53)
@SP // (L0:22) (writeDtoSPAndBump():62)
A=M // (L0:23) (writeDtoSPAndBump():62)
M=D // (L0:24) (writeDtoSPAndBump():62)
@SP // (L0:25) (increaseSP():72)
M=M+1 // (L0:26) (increaseSP():72)
@LCL // (L0:27) (push(register, LCL, 1):42)
AD=M // (L0:28) (push(register, LCL, 1):42)
@SP // (L0:29) (writeDtoSPAndBump():62)
A=M // (L0:30) (writeDtoSPAndBump():62)
M=D // (L0:31) (writeDtoSPAndBump():62)
@SP // (L0:32) (increaseSP():72)
M=M+1 // (L0:33) (increaseSP():72)
@ARG // (L0:34) (push(register, ARG, 1):42)
AD=M // (L0:35) (push(register, ARG, 1):42)
@SP // (L0:36) (writeDtoSPAndBump():62)
A=M // (L0:37) (writeDtoSPAndBump():62)
M=D // (L0:38) (writeDtoSPAndBump():62)
@SP // (L0:39) (increaseSP():72)
M=M+1 // (L0:40) (increaseSP():72)
@THIS // (L0:41) (push(register, THIS, 1):42)
AD=M // (L0:42) (push(register, THIS, 1):42)
@SP // (L0:43) (writeDtoSPAndBump():62)
A=M // (L0:44) (writeDtoSPAndBump():62)
M=D // (L0:45) (writeDtoSPAndBump():62)
@SP // (L0:46) (increaseSP():72)
M=M+1 // (L0:47) (increaseSP():72)
@THAT // (L0:48) (push(register, THAT, 1):42)
AD=M // (L0:49) (push(register, THAT, 1):42)
@SP // (L0:50) (writeDtoSPAndBump():62)
A=M // (L0:51) (writeDtoSPAndBump():62)
M=D // (L0:52) (writeDtoSPAndBump():62)
@SP // (L0:53) (increaseSP():72)
M=M+1 // (L0:54) (increaseSP():72)
@SP // (L0:55) (copy(SP, LCL):186)
D=M // (L0:56) (copy(SP, LCL):186)
@LCL // (L0:57) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L0:58) (copy(SP, LCL):186)
@SP // (L0:59) (loadOffsetToD(SP, 5, -):193)
D=M // (L0:60) (loadOffsetToD(SP, 5, -):193)
D=D-1 // should repeat 5 times // (L0:61) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L0:62) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L0:63) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L0:64) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L0:65) (loadOffsetToD(SP, 5, -):198)
@ARG // write SP-$offset to ARG // (L0:66) (writeCall(Sys.init, 0):230)
M=D // (L0:67) (writeCall(Sys.init, 0):230)
@Sys.init // Jump to Sys.init // (L0:68) (writeCall(Sys.init, 0):230)
0;JMP // (L0:69) (writeCall(Sys.init, 0):230)
(33b1f99614b7ceb21fb78d26e579bf9e) // return back from function here (CALL ENDS) // (L0:70) (writeCall(Sys.init, 0):230)
(__GLOBAL_TERMINATE__) // (L0:70) (writeCall(Sys.init, 0):237)
@__GLOBAL_TERMINATE__ // (L0:70) (writeCall(Sys.init, 0):237)
0;JMP // (L0:71) (writeCall(Sys.init, 0):237)
(Class1.set) // function Class1.set 0 // (L0:72) (writeFunction(Class1.set, 0):156)
@ARG // (L1:72) (writePush(argument, 0):494)
A=M // (L1:73) (writePush(argument, 0):494)
D=M // (L1:74) (writePush(argument, 0):494)
@SP // (L1:75) (writeDtoSPAndBump():62)
A=M // (L1:76) (writeDtoSPAndBump():62)
M=D // (L1:77) (writeDtoSPAndBump():62)
@SP // (L1:78) (increaseSP():72)
M=M+1 // (L1:79) (increaseSP():72)
@SP //pop static 0 // (L2:80) (writePop(static, 0):598)
AM=M-1 // (L2:81) (writePop(static, 0):598)
D=M // (L2:82) (writePop(static, 0):598)
@Class1.0 // (L2:83) (writePop(static, 0):598)
M=D // end pop static 0 // (L2:84) (writePop(static, 0):598)
@ARG // argument 1 // (L3:85) (resolveSegmentToR13(argument, 1):555)
D=M // (L3:86) (resolveSegmentToR13(argument, 1):555)
@1 // write 1 to A // (L3:87) (resolveSegmentToR13(argument, 1):555)
D=D+A // D = segment+index // (L3:88) (resolveSegmentToR13(argument, 1):555)
@R13 // save it to R13 // (L3:89) (resolveSegmentToR13(argument, 1):555)
M=D // write @ARG+1 to R13 // (L3:90) (resolveSegmentToR13(argument, 1):555)
@R13 // (L3:91) (writePush(argument, 1):494)
A=M // (L3:92) (writePush(argument, 1):494)
D=M // (L3:93) (writePush(argument, 1):494)
@SP // (L3:94) (writeDtoSPAndBump():62)
A=M // (L3:95) (writeDtoSPAndBump():62)
M=D // (L3:96) (writeDtoSPAndBump():62)
@SP // (L3:97) (increaseSP():72)
M=M+1 // (L3:98) (increaseSP():72)
@SP //pop static 1 // (L4:99) (writePop(static, 1):598)
AM=M-1 // (L4:100) (writePop(static, 1):598)
D=M // (L4:101) (writePop(static, 1):598)
@Class1.1 // (L4:102) (writePop(static, 1):598)
M=D // end pop static 1 // (L4:103) (writePop(static, 1):598)
@0 // push constant 0 // (L5:104) (writePush(constant, 0):479)
D=A // (L5:105) (writePush(constant, 0):479)
@SP // (L5:106) (writeDtoSPAndBump():62)
A=M // (L5:107) (writeDtoSPAndBump():62)
M=D // (L5:108) (writeDtoSPAndBump():62)
@SP // (L5:109) (increaseSP():72)
M=M+1 // (L5:110) (increaseSP():72)
@LCL // save return address first // (L6:111) (writeReturn():143)
A=M-1 // (L6:112) (writeReturn():143)
A=A-1 // (L6:113) (writeReturn():143)
A=A-1 // (L6:114) (writeReturn():143)
A=A-1 // (L6:115) (writeReturn():143)
A=A-1 // (L6:116) (writeReturn():143)
D=M // D now holds the return address // (L6:117) (writeReturn():143)
@R14 // (L6:118) (writeReturn():143)
M=D // Wrote the return address to R14 // (L6:119) (writeReturn():143)
@SP // return for Class1.set starts // (L6:120) (writeReturn():143)
A=M-1 // (L6:121) (writeReturn():143)
D=M // (L6:122) (writeReturn():143)
@ARG // (L6:123) (writeReturn():143)
A=M // (L6:124) (writeReturn():143)
M=D // (L6:125) (writeReturn():143)
@ARG // (L6:126) (writeReturn():143)
D=M+1 // (L6:127) (writeReturn():143)
@SP // (L6:128) (writeReturn():143)
M=D // @SP = ARG+1 // (L6:129) (writeReturn():143)
@LCL // (L6:130) (writeReturn():143)
D=M // (L6:131) (writeReturn():143)
@R13 // (L6:132) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L6:133) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L6:134) (writeReturn():143)
D=M // D=*(*LCL-1) // (L6:135) (writeReturn():143)
@THAT // A=THAT // (L6:136) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L6:137) (writeReturn():143)
@R13 // (L6:138) (writeReturn():143)
A=M-1 // (L6:139) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L6:140) (writeReturn():143)
D=M // D=*(*LCL-2) // (L6:141) (writeReturn():143)
@THIS // A=THIS // (L6:142) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L6:143) (writeReturn():143)
@R13 // (L6:144) (writeReturn():143)
A=M-1 // (L6:145) (writeReturn():143)
A=A-1 // (L6:146) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L6:147) (writeReturn():143)
D=M // D=*(*LCL-3) // (L6:148) (writeReturn():143)
@ARG // A=ARG // (L6:149) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L6:150) (writeReturn():143)
@R13 // (L6:151) (writeReturn():143)
A=M-1 // (L6:152) (writeReturn():143)
A=A-1 // (L6:153) (writeReturn():143)
A=A-1 // (L6:154) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L6:155) (writeReturn():143)
D=M // D=*(*LCL-4) // (L6:156) (writeReturn():143)
@LCL // A=LCL // (L6:157) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L6:158) (writeReturn():143)
@R14 // (L6:159) (writeReturn():143)
A=M // (L6:160) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L6:161) (writeReturn():143)
(Class1.get) // function Class1.get 0 // (L7:162) (writeFunction(Class1.get, 0):156)
@Class1.0 // (L8:162) (writePush(static, 0):502)
D=M // (L8:163) (writePush(static, 0):502)
@SP // (L8:164) (writeDtoSPAndBump():62)
A=M // (L8:165) (writeDtoSPAndBump():62)
M=D // (L8:166) (writeDtoSPAndBump():62)
@SP // (L8:167) (increaseSP():72)
M=M+1 // (L8:168) (increaseSP():72)
@Class1.1 // (L9:169) (writePush(static, 1):502)
D=M // (L9:170) (writePush(static, 1):502)
@SP // (L9:171) (writeDtoSPAndBump():62)
A=M // (L9:172) (writeDtoSPAndBump():62)
M=D // (L9:173) (writeDtoSPAndBump():62)
@SP // (L9:174) (increaseSP():72)
M=M+1 // (L9:175) (increaseSP():72)
@SP // ==== sub ==== // (L10:176) (writeArithmetic(sub):408)
A=M-1 // (L10:177) (writeArithmetic(sub):408)
D=M // (L10:178) (writeArithmetic(sub):408)
A=A-1 // (L10:179) (binaryMath(sub):362)
M=D-M // (L10:180) (binaryMath(sub):362)
M=-M // (L10:181) (binaryMath(sub):367)
@SP // (L10:182) (writeArithmetic(sub):441)
M=M-1 // end sub // (L10:183) (writeArithmetic(sub):441)
@LCL // save return address first // (L11:184) (writeReturn():143)
A=M-1 // (L11:185) (writeReturn():143)
A=A-1 // (L11:186) (writeReturn():143)
A=A-1 // (L11:187) (writeReturn():143)
A=A-1 // (L11:188) (writeReturn():143)
A=A-1 // (L11:189) (writeReturn():143)
D=M // D now holds the return address // (L11:190) (writeReturn():143)
@R14 // (L11:191) (writeReturn():143)
M=D // Wrote the return address to R14 // (L11:192) (writeReturn():143)
@SP // return for Class1.get starts // (L11:193) (writeReturn():143)
A=M-1 // (L11:194) (writeReturn():143)
D=M // (L11:195) (writeReturn():143)
@ARG // (L11:196) (writeReturn():143)
A=M // (L11:197) (writeReturn():143)
M=D // (L11:198) (writeReturn():143)
@ARG // (L11:199) (writeReturn():143)
D=M+1 // (L11:200) (writeReturn():143)
@SP // (L11:201) (writeReturn():143)
M=D // @SP = ARG+1 // (L11:202) (writeReturn():143)
@LCL // (L11:203) (writeReturn():143)
D=M // (L11:204) (writeReturn():143)
@R13 // (L11:205) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L11:206) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L11:207) (writeReturn():143)
D=M // D=*(*LCL-1) // (L11:208) (writeReturn():143)
@THAT // A=THAT // (L11:209) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L11:210) (writeReturn():143)
@R13 // (L11:211) (writeReturn():143)
A=M-1 // (L11:212) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L11:213) (writeReturn():143)
D=M // D=*(*LCL-2) // (L11:214) (writeReturn():143)
@THIS // A=THIS // (L11:215) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L11:216) (writeReturn():143)
@R13 // (L11:217) (writeReturn():143)
A=M-1 // (L11:218) (writeReturn():143)
A=A-1 // (L11:219) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L11:220) (writeReturn():143)
D=M // D=*(*LCL-3) // (L11:221) (writeReturn():143)
@ARG // A=ARG // (L11:222) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L11:223) (writeReturn():143)
@R13 // (L11:224) (writeReturn():143)
A=M-1 // (L11:225) (writeReturn():143)
A=A-1 // (L11:226) (writeReturn():143)
A=A-1 // (L11:227) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L11:228) (writeReturn():143)
D=M // D=*(*LCL-4) // (L11:229) (writeReturn():143)
@LCL // A=LCL // (L11:230) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L11:231) (writeReturn():143)
@R14 // (L11:232) (writeReturn():143)
A=M // (L11:233) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L11:234) (writeReturn():143)
(Class2.set) // function Class2.set 0 // (L12:235) (writeFunction(Class2.set, 0):156)
@ARG // (L13:235) (writePush(argument, 0):494)
A=M // (L13:236) (writePush(argument, 0):494)
D=M // (L13:237) (writePush(argument, 0):494)
@SP // (L13:238) (writeDtoSPAndBump():62)
A=M // (L13:239) (writeDtoSPAndBump():62)
M=D // (L13:240) (writeDtoSPAndBump():62)
@SP // (L13:241) (increaseSP():72)
M=M+1 // (L13:242) (increaseSP():72)
@SP //pop static 0 // (L14:243) (writePop(static, 0):598)
AM=M-1 // (L14:244) (writePop(static, 0):598)
D=M // (L14:245) (writePop(static, 0):598)
@Class2.0 // (L14:246) (writePop(static, 0):598)
M=D // end pop static 0 // (L14:247) (writePop(static, 0):598)
@ARG // argument 1 // (L15:248) (resolveSegmentToR13(argument, 1):555)
D=M // (L15:249) (resolveSegmentToR13(argument, 1):555)
@1 // write 1 to A // (L15:250) (resolveSegmentToR13(argument, 1):555)
D=D+A // D = segment+index // (L15:251) (resolveSegmentToR13(argument, 1):555)
@R13 // save it to R13 // (L15:252) (resolveSegmentToR13(argument, 1):555)
M=D // write @ARG+1 to R13 // (L15:253) (resolveSegmentToR13(argument, 1):555)
@R13 // (L15:254) (writePush(argument, 1):494)
A=M // (L15:255) (writePush(argument, 1):494)
D=M // (L15:256) (writePush(argument, 1):494)
@SP // (L15:257) (writeDtoSPAndBump():62)
A=M // (L15:258) (writeDtoSPAndBump():62)
M=D // (L15:259) (writeDtoSPAndBump():62)
@SP // (L15:260) (increaseSP():72)
M=M+1 // (L15:261) (increaseSP():72)
@SP //pop static 1 // (L16:262) (writePop(static, 1):598)
AM=M-1 // (L16:263) (writePop(static, 1):598)
D=M // (L16:264) (writePop(static, 1):598)
@Class2.1 // (L16:265) (writePop(static, 1):598)
M=D // end pop static 1 // (L16:266) (writePop(static, 1):598)
@0 // push constant 0 // (L17:267) (writePush(constant, 0):479)
D=A // (L17:268) (writePush(constant, 0):479)
@SP // (L17:269) (writeDtoSPAndBump():62)
A=M // (L17:270) (writeDtoSPAndBump():62)
M=D // (L17:271) (writeDtoSPAndBump():62)
@SP // (L17:272) (increaseSP():72)
M=M+1 // (L17:273) (increaseSP():72)
@LCL // save return address first // (L18:274) (writeReturn():143)
A=M-1 // (L18:275) (writeReturn():143)
A=A-1 // (L18:276) (writeReturn():143)
A=A-1 // (L18:277) (writeReturn():143)
A=A-1 // (L18:278) (writeReturn():143)
A=A-1 // (L18:279) (writeReturn():143)
D=M // D now holds the return address // (L18:280) (writeReturn():143)
@R14 // (L18:281) (writeReturn():143)
M=D // Wrote the return address to R14 // (L18:282) (writeReturn():143)
@SP // return for Class2.set starts // (L18:283) (writeReturn():143)
A=M-1 // (L18:284) (writeReturn():143)
D=M // (L18:285) (writeReturn():143)
@ARG // (L18:286) (writeReturn():143)
A=M // (L18:287) (writeReturn():143)
M=D // (L18:288) (writeReturn():143)
@ARG // (L18:289) (writeReturn():143)
D=M+1 // (L18:290) (writeReturn():143)
@SP // (L18:291) (writeReturn():143)
M=D // @SP = ARG+1 // (L18:292) (writeReturn():143)
@LCL // (L18:293) (writeReturn():143)
D=M // (L18:294) (writeReturn():143)
@R13 // (L18:295) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L18:296) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L18:297) (writeReturn():143)
D=M // D=*(*LCL-1) // (L18:298) (writeReturn():143)
@THAT // A=THAT // (L18:299) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L18:300) (writeReturn():143)
@R13 // (L18:301) (writeReturn():143)
A=M-1 // (L18:302) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L18:303) (writeReturn():143)
D=M // D=*(*LCL-2) // (L18:304) (writeReturn():143)
@THIS // A=THIS // (L18:305) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L18:306) (writeReturn():143)
@R13 // (L18:307) (writeReturn():143)
A=M-1 // (L18:308) (writeReturn():143)
A=A-1 // (L18:309) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L18:310) (writeReturn():143)
D=M // D=*(*LCL-3) // (L18:311) (writeReturn():143)
@ARG // A=ARG // (L18:312) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L18:313) (writeReturn():143)
@R13 // (L18:314) (writeReturn():143)
A=M-1 // (L18:315) (writeReturn():143)
A=A-1 // (L18:316) (writeReturn():143)
A=A-1 // (L18:317) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L18:318) (writeReturn():143)
D=M // D=*(*LCL-4) // (L18:319) (writeReturn():143)
@LCL // A=LCL // (L18:320) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L18:321) (writeReturn():143)
@R14 // (L18:322) (writeReturn():143)
A=M // (L18:323) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L18:324) (writeReturn():143)
(Class2.get) // function Class2.get 0 // (L19:325) (writeFunction(Class2.get, 0):156)
@Class2.0 // (L20:325) (writePush(static, 0):502)
D=M // (L20:326) (writePush(static, 0):502)
@SP // (L20:327) (writeDtoSPAndBump():62)
A=M // (L20:328) (writeDtoSPAndBump():62)
M=D // (L20:329) (writeDtoSPAndBump():62)
@SP // (L20:330) (increaseSP():72)
M=M+1 // (L20:331) (increaseSP():72)
@Class2.1 // (L21:332) (writePush(static, 1):502)
D=M // (L21:333) (writePush(static, 1):502)
@SP // (L21:334) (writeDtoSPAndBump():62)
A=M // (L21:335) (writeDtoSPAndBump():62)
M=D // (L21:336) (writeDtoSPAndBump():62)
@SP // (L21:337) (increaseSP():72)
M=M+1 // (L21:338) (increaseSP():72)
@SP // ==== sub ==== // (L22:339) (writeArithmetic(sub):408)
A=M-1 // (L22:340) (writeArithmetic(sub):408)
D=M // (L22:341) (writeArithmetic(sub):408)
A=A-1 // (L22:342) (binaryMath(sub):362)
M=D-M // (L22:343) (binaryMath(sub):362)
M=-M // (L22:344) (binaryMath(sub):367)
@SP // (L22:345) (writeArithmetic(sub):441)
M=M-1 // end sub // (L22:346) (writeArithmetic(sub):441)
@LCL // save return address first // (L23:347) (writeReturn():143)
A=M-1 // (L23:348) (writeReturn():143)
A=A-1 // (L23:349) (writeReturn():143)
A=A-1 // (L23:350) (writeReturn():143)
A=A-1 // (L23:351) (writeReturn():143)
A=A-1 // (L23:352) (writeReturn():143)
D=M // D now holds the return address // (L23:353) (writeReturn():143)
@R14 // (L23:354) (writeReturn():143)
M=D // Wrote the return address to R14 // (L23:355) (writeReturn():143)
@SP // return for Class2.get starts // (L23:356) (writeReturn():143)
A=M-1 // (L23:357) (writeReturn():143)
D=M // (L23:358) (writeReturn():143)
@ARG // (L23:359) (writeReturn():143)
A=M // (L23:360) (writeReturn():143)
M=D // (L23:361) (writeReturn():143)
@ARG // (L23:362) (writeReturn():143)
D=M+1 // (L23:363) (writeReturn():143)
@SP // (L23:364) (writeReturn():143)
M=D // @SP = ARG+1 // (L23:365) (writeReturn():143)
@LCL // (L23:366) (writeReturn():143)
D=M // (L23:367) (writeReturn():143)
@R13 // (L23:368) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L23:369) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L23:370) (writeReturn():143)
D=M // D=*(*LCL-1) // (L23:371) (writeReturn():143)
@THAT // A=THAT // (L23:372) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L23:373) (writeReturn():143)
@R13 // (L23:374) (writeReturn():143)
A=M-1 // (L23:375) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L23:376) (writeReturn():143)
D=M // D=*(*LCL-2) // (L23:377) (writeReturn():143)
@THIS // A=THIS // (L23:378) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L23:379) (writeReturn():143)
@R13 // (L23:380) (writeReturn():143)
A=M-1 // (L23:381) (writeReturn():143)
A=A-1 // (L23:382) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L23:383) (writeReturn():143)
D=M // D=*(*LCL-3) // (L23:384) (writeReturn():143)
@ARG // A=ARG // (L23:385) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L23:386) (writeReturn():143)
@R13 // (L23:387) (writeReturn():143)
A=M-1 // (L23:388) (writeReturn():143)
A=A-1 // (L23:389) (writeReturn():143)
A=A-1 // (L23:390) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L23:391) (writeReturn():143)
D=M // D=*(*LCL-4) // (L23:392) (writeReturn():143)
@LCL // A=LCL // (L23:393) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L23:394) (writeReturn():143)
@R14 // (L23:395) (writeReturn():143)
A=M // (L23:396) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L23:397) (writeReturn():143)
(Sys.init) // function Sys.init 0 // (L24:398) (writeFunction(Sys.init, 0):156)
@6 // push constant 6 // (L25:398) (writePush(constant, 6):479)
D=A // (L25:399) (writePush(constant, 6):479)
@SP // (L25:400) (writeDtoSPAndBump():62)
A=M // (L25:401) (writeDtoSPAndBump():62)
M=D // (L25:402) (writeDtoSPAndBump():62)
@SP // (L25:403) (increaseSP():72)
M=M+1 // (L25:404) (increaseSP():72)
@8 // push constant 8 // (L26:405) (writePush(constant, 8):479)
D=A // (L26:406) (writePush(constant, 8):479)
@SP // (L26:407) (writeDtoSPAndBump():62)
A=M // (L26:408) (writeDtoSPAndBump():62)
M=D // (L26:409) (writeDtoSPAndBump():62)
@SP // (L26:410) (increaseSP():72)
M=M+1 // (L26:411) (increaseSP():72)
@aea8a00a813b467f414d81e6983352f4 // (L27:412) (push(label, aea8a00a813b467f414d81e6983352f4):53)
D=A // (L27:413) (push(label, aea8a00a813b467f414d81e6983352f4):53)
@SP // (L27:414) (writeDtoSPAndBump():62)
A=M // (L27:415) (writeDtoSPAndBump():62)
M=D // (L27:416) (writeDtoSPAndBump():62)
@SP // (L27:417) (increaseSP():72)
M=M+1 // (L27:418) (increaseSP():72)
@LCL // (L27:419) (push(register, LCL, 1):42)
AD=M // (L27:420) (push(register, LCL, 1):42)
@SP // (L27:421) (writeDtoSPAndBump():62)
A=M // (L27:422) (writeDtoSPAndBump():62)
M=D // (L27:423) (writeDtoSPAndBump():62)
@SP // (L27:424) (increaseSP():72)
M=M+1 // (L27:425) (increaseSP():72)
@ARG // (L27:426) (push(register, ARG, 1):42)
AD=M // (L27:427) (push(register, ARG, 1):42)
@SP // (L27:428) (writeDtoSPAndBump():62)
A=M // (L27:429) (writeDtoSPAndBump():62)
M=D // (L27:430) (writeDtoSPAndBump():62)
@SP // (L27:431) (increaseSP():72)
M=M+1 // (L27:432) (increaseSP():72)
@THIS // (L27:433) (push(register, THIS, 1):42)
AD=M // (L27:434) (push(register, THIS, 1):42)
@SP // (L27:435) (writeDtoSPAndBump():62)
A=M // (L27:436) (writeDtoSPAndBump():62)
M=D // (L27:437) (writeDtoSPAndBump():62)
@SP // (L27:438) (increaseSP():72)
M=M+1 // (L27:439) (increaseSP():72)
@THAT // (L27:440) (push(register, THAT, 1):42)
AD=M // (L27:441) (push(register, THAT, 1):42)
@SP // (L27:442) (writeDtoSPAndBump():62)
A=M // (L27:443) (writeDtoSPAndBump():62)
M=D // (L27:444) (writeDtoSPAndBump():62)
@SP // (L27:445) (increaseSP():72)
M=M+1 // (L27:446) (increaseSP():72)
@SP // (L27:447) (copy(SP, LCL):186)
D=M // (L27:448) (copy(SP, LCL):186)
@LCL // (L27:449) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L27:450) (copy(SP, LCL):186)
@SP // (L27:451) (loadOffsetToD(SP, 7, -):193)
D=M // (L27:452) (loadOffsetToD(SP, 7, -):193)
D=D-1 // should repeat 7 times // (L27:453) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:454) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:455) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:456) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:457) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:458) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L27:459) (loadOffsetToD(SP, 7, -):198)
@ARG // write SP-$offset to ARG // (L27:460) (writeCall(Class1.set, 2):230)
M=D // (L27:461) (writeCall(Class1.set, 2):230)
@Class1.set // Jump to Class1.set // (L27:462) (writeCall(Class1.set, 2):230)
0;JMP // (L27:463) (writeCall(Class1.set, 2):230)
(aea8a00a813b467f414d81e6983352f4) // return back from function here (CALL ENDS) // (L27:464) (writeCall(Class1.set, 2):230)
@SP // (L28:464) (writePop(temp, 0):621)
AM=M-1 // (L28:465) (writePop(temp, 0):621)
D=M // (L28:466) (writePop(temp, 0):621)
@R5 // (L28:467) (writePop(temp, 0):621)
M=D // end pop temp 0 // (L28:468) (writePop(temp, 0):621)
@23 // push constant 23 // (L29:469) (writePush(constant, 23):479)
D=A // (L29:470) (writePush(constant, 23):479)
@SP // (L29:471) (writeDtoSPAndBump():62)
A=M // (L29:472) (writeDtoSPAndBump():62)
M=D // (L29:473) (writeDtoSPAndBump():62)
@SP // (L29:474) (increaseSP():72)
M=M+1 // (L29:475) (increaseSP():72)
@15 // push constant 15 // (L30:476) (writePush(constant, 15):479)
D=A // (L30:477) (writePush(constant, 15):479)
@SP // (L30:478) (writeDtoSPAndBump():62)
A=M // (L30:479) (writeDtoSPAndBump():62)
M=D // (L30:480) (writeDtoSPAndBump():62)
@SP // (L30:481) (increaseSP():72)
M=M+1 // (L30:482) (increaseSP():72)
@0ac0a58c342d73fd63518ed52cbebcca // (L31:483) (push(label, 0ac0a58c342d73fd63518ed52cbebcca):53)
D=A // (L31:484) (push(label, 0ac0a58c342d73fd63518ed52cbebcca):53)
@SP // (L31:485) (writeDtoSPAndBump():62)
A=M // (L31:486) (writeDtoSPAndBump():62)
M=D // (L31:487) (writeDtoSPAndBump():62)
@SP // (L31:488) (increaseSP():72)
M=M+1 // (L31:489) (increaseSP():72)
@LCL // (L31:490) (push(register, LCL, 1):42)
AD=M // (L31:491) (push(register, LCL, 1):42)
@SP // (L31:492) (writeDtoSPAndBump():62)
A=M // (L31:493) (writeDtoSPAndBump():62)
M=D // (L31:494) (writeDtoSPAndBump():62)
@SP // (L31:495) (increaseSP():72)
M=M+1 // (L31:496) (increaseSP():72)
@ARG // (L31:497) (push(register, ARG, 1):42)
AD=M // (L31:498) (push(register, ARG, 1):42)
@SP // (L31:499) (writeDtoSPAndBump():62)
A=M // (L31:500) (writeDtoSPAndBump():62)
M=D // (L31:501) (writeDtoSPAndBump():62)
@SP // (L31:502) (increaseSP():72)
M=M+1 // (L31:503) (increaseSP():72)
@THIS // (L31:504) (push(register, THIS, 1):42)
AD=M // (L31:505) (push(register, THIS, 1):42)
@SP // (L31:506) (writeDtoSPAndBump():62)
A=M // (L31:507) (writeDtoSPAndBump():62)
M=D // (L31:508) (writeDtoSPAndBump():62)
@SP // (L31:509) (increaseSP():72)
M=M+1 // (L31:510) (increaseSP():72)
@THAT // (L31:511) (push(register, THAT, 1):42)
AD=M // (L31:512) (push(register, THAT, 1):42)
@SP // (L31:513) (writeDtoSPAndBump():62)
A=M // (L31:514) (writeDtoSPAndBump():62)
M=D // (L31:515) (writeDtoSPAndBump():62)
@SP // (L31:516) (increaseSP():72)
M=M+1 // (L31:517) (increaseSP():72)
@SP // (L31:518) (copy(SP, LCL):186)
D=M // (L31:519) (copy(SP, LCL):186)
@LCL // (L31:520) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L31:521) (copy(SP, LCL):186)
@SP // (L31:522) (loadOffsetToD(SP, 7, -):193)
D=M // (L31:523) (loadOffsetToD(SP, 7, -):193)
D=D-1 // should repeat 7 times // (L31:524) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:525) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:526) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:527) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:528) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:529) (loadOffsetToD(SP, 7, -):198)
D=D-1 // should repeat 7 times // (L31:530) (loadOffsetToD(SP, 7, -):198)
@ARG // write SP-$offset to ARG // (L31:531) (writeCall(Class2.set, 2):230)
M=D // (L31:532) (writeCall(Class2.set, 2):230)
@Class2.set // Jump to Class2.set // (L31:533) (writeCall(Class2.set, 2):230)
0;JMP // (L31:534) (writeCall(Class2.set, 2):230)
(0ac0a58c342d73fd63518ed52cbebcca) // return back from function here (CALL ENDS) // (L31:535) (writeCall(Class2.set, 2):230)
@SP // (L32:535) (writePop(temp, 0):621)
AM=M-1 // (L32:536) (writePop(temp, 0):621)
D=M // (L32:537) (writePop(temp, 0):621)
@R5 // (L32:538) (writePop(temp, 0):621)
M=D // end pop temp 0 // (L32:539) (writePop(temp, 0):621)
@b1c23d05017207e2f47201f7bf7111d4 // (L33:540) (push(label, b1c23d05017207e2f47201f7bf7111d4):53)
D=A // (L33:541) (push(label, b1c23d05017207e2f47201f7bf7111d4):53)
@SP // (L33:542) (writeDtoSPAndBump():62)
A=M // (L33:543) (writeDtoSPAndBump():62)
M=D // (L33:544) (writeDtoSPAndBump():62)
@SP // (L33:545) (increaseSP():72)
M=M+1 // (L33:546) (increaseSP():72)
@LCL // (L33:547) (push(register, LCL, 1):42)
AD=M // (L33:548) (push(register, LCL, 1):42)
@SP // (L33:549) (writeDtoSPAndBump():62)
A=M // (L33:550) (writeDtoSPAndBump():62)
M=D // (L33:551) (writeDtoSPAndBump():62)
@SP // (L33:552) (increaseSP():72)
M=M+1 // (L33:553) (increaseSP():72)
@ARG // (L33:554) (push(register, ARG, 1):42)
AD=M // (L33:555) (push(register, ARG, 1):42)
@SP // (L33:556) (writeDtoSPAndBump():62)
A=M // (L33:557) (writeDtoSPAndBump():62)
M=D // (L33:558) (writeDtoSPAndBump():62)
@SP // (L33:559) (increaseSP():72)
M=M+1 // (L33:560) (increaseSP():72)
@THIS // (L33:561) (push(register, THIS, 1):42)
AD=M // (L33:562) (push(register, THIS, 1):42)
@SP // (L33:563) (writeDtoSPAndBump():62)
A=M // (L33:564) (writeDtoSPAndBump():62)
M=D // (L33:565) (writeDtoSPAndBump():62)
@SP // (L33:566) (increaseSP():72)
M=M+1 // (L33:567) (increaseSP():72)
@THAT // (L33:568) (push(register, THAT, 1):42)
AD=M // (L33:569) (push(register, THAT, 1):42)
@SP // (L33:570) (writeDtoSPAndBump():62)
A=M // (L33:571) (writeDtoSPAndBump():62)
M=D // (L33:572) (writeDtoSPAndBump():62)
@SP // (L33:573) (increaseSP():72)
M=M+1 // (L33:574) (increaseSP():72)
@SP // (L33:575) (copy(SP, LCL):186)
D=M // (L33:576) (copy(SP, LCL):186)
@LCL // (L33:577) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L33:578) (copy(SP, LCL):186)
@SP // (L33:579) (loadOffsetToD(SP, 5, -):193)
D=M // (L33:580) (loadOffsetToD(SP, 5, -):193)
D=D-1 // should repeat 5 times // (L33:581) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L33:582) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L33:583) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L33:584) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L33:585) (loadOffsetToD(SP, 5, -):198)
@ARG // write SP-$offset to ARG // (L33:586) (writeCall(Class1.get, 0):230)
M=D // (L33:587) (writeCall(Class1.get, 0):230)
@Class1.get // Jump to Class1.get // (L33:588) (writeCall(Class1.get, 0):230)
0;JMP // (L33:589) (writeCall(Class1.get, 0):230)
(b1c23d05017207e2f47201f7bf7111d4) // return back from function here (CALL ENDS) // (L33:590) (writeCall(Class1.get, 0):230)
@2890dd9d65ebe3c3085793074927559c // (L34:590) (push(label, 2890dd9d65ebe3c3085793074927559c):53)
D=A // (L34:591) (push(label, 2890dd9d65ebe3c3085793074927559c):53)
@SP // (L34:592) (writeDtoSPAndBump():62)
A=M // (L34:593) (writeDtoSPAndBump():62)
M=D // (L34:594) (writeDtoSPAndBump():62)
@SP // (L34:595) (increaseSP():72)
M=M+1 // (L34:596) (increaseSP():72)
@LCL // (L34:597) (push(register, LCL, 1):42)
AD=M // (L34:598) (push(register, LCL, 1):42)
@SP // (L34:599) (writeDtoSPAndBump():62)
A=M // (L34:600) (writeDtoSPAndBump():62)
M=D // (L34:601) (writeDtoSPAndBump():62)
@SP // (L34:602) (increaseSP():72)
M=M+1 // (L34:603) (increaseSP():72)
@ARG // (L34:604) (push(register, ARG, 1):42)
AD=M // (L34:605) (push(register, ARG, 1):42)
@SP // (L34:606) (writeDtoSPAndBump():62)
A=M // (L34:607) (writeDtoSPAndBump():62)
M=D // (L34:608) (writeDtoSPAndBump():62)
@SP // (L34:609) (increaseSP():72)
M=M+1 // (L34:610) (increaseSP():72)
@THIS // (L34:611) (push(register, THIS, 1):42)
AD=M // (L34:612) (push(register, THIS, 1):42)
@SP // (L34:613) (writeDtoSPAndBump():62)
A=M // (L34:614) (writeDtoSPAndBump():62)
M=D // (L34:615) (writeDtoSPAndBump():62)
@SP // (L34:616) (increaseSP():72)
M=M+1 // (L34:617) (increaseSP():72)
@THAT // (L34:618) (push(register, THAT, 1):42)
AD=M // (L34:619) (push(register, THAT, 1):42)
@SP // (L34:620) (writeDtoSPAndBump():62)
A=M // (L34:621) (writeDtoSPAndBump():62)
M=D // (L34:622) (writeDtoSPAndBump():62)
@SP // (L34:623) (increaseSP():72)
M=M+1 // (L34:624) (increaseSP():72)
@SP // (L34:625) (copy(SP, LCL):186)
D=M // (L34:626) (copy(SP, LCL):186)
@LCL // (L34:627) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L34:628) (copy(SP, LCL):186)
@SP // (L34:629) (loadOffsetToD(SP, 5, -):193)
D=M // (L34:630) (loadOffsetToD(SP, 5, -):193)
D=D-1 // should repeat 5 times // (L34:631) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L34:632) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L34:633) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L34:634) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L34:635) (loadOffsetToD(SP, 5, -):198)
@ARG // write SP-$offset to ARG // (L34:636) (writeCall(Class2.get, 0):230)
M=D // (L34:637) (writeCall(Class2.get, 0):230)
@Class2.get // Jump to Class2.get // (L34:638) (writeCall(Class2.get, 0):230)
0;JMP // (L34:639) (writeCall(Class2.get, 0):230)
(2890dd9d65ebe3c3085793074927559c) // return back from function here (CALL ENDS) // (L34:640) (writeCall(Class2.get, 0):230)
(Sys.initWHILE) // end label WHILE // (L35:640) (writeLabel(WHILE):308)
@Sys.initWHILE // (L36:640) (writeGoto(WHILE):329)
0;JMP // end goto WHILE // (L36:641) (writeGoto(WHILE):329)
@643 // (L37:642) (close():298)
0;JMP // (L37:643) (close():298)