nand2tetris/projects/08/FunctionCalls/NestedCall/NestedCall.asm

565 lines
29 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)
@0b03b426552100ee665057636aa828eb // (L0:20) (push(label, 0b03b426552100ee665057636aa828eb):53)
D=A // (L0:21) (push(label, 0b03b426552100ee665057636aa828eb):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)
(0b03b426552100ee665057636aa828eb) // 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)
(Sys.init) // function Sys.init 0 // (L0:72) (writeFunction(Sys.init, 0):156)
@4000 // push constant 4000 // (L1:72) (writePush(constant, 4000):479)
D=A // (L1:73) (writePush(constant, 4000):479)
@SP // (L1:74) (writeDtoSPAndBump():62)
A=M // (L1:75) (writeDtoSPAndBump():62)
M=D // (L1:76) (writeDtoSPAndBump():62)
@SP // (L1:77) (increaseSP():72)
M=M+1 // (L1:78) (increaseSP():72)
@SP // pop // (L2:79) (writePop(pointer, 0):610)
AM=M-1 // (L2:80) (writePop(pointer, 0):610)
D=M // (L2:81) (writePop(pointer, 0):610)
@THIS // (L2:82) (writePop(pointer, 0):610)
M=D // // (L2:83) (writePop(pointer, 0):610)
@5000 // push constant 5000 // (L3:84) (writePush(constant, 5000):479)
D=A // (L3:85) (writePush(constant, 5000):479)
@SP // (L3:86) (writeDtoSPAndBump():62)
A=M // (L3:87) (writeDtoSPAndBump():62)
M=D // (L3:88) (writeDtoSPAndBump():62)
@SP // (L3:89) (increaseSP():72)
M=M+1 // (L3:90) (increaseSP():72)
@SP // pop // (L4:91) (writePop(pointer, 1):610)
AM=M-1 // (L4:92) (writePop(pointer, 1):610)
D=M // (L4:93) (writePop(pointer, 1):610)
@THAT // (L4:94) (writePop(pointer, 1):610)
M=D // // (L4:95) (writePop(pointer, 1):610)
@85ac01c7c3896175d6727eb9db079220 // (L5:96) (push(label, 85ac01c7c3896175d6727eb9db079220):53)
D=A // (L5:97) (push(label, 85ac01c7c3896175d6727eb9db079220):53)
@SP // (L5:98) (writeDtoSPAndBump():62)
A=M // (L5:99) (writeDtoSPAndBump():62)
M=D // (L5:100) (writeDtoSPAndBump():62)
@SP // (L5:101) (increaseSP():72)
M=M+1 // (L5:102) (increaseSP():72)
@LCL // (L5:103) (push(register, LCL, 1):42)
AD=M // (L5:104) (push(register, LCL, 1):42)
@SP // (L5:105) (writeDtoSPAndBump():62)
A=M // (L5:106) (writeDtoSPAndBump():62)
M=D // (L5:107) (writeDtoSPAndBump():62)
@SP // (L5:108) (increaseSP():72)
M=M+1 // (L5:109) (increaseSP():72)
@ARG // (L5:110) (push(register, ARG, 1):42)
AD=M // (L5:111) (push(register, ARG, 1):42)
@SP // (L5:112) (writeDtoSPAndBump():62)
A=M // (L5:113) (writeDtoSPAndBump():62)
M=D // (L5:114) (writeDtoSPAndBump():62)
@SP // (L5:115) (increaseSP():72)
M=M+1 // (L5:116) (increaseSP():72)
@THIS // (L5:117) (push(register, THIS, 1):42)
AD=M // (L5:118) (push(register, THIS, 1):42)
@SP // (L5:119) (writeDtoSPAndBump():62)
A=M // (L5:120) (writeDtoSPAndBump():62)
M=D // (L5:121) (writeDtoSPAndBump():62)
@SP // (L5:122) (increaseSP():72)
M=M+1 // (L5:123) (increaseSP():72)
@THAT // (L5:124) (push(register, THAT, 1):42)
AD=M // (L5:125) (push(register, THAT, 1):42)
@SP // (L5:126) (writeDtoSPAndBump():62)
A=M // (L5:127) (writeDtoSPAndBump():62)
M=D // (L5:128) (writeDtoSPAndBump():62)
@SP // (L5:129) (increaseSP():72)
M=M+1 // (L5:130) (increaseSP():72)
@SP // (L5:131) (copy(SP, LCL):186)
D=M // (L5:132) (copy(SP, LCL):186)
@LCL // (L5:133) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L5:134) (copy(SP, LCL):186)
@SP // (L5:135) (loadOffsetToD(SP, 5, -):193)
D=M // (L5:136) (loadOffsetToD(SP, 5, -):193)
D=D-1 // should repeat 5 times // (L5:137) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L5:138) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L5:139) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L5:140) (loadOffsetToD(SP, 5, -):198)
D=D-1 // should repeat 5 times // (L5:141) (loadOffsetToD(SP, 5, -):198)
@ARG // write SP-$offset to ARG // (L5:142) (writeCall(Sys.main, 0):230)
M=D // (L5:143) (writeCall(Sys.main, 0):230)
@Sys.main // Jump to Sys.main // (L5:144) (writeCall(Sys.main, 0):230)
0;JMP // (L5:145) (writeCall(Sys.main, 0):230)
(85ac01c7c3896175d6727eb9db079220) // return back from function here (CALL ENDS) // (L5:146) (writeCall(Sys.main, 0):230)
@SP // (L6:146) (writePop(temp, 1):621)
AM=M-1 // (L6:147) (writePop(temp, 1):621)
D=M // (L6:148) (writePop(temp, 1):621)
@R6 // (L6:149) (writePop(temp, 1):621)
M=D // end pop temp 1 // (L6:150) (writePop(temp, 1):621)
(Sys.initLOOP) // end label LOOP // (L7:151) (writeLabel(LOOP):308)
@Sys.initLOOP // (L8:151) (writeGoto(LOOP):329)
0;JMP // end goto LOOP // (L8:152) (writeGoto(LOOP):329)
(Sys.main) // function Sys.main 5 // (L9:153) (writeFunction(Sys.main, 5):156)
@SP // (L9:153) (writeFunction(Sys.main, 5):165)
A=M // (L9:154) (writeFunction(Sys.main, 5):165)
M=0 // (L9:155) (writeFunction(Sys.main, 5):174)
@SP // (L9:156) (writeFunction(Sys.main, 5):174)
AM=M+1 // (L9:157) (writeFunction(Sys.main, 5):174)
M=0 // (L9:158) (writeFunction(Sys.main, 5):174)
@SP // (L9:159) (writeFunction(Sys.main, 5):174)
AM=M+1 // (L9:160) (writeFunction(Sys.main, 5):174)
M=0 // (L9:161) (writeFunction(Sys.main, 5):174)
@SP // (L9:162) (writeFunction(Sys.main, 5):174)
AM=M+1 // (L9:163) (writeFunction(Sys.main, 5):174)
M=0 // (L9:164) (writeFunction(Sys.main, 5):174)
@SP // (L9:165) (writeFunction(Sys.main, 5):174)
AM=M+1 // (L9:166) (writeFunction(Sys.main, 5):174)
M=0 // (L9:167) (writeFunction(Sys.main, 5):174)
@SP // (L9:168) (writeFunction(Sys.main, 5):174)
AM=M+1 // (L9:169) (writeFunction(Sys.main, 5):174)
@4001 // push constant 4001 // (L10:170) (writePush(constant, 4001):479)
D=A // (L10:171) (writePush(constant, 4001):479)
@SP // (L10:172) (writeDtoSPAndBump():62)
A=M // (L10:173) (writeDtoSPAndBump():62)
M=D // (L10:174) (writeDtoSPAndBump():62)
@SP // (L10:175) (increaseSP():72)
M=M+1 // (L10:176) (increaseSP():72)
@SP // pop // (L11:177) (writePop(pointer, 0):610)
AM=M-1 // (L11:178) (writePop(pointer, 0):610)
D=M // (L11:179) (writePop(pointer, 0):610)
@THIS // (L11:180) (writePop(pointer, 0):610)
M=D // // (L11:181) (writePop(pointer, 0):610)
@5001 // push constant 5001 // (L12:182) (writePush(constant, 5001):479)
D=A // (L12:183) (writePush(constant, 5001):479)
@SP // (L12:184) (writeDtoSPAndBump():62)
A=M // (L12:185) (writeDtoSPAndBump():62)
M=D // (L12:186) (writeDtoSPAndBump():62)
@SP // (L12:187) (increaseSP():72)
M=M+1 // (L12:188) (increaseSP():72)
@SP // pop // (L13:189) (writePop(pointer, 1):610)
AM=M-1 // (L13:190) (writePop(pointer, 1):610)
D=M // (L13:191) (writePop(pointer, 1):610)
@THAT // (L13:192) (writePop(pointer, 1):610)
M=D // // (L13:193) (writePop(pointer, 1):610)
@200 // push constant 200 // (L14:194) (writePush(constant, 200):479)
D=A // (L14:195) (writePush(constant, 200):479)
@SP // (L14:196) (writeDtoSPAndBump():62)
A=M // (L14:197) (writeDtoSPAndBump():62)
M=D // (L14:198) (writeDtoSPAndBump():62)
@SP // (L14:199) (increaseSP():72)
M=M+1 // (L14:200) (increaseSP():72)
@LCL // local 1 // (L15:201) (resolveSegmentToR13(local, 1):555)
D=M // (L15:202) (resolveSegmentToR13(local, 1):555)
@1 // write 1 to A // (L15:203) (resolveSegmentToR13(local, 1):555)
D=D+A // D = segment+index // (L15:204) (resolveSegmentToR13(local, 1):555)
@R13 // save it to R13 // (L15:205) (resolveSegmentToR13(local, 1):555)
M=D // write @LCL+1 to R13 // (L15:206) (resolveSegmentToR13(local, 1):555)
@SP // pop // (L15:207) (writePop(local, 1):587)
AM=M-1 // (L15:208) (writePop(local, 1):587)
D=M // (L15:209) (writePop(local, 1):587)
@R13 // (L15:210) (writePop(local, 1):587)
A=M // Read @R13 to A (for local 1) // (L15:211) (writePop(local, 1):587)
M=D // end pop local 1 // (L15:212) (writePop(local, 1):587)
@40 // push constant 40 // (L16:213) (writePush(constant, 40):479)
D=A // (L16:214) (writePush(constant, 40):479)
@SP // (L16:215) (writeDtoSPAndBump():62)
A=M // (L16:216) (writeDtoSPAndBump():62)
M=D // (L16:217) (writeDtoSPAndBump():62)
@SP // (L16:218) (increaseSP():72)
M=M+1 // (L16:219) (increaseSP():72)
@LCL // local 2 // (L17:220) (resolveSegmentToR13(local, 2):555)
D=M // (L17:221) (resolveSegmentToR13(local, 2):555)
@2 // write 2 to A // (L17:222) (resolveSegmentToR13(local, 2):555)
D=D+A // D = segment+index // (L17:223) (resolveSegmentToR13(local, 2):555)
@R13 // save it to R13 // (L17:224) (resolveSegmentToR13(local, 2):555)
M=D // write @LCL+2 to R13 // (L17:225) (resolveSegmentToR13(local, 2):555)
@SP // pop // (L17:226) (writePop(local, 2):587)
AM=M-1 // (L17:227) (writePop(local, 2):587)
D=M // (L17:228) (writePop(local, 2):587)
@R13 // (L17:229) (writePop(local, 2):587)
A=M // Read @R13 to A (for local 2) // (L17:230) (writePop(local, 2):587)
M=D // end pop local 2 // (L17:231) (writePop(local, 2):587)
@6 // push constant 6 // (L18:232) (writePush(constant, 6):479)
D=A // (L18:233) (writePush(constant, 6):479)
@SP // (L18:234) (writeDtoSPAndBump():62)
A=M // (L18:235) (writeDtoSPAndBump():62)
M=D // (L18:236) (writeDtoSPAndBump():62)
@SP // (L18:237) (increaseSP():72)
M=M+1 // (L18:238) (increaseSP():72)
@LCL // local 3 // (L19:239) (resolveSegmentToR13(local, 3):555)
D=M // (L19:240) (resolveSegmentToR13(local, 3):555)
@3 // write 3 to A // (L19:241) (resolveSegmentToR13(local, 3):555)
D=D+A // D = segment+index // (L19:242) (resolveSegmentToR13(local, 3):555)
@R13 // save it to R13 // (L19:243) (resolveSegmentToR13(local, 3):555)
M=D // write @LCL+3 to R13 // (L19:244) (resolveSegmentToR13(local, 3):555)
@SP // pop // (L19:245) (writePop(local, 3):587)
AM=M-1 // (L19:246) (writePop(local, 3):587)
D=M // (L19:247) (writePop(local, 3):587)
@R13 // (L19:248) (writePop(local, 3):587)
A=M // Read @R13 to A (for local 3) // (L19:249) (writePop(local, 3):587)
M=D // end pop local 3 // (L19:250) (writePop(local, 3):587)
@123 // push constant 123 // (L20:251) (writePush(constant, 123):479)
D=A // (L20:252) (writePush(constant, 123):479)
@SP // (L20:253) (writeDtoSPAndBump():62)
A=M // (L20:254) (writeDtoSPAndBump():62)
M=D // (L20:255) (writeDtoSPAndBump():62)
@SP // (L20:256) (increaseSP():72)
M=M+1 // (L20:257) (increaseSP():72)
@60517bb2dffc36cf816c79655b05da50 // (L21:258) (push(label, 60517bb2dffc36cf816c79655b05da50):53)
D=A // (L21:259) (push(label, 60517bb2dffc36cf816c79655b05da50):53)
@SP // (L21:260) (writeDtoSPAndBump():62)
A=M // (L21:261) (writeDtoSPAndBump():62)
M=D // (L21:262) (writeDtoSPAndBump():62)
@SP // (L21:263) (increaseSP():72)
M=M+1 // (L21:264) (increaseSP():72)
@LCL // (L21:265) (push(register, LCL, 1):42)
AD=M // (L21:266) (push(register, LCL, 1):42)
@SP // (L21:267) (writeDtoSPAndBump():62)
A=M // (L21:268) (writeDtoSPAndBump():62)
M=D // (L21:269) (writeDtoSPAndBump():62)
@SP // (L21:270) (increaseSP():72)
M=M+1 // (L21:271) (increaseSP():72)
@ARG // (L21:272) (push(register, ARG, 1):42)
AD=M // (L21:273) (push(register, ARG, 1):42)
@SP // (L21:274) (writeDtoSPAndBump():62)
A=M // (L21:275) (writeDtoSPAndBump():62)
M=D // (L21:276) (writeDtoSPAndBump():62)
@SP // (L21:277) (increaseSP():72)
M=M+1 // (L21:278) (increaseSP():72)
@THIS // (L21:279) (push(register, THIS, 1):42)
AD=M // (L21:280) (push(register, THIS, 1):42)
@SP // (L21:281) (writeDtoSPAndBump():62)
A=M // (L21:282) (writeDtoSPAndBump():62)
M=D // (L21:283) (writeDtoSPAndBump():62)
@SP // (L21:284) (increaseSP():72)
M=M+1 // (L21:285) (increaseSP():72)
@THAT // (L21:286) (push(register, THAT, 1):42)
AD=M // (L21:287) (push(register, THAT, 1):42)
@SP // (L21:288) (writeDtoSPAndBump():62)
A=M // (L21:289) (writeDtoSPAndBump():62)
M=D // (L21:290) (writeDtoSPAndBump():62)
@SP // (L21:291) (increaseSP():72)
M=M+1 // (L21:292) (increaseSP():72)
@SP // (L21:293) (copy(SP, LCL):186)
D=M // (L21:294) (copy(SP, LCL):186)
@LCL // (L21:295) (copy(SP, LCL):186)
M=D // Update LCL=SP // (L21:296) (copy(SP, LCL):186)
@SP // (L21:297) (loadOffsetToD(SP, 6, -):193)
D=M // (L21:298) (loadOffsetToD(SP, 6, -):193)
D=D-1 // should repeat 6 times // (L21:299) (loadOffsetToD(SP, 6, -):198)
D=D-1 // should repeat 6 times // (L21:300) (loadOffsetToD(SP, 6, -):198)
D=D-1 // should repeat 6 times // (L21:301) (loadOffsetToD(SP, 6, -):198)
D=D-1 // should repeat 6 times // (L21:302) (loadOffsetToD(SP, 6, -):198)
D=D-1 // should repeat 6 times // (L21:303) (loadOffsetToD(SP, 6, -):198)
D=D-1 // should repeat 6 times // (L21:304) (loadOffsetToD(SP, 6, -):198)
@ARG // write SP-$offset to ARG // (L21:305) (writeCall(Sys.add12, 1):230)
M=D // (L21:306) (writeCall(Sys.add12, 1):230)
@Sys.add12 // Jump to Sys.add12 // (L21:307) (writeCall(Sys.add12, 1):230)
0;JMP // (L21:308) (writeCall(Sys.add12, 1):230)
(60517bb2dffc36cf816c79655b05da50) // return back from function here (CALL ENDS) // (L21:309) (writeCall(Sys.add12, 1):230)
@SP // (L22:309) (writePop(temp, 0):621)
AM=M-1 // (L22:310) (writePop(temp, 0):621)
D=M // (L22:311) (writePop(temp, 0):621)
@R5 // (L22:312) (writePop(temp, 0):621)
M=D // end pop temp 0 // (L22:313) (writePop(temp, 0):621)
@LCL // (L23:314) (writePush(local, 0):494)
A=M // (L23:315) (writePush(local, 0):494)
D=M // (L23:316) (writePush(local, 0):494)
@SP // (L23:317) (writeDtoSPAndBump():62)
A=M // (L23:318) (writeDtoSPAndBump():62)
M=D // (L23:319) (writeDtoSPAndBump():62)
@SP // (L23:320) (increaseSP():72)
M=M+1 // (L23:321) (increaseSP():72)
@LCL // local 1 // (L24:322) (resolveSegmentToR13(local, 1):555)
D=M // (L24:323) (resolveSegmentToR13(local, 1):555)
@1 // write 1 to A // (L24:324) (resolveSegmentToR13(local, 1):555)
D=D+A // D = segment+index // (L24:325) (resolveSegmentToR13(local, 1):555)
@R13 // save it to R13 // (L24:326) (resolveSegmentToR13(local, 1):555)
M=D // write @LCL+1 to R13 // (L24:327) (resolveSegmentToR13(local, 1):555)
@R13 // (L24:328) (writePush(local, 1):494)
A=M // (L24:329) (writePush(local, 1):494)
D=M // (L24:330) (writePush(local, 1):494)
@SP // (L24:331) (writeDtoSPAndBump():62)
A=M // (L24:332) (writeDtoSPAndBump():62)
M=D // (L24:333) (writeDtoSPAndBump():62)
@SP // (L24:334) (increaseSP():72)
M=M+1 // (L24:335) (increaseSP():72)
@LCL // local 2 // (L25:336) (resolveSegmentToR13(local, 2):555)
D=M // (L25:337) (resolveSegmentToR13(local, 2):555)
@2 // write 2 to A // (L25:338) (resolveSegmentToR13(local, 2):555)
D=D+A // D = segment+index // (L25:339) (resolveSegmentToR13(local, 2):555)
@R13 // save it to R13 // (L25:340) (resolveSegmentToR13(local, 2):555)
M=D // write @LCL+2 to R13 // (L25:341) (resolveSegmentToR13(local, 2):555)
@R13 // (L25:342) (writePush(local, 2):494)
A=M // (L25:343) (writePush(local, 2):494)
D=M // (L25:344) (writePush(local, 2):494)
@SP // (L25:345) (writeDtoSPAndBump():62)
A=M // (L25:346) (writeDtoSPAndBump():62)
M=D // (L25:347) (writeDtoSPAndBump():62)
@SP // (L25:348) (increaseSP():72)
M=M+1 // (L25:349) (increaseSP():72)
@LCL // local 3 // (L26:350) (resolveSegmentToR13(local, 3):555)
D=M // (L26:351) (resolveSegmentToR13(local, 3):555)
@3 // write 3 to A // (L26:352) (resolveSegmentToR13(local, 3):555)
D=D+A // D = segment+index // (L26:353) (resolveSegmentToR13(local, 3):555)
@R13 // save it to R13 // (L26:354) (resolveSegmentToR13(local, 3):555)
M=D // write @LCL+3 to R13 // (L26:355) (resolveSegmentToR13(local, 3):555)
@R13 // (L26:356) (writePush(local, 3):494)
A=M // (L26:357) (writePush(local, 3):494)
D=M // (L26:358) (writePush(local, 3):494)
@SP // (L26:359) (writeDtoSPAndBump():62)
A=M // (L26:360) (writeDtoSPAndBump():62)
M=D // (L26:361) (writeDtoSPAndBump():62)
@SP // (L26:362) (increaseSP():72)
M=M+1 // (L26:363) (increaseSP():72)
@LCL // local 4 // (L27:364) (resolveSegmentToR13(local, 4):555)
D=M // (L27:365) (resolveSegmentToR13(local, 4):555)
@4 // write 4 to A // (L27:366) (resolveSegmentToR13(local, 4):555)
D=D+A // D = segment+index // (L27:367) (resolveSegmentToR13(local, 4):555)
@R13 // save it to R13 // (L27:368) (resolveSegmentToR13(local, 4):555)
M=D // write @LCL+4 to R13 // (L27:369) (resolveSegmentToR13(local, 4):555)
@R13 // (L27:370) (writePush(local, 4):494)
A=M // (L27:371) (writePush(local, 4):494)
D=M // (L27:372) (writePush(local, 4):494)
@SP // (L27:373) (writeDtoSPAndBump():62)
A=M // (L27:374) (writeDtoSPAndBump():62)
M=D // (L27:375) (writeDtoSPAndBump():62)
@SP // (L27:376) (increaseSP():72)
M=M+1 // (L27:377) (increaseSP():72)
@SP // ==== add ==== // (L28:378) (writeArithmetic(add):408)
A=M-1 // (L28:379) (writeArithmetic(add):408)
D=M // (L28:380) (writeArithmetic(add):408)
A=A-1 // (L28:381) (binaryMath(add):362)
M=D+M // (L28:382) (binaryMath(add):362)
@SP // (L28:383) (writeArithmetic(add):441)
M=M-1 // end add // (L28:384) (writeArithmetic(add):441)
@SP // ==== add ==== // (L29:385) (writeArithmetic(add):408)
A=M-1 // (L29:386) (writeArithmetic(add):408)
D=M // (L29:387) (writeArithmetic(add):408)
A=A-1 // (L29:388) (binaryMath(add):362)
M=D+M // (L29:389) (binaryMath(add):362)
@SP // (L29:390) (writeArithmetic(add):441)
M=M-1 // end add // (L29:391) (writeArithmetic(add):441)
@SP // ==== add ==== // (L30:392) (writeArithmetic(add):408)
A=M-1 // (L30:393) (writeArithmetic(add):408)
D=M // (L30:394) (writeArithmetic(add):408)
A=A-1 // (L30:395) (binaryMath(add):362)
M=D+M // (L30:396) (binaryMath(add):362)
@SP // (L30:397) (writeArithmetic(add):441)
M=M-1 // end add // (L30:398) (writeArithmetic(add):441)
@SP // ==== add ==== // (L31:399) (writeArithmetic(add):408)
A=M-1 // (L31:400) (writeArithmetic(add):408)
D=M // (L31:401) (writeArithmetic(add):408)
A=A-1 // (L31:402) (binaryMath(add):362)
M=D+M // (L31:403) (binaryMath(add):362)
@SP // (L31:404) (writeArithmetic(add):441)
M=M-1 // end add // (L31:405) (writeArithmetic(add):441)
@LCL // save return address first // (L32:406) (writeReturn():143)
A=M-1 // (L32:407) (writeReturn():143)
A=A-1 // (L32:408) (writeReturn():143)
A=A-1 // (L32:409) (writeReturn():143)
A=A-1 // (L32:410) (writeReturn():143)
A=A-1 // (L32:411) (writeReturn():143)
D=M // D now holds the return address // (L32:412) (writeReturn():143)
@R14 // (L32:413) (writeReturn():143)
M=D // Wrote the return address to R14 // (L32:414) (writeReturn():143)
@SP // return for Sys.main starts // (L32:415) (writeReturn():143)
A=M-1 // (L32:416) (writeReturn():143)
D=M // (L32:417) (writeReturn():143)
@ARG // (L32:418) (writeReturn():143)
A=M // (L32:419) (writeReturn():143)
M=D // (L32:420) (writeReturn():143)
@ARG // (L32:421) (writeReturn():143)
D=M+1 // (L32:422) (writeReturn():143)
@SP // (L32:423) (writeReturn():143)
M=D // @SP = ARG+1 // (L32:424) (writeReturn():143)
@LCL // (L32:425) (writeReturn():143)
D=M // (L32:426) (writeReturn():143)
@R13 // (L32:427) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L32:428) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L32:429) (writeReturn():143)
D=M // D=*(*LCL-1) // (L32:430) (writeReturn():143)
@THAT // A=THAT // (L32:431) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L32:432) (writeReturn():143)
@R13 // (L32:433) (writeReturn():143)
A=M-1 // (L32:434) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L32:435) (writeReturn():143)
D=M // D=*(*LCL-2) // (L32:436) (writeReturn():143)
@THIS // A=THIS // (L32:437) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L32:438) (writeReturn():143)
@R13 // (L32:439) (writeReturn():143)
A=M-1 // (L32:440) (writeReturn():143)
A=A-1 // (L32:441) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L32:442) (writeReturn():143)
D=M // D=*(*LCL-3) // (L32:443) (writeReturn():143)
@ARG // A=ARG // (L32:444) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L32:445) (writeReturn():143)
@R13 // (L32:446) (writeReturn():143)
A=M-1 // (L32:447) (writeReturn():143)
A=A-1 // (L32:448) (writeReturn():143)
A=A-1 // (L32:449) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L32:450) (writeReturn():143)
D=M // D=*(*LCL-4) // (L32:451) (writeReturn():143)
@LCL // A=LCL // (L32:452) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L32:453) (writeReturn():143)
@R14 // (L32:454) (writeReturn():143)
A=M // (L32:455) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L32:456) (writeReturn():143)
(Sys.add12) // function Sys.add12 0 // (L33:457) (writeFunction(Sys.add12, 0):156)
@4002 // push constant 4002 // (L34:457) (writePush(constant, 4002):479)
D=A // (L34:458) (writePush(constant, 4002):479)
@SP // (L34:459) (writeDtoSPAndBump():62)
A=M // (L34:460) (writeDtoSPAndBump():62)
M=D // (L34:461) (writeDtoSPAndBump():62)
@SP // (L34:462) (increaseSP():72)
M=M+1 // (L34:463) (increaseSP():72)
@SP // pop // (L35:464) (writePop(pointer, 0):610)
AM=M-1 // (L35:465) (writePop(pointer, 0):610)
D=M // (L35:466) (writePop(pointer, 0):610)
@THIS // (L35:467) (writePop(pointer, 0):610)
M=D // // (L35:468) (writePop(pointer, 0):610)
@5002 // push constant 5002 // (L36:469) (writePush(constant, 5002):479)
D=A // (L36:470) (writePush(constant, 5002):479)
@SP // (L36:471) (writeDtoSPAndBump():62)
A=M // (L36:472) (writeDtoSPAndBump():62)
M=D // (L36:473) (writeDtoSPAndBump():62)
@SP // (L36:474) (increaseSP():72)
M=M+1 // (L36:475) (increaseSP():72)
@SP // pop // (L37:476) (writePop(pointer, 1):610)
AM=M-1 // (L37:477) (writePop(pointer, 1):610)
D=M // (L37:478) (writePop(pointer, 1):610)
@THAT // (L37:479) (writePop(pointer, 1):610)
M=D // // (L37:480) (writePop(pointer, 1):610)
@ARG // (L38:481) (writePush(argument, 0):494)
A=M // (L38:482) (writePush(argument, 0):494)
D=M // (L38:483) (writePush(argument, 0):494)
@SP // (L38:484) (writeDtoSPAndBump():62)
A=M // (L38:485) (writeDtoSPAndBump():62)
M=D // (L38:486) (writeDtoSPAndBump():62)
@SP // (L38:487) (increaseSP():72)
M=M+1 // (L38:488) (increaseSP():72)
@12 // push constant 12 // (L39:489) (writePush(constant, 12):479)
D=A // (L39:490) (writePush(constant, 12):479)
@SP // (L39:491) (writeDtoSPAndBump():62)
A=M // (L39:492) (writeDtoSPAndBump():62)
M=D // (L39:493) (writeDtoSPAndBump():62)
@SP // (L39:494) (increaseSP():72)
M=M+1 // (L39:495) (increaseSP():72)
@SP // ==== add ==== // (L40:496) (writeArithmetic(add):408)
A=M-1 // (L40:497) (writeArithmetic(add):408)
D=M // (L40:498) (writeArithmetic(add):408)
A=A-1 // (L40:499) (binaryMath(add):362)
M=D+M // (L40:500) (binaryMath(add):362)
@SP // (L40:501) (writeArithmetic(add):441)
M=M-1 // end add // (L40:502) (writeArithmetic(add):441)
@LCL // save return address first // (L41:503) (writeReturn():143)
A=M-1 // (L41:504) (writeReturn():143)
A=A-1 // (L41:505) (writeReturn():143)
A=A-1 // (L41:506) (writeReturn():143)
A=A-1 // (L41:507) (writeReturn():143)
A=A-1 // (L41:508) (writeReturn():143)
D=M // D now holds the return address // (L41:509) (writeReturn():143)
@R14 // (L41:510) (writeReturn():143)
M=D // Wrote the return address to R14 // (L41:511) (writeReturn():143)
@SP // return for Sys.add12 starts // (L41:512) (writeReturn():143)
A=M-1 // (L41:513) (writeReturn():143)
D=M // (L41:514) (writeReturn():143)
@ARG // (L41:515) (writeReturn():143)
A=M // (L41:516) (writeReturn():143)
M=D // (L41:517) (writeReturn():143)
@ARG // (L41:518) (writeReturn():143)
D=M+1 // (L41:519) (writeReturn():143)
@SP // (L41:520) (writeReturn():143)
M=D // @SP = ARG+1 // (L41:521) (writeReturn():143)
@LCL // (L41:522) (writeReturn():143)
D=M // (L41:523) (writeReturn():143)
@R13 // (L41:524) (writeReturn():143)
M=D // Save LCL to R13 = FRAME // (L41:525) (writeReturn():143)
A=D-1 // A=*LCL-1 // (L41:526) (writeReturn():143)
D=M // D=*(*LCL-1) // (L41:527) (writeReturn():143)
@THAT // A=THAT // (L41:528) (writeReturn():143)
M=D // *that = *(*lcl-1) // (L41:529) (writeReturn():143)
@R13 // (L41:530) (writeReturn():143)
A=M-1 // (L41:531) (writeReturn():143)
A=A-1 // A=*LCL-2 // (L41:532) (writeReturn():143)
D=M // D=*(*LCL-2) // (L41:533) (writeReturn():143)
@THIS // A=THIS // (L41:534) (writeReturn():143)
M=D // *THIS = *(*lcl-2) // (L41:535) (writeReturn():143)
@R13 // (L41:536) (writeReturn():143)
A=M-1 // (L41:537) (writeReturn():143)
A=A-1 // (L41:538) (writeReturn():143)
A=A-1 // A=*LCL-3 // (L41:539) (writeReturn():143)
D=M // D=*(*LCL-3) // (L41:540) (writeReturn():143)
@ARG // A=ARG // (L41:541) (writeReturn():143)
M=D // *ARG = *(*lcl-3) // (L41:542) (writeReturn():143)
@R13 // (L41:543) (writeReturn():143)
A=M-1 // (L41:544) (writeReturn():143)
A=A-1 // (L41:545) (writeReturn():143)
A=A-1 // (L41:546) (writeReturn():143)
A=A-1 // A=*LCL-4 // (L41:547) (writeReturn():143)
D=M // D=*(*LCL-4) // (L41:548) (writeReturn():143)
@LCL // A=LCL // (L41:549) (writeReturn():143)
M=D // *LCL = *(*lcl-4) // (L41:550) (writeReturn():143)
@R14 // (L41:551) (writeReturn():143)
A=M // (L41:552) (writeReturn():143)
0;JMP // HyperJump to *(LCL-5) // (L41:553) (writeReturn():143)
@555 // (L42:554) (close():298)
0;JMP // (L42:555) (close():298)