PageRenderTime 215ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 3ms

/09/Square/Square.asm

http://github.com/tianyicui/No.658659
Assembly | 49964 lines | 49964 code | 0 blank | 0 comment | 0 complexity | 33efa8563f02807d3f34ca0062ccadb2 MD5 | raw file
  1. // #0
  2. @261
  3. // #1
  4. D=A
  5. // #2
  6. @SP
  7. // #3
  8. M=D //SP=261
  9. // #4
  10. @Sys.init
  11. // #5
  12. 0;JMP
  13. //
  14. //// function Array.new 0
  15. (Array.new)
  16. //
  17. //// push argument 0
  18. //^^ push_from_ram(ARG, 0)
  19. // #6
  20. @ARG
  21. // #7
  22. D=M
  23. // #8
  24. @0
  25. // #9
  26. A=D+A
  27. // #10
  28. D=M
  29. //^^ push_d_to_stack
  30. // #11
  31. @SP
  32. // #12
  33. A=M
  34. // #13
  35. M=D
  36. // #14
  37. @SP
  38. // #15
  39. M=M+1
  40. //vv push_d_to_stack
  41. //vv push_from_ram(ARG, 0)
  42. //
  43. //// push constant 0
  44. //^^ push_constant(0)
  45. // #16
  46. @0
  47. // #17
  48. D=A
  49. //^^ push_d_to_stack
  50. // #18
  51. @SP
  52. // #19
  53. A=M
  54. // #20
  55. M=D
  56. // #21
  57. @SP
  58. // #22
  59. M=M+1
  60. //vv push_d_to_stack
  61. //vv push_constant(0)
  62. //
  63. //// gt
  64. //^^ arith_cmp_op(JGT)
  65. //^^ pop_stack_to_d
  66. // #23
  67. @SP
  68. // #24
  69. M=M-1
  70. // #25
  71. A=M
  72. // #26
  73. D=M
  74. //vv pop_stack_to_d
  75. //^^ arith_d_with_stack_top(D-M)
  76. // #27
  77. @R13
  78. // #28
  79. M=D
  80. //^^ pop_stack_to_d
  81. // #29
  82. @SP
  83. // #30
  84. M=M-1
  85. // #31
  86. A=M
  87. // #32
  88. D=M
  89. //vv pop_stack_to_d
  90. // #33
  91. @R13
  92. // #34
  93. D=D-M
  94. // #35
  95. @R13
  96. // #36
  97. M=0
  98. //vv arith_d_with_stack_top(D-M)
  99. // #37
  100. @PUT_TRUE_1
  101. // #38
  102. D;JGT
  103. // #39
  104. @R13
  105. // #40
  106. M=0
  107. // #41
  108. @CONT_1
  109. // #42
  110. 0;JMP
  111. (PUT_TRUE_1)
  112. // #43
  113. @R13
  114. // #44
  115. M=-1
  116. (CONT_1)
  117. // #45
  118. @R13
  119. // #46
  120. D=M
  121. // #47
  122. @R13
  123. // #48
  124. M=0
  125. //^^ push_d_to_stack
  126. // #49
  127. @SP
  128. // #50
  129. A=M
  130. // #51
  131. M=D
  132. // #52
  133. @SP
  134. // #53
  135. M=M+1
  136. //vv push_d_to_stack
  137. //vv arith_cmp_op(JGT)
  138. //
  139. //// not
  140. //^^ arith_unary_op(!)
  141. //^^ pop_stack_to_d
  142. // #54
  143. @SP
  144. // #55
  145. M=M-1
  146. // #56
  147. A=M
  148. // #57
  149. D=M
  150. //vv pop_stack_to_d
  151. // #58
  152. D=!D
  153. //^^ push_d_to_stack
  154. // #59
  155. @SP
  156. // #60
  157. A=M
  158. // #61
  159. M=D
  160. // #62
  161. @SP
  162. // #63
  163. M=M+1
  164. //vv push_d_to_stack
  165. //vv arith_unary_op(!)
  166. //
  167. //// if-goto IF_TRUE0
  168. //^^ pop_stack_to_d
  169. // #64
  170. @SP
  171. // #65
  172. M=M-1
  173. // #66
  174. A=M
  175. // #67
  176. D=M
  177. //vv pop_stack_to_d
  178. // #68
  179. @Array.new$IF_TRUE0
  180. // #69
  181. D;JNE
  182. //
  183. //// goto IF_FALSE0
  184. // #70
  185. @Array.new$IF_FALSE0
  186. // #71
  187. 0;JMP
  188. //
  189. //// label IF_TRUE0
  190. (Array.new$IF_TRUE0)
  191. //
  192. //// push constant 2
  193. //^^ push_constant(2)
  194. // #72
  195. @2
  196. // #73
  197. D=A
  198. //^^ push_d_to_stack
  199. // #74
  200. @SP
  201. // #75
  202. A=M
  203. // #76
  204. M=D
  205. // #77
  206. @SP
  207. // #78
  208. M=M+1
  209. //vv push_d_to_stack
  210. //vv push_constant(2)
  211. //
  212. //// call Sys.error 1
  213. //^^ push_constant(RET_ADDR_2)
  214. // #79
  215. @RET_ADDR_2
  216. // #80
  217. D=A
  218. //^^ push_d_to_stack
  219. // #81
  220. @SP
  221. // #82
  222. A=M
  223. // #83
  224. M=D
  225. // #84
  226. @SP
  227. // #85
  228. M=M+1
  229. //vv push_d_to_stack
  230. //vv push_constant(RET_ADDR_2)
  231. //push return-address
  232. // #86
  233. @LCL
  234. // #87
  235. D=M
  236. //^^ push_d_to_stack
  237. // #88
  238. @SP
  239. // #89
  240. A=M
  241. // #90
  242. M=D
  243. // #91
  244. @SP
  245. // #92
  246. M=M+1
  247. //vv push_d_to_stack
  248. //push LCL
  249. // #93
  250. @ARG
  251. // #94
  252. D=M
  253. //^^ push_d_to_stack
  254. // #95
  255. @SP
  256. // #96
  257. A=M
  258. // #97
  259. M=D
  260. // #98
  261. @SP
  262. // #99
  263. M=M+1
  264. //vv push_d_to_stack
  265. //push ARG
  266. // #100
  267. @THIS
  268. // #101
  269. D=M
  270. //^^ push_d_to_stack
  271. // #102
  272. @SP
  273. // #103
  274. A=M
  275. // #104
  276. M=D
  277. // #105
  278. @SP
  279. // #106
  280. M=M+1
  281. //vv push_d_to_stack
  282. //push THIS
  283. // #107
  284. @THAT
  285. // #108
  286. D=M
  287. //^^ push_d_to_stack
  288. // #109
  289. @SP
  290. // #110
  291. A=M
  292. // #111
  293. M=D
  294. // #112
  295. @SP
  296. // #113
  297. M=M+1
  298. //vv push_d_to_stack
  299. //push THAT
  300. // #114
  301. @SP
  302. // #115
  303. D=M
  304. // #116
  305. @ARG
  306. // #117
  307. M=D
  308. // #118
  309. @6
  310. // #119
  311. D=A
  312. // #120
  313. @ARG
  314. // #121
  315. M=M-D // ARG = SP - args - 5
  316. // #122
  317. @SP
  318. // #123
  319. D=M
  320. // #124
  321. @LCL
  322. // #125
  323. M=D // LCL = SP
  324. // #126
  325. @Sys.error
  326. // #127
  327. 0;JMP
  328. (RET_ADDR_2)
  329. //
  330. //// pop temp 0
  331. //^^ pop_to_loc{5)
  332. //^^ pop_stack_to_d
  333. // #128
  334. @SP
  335. // #129
  336. M=M-1
  337. // #130
  338. A=M
  339. // #131
  340. D=M
  341. //vv pop_stack_to_d
  342. // #132
  343. @5
  344. // #133
  345. M=D
  346. //vv pop_to_loc{5)
  347. //
  348. //// label IF_FALSE0
  349. (Array.new$IF_FALSE0)
  350. //
  351. //// push argument 0
  352. //^^ push_from_ram(ARG, 0)
  353. // #134
  354. @ARG
  355. // #135
  356. D=M
  357. // #136
  358. @0
  359. // #137
  360. A=D+A
  361. // #138
  362. D=M
  363. //^^ push_d_to_stack
  364. // #139
  365. @SP
  366. // #140
  367. A=M
  368. // #141
  369. M=D
  370. // #142
  371. @SP
  372. // #143
  373. M=M+1
  374. //vv push_d_to_stack
  375. //vv push_from_ram(ARG, 0)
  376. //
  377. //// call Memory.alloc 1
  378. //^^ push_constant(RET_ADDR_3)
  379. // #144
  380. @RET_ADDR_3
  381. // #145
  382. D=A
  383. //^^ push_d_to_stack
  384. // #146
  385. @SP
  386. // #147
  387. A=M
  388. // #148
  389. M=D
  390. // #149
  391. @SP
  392. // #150
  393. M=M+1
  394. //vv push_d_to_stack
  395. //vv push_constant(RET_ADDR_3)
  396. //push return-address
  397. // #151
  398. @LCL
  399. // #152
  400. D=M
  401. //^^ push_d_to_stack
  402. // #153
  403. @SP
  404. // #154
  405. A=M
  406. // #155
  407. M=D
  408. // #156
  409. @SP
  410. // #157
  411. M=M+1
  412. //vv push_d_to_stack
  413. //push LCL
  414. // #158
  415. @ARG
  416. // #159
  417. D=M
  418. //^^ push_d_to_stack
  419. // #160
  420. @SP
  421. // #161
  422. A=M
  423. // #162
  424. M=D
  425. // #163
  426. @SP
  427. // #164
  428. M=M+1
  429. //vv push_d_to_stack
  430. //push ARG
  431. // #165
  432. @THIS
  433. // #166
  434. D=M
  435. //^^ push_d_to_stack
  436. // #167
  437. @SP
  438. // #168
  439. A=M
  440. // #169
  441. M=D
  442. // #170
  443. @SP
  444. // #171
  445. M=M+1
  446. //vv push_d_to_stack
  447. //push THIS
  448. // #172
  449. @THAT
  450. // #173
  451. D=M
  452. //^^ push_d_to_stack
  453. // #174
  454. @SP
  455. // #175
  456. A=M
  457. // #176
  458. M=D
  459. // #177
  460. @SP
  461. // #178
  462. M=M+1
  463. //vv push_d_to_stack
  464. //push THAT
  465. // #179
  466. @SP
  467. // #180
  468. D=M
  469. // #181
  470. @ARG
  471. // #182
  472. M=D
  473. // #183
  474. @6
  475. // #184
  476. D=A
  477. // #185
  478. @ARG
  479. // #186
  480. M=M-D // ARG = SP - args - 5
  481. // #187
  482. @SP
  483. // #188
  484. D=M
  485. // #189
  486. @LCL
  487. // #190
  488. M=D // LCL = SP
  489. // #191
  490. @Memory.alloc
  491. // #192
  492. 0;JMP
  493. (RET_ADDR_3)
  494. //
  495. //// return
  496. // #193
  497. @LCL
  498. // #194
  499. D=M
  500. // #195
  501. @R14
  502. // #196
  503. M=D //R14=LCL
  504. // #197
  505. @5
  506. // #198
  507. A=D-A
  508. // #199
  509. D=M
  510. // #200
  511. @R15
  512. // #201
  513. M=D //R15=*(LCL-5)
  514. //^^ pop_stack_to_d
  515. // #202
  516. @SP
  517. // #203
  518. M=M-1
  519. // #204
  520. A=M
  521. // #205
  522. D=M
  523. //vv pop_stack_to_d
  524. // #206
  525. @ARG
  526. // #207
  527. A=M
  528. // #208
  529. M=D //*ARG = pop()
  530. // #209
  531. @ARG
  532. // #210
  533. D=M
  534. // #211
  535. @SP
  536. // #212
  537. M=D+1 //SP=ARG+1
  538. // #213
  539. @R14
  540. // #214
  541. AM=M-1
  542. // #215
  543. D=M
  544. // #216
  545. @THAT
  546. // #217
  547. M=D //THAT = *(--R14)
  548. // #218
  549. @R14
  550. // #219
  551. AM=M-1
  552. // #220
  553. D=M
  554. // #221
  555. @THIS
  556. // #222
  557. M=D //THIS = *(--R14)
  558. // #223
  559. @R14
  560. // #224
  561. AM=M-1
  562. // #225
  563. D=M
  564. // #226
  565. @ARG
  566. // #227
  567. M=D //ARG = *(--R14)
  568. // #228
  569. @R14
  570. // #229
  571. AM=M-1
  572. // #230
  573. D=M
  574. // #231
  575. @LCL
  576. // #232
  577. M=D //LCL = *(--R14)
  578. // #233
  579. @R15
  580. // #234
  581. A=M
  582. // #235
  583. 0;JMP //goto *R15
  584. //
  585. //// function Array.dispose 0
  586. (Array.dispose)
  587. //
  588. //// push argument 0
  589. //^^ push_from_ram(ARG, 0)
  590. // #236
  591. @ARG
  592. // #237
  593. D=M
  594. // #238
  595. @0
  596. // #239
  597. A=D+A
  598. // #240
  599. D=M
  600. //^^ push_d_to_stack
  601. // #241
  602. @SP
  603. // #242
  604. A=M
  605. // #243
  606. M=D
  607. // #244
  608. @SP
  609. // #245
  610. M=M+1
  611. //vv push_d_to_stack
  612. //vv push_from_ram(ARG, 0)
  613. //
  614. //// pop pointer 0
  615. //^^ pop_to_loc{3)
  616. //^^ pop_stack_to_d
  617. // #246
  618. @SP
  619. // #247
  620. M=M-1
  621. // #248
  622. A=M
  623. // #249
  624. D=M
  625. //vv pop_stack_to_d
  626. // #250
  627. @3
  628. // #251
  629. M=D
  630. //vv pop_to_loc{3)
  631. //
  632. //// push pointer 0
  633. //^^ push_from_loc(3)
  634. // #252
  635. @3
  636. // #253
  637. D=M
  638. //^^ push_d_to_stack
  639. // #254
  640. @SP
  641. // #255
  642. A=M
  643. // #256
  644. M=D
  645. // #257
  646. @SP
  647. // #258
  648. M=M+1
  649. //vv push_d_to_stack
  650. //vv push_from_loc(3)
  651. //
  652. //// call Memory.deAlloc 1
  653. //^^ push_constant(RET_ADDR_4)
  654. // #259
  655. @RET_ADDR_4
  656. // #260
  657. D=A
  658. //^^ push_d_to_stack
  659. // #261
  660. @SP
  661. // #262
  662. A=M
  663. // #263
  664. M=D
  665. // #264
  666. @SP
  667. // #265
  668. M=M+1
  669. //vv push_d_to_stack
  670. //vv push_constant(RET_ADDR_4)
  671. //push return-address
  672. // #266
  673. @LCL
  674. // #267
  675. D=M
  676. //^^ push_d_to_stack
  677. // #268
  678. @SP
  679. // #269
  680. A=M
  681. // #270
  682. M=D
  683. // #271
  684. @SP
  685. // #272
  686. M=M+1
  687. //vv push_d_to_stack
  688. //push LCL
  689. // #273
  690. @ARG
  691. // #274
  692. D=M
  693. //^^ push_d_to_stack
  694. // #275
  695. @SP
  696. // #276
  697. A=M
  698. // #277
  699. M=D
  700. // #278
  701. @SP
  702. // #279
  703. M=M+1
  704. //vv push_d_to_stack
  705. //push ARG
  706. // #280
  707. @THIS
  708. // #281
  709. D=M
  710. //^^ push_d_to_stack
  711. // #282
  712. @SP
  713. // #283
  714. A=M
  715. // #284
  716. M=D
  717. // #285
  718. @SP
  719. // #286
  720. M=M+1
  721. //vv push_d_to_stack
  722. //push THIS
  723. // #287
  724. @THAT
  725. // #288
  726. D=M
  727. //^^ push_d_to_stack
  728. // #289
  729. @SP
  730. // #290
  731. A=M
  732. // #291
  733. M=D
  734. // #292
  735. @SP
  736. // #293
  737. M=M+1
  738. //vv push_d_to_stack
  739. //push THAT
  740. // #294
  741. @SP
  742. // #295
  743. D=M
  744. // #296
  745. @ARG
  746. // #297
  747. M=D
  748. // #298
  749. @6
  750. // #299
  751. D=A
  752. // #300
  753. @ARG
  754. // #301
  755. M=M-D // ARG = SP - args - 5
  756. // #302
  757. @SP
  758. // #303
  759. D=M
  760. // #304
  761. @LCL
  762. // #305
  763. M=D // LCL = SP
  764. // #306
  765. @Memory.deAlloc
  766. // #307
  767. 0;JMP
  768. (RET_ADDR_4)
  769. //
  770. //// pop temp 0
  771. //^^ pop_to_loc{5)
  772. //^^ pop_stack_to_d
  773. // #308
  774. @SP
  775. // #309
  776. M=M-1
  777. // #310
  778. A=M
  779. // #311
  780. D=M
  781. //vv pop_stack_to_d
  782. // #312
  783. @5
  784. // #313
  785. M=D
  786. //vv pop_to_loc{5)
  787. //
  788. //// push constant 0
  789. //^^ push_constant(0)
  790. // #314
  791. @0
  792. // #315
  793. D=A
  794. //^^ push_d_to_stack
  795. // #316
  796. @SP
  797. // #317
  798. A=M
  799. // #318
  800. M=D
  801. // #319
  802. @SP
  803. // #320
  804. M=M+1
  805. //vv push_d_to_stack
  806. //vv push_constant(0)
  807. //
  808. //// return
  809. // #321
  810. @LCL
  811. // #322
  812. D=M
  813. // #323
  814. @R14
  815. // #324
  816. M=D //R14=LCL
  817. // #325
  818. @5
  819. // #326
  820. A=D-A
  821. // #327
  822. D=M
  823. // #328
  824. @R15
  825. // #329
  826. M=D //R15=*(LCL-5)
  827. //^^ pop_stack_to_d
  828. // #330
  829. @SP
  830. // #331
  831. M=M-1
  832. // #332
  833. A=M
  834. // #333
  835. D=M
  836. //vv pop_stack_to_d
  837. // #334
  838. @ARG
  839. // #335
  840. A=M
  841. // #336
  842. M=D //*ARG = pop()
  843. // #337
  844. @ARG
  845. // #338
  846. D=M
  847. // #339
  848. @SP
  849. // #340
  850. M=D+1 //SP=ARG+1
  851. // #341
  852. @R14
  853. // #342
  854. AM=M-1
  855. // #343
  856. D=M
  857. // #344
  858. @THAT
  859. // #345
  860. M=D //THAT = *(--R14)
  861. // #346
  862. @R14
  863. // #347
  864. AM=M-1
  865. // #348
  866. D=M
  867. // #349
  868. @THIS
  869. // #350
  870. M=D //THIS = *(--R14)
  871. // #351
  872. @R14
  873. // #352
  874. AM=M-1
  875. // #353
  876. D=M
  877. // #354
  878. @ARG
  879. // #355
  880. M=D //ARG = *(--R14)
  881. // #356
  882. @R14
  883. // #357
  884. AM=M-1
  885. // #358
  886. D=M
  887. // #359
  888. @LCL
  889. // #360
  890. M=D //LCL = *(--R14)
  891. // #361
  892. @R15
  893. // #362
  894. A=M
  895. // #363
  896. 0;JMP //goto *R15
  897. //
  898. //// function Keyboard.init 0
  899. (Keyboard.init)
  900. //
  901. //// push constant 0
  902. //^^ push_constant(0)
  903. // #364
  904. @0
  905. // #365
  906. D=A
  907. //^^ push_d_to_stack
  908. // #366
  909. @SP
  910. // #367
  911. A=M
  912. // #368
  913. M=D
  914. // #369
  915. @SP
  916. // #370
  917. M=M+1
  918. //vv push_d_to_stack
  919. //vv push_constant(0)
  920. //
  921. //// return
  922. // #371
  923. @LCL
  924. // #372
  925. D=M
  926. // #373
  927. @R14
  928. // #374
  929. M=D //R14=LCL
  930. // #375
  931. @5
  932. // #376
  933. A=D-A
  934. // #377
  935. D=M
  936. // #378
  937. @R15
  938. // #379
  939. M=D //R15=*(LCL-5)
  940. //^^ pop_stack_to_d
  941. // #380
  942. @SP
  943. // #381
  944. M=M-1
  945. // #382
  946. A=M
  947. // #383
  948. D=M
  949. //vv pop_stack_to_d
  950. // #384
  951. @ARG
  952. // #385
  953. A=M
  954. // #386
  955. M=D //*ARG = pop()
  956. // #387
  957. @ARG
  958. // #388
  959. D=M
  960. // #389
  961. @SP
  962. // #390
  963. M=D+1 //SP=ARG+1
  964. // #391
  965. @R14
  966. // #392
  967. AM=M-1
  968. // #393
  969. D=M
  970. // #394
  971. @THAT
  972. // #395
  973. M=D //THAT = *(--R14)
  974. // #396
  975. @R14
  976. // #397
  977. AM=M-1
  978. // #398
  979. D=M
  980. // #399
  981. @THIS
  982. // #400
  983. M=D //THIS = *(--R14)
  984. // #401
  985. @R14
  986. // #402
  987. AM=M-1
  988. // #403
  989. D=M
  990. // #404
  991. @ARG
  992. // #405
  993. M=D //ARG = *(--R14)
  994. // #406
  995. @R14
  996. // #407
  997. AM=M-1
  998. // #408
  999. D=M
  1000. // #409
  1001. @LCL
  1002. // #410
  1003. M=D //LCL = *(--R14)
  1004. // #411
  1005. @R15
  1006. // #412
  1007. A=M
  1008. // #413
  1009. 0;JMP //goto *R15
  1010. //
  1011. //// function Keyboard.keyPressed 0
  1012. (Keyboard.keyPressed)
  1013. //
  1014. //// push constant 24576
  1015. //^^ push_constant(24576)
  1016. // #414
  1017. @24576
  1018. // #415
  1019. D=A
  1020. //^^ push_d_to_stack
  1021. // #416
  1022. @SP
  1023. // #417
  1024. A=M
  1025. // #418
  1026. M=D
  1027. // #419
  1028. @SP
  1029. // #420
  1030. M=M+1
  1031. //vv push_d_to_stack
  1032. //vv push_constant(24576)
  1033. //
  1034. //// call Memory.peek 1
  1035. //^^ push_constant(RET_ADDR_5)
  1036. // #421
  1037. @RET_ADDR_5
  1038. // #422
  1039. D=A
  1040. //^^ push_d_to_stack
  1041. // #423
  1042. @SP
  1043. // #424
  1044. A=M
  1045. // #425
  1046. M=D
  1047. // #426
  1048. @SP
  1049. // #427
  1050. M=M+1
  1051. //vv push_d_to_stack
  1052. //vv push_constant(RET_ADDR_5)
  1053. //push return-address
  1054. // #428
  1055. @LCL
  1056. // #429
  1057. D=M
  1058. //^^ push_d_to_stack
  1059. // #430
  1060. @SP
  1061. // #431
  1062. A=M
  1063. // #432
  1064. M=D
  1065. // #433
  1066. @SP
  1067. // #434
  1068. M=M+1
  1069. //vv push_d_to_stack
  1070. //push LCL
  1071. // #435
  1072. @ARG
  1073. // #436
  1074. D=M
  1075. //^^ push_d_to_stack
  1076. // #437
  1077. @SP
  1078. // #438
  1079. A=M
  1080. // #439
  1081. M=D
  1082. // #440
  1083. @SP
  1084. // #441
  1085. M=M+1
  1086. //vv push_d_to_stack
  1087. //push ARG
  1088. // #442
  1089. @THIS
  1090. // #443
  1091. D=M
  1092. //^^ push_d_to_stack
  1093. // #444
  1094. @SP
  1095. // #445
  1096. A=M
  1097. // #446
  1098. M=D
  1099. // #447
  1100. @SP
  1101. // #448
  1102. M=M+1
  1103. //vv push_d_to_stack
  1104. //push THIS
  1105. // #449
  1106. @THAT
  1107. // #450
  1108. D=M
  1109. //^^ push_d_to_stack
  1110. // #451
  1111. @SP
  1112. // #452
  1113. A=M
  1114. // #453
  1115. M=D
  1116. // #454
  1117. @SP
  1118. // #455
  1119. M=M+1
  1120. //vv push_d_to_stack
  1121. //push THAT
  1122. // #456
  1123. @SP
  1124. // #457
  1125. D=M
  1126. // #458
  1127. @ARG
  1128. // #459
  1129. M=D
  1130. // #460
  1131. @6
  1132. // #461
  1133. D=A
  1134. // #462
  1135. @ARG
  1136. // #463
  1137. M=M-D // ARG = SP - args - 5
  1138. // #464
  1139. @SP
  1140. // #465
  1141. D=M
  1142. // #466
  1143. @LCL
  1144. // #467
  1145. M=D // LCL = SP
  1146. // #468
  1147. @Memory.peek
  1148. // #469
  1149. 0;JMP
  1150. (RET_ADDR_5)
  1151. //
  1152. //// return
  1153. // #470
  1154. @LCL
  1155. // #471
  1156. D=M
  1157. // #472
  1158. @R14
  1159. // #473
  1160. M=D //R14=LCL
  1161. // #474
  1162. @5
  1163. // #475
  1164. A=D-A
  1165. // #476
  1166. D=M
  1167. // #477
  1168. @R15
  1169. // #478
  1170. M=D //R15=*(LCL-5)
  1171. //^^ pop_stack_to_d
  1172. // #479
  1173. @SP
  1174. // #480
  1175. M=M-1
  1176. // #481
  1177. A=M
  1178. // #482
  1179. D=M
  1180. //vv pop_stack_to_d
  1181. // #483
  1182. @ARG
  1183. // #484
  1184. A=M
  1185. // #485
  1186. M=D //*ARG = pop()
  1187. // #486
  1188. @ARG
  1189. // #487
  1190. D=M
  1191. // #488
  1192. @SP
  1193. // #489
  1194. M=D+1 //SP=ARG+1
  1195. // #490
  1196. @R14
  1197. // #491
  1198. AM=M-1
  1199. // #492
  1200. D=M
  1201. // #493
  1202. @THAT
  1203. // #494
  1204. M=D //THAT = *(--R14)
  1205. // #495
  1206. @R14
  1207. // #496
  1208. AM=M-1
  1209. // #497
  1210. D=M
  1211. // #498
  1212. @THIS
  1213. // #499
  1214. M=D //THIS = *(--R14)
  1215. // #500
  1216. @R14
  1217. // #501
  1218. AM=M-1
  1219. // #502
  1220. D=M
  1221. // #503
  1222. @ARG
  1223. // #504
  1224. M=D //ARG = *(--R14)
  1225. // #505
  1226. @R14
  1227. // #506
  1228. AM=M-1
  1229. // #507
  1230. D=M
  1231. // #508
  1232. @LCL
  1233. // #509
  1234. M=D //LCL = *(--R14)
  1235. // #510
  1236. @R15
  1237. // #511
  1238. A=M
  1239. // #512
  1240. 0;JMP //goto *R15
  1241. //
  1242. //// function Keyboard.readChar 2
  1243. (Keyboard.readChar)
  1244. // #513
  1245. D=0
  1246. //^^ push_d_to_stack
  1247. // #514
  1248. @SP
  1249. // #515
  1250. A=M
  1251. // #516
  1252. M=D
  1253. // #517
  1254. @SP
  1255. // #518
  1256. M=M+1
  1257. //vv push_d_to_stack
  1258. // #519
  1259. D=0
  1260. //^^ push_d_to_stack
  1261. // #520
  1262. @SP
  1263. // #521
  1264. A=M
  1265. // #522
  1266. M=D
  1267. // #523
  1268. @SP
  1269. // #524
  1270. M=M+1
  1271. //vv push_d_to_stack
  1272. //
  1273. //// call SquareGame.new 0
  1274. //^^ push_constant(RET_ADDR_26)
  1275. // #525
  1276. @RET_ADDR_26
  1277. // #526
  1278. D=A
  1279. //^^ push_d_to_stack
  1280. // #527
  1281. @SP
  1282. // #528
  1283. A=M
  1284. // #529
  1285. M=D
  1286. // #530
  1287. @SP
  1288. // #531
  1289. M=M+1
  1290. //vv push_d_to_stack
  1291. //vv push_constant(RET_ADDR_26)
  1292. //push return-address
  1293. // #532
  1294. @LCL
  1295. // #533
  1296. D=M
  1297. //^^ push_d_to_stack
  1298. // #534
  1299. @SP
  1300. // #535
  1301. A=M
  1302. // #536
  1303. M=D
  1304. // #537
  1305. @SP
  1306. // #538
  1307. M=M+1
  1308. //vv push_d_to_stack
  1309. //push LCL
  1310. // #539
  1311. @ARG
  1312. // #540
  1313. D=M
  1314. //^^ push_d_to_stack
  1315. // #541
  1316. @SP
  1317. // #542
  1318. A=M
  1319. // #543
  1320. M=D
  1321. // #544
  1322. @SP
  1323. // #545
  1324. M=M+1
  1325. //vv push_d_to_stack
  1326. //push ARG
  1327. // #546
  1328. @THIS
  1329. // #547
  1330. D=M
  1331. //^^ push_d_to_stack
  1332. // #548
  1333. @SP
  1334. // #549
  1335. A=M
  1336. // #550
  1337. M=D
  1338. // #551
  1339. @SP
  1340. // #552
  1341. M=M+1
  1342. //vv push_d_to_stack
  1343. //push THIS
  1344. // #553
  1345. @THAT
  1346. // #554
  1347. D=M
  1348. //^^ push_d_to_stack
  1349. // #555
  1350. @SP
  1351. // #556
  1352. A=M
  1353. // #557
  1354. M=D
  1355. // #558
  1356. @SP
  1357. // #559
  1358. M=M+1
  1359. //vv push_d_to_stack
  1360. //push THAT
  1361. // #560
  1362. @SP
  1363. // #561
  1364. D=M
  1365. // #562
  1366. @ARG
  1367. // #563
  1368. M=D
  1369. // #564
  1370. @5
  1371. // #565
  1372. D=A
  1373. // #566
  1374. @ARG
  1375. // #567
  1376. M=M-D // ARG = SP - args - 5
  1377. // #568
  1378. @SP
  1379. // #569
  1380. D=M
  1381. // #570
  1382. @LCL
  1383. // #571
  1384. M=D // LCL = SP
  1385. // #572
  1386. @SquareGame.new
  1387. // #573
  1388. 0;JMP
  1389. (RET_ADDR_26)
  1390. //
  1391. //// pop local 0
  1392. //^^ pop_to_ram(LCL, 0)
  1393. // #574
  1394. @LCL
  1395. // #575
  1396. D=M
  1397. // #576
  1398. @0
  1399. // #577
  1400. D=D+A
  1401. // #578
  1402. @R13
  1403. // #579
  1404. M=D
  1405. //^^ pop_stack_to_d
  1406. // #580
  1407. @SP
  1408. // #581
  1409. M=M-1
  1410. // #582
  1411. A=M
  1412. // #583
  1413. D=M
  1414. //vv pop_stack_to_d
  1415. // #584
  1416. @R13
  1417. // #585
  1418. A=M
  1419. // #586
  1420. M=D
  1421. // #587
  1422. @R13
  1423. // #588
  1424. M=0
  1425. //vv pop_to_ram(LCL, 0)
  1426. //
  1427. //// push local 0
  1428. //^^ push_from_ram(LCL, 0)
  1429. // #589
  1430. @LCL
  1431. // #590
  1432. D=M
  1433. // #591
  1434. @0
  1435. // #592
  1436. A=D+A
  1437. // #593
  1438. D=M
  1439. //^^ push_d_to_stack
  1440. // #594
  1441. @SP
  1442. // #595
  1443. A=M
  1444. // #596
  1445. M=D
  1446. // #597
  1447. @SP
  1448. // #598
  1449. M=M+1
  1450. //vv push_d_to_stack
  1451. //vv push_from_ram(LCL, 0)
  1452. //
  1453. //// call SquareGame.run 1
  1454. //^^ push_constant(RET_ADDR_27)
  1455. // #599
  1456. @RET_ADDR_27
  1457. // #600
  1458. D=A
  1459. //^^ push_d_to_stack
  1460. // #601
  1461. @SP
  1462. // #602
  1463. A=M
  1464. // #603
  1465. M=D
  1466. // #604
  1467. @SP
  1468. // #605
  1469. M=M+1
  1470. //vv push_d_to_stack
  1471. //vv push_constant(RET_ADDR_27)
  1472. //push return-address
  1473. // #606
  1474. @LCL
  1475. // #607
  1476. D=M
  1477. //^^ push_d_to_stack
  1478. // #608
  1479. @SP
  1480. // #609
  1481. A=M
  1482. // #610
  1483. M=D
  1484. // #611
  1485. @SP
  1486. // #612
  1487. M=M+1
  1488. //vv push_d_to_stack
  1489. //push LCL
  1490. // #613
  1491. @ARG
  1492. // #614
  1493. D=M
  1494. //^^ push_d_to_stack
  1495. // #615
  1496. @SP
  1497. // #616
  1498. A=M
  1499. // #617
  1500. M=D
  1501. // #618
  1502. @SP
  1503. // #619
  1504. M=M+1
  1505. //vv push_d_to_stack
  1506. //push ARG
  1507. // #620
  1508. @THIS
  1509. // #621
  1510. D=M
  1511. //^^ push_d_to_stack
  1512. // #622
  1513. @SP
  1514. // #623
  1515. A=M
  1516. // #624
  1517. M=D
  1518. // #625
  1519. @SP
  1520. // #626
  1521. M=M+1
  1522. //vv push_d_to_stack
  1523. //push THIS
  1524. // #627
  1525. @THAT
  1526. // #628
  1527. D=M
  1528. //^^ push_d_to_stack
  1529. // #629
  1530. @SP
  1531. // #630
  1532. A=M
  1533. // #631
  1534. M=D
  1535. // #632
  1536. @SP
  1537. // #633
  1538. M=M+1
  1539. //vv push_d_to_stack
  1540. //push THAT
  1541. // #634
  1542. @SP
  1543. // #635
  1544. D=M
  1545. // #636
  1546. @ARG
  1547. // #637
  1548. M=D
  1549. // #638
  1550. @6
  1551. // #639
  1552. D=A
  1553. // #640
  1554. @ARG
  1555. // #641
  1556. M=M-D // ARG = SP - args - 5
  1557. // #642
  1558. @SP
  1559. // #643
  1560. D=M
  1561. // #644
  1562. @LCL
  1563. // #645
  1564. M=D // LCL = SP
  1565. // #646
  1566. @SquareGame.run
  1567. // #647
  1568. 0;JMP
  1569. (RET_ADDR_27)
  1570. //
  1571. //// pop temp 0
  1572. //^^ pop_to_loc{5)
  1573. //^^ pop_stack_to_d
  1574. // #648
  1575. @SP
  1576. // #649
  1577. M=M-1
  1578. // #650
  1579. A=M
  1580. // #651
  1581. D=M
  1582. //vv pop_stack_to_d
  1583. // #652
  1584. @5
  1585. // #653
  1586. M=D
  1587. //vv pop_to_loc{5)
  1588. //
  1589. //// push local 0
  1590. //^^ push_from_ram(LCL, 0)
  1591. // #654
  1592. @LCL
  1593. // #655
  1594. D=M
  1595. // #656
  1596. @0
  1597. // #657
  1598. A=D+A
  1599. // #658
  1600. D=M
  1601. //^^ push_d_to_stack
  1602. // #659
  1603. @SP
  1604. // #660
  1605. A=M
  1606. // #661
  1607. M=D
  1608. // #662
  1609. @SP
  1610. // #663
  1611. M=M+1
  1612. //vv push_d_to_stack
  1613. //vv push_from_ram(LCL, 0)
  1614. //
  1615. //// call SquareGame.dispose 1
  1616. //^^ push_constant(RET_ADDR_28)
  1617. // #664
  1618. @RET_ADDR_28
  1619. // #665
  1620. D=A
  1621. //^^ push_d_to_stack
  1622. // #666
  1623. @SP
  1624. // #667
  1625. A=M
  1626. // #668
  1627. M=D
  1628. // #669
  1629. @SP
  1630. // #670
  1631. M=M+1
  1632. //vv push_d_to_stack
  1633. //vv push_constant(RET_ADDR_28)
  1634. //push return-address
  1635. // #671
  1636. @LCL
  1637. // #672
  1638. D=M
  1639. //^^ push_d_to_stack
  1640. // #673
  1641. @SP
  1642. // #674
  1643. A=M
  1644. // #675
  1645. M=D
  1646. // #676
  1647. @SP
  1648. // #677
  1649. M=M+1
  1650. //vv push_d_to_stack
  1651. //push LCL
  1652. // #678
  1653. @ARG
  1654. // #679
  1655. D=M
  1656. //^^ push_d_to_stack
  1657. // #680
  1658. @SP
  1659. // #681
  1660. A=M
  1661. // #682
  1662. M=D
  1663. // #683
  1664. @SP
  1665. // #684
  1666. M=M+1
  1667. //vv push_d_to_stack
  1668. //push ARG
  1669. // #685
  1670. @THIS
  1671. // #686
  1672. D=M
  1673. //^^ push_d_to_stack
  1674. // #687
  1675. @SP
  1676. // #688
  1677. A=M
  1678. // #689
  1679. M=D
  1680. // #690
  1681. @SP
  1682. // #691
  1683. M=M+1
  1684. //vv push_d_to_stack
  1685. //push THIS
  1686. // #692
  1687. @THAT
  1688. // #693
  1689. D=M
  1690. //^^ push_d_to_stack
  1691. // #694
  1692. @SP
  1693. // #695
  1694. A=M
  1695. // #696
  1696. M=D
  1697. // #697
  1698. @SP
  1699. // #698
  1700. M=M+1
  1701. //vv push_d_to_stack
  1702. //push THAT
  1703. // #699
  1704. @SP
  1705. // #700
  1706. D=M
  1707. // #701
  1708. @ARG
  1709. // #702
  1710. M=D
  1711. // #703
  1712. @6
  1713. // #704
  1714. D=A
  1715. // #705
  1716. @ARG
  1717. // #706
  1718. M=M-D // ARG = SP - args - 5
  1719. // #707
  1720. @SP
  1721. // #708
  1722. D=M
  1723. // #709
  1724. @LCL
  1725. // #710
  1726. M=D // LCL = SP
  1727. // #711
  1728. @SquareGame.dispose
  1729. // #712
  1730. 0;JMP
  1731. (RET_ADDR_28)
  1732. //
  1733. //// pop temp 0
  1734. //^^ pop_to_loc{5)
  1735. //^^ pop_stack_to_d
  1736. // #713
  1737. @SP
  1738. // #714
  1739. M=M-1
  1740. // #715
  1741. A=M
  1742. // #716
  1743. D=M
  1744. //vv pop_stack_to_d
  1745. // #717
  1746. @5
  1747. // #718
  1748. M=D
  1749. //vv pop_to_loc{5)
  1750. //
  1751. //// push constant 0
  1752. //^^ push_constant(0)
  1753. // #719
  1754. @0
  1755. // #720
  1756. D=A
  1757. //^^ push_d_to_stack
  1758. // #721
  1759. @SP
  1760. // #722
  1761. A=M
  1762. // #723
  1763. M=D
  1764. // #724
  1765. @SP
  1766. // #725
  1767. M=M+1
  1768. //vv push_d_to_stack
  1769. //vv push_constant(0)
  1770. //
  1771. //// return
  1772. // #726
  1773. @LCL
  1774. // #727
  1775. D=M
  1776. // #728
  1777. @R14
  1778. // #729
  1779. M=D //R14=LCL
  1780. // #730
  1781. @5
  1782. // #731
  1783. A=D-A
  1784. // #732
  1785. D=M
  1786. // #733
  1787. @R15
  1788. // #734
  1789. M=D //R15=*(LCL-5)
  1790. //^^ pop_stack_to_d
  1791. // #735
  1792. @SP
  1793. // #736
  1794. M=M-1
  1795. // #737
  1796. A=M
  1797. // #738
  1798. D=M
  1799. //vv pop_stack_to_d
  1800. // #739
  1801. @ARG
  1802. // #740
  1803. A=M
  1804. // #741
  1805. M=D //*ARG = pop()
  1806. // #742
  1807. @ARG
  1808. // #743
  1809. D=M
  1810. // #744
  1811. @SP
  1812. // #745
  1813. M=D+1 //SP=ARG+1
  1814. // #746
  1815. @R14
  1816. // #747
  1817. AM=M-1
  1818. // #748
  1819. D=M
  1820. // #749
  1821. @THAT
  1822. // #750
  1823. M=D //THAT = *(--R14)
  1824. // #751
  1825. @R14
  1826. // #752
  1827. AM=M-1
  1828. // #753
  1829. D=M
  1830. // #754
  1831. @THIS
  1832. // #755
  1833. M=D //THIS = *(--R14)
  1834. // #756
  1835. @R14
  1836. // #757
  1837. AM=M-1
  1838. // #758
  1839. D=M
  1840. // #759
  1841. @ARG
  1842. // #760
  1843. M=D //ARG = *(--R14)
  1844. // #761
  1845. @R14
  1846. // #762
  1847. AM=M-1
  1848. // #763
  1849. D=M
  1850. // #764
  1851. @LCL
  1852. // #765
  1853. M=D //LCL = *(--R14)
  1854. // #766
  1855. @R15
  1856. // #767
  1857. A=M
  1858. // #768
  1859. 0;JMP //goto *R15
  1860. //
  1861. //// function Math.init 1
  1862. (Math.init)
  1863. // #769
  1864. D=0
  1865. //^^ push_d_to_stack
  1866. // #770
  1867. @SP
  1868. // #771
  1869. A=M
  1870. // #772
  1871. M=D
  1872. // #773
  1873. @SP
  1874. // #774
  1875. M=M+1
  1876. //vv push_d_to_stack
  1877. //
  1878. //// push constant 16
  1879. //^^ push_constant(16)
  1880. // #775
  1881. @16
  1882. // #776
  1883. D=A
  1884. //^^ push_d_to_stack
  1885. // #777
  1886. @SP
  1887. // #778
  1888. A=M
  1889. // #779
  1890. M=D
  1891. // #780
  1892. @SP
  1893. // #781
  1894. M=M+1
  1895. //vv push_d_to_stack
  1896. //vv push_constant(16)
  1897. //
  1898. //// call Array.new 1
  1899. //^^ push_constant(RET_ADDR_29)
  1900. // #782
  1901. @RET_ADDR_29
  1902. // #783
  1903. D=A
  1904. //^^ push_d_to_stack
  1905. // #784
  1906. @SP
  1907. // #785
  1908. A=M
  1909. // #786
  1910. M=D
  1911. // #787
  1912. @SP
  1913. // #788
  1914. M=M+1
  1915. //vv push_d_to_stack
  1916. //vv push_constant(RET_ADDR_29)
  1917. //push return-address
  1918. // #789
  1919. @LCL
  1920. // #790
  1921. D=M
  1922. //^^ push_d_to_stack
  1923. // #791
  1924. @SP
  1925. // #792
  1926. A=M
  1927. // #793
  1928. M=D
  1929. // #794
  1930. @SP
  1931. // #795
  1932. M=M+1
  1933. //vv push_d_to_stack
  1934. //push LCL
  1935. // #796
  1936. @ARG
  1937. // #797
  1938. D=M
  1939. //^^ push_d_to_stack
  1940. // #798
  1941. @SP
  1942. // #799
  1943. A=M
  1944. // #800
  1945. M=D
  1946. // #801
  1947. @SP
  1948. // #802
  1949. M=M+1
  1950. //vv push_d_to_stack
  1951. //push ARG
  1952. // #803
  1953. @THIS
  1954. // #804
  1955. D=M
  1956. //^^ push_d_to_stack
  1957. // #805
  1958. @SP
  1959. // #806
  1960. A=M
  1961. // #807
  1962. M=D
  1963. // #808
  1964. @SP
  1965. // #809
  1966. M=M+1
  1967. //vv push_d_to_stack
  1968. //push THIS
  1969. // #810
  1970. @THAT
  1971. // #811
  1972. D=M
  1973. //^^ push_d_to_stack
  1974. // #812
  1975. @SP
  1976. // #813
  1977. A=M
  1978. // #814
  1979. M=D
  1980. // #815
  1981. @SP
  1982. // #816
  1983. M=M+1
  1984. //vv push_d_to_stack
  1985. //push THAT
  1986. // #817
  1987. @SP
  1988. // #818
  1989. D=M
  1990. // #819
  1991. @ARG
  1992. // #820
  1993. M=D
  1994. // #821
  1995. @6
  1996. // #822
  1997. D=A
  1998. // #823
  1999. @ARG
  2000. // #824
  2001. M=M-D // ARG = SP - args - 5
  2002. // #825
  2003. @SP
  2004. // #826
  2005. D=M
  2006. // #827
  2007. @LCL
  2008. // #828
  2009. M=D // LCL = SP
  2010. // #829
  2011. @Array.new
  2012. // #830
  2013. 0;JMP
  2014. (RET_ADDR_29)
  2015. //
  2016. //// pop static 1
  2017. //^^ pop_to_loc{Math.vm.1)
  2018. //^^ pop_stack_to_d
  2019. // #831
  2020. @SP
  2021. // #832
  2022. M=M-1
  2023. // #833
  2024. A=M
  2025. // #834
  2026. D=M
  2027. //vv pop_stack_to_d
  2028. // #835
  2029. @Math.vm.1
  2030. // #836
  2031. M=D
  2032. //vv pop_to_loc{Math.vm.1)
  2033. //
  2034. //// push constant 16
  2035. //^^ push_constant(16)
  2036. // #837
  2037. @16
  2038. // #838
  2039. D=A
  2040. //^^ push_d_to_stack
  2041. // #839
  2042. @SP
  2043. // #840
  2044. A=M
  2045. // #841
  2046. M=D
  2047. // #842
  2048. @SP
  2049. // #843
  2050. M=M+1
  2051. //vv push_d_to_stack
  2052. //vv push_constant(16)
  2053. //
  2054. //// call Array.new 1
  2055. //^^ push_constant(RET_ADDR_30)
  2056. // #844
  2057. @RET_ADDR_30
  2058. // #845
  2059. D=A
  2060. //^^ push_d_to_stack
  2061. // #846
  2062. @SP
  2063. // #847
  2064. A=M
  2065. // #848
  2066. M=D
  2067. // #849
  2068. @SP
  2069. // #850
  2070. M=M+1
  2071. //vv push_d_to_stack
  2072. //vv push_constant(RET_ADDR_30)
  2073. //push return-address
  2074. // #851
  2075. @LCL
  2076. // #852
  2077. D=M
  2078. //^^ push_d_to_stack
  2079. // #853
  2080. @SP
  2081. // #854
  2082. A=M
  2083. // #855
  2084. M=D
  2085. // #856
  2086. @SP
  2087. // #857
  2088. M=M+1
  2089. //vv push_d_to_stack
  2090. //push LCL
  2091. // #858
  2092. @ARG
  2093. // #859
  2094. D=M
  2095. //^^ push_d_to_stack
  2096. // #860
  2097. @SP
  2098. // #861
  2099. A=M
  2100. // #862
  2101. M=D
  2102. // #863
  2103. @SP
  2104. // #864
  2105. M=M+1
  2106. //vv push_d_to_stack
  2107. //push ARG
  2108. // #865
  2109. @THIS
  2110. // #866
  2111. D=M
  2112. //^^ push_d_to_stack
  2113. // #867
  2114. @SP
  2115. // #868
  2116. A=M
  2117. // #869
  2118. M=D
  2119. // #870
  2120. @SP
  2121. // #871
  2122. M=M+1
  2123. //vv push_d_to_stack
  2124. //push THIS
  2125. // #872
  2126. @THAT
  2127. // #873
  2128. D=M
  2129. //^^ push_d_to_stack
  2130. // #874
  2131. @SP
  2132. // #875
  2133. A=M
  2134. // #876
  2135. M=D
  2136. // #877
  2137. @SP
  2138. // #878
  2139. M=M+1
  2140. //vv push_d_to_stack
  2141. //push THAT
  2142. // #879
  2143. @SP
  2144. // #880
  2145. D=M
  2146. // #881
  2147. @ARG
  2148. // #882
  2149. M=D
  2150. // #883
  2151. @6
  2152. // #884
  2153. D=A
  2154. // #885
  2155. @ARG
  2156. // #886
  2157. M=M-D // ARG = SP - args - 5
  2158. // #887
  2159. @SP
  2160. // #888
  2161. D=M
  2162. // #889
  2163. @LCL
  2164. // #890
  2165. M=D // LCL = SP
  2166. // #891
  2167. @Array.new
  2168. // #892
  2169. 0;JMP
  2170. (RET_ADDR_30)
  2171. //
  2172. //// pop static 0
  2173. //^^ pop_to_loc{Math.vm.0)
  2174. //^^ pop_stack_to_d
  2175. // #893
  2176. @SP
  2177. // #894
  2178. M=M-1
  2179. // #895
  2180. A=M
  2181. // #896
  2182. D=M
  2183. //vv pop_stack_to_d
  2184. // #897
  2185. @Math.vm.0
  2186. // #898
  2187. M=D
  2188. //vv pop_to_loc{Math.vm.0)
  2189. //
  2190. //// push constant 0
  2191. //^^ push_constant(0)
  2192. // #899
  2193. @0
  2194. // #900
  2195. D=A
  2196. //^^ push_d_to_stack
  2197. // #901
  2198. @SP
  2199. // #902
  2200. A=M
  2201. // #903
  2202. M=D
  2203. // #904
  2204. @SP
  2205. // #905
  2206. M=M+1
  2207. //vv push_d_to_stack
  2208. //vv push_constant(0)
  2209. //
  2210. //// push static 0
  2211. //^^ push_from_loc(Math.vm.0)
  2212. // #906
  2213. @Math.vm.0
  2214. // #907
  2215. D=M
  2216. //^^ push_d_to_stack
  2217. // #908
  2218. @SP
  2219. // #909
  2220. A=M
  2221. // #910
  2222. M=D
  2223. // #911
  2224. @SP
  2225. // #912
  2226. M=M+1
  2227. //vv push_d_to_stack
  2228. //vv push_from_loc(Math.vm.0)
  2229. //
  2230. //// add
  2231. //^^ arith_binary_op(+)
  2232. //^^ pop_stack_to_d
  2233. // #913
  2234. @SP
  2235. // #914
  2236. M=M-1
  2237. // #915
  2238. A=M
  2239. // #916
  2240. D=M
  2241. //vv pop_stack_to_d
  2242. //^^ arith_d_with_stack_top(D+M)
  2243. // #917
  2244. @R13
  2245. // #918
  2246. M=D
  2247. //^^ pop_stack_to_d
  2248. // #919
  2249. @SP
  2250. // #920
  2251. M=M-1
  2252. // #921
  2253. A=M
  2254. // #922
  2255. D=M
  2256. //vv pop_stack_to_d
  2257. // #923
  2258. @R13
  2259. // #924
  2260. D=D+M
  2261. // #925
  2262. @R13
  2263. // #926
  2264. M=0
  2265. //vv arith_d_with_stack_top(D+M)
  2266. //^^ push_d_to_stack
  2267. // #927
  2268. @SP
  2269. // #928
  2270. A=M
  2271. // #929
  2272. M=D
  2273. // #930
  2274. @SP
  2275. // #931
  2276. M=M+1
  2277. //vv push_d_to_stack
  2278. //vv arith_binary_op(+)
  2279. //
  2280. //// push constant 1
  2281. //^^ push_constant(1)
  2282. // #932
  2283. @1
  2284. // #933
  2285. D=A
  2286. //^^ push_d_to_stack
  2287. // #934
  2288. @SP
  2289. // #935
  2290. A=M
  2291. // #936
  2292. M=D
  2293. // #937
  2294. @SP
  2295. // #938
  2296. M=M+1
  2297. //vv push_d_to_stack
  2298. //vv push_constant(1)
  2299. //
  2300. //// pop temp 0
  2301. //^^ pop_to_loc{5)
  2302. //^^ pop_stack_to_d
  2303. // #939
  2304. @SP
  2305. // #940
  2306. M=M-1
  2307. // #941
  2308. A=M
  2309. // #942
  2310. D=M
  2311. //vv pop_stack_to_d
  2312. // #943
  2313. @5
  2314. // #944
  2315. M=D
  2316. //vv pop_to_loc{5)
  2317. //
  2318. //// pop pointer 1
  2319. //^^ pop_to_loc{4)
  2320. //^^ pop_stack_to_d
  2321. // #945
  2322. @SP
  2323. // #946
  2324. M=M-1
  2325. // #947
  2326. A=M
  2327. // #948
  2328. D=M
  2329. //vv pop_stack_to_d
  2330. // #949
  2331. @4
  2332. // #950
  2333. M=D
  2334. //vv pop_to_loc{4)
  2335. //
  2336. //// push temp 0
  2337. //^^ push_from_loc(5)
  2338. // #951
  2339. @5
  2340. // #952
  2341. D=M
  2342. //^^ push_d_to_stack
  2343. // #953
  2344. @SP
  2345. // #954
  2346. A=M
  2347. // #955
  2348. M=D
  2349. // #956
  2350. @SP
  2351. // #957
  2352. M=M+1
  2353. //vv push_d_to_stack
  2354. //vv push_from_loc(5)
  2355. //
  2356. //// pop that 0
  2357. //^^ pop_to_ram(THAT, 0)
  2358. // #958
  2359. @THAT
  2360. // #959
  2361. D=M
  2362. // #960
  2363. @0
  2364. // #961
  2365. D=D+A
  2366. // #962
  2367. @R13
  2368. // #963
  2369. M=D
  2370. //^^ pop_stack_to_d
  2371. // #964
  2372. @SP
  2373. // #965
  2374. M=M-1
  2375. // #966
  2376. A=M
  2377. // #967
  2378. D=M
  2379. //vv pop_stack_to_d
  2380. // #968
  2381. @R13
  2382. // #969
  2383. A=M
  2384. // #970
  2385. M=D
  2386. // #971
  2387. @R13
  2388. // #972
  2389. M=0
  2390. //vv pop_to_ram(THAT, 0)
  2391. //
  2392. //// label WHILE_EXP0
  2393. (Math.init$WHILE_EXP0)
  2394. //
  2395. //// push local 0
  2396. //^^ push_from_ram(LCL, 0)
  2397. // #973
  2398. @LCL
  2399. // #974
  2400. D=M
  2401. // #975
  2402. @0
  2403. // #976
  2404. A=D+A
  2405. // #977
  2406. D=M
  2407. //^^ push_d_to_stack
  2408. // #978
  2409. @SP
  2410. // #979
  2411. A=M
  2412. // #980
  2413. M=D
  2414. // #981
  2415. @SP
  2416. // #982
  2417. M=M+1
  2418. //vv push_d_to_stack
  2419. //vv push_from_ram(LCL, 0)
  2420. //
  2421. //// push constant 15
  2422. //^^ push_constant(15)
  2423. // #983
  2424. @15
  2425. // #984
  2426. D=A
  2427. //^^ push_d_to_stack
  2428. // #985
  2429. @SP
  2430. // #986
  2431. A=M
  2432. // #987
  2433. M=D
  2434. // #988
  2435. @SP
  2436. // #989
  2437. M=M+1
  2438. //vv push_d_to_stack
  2439. //vv push_constant(15)
  2440. //
  2441. //// lt
  2442. //^^ arith_cmp_op(JLT)
  2443. //^^ pop_stack_to_d
  2444. // #990
  2445. @SP
  2446. // #991
  2447. M=M-1
  2448. // #992
  2449. A=M
  2450. // #993
  2451. D=M
  2452. //vv pop_stack_to_d
  2453. //^^ arith_d_with_stack_top(D-M)
  2454. // #994
  2455. @R13
  2456. // #995
  2457. M=D
  2458. //^^ pop_stack_to_d
  2459. // #996
  2460. @SP
  2461. // #997
  2462. M=M-1
  2463. // #998
  2464. A=M
  2465. // #999
  2466. D=M
  2467. //vv pop_stack_to_d
  2468. // #1000
  2469. @R13
  2470. // #1001
  2471. D=D-M
  2472. // #1002
  2473. @R13
  2474. // #1003
  2475. M=0
  2476. //vv arith_d_with_stack_top(D-M)
  2477. // #1004
  2478. @PUT_TRUE_31
  2479. // #1005
  2480. D;JLT
  2481. // #1006
  2482. @R13
  2483. // #1007
  2484. M=0
  2485. // #1008
  2486. @CONT_31
  2487. // #1009
  2488. 0;JMP
  2489. (PUT_TRUE_31)
  2490. // #1010
  2491. @R13
  2492. // #1011
  2493. M=-1
  2494. (CONT_31)
  2495. // #1012
  2496. @R13
  2497. // #1013
  2498. D=M
  2499. // #1014
  2500. @R13
  2501. // #1015
  2502. M=0
  2503. //^^ push_d_to_stack
  2504. // #1016
  2505. @SP
  2506. // #1017
  2507. A=M
  2508. // #1018
  2509. M=D
  2510. // #1019
  2511. @SP
  2512. // #1020
  2513. M=M+1
  2514. //vv push_d_to_stack
  2515. //vv arith_cmp_op(JLT)
  2516. //
  2517. //// not
  2518. //^^ arith_unary_op(!)
  2519. //^^ pop_stack_to_d
  2520. // #1021
  2521. @SP
  2522. // #1022
  2523. M=M-1
  2524. // #1023
  2525. A=M
  2526. // #1024
  2527. D=M
  2528. //vv pop_stack_to_d
  2529. // #1025
  2530. D=!D
  2531. //^^ push_d_to_stack
  2532. // #1026
  2533. @SP
  2534. // #1027
  2535. A=M
  2536. // #1028
  2537. M=D
  2538. // #1029
  2539. @SP
  2540. // #1030
  2541. M=M+1
  2542. //vv push_d_to_stack
  2543. //vv arith_unary_op(!)
  2544. //
  2545. //// if-goto WHILE_END0
  2546. //^^ pop_stack_to_d
  2547. // #1031
  2548. @SP
  2549. // #1032
  2550. M=M-1
  2551. // #1033
  2552. A=M
  2553. // #1034
  2554. D=M
  2555. //vv pop_stack_to_d
  2556. // #1035
  2557. @Math.init$WHILE_END0
  2558. // #1036
  2559. D;JNE
  2560. //
  2561. //// push local 0
  2562. //^^ push_from_ram(LCL, 0)
  2563. // #1037
  2564. @LCL
  2565. // #1038
  2566. D=M
  2567. // #1039
  2568. @0
  2569. // #1040
  2570. A=D+A
  2571. // #1041
  2572. D=M
  2573. //^^ push_d_to_stack
  2574. // #1042
  2575. @SP
  2576. // #1043
  2577. A=M
  2578. // #1044
  2579. M=D
  2580. // #1045
  2581. @SP
  2582. // #1046
  2583. M=M+1
  2584. //vv push_d_to_stack
  2585. //vv push_from_ram(LCL, 0)
  2586. //
  2587. //// push constant 1
  2588. //^^ push_constant(1)
  2589. // #1047
  2590. @1
  2591. // #1048
  2592. D=A
  2593. //^^ push_d_to_stack
  2594. // #1049
  2595. @SP
  2596. // #1050
  2597. A=M
  2598. // #1051
  2599. M=D
  2600. // #1052
  2601. @SP
  2602. // #1053
  2603. M=M+1
  2604. //vv push_d_to_stack
  2605. //vv push_constant(1)
  2606. //
  2607. //// add
  2608. //^^ arith_binary_op(+)
  2609. //^^ pop_stack_to_d
  2610. // #1054
  2611. @SP
  2612. // #1055
  2613. M=M-1
  2614. // #1056
  2615. A=M
  2616. // #1057
  2617. D=M
  2618. //vv pop_stack_to_d
  2619. //^^ arith_d_with_stack_top(D+M)
  2620. // #1058
  2621. @R13
  2622. // #1059
  2623. M=D
  2624. //^^ pop_stack_to_d
  2625. // #1060
  2626. @SP
  2627. // #1061
  2628. M=M-1
  2629. // #1062
  2630. A=M
  2631. // #1063
  2632. D=M
  2633. //vv pop_stack_to_d
  2634. // #1064
  2635. @R13
  2636. // #1065
  2637. D=D+M
  2638. // #1066
  2639. @R13
  2640. // #1067
  2641. M=0
  2642. //vv arith_d_with_stack_top(D+M)
  2643. //^^ push_d_to_stack
  2644. // #1068
  2645. @SP
  2646. // #1069
  2647. A=M
  2648. // #1070
  2649. M=D
  2650. // #1071
  2651. @SP
  2652. // #1072
  2653. M=M+1
  2654. //vv push_d_to_stack
  2655. //vv arith_binary_op(+)
  2656. //
  2657. //// pop local 0
  2658. //^^ pop_to_ram(LCL, 0)
  2659. // #1073
  2660. @LCL
  2661. // #1074
  2662. D=M
  2663. // #1075
  2664. @0
  2665. // #1076
  2666. D=D+A
  2667. // #1077
  2668. @R13
  2669. // #1078
  2670. M=D
  2671. //^^ pop_stack_to_d
  2672. // #1079
  2673. @SP
  2674. // #1080
  2675. M=M-1
  2676. // #1081
  2677. A=M
  2678. // #1082
  2679. D=M
  2680. //vv pop_stack_to_d
  2681. // #1083
  2682. @R13
  2683. // #1084
  2684. A=M
  2685. // #1085
  2686. M=D
  2687. // #1086
  2688. @R13
  2689. // #1087
  2690. M=0
  2691. //vv pop_to_ram(LCL, 0)
  2692. //
  2693. //// push local 0
  2694. //^^ push_from_ram(LCL, 0)
  2695. // #1088
  2696. @LCL
  2697. // #1089
  2698. D=M
  2699. // #1090
  2700. @0
  2701. // #1091
  2702. A=D+A
  2703. // #1092
  2704. D=M
  2705. //^^ push_d_to_stack
  2706. // #1093
  2707. @SP
  2708. // #1094
  2709. A=M
  2710. // #1095
  2711. M=D
  2712. // #1096
  2713. @SP
  2714. // #1097
  2715. M=M+1
  2716. //vv push_d_to_stack
  2717. //vv push_from_ram(LCL, 0)
  2718. //
  2719. //// push static 0
  2720. //^^ push_from_loc(Math.vm.0)
  2721. // #1098
  2722. @Math.vm.0
  2723. // #1099
  2724. D=M
  2725. //^^ push_d_to_stack
  2726. // #1100
  2727. @SP
  2728. // #1101
  2729. A=M
  2730. // #1102
  2731. M=D
  2732. // #1103
  2733. @SP
  2734. // #1104
  2735. M=M+1
  2736. //vv push_d_to_stack
  2737. //vv push_from_loc(Math.vm.0)
  2738. //
  2739. //// add
  2740. //^^ arith_binary_op(+)
  2741. //^^ pop_stack_to_d
  2742. // #1105
  2743. @SP
  2744. // #1106
  2745. M=M-1
  2746. // #1107
  2747. A=M
  2748. // #1108
  2749. D=M
  2750. //vv pop_stack_to_d
  2751. //^^ arith_d_with_stack_top(D+M)
  2752. // #1109
  2753. @R13
  2754. // #1110
  2755. M=D
  2756. //^^ pop_stack_to_d
  2757. // #1111
  2758. @SP
  2759. // #1112
  2760. M=M-1
  2761. // #1113
  2762. A=M
  2763. // #1114
  2764. D=M
  2765. //vv pop_stack_to_d
  2766. // #1115
  2767. @R13
  2768. // #1116
  2769. D=D+M
  2770. // #1117
  2771. @R13
  2772. // #1118
  2773. M=0
  2774. //vv arith_d_with_stack_top(D+M)
  2775. //^^ push_d_to_stack
  2776. // #1119
  2777. @SP
  2778. // #1120
  2779. A=M
  2780. // #1121
  2781. M=D
  2782. // #1122
  2783. @SP
  2784. // #1123
  2785. M=M+1
  2786. //vv push_d_to_stack
  2787. //vv arith_binary_op(+)
  2788. //
  2789. //// push local 0
  2790. //^^ push_from_ram(LCL, 0)
  2791. // #1124
  2792. @LCL
  2793. // #1125
  2794. D=M
  2795. // #1126
  2796. @0
  2797. // #1127
  2798. A=D+A
  2799. // #1128
  2800. D=M
  2801. //^^ push_d_to_stack
  2802. // #1129
  2803. @SP
  2804. // #1130
  2805. A=M
  2806. // #1131
  2807. M=D
  2808. // #1132
  2809. @SP
  2810. // #1133
  2811. M=M+1
  2812. //vv push_d_to_stack
  2813. //vv push_from_ram(LCL, 0)
  2814. //
  2815. //// push constant 1
  2816. //^^ push_constant(1)
  2817. // #1134
  2818. @1
  2819. // #1135
  2820. D=A
  2821. //^^ push_d_to_stack
  2822. // #1136
  2823. @SP
  2824. // #1137
  2825. A=M
  2826. // #1138
  2827. M=D
  2828. // #1139
  2829. @SP
  2830. // #1140
  2831. M=M+1
  2832. //vv push_d_to_stack
  2833. //vv push_constant(1)
  2834. //
  2835. //// sub
  2836. //^^ arith_binary_op(-)
  2837. //^^ pop_stack_to_d
  2838. // #1141
  2839. @SP
  2840. // #1142
  2841. M=M-1
  2842. // #1143
  2843. A=M
  2844. // #1144
  2845. D=M
  2846. //vv pop_stack_to_d
  2847. //^^ arith_d_with_stack_top(D-M)
  2848. // #1145
  2849. @R13
  2850. // #1146
  2851. M=D
  2852. //^^ pop_stack_to_d
  2853. // #1147
  2854. @SP
  2855. // #1148
  2856. M=M-1
  2857. // #1149
  2858. A=M
  2859. // #1150
  2860. D=M
  2861. //vv pop_stack_to_d
  2862. // #1151
  2863. @R13
  2864. // #1152
  2865. D=D-M
  2866. // #1153
  2867. @R13
  2868. // #1154
  2869. M=0
  2870. //vv arith_d_with_stack_top(D-M)
  2871. //^^ push_d_to_stack
  2872. // #1155
  2873. @SP
  2874. // #1156
  2875. A=M
  2876. // #1157
  2877. M=D
  2878. // #1158
  2879. @SP
  2880. // #1159
  2881. M=M+1
  2882. //vv push_d_to_stack
  2883. //vv arith_binary_op(-)
  2884. //
  2885. //// push static 0
  2886. //^^ push_from_loc(Math.vm.0)
  2887. // #1160
  2888. @Math.vm.0
  2889. // #1161
  2890. D=M
  2891. //^^ push_d_to_stack
  2892. // #1162
  2893. @SP
  2894. // #1163
  2895. A=M
  2896. // #1164
  2897. M=D
  2898. // #1165
  2899. @SP
  2900. // #1166
  2901. M=M+1
  2902. //vv push_d_to_stack
  2903. //vv push_from_loc(Math.vm.0)
  2904. //
  2905. //// add
  2906. //^^ arith_binary_op(+)
  2907. //^^ pop_stack_to_d
  2908. // #1167
  2909. @SP
  2910. // #1168
  2911. M=M-1
  2912. // #1169
  2913. A=M
  2914. // #1170
  2915. D=M
  2916. //vv pop_stack_to_d
  2917. //^^ arith_d_with_stack_top(D+M)
  2918. // #1171
  2919. @R13
  2920. // #1172
  2921. M=D
  2922. //^^ pop_stack_to_d
  2923. // #1173
  2924. @SP
  2925. // #1174
  2926. M=M-1
  2927. // #1175
  2928. A=M
  2929. // #1176
  2930. D=M
  2931. //vv pop_stack_to_d
  2932. // #1177
  2933. @R13
  2934. // #1178
  2935. D=D+M
  2936. // #1179
  2937. @R13
  2938. // #1180
  2939. M=0
  2940. //vv arith_d_with_stack_top(D+M)
  2941. //^^ push_d_to_stack
  2942. // #1181
  2943. @SP
  2944. // #1182
  2945. A=M
  2946. // #1183
  2947. M=D
  2948. // #1184
  2949. @SP
  2950. // #1185
  2951. M=M+1
  2952. //vv push_d_to_stack
  2953. //vv arith_binary_op(+)
  2954. //
  2955. //// pop pointer 1
  2956. //^^ pop_to_loc{4)
  2957. //^^ pop_stack_to_d
  2958. // #1186
  2959. @SP
  2960. // #1187
  2961. M=M-1
  2962. // #1188
  2963. A=M
  2964. // #1189
  2965. D=M
  2966. //vv pop_stack_to_d
  2967. // #1190
  2968. @4
  2969. // #1191
  2970. M=D
  2971. //vv pop_to_loc{4)
  2972. //
  2973. //// push that 0
  2974. //^^ push_from_ram(THAT, 0)
  2975. // #1192
  2976. @THAT
  2977. // #1193
  2978. D=M
  2979. // #1194
  2980. @0
  2981. // #1195
  2982. A=D+A
  2983. // #1196
  2984. D=M
  2985. //^^ push_d_to_stack
  2986. // #1197
  2987. @SP
  2988. // #1198
  2989. A=M
  2990. // #1199
  2991. M=D
  2992. // #1200
  2993. @SP
  2994. // #1201
  2995. M=M+1
  2996. //vv push_d_to_stack
  2997. //vv push_from_ram(THAT, 0)
  2998. //
  2999. //// push local 0
  3000. //^^ push_from_ram(LCL, 0)
  3001. // #1202
  3002. @LCL
  3003. // #1203
  3004. D=M
  3005. // #1204
  3006. @0
  3007. // #1205
  3008. A=D+A
  3009. // #1206
  3010. D=M
  3011. //^^ push_d_to_stack
  3012. // #1207
  3013. @SP
  3014. // #1208
  3015. A=M
  3016. // #1209
  3017. M=D
  3018. // #1210
  3019. @SP
  3020. // #1211
  3021. M=M+1
  3022. //vv push_d_to_stack
  3023. //vv push_from_ram(LCL, 0)
  3024. //
  3025. //// push constant 1
  3026. //^^ push_constant(1)
  3027. // #1212
  3028. @1
  3029. // #1213
  3030. D=A
  3031. //^^ push_d_to_stack
  3032. // #1214
  3033. @SP
  3034. // #1215
  3035. A=M
  3036. // #1216
  3037. M=D
  3038. // #1217
  3039. @SP
  3040. // #1218
  3041. M=M+1
  3042. //vv push_d_to_stack
  3043. //vv push_constant(1)
  3044. //
  3045. //// sub
  3046. //^^ arith_binary_op(-)
  3047. //^^ pop_stack_to_d
  3048. // #1219
  3049. @SP
  3050. // #1220
  3051. M=M-1
  3052. // #1221
  3053. A=M
  3054. // #1222
  3055. D=M
  3056. //vv pop_stack_to_d
  3057. //^^ arith_d_with_stack_top(D-M)
  3058. // #1223
  3059. @R13
  3060. // #1224
  3061. M=D
  3062. //^^ pop_stack_to_d
  3063. // #1225
  3064. @SP
  3065. // #1226
  3066. M=M-1
  3067. // #1227
  3068. A=M
  3069. // #1228
  3070. D=M
  3071. //vv pop_stack_to_d
  3072. // #1229
  3073. @R13
  3074. // #1230
  3075. D=D-M
  3076. // #1231
  3077. @R13
  3078. // #1232
  3079. M=0
  3080. //vv arith_d_with_stack_top(D-M)
  3081. //^^ push_d_to_stack
  3082. // #1233
  3083. @SP
  3084. // #1234
  3085. A=M
  3086. // #1235
  3087. M=D
  3088. // #1236
  3089. @SP
  3090. // #1237
  3091. M=M+1
  3092. //vv push_d_to_stack
  3093. //vv arith_binary_op(-)
  3094. //
  3095. //// push static 0
  3096. //^^ push_from_loc(Math.vm.0)
  3097. // #1238
  3098. @Math.vm.0
  3099. // #1239
  3100. D=M
  3101. //^^ push_d_to_stack
  3102. // #1240
  3103. @SP
  3104. // #1241
  3105. A=M
  3106. // #1242
  3107. M=D
  3108. // #1243
  3109. @SP
  3110. // #1244
  3111. M=M+1
  3112. //vv push_d_to_stack
  3113. //vv push_from_loc(Math.vm.0)
  3114. //
  3115. //// add
  3116. //^^ arith_binary_op(+)
  3117. //^^ pop_stack_to_d
  3118. // #1245
  3119. @SP
  3120. // #1246
  3121. M=M-1
  3122. // #1247
  3123. A=M
  3124. // #1248
  3125. D=M
  3126. //vv pop_stack_to_d
  3127. //^^ arith_d_with_stack_top(D+M)
  3128. // #1249
  3129. @R13
  3130. // #1250
  3131. M=D
  3132. //^^ pop_stack_to_d
  3133. // #1251
  3134. @SP
  3135. // #1252
  3136. M=M-1
  3137. // #1253
  3138. A=M
  3139. // #1254
  3140. D=M
  3141. //vv pop_stack_to_d
  3142. // #1255
  3143. @R13
  3144. // #1256
  3145. D=D+M
  3146. // #1257
  3147. @R13
  3148. // #1258
  3149. M=0
  3150. //vv arith_d_with_stack_top(D+M)
  3151. //^^ push_d_to_stack
  3152. // #1259
  3153. @SP
  3154. // #1260
  3155. A=M
  3156. // #1261
  3157. M=D
  3158. // #1262
  3159. @SP
  3160. // #1263
  3161. M=M+1
  3162. //vv push_d_to_stack
  3163. //vv arith_binary_op(+)
  3164. //
  3165. //// pop pointer 1
  3166. //^^ pop_to_loc{4)
  3167. //^^ pop_stack_to_d
  3168. // #1264
  3169. @SP
  3170. // #1265
  3171. M=M-1
  3172. // #1266
  3173. A=M
  3174. // #1267
  3175. D=M
  3176. //vv pop_stack_to_d
  3177. // #1268
  3178. @4
  3179. // #1269
  3180. M=D
  3181. //vv pop_to_loc{4)
  3182. //
  3183. //// push that 0
  3184. //^^ push_from_ram(THAT, 0)
  3185. // #1270
  3186. @THAT
  3187. // #1271
  3188. D=M
  3189. // #1272
  3190. @0
  3191. // #1273
  3192. A=D+A
  3193. // #1274
  3194. D=M
  3195. //^^ push_d_to_stack
  3196. // #1275
  3197. @SP
  3198. // #1276
  3199. A=M
  3200. // #1277
  3201. M=D
  3202. // #1278
  3203. @SP
  3204. // #1279
  3205. M=M+1
  3206. //vv push_d_to_stack
  3207. //vv push_from_ram(THAT, 0)
  3208. //
  3209. //// add
  3210. //^^ arith_binary_op(+)
  3211. //^^ pop_stack_to_d
  3212. // #1280
  3213. @SP
  3214. // #1281
  3215. M=M-1
  3216. // #1282
  3217. A=M
  3218. // #1283
  3219. D=M
  3220. //vv pop_stack_to_d
  3221. //^^ arith_d_with_stack_top(D+M)
  3222. // #1284
  3223. @R13
  3224. // #1285
  3225. M=D
  3226. //^^ pop_stack_to_d
  3227. // #1286
  3228. @SP
  3229. // #1287
  3230. M=M-1
  3231. // #1288
  3232. A=M
  3233. // #1289
  3234. D=M
  3235. //vv pop_stack_to_d
  3236. // #1290
  3237. @R13
  3238. // #1291
  3239. D=D+M
  3240. // #1292
  3241. @R13
  3242. // #1293
  3243. M=0
  3244. //vv arith_d_with_stack_top(D+M)
  3245. //^^ push_d_to_stack
  3246. // #1294
  3247. @SP
  3248. // #1295
  3249. A=M
  3250. // #1296
  3251. M=D
  3252. // #1297
  3253. @SP
  3254. // #1298
  3255. M=M+1
  3256. //vv push_d_to_stack
  3257. //vv arith_binary_op(+)
  3258. //
  3259. //// pop temp 0
  3260. //^^ pop_to_loc{5)
  3261. //^^ pop_stack_to_d
  3262. // #1299
  3263. @SP
  3264. // #1300
  3265. M=M-1
  3266. // #1301
  3267. A=M
  3268. // #1302
  3269. D=M
  3270. //vv pop_stack_to_d
  3271. // #1303
  3272. @5
  3273. // #1304
  3274. M=D
  3275. //vv pop_to_loc{5)
  3276. //
  3277. //// pop pointer 1
  3278. //^^ pop_to_loc{4)
  3279. //^^ pop_stack_to_d
  3280. // #1305
  3281. @SP
  3282. // #1306
  3283. M=M-1
  3284. // #1307
  3285. A=M
  3286. // #1308
  3287. D=M
  3288. //vv pop_stack_to_d
  3289. // #1309
  3290. @4
  3291. // #1310
  3292. M=D
  3293. //vv pop_to_loc{4)
  3294. //
  3295. //// push temp 0
  3296. //^^ push_from_loc(5)
  3297. // #1311
  3298. @5
  3299. // #1312
  3300. D=M
  3301. //^^ push_d_to_stack
  3302. // #1313
  3303. @SP
  3304. // #1314
  3305. A=M
  3306. // #1315
  3307. M=D
  3308. // #1316
  3309. @SP
  3310. // #1317
  3311. M=M+1
  3312. //vv push_d_to_stack
  3313. //vv push_from_loc(5)
  3314. //
  3315. //// pop that 0
  3316. //^^ pop_to_ram(THAT, 0)
  3317. // #1318
  3318. @THAT
  3319. // #1319
  3320. D=M
  3321. // #1320
  3322. @0
  3323. // #1321
  3324. D=D+A
  3325. // #1322
  3326. @R13
  3327. // #1323
  3328. M=D
  3329. //^^ pop_stack_to_d
  3330. // #1324
  3331. @SP
  3332. // #1325
  3333. M=M-1
  3334. // #1326
  3335. A=M
  3336. // #1327
  3337. D=M
  3338. //vv pop_stack_to_d
  3339. // #1328
  3340. @R13
  3341. // #1329
  3342. A=M
  3343. // #1330
  3344. M=D
  3345. // #1331
  3346. @R13
  3347. // #1332
  3348. M=0
  3349. //vv pop_to_ram(THAT, 0)
  3350. //
  3351. //// goto WHILE_EXP0
  3352. // #1333
  3353. @Math.init$WHILE_EXP0
  3354. // #1334
  3355. 0;JMP
  3356. //
  3357. //// label WHILE_END0
  3358. (Math.init$WHILE_END0)
  3359. //
  3360. //// push constant 0
  3361. //^^ push_constant(0)
  3362. // #1335
  3363. @0
  3364. // #1336
  3365. D=A
  3366. //^^ push_d_to_stack
  3367. // #1337
  3368. @SP
  3369. // #1338
  3370. A=M
  3371. // #1339
  3372. M=D
  3373. // #1340
  3374. @SP
  3375. // #1341
  3376. M=M+1
  3377. //vv push_d_to_stack
  3378. //vv push_constant(0)
  3379. //
  3380. //// return
  3381. // #1342
  3382. @LCL
  3383. // #1343
  3384. D=M
  3385. // #1344
  3386. @R14
  3387. // #1345
  3388. M=D //R14=LCL
  3389. // #1346
  3390. @5
  3391. // #1347
  3392. A=D-A
  3393. // #1348
  3394. D=M
  3395. // #1349
  3396. @R15
  3397. // #1350
  3398. M=D //R15=*(LCL-5)
  3399. //^^ pop_stack_to_d
  3400. // #1351
  3401. @SP
  3402. // #1352
  3403. M=M-1
  3404. // #1353
  3405. A=M
  3406. // #1354
  3407. D=M
  3408. //vv pop_stack_to_d
  3409. // #1355
  3410. @ARG
  3411. // #1356
  3412. A=M
  3413. // #1357
  3414. M=D //*ARG = pop()
  3415. // #1358
  3416. @ARG
  3417. // #1359
  3418. D=M
  3419. // #1360
  3420. @SP
  3421. // #1361
  3422. M=D+1 //SP=ARG+1
  3423. // #1362
  3424. @R14
  3425. // #1363
  3426. AM=M-1
  3427. // #1364
  3428. D=M
  3429. // #1365
  3430. @THAT
  3431. // #1366
  3432. M=D //THAT = *(--R14)
  3433. // #1367
  3434. @R14
  3435. // #1368
  3436. AM=M-1
  3437. // #1369
  3438. D=M
  3439. // #1370
  3440. @THIS
  3441. // #1371
  3442. M=D //THIS = *(--R14)
  3443. // #1372
  3444. @R14
  3445. // #1373
  3446. AM=M-1
  3447. // #1374
  3448. D=M
  3449. // #1375
  3450. @ARG
  3451. // #1376
  3452. M=D //ARG = *(--R14)
  3453. // #1377
  3454. @R14
  3455. // #1378
  3456. AM=M-1
  3457. // #1379
  3458. D=M
  3459. // #1380
  3460. @LCL
  3461. // #1381
  3462. M=D //LCL = *(--R14)
  3463. // #1382
  3464. @R15
  3465. // #1383
  3466. A=M
  3467. // #1384
  3468. 0;JMP //goto *R15
  3469. //
  3470. //// function Math.abs 0
  3471. (Math.abs)
  3472. //
  3473. //// push argument 0
  3474. //^^ push_from_ram(ARG, 0)
  3475. // #1385
  3476. @ARG
  3477. // #1386
  3478. D=M
  3479. // #1387
  3480. @0
  3481. // #1388
  3482. A=D+A
  3483. // #1389
  3484. D=M
  3485. //^^ push_d_to_stack
  3486. // #1390
  3487. @SP
  3488. // #1391
  3489. A=M
  3490. // #1392
  3491. M=D
  3492. // #1393
  3493. @SP
  3494. // #1394
  3495. M=M+1
  3496. //vv push_d_to_stack
  3497. //vv push_from_ram(ARG, 0)
  3498. //
  3499. //// push constant 0
  3500. //^^ push_constant(0)
  3501. // #1395
  3502. @0
  3503. // #1396
  3504. D=A
  3505. //^^ push_d_to_stack
  3506. // #1397
  3507. @SP
  3508. // #1398
  3509. A=M
  3510. // #1399
  3511. M=D
  3512. // #1400
  3513. @SP
  3514. // #1401
  3515. M=M+1
  3516. //vv push_d_to_stack
  3517. //vv push_constant(0)
  3518. //
  3519. //// lt
  3520. //^^ arith_cmp_op(JLT)
  3521. //^^ pop_stack_to_d
  3522. // #1402
  3523. @SP
  3524. // #1403
  3525. M=M-1
  3526. // #1404
  3527. A=M
  3528. // #1405
  3529. D=M
  3530. //vv pop_stack_to_d
  3531. //^^ arith_d_with_stack_top(D-M)
  3532. // #1406
  3533. @R13
  3534. // #1407
  3535. M=D
  3536. //^^ pop_stack_to_d
  3537. // #1408
  3538. @SP
  3539. // #1409
  3540. M=M-1
  3541. // #1410
  3542. A=M
  3543. // #1411
  3544. D=M
  3545. //vv pop_stack_to_d
  3546. // #1412
  3547. @R13
  3548. // #1413
  3549. D=D-M
  3550. // #1414
  3551. @R13
  3552. // #1415
  3553. M=0
  3554. //vv arith_d_with_stack_top(D-M)
  3555. // #1416
  3556. @PUT_TRUE_32
  3557. // #1417
  3558. D;JLT
  3559. // #1418
  3560. @R13
  3561. // #1419
  3562. M=0
  3563. // #1420
  3564. @CONT_32
  3565. // #1421
  3566. 0;JMP
  3567. (PUT_TRUE_32)
  3568. // #1422
  3569. @R13
  3570. // #1423
  3571. M=-1
  3572. (CONT_32)
  3573. // #1424
  3574. @R13
  3575. // #1425
  3576. D=M
  3577. // #1426
  3578. @R13
  3579. // #1427
  3580. M=0
  3581. //^^ push_d_to_stack
  3582. // #1428
  3583. @SP
  3584. // #1429
  3585. A=M
  3586. // #1430
  3587. M=D
  3588. // #1431
  3589. @SP
  3590. // #1432
  3591. M=M+1
  3592. //vv push_d_to_stack
  3593. //vv arith_cmp_op(JLT)
  3594. //
  3595. //// if-goto IF_TRUE0
  3596. //^^ pop_stack_to_d
  3597. // #1433
  3598. @SP
  3599. // #1434
  3600. M=M-1
  3601. // #1435
  3602. A=M
  3603. // #1436
  3604. D=M
  3605. //vv pop_stack_to_d
  3606. // #1437
  3607. @Math.abs$IF_TRUE0
  3608. // #1438
  3609. D;JNE
  3610. //
  3611. //// goto IF_FALSE0
  3612. // #1439
  3613. @Math.abs$IF_FALSE0
  3614. // #1440
  3615. 0;JMP
  3616. //
  3617. //// label IF_TRUE0
  3618. (Math.abs$IF_TRUE0)
  3619. //
  3620. //// push argument 0
  3621. //^^ push_from_ram(ARG, 0)
  3622. // #1441
  3623. @ARG
  3624. // #1442
  3625. D=M
  3626. // #1443
  3627. @0
  3628. // #1444
  3629. A=D+A
  3630. // #1445
  3631. D=M
  3632. //^^ push_d_to_stack
  3633. // #1446
  3634. @SP
  3635. // #1447
  3636. A=M
  3637. // #1448
  3638. M=D
  3639. // #1449
  3640. @SP
  3641. // #1450
  3642. M=M+1
  3643. //vv push_d_to_stack
  3644. //vv push_from_ram(ARG, 0)
  3645. //
  3646. //// neg
  3647. //^^ arith_unary_op(-)
  3648. //^^ pop_stack_to_d
  3649. // #1451
  3650. @SP
  3651. // #1452
  3652. M=M-1
  3653. // #1453
  3654. A=M
  3655. // #1454
  3656. D=M
  3657. //vv pop_stack_to_d
  3658. // #1455
  3659. D=-D
  3660. //^^ push_d_to_stack
  3661. // #1456
  3662. @SP
  3663. // #1457
  3664. A=M
  3665. // #1458
  3666. M=D
  3667. // #1459
  3668. @SP
  3669. // #1460
  3670. M=M+1
  3671. //vv push_d_to_stack
  3672. //vv arith_unary_op(-)
  3673. //
  3674. //// pop argument 0
  3675. //^^ pop_to_ram(ARG, 0)
  3676. // #1461
  3677. @ARG
  3678. // #1462
  3679. D=M
  3680. // #1463
  3681. @0
  3682. // #1464
  3683. D=D+A
  3684. // #1465
  3685. @R13
  3686. // #1466
  3687. M=D
  3688. //^^ pop_stack_to_d
  3689. // #1467
  3690. @SP
  3691. // #1468
  3692. M=M-1
  3693. // #1469
  3694. A=M
  3695. // #1470
  3696. D=M
  3697. //vv pop_stack_to_d
  3698. // #1471
  3699. @R13
  3700. // #1472
  3701. A=M
  3702. // #1473
  3703. M=D
  3704. // #1474
  3705. @R13
  3706. // #1475
  3707. M=0
  3708. //vv pop_to_ram(ARG, 0)
  3709. //
  3710. //// label IF_FALSE0
  3711. (Math.abs$IF_FALSE0)
  3712. //
  3713. //// push argument 0
  3714. //^^ push_from_ram(ARG, 0)
  3715. // #1476
  3716. @ARG
  3717. // #1477
  3718. D=M
  3719. // #1478
  3720. @0
  3721. // #1479
  3722. A=D+A
  3723. // #1480
  3724. D=M
  3725. //^^ push_d_to_stack
  3726. // #1481
  3727. @SP
  3728. // #1482
  3729. A=M
  3730. // #1483
  3731. M=D
  3732. // #1484
  3733. @SP
  3734. // #1485
  3735. M=M+1
  3736. //vv push_d_to_stack
  3737. //vv push_from_ram(ARG, 0)
  3738. //
  3739. //// return
  3740. // #1486
  3741. @LCL
  3742. // #1487
  3743. D=M
  3744. // #1488
  3745. @R14
  3746. // #1489
  3747. M=D //R14=LCL
  3748. // #1490
  3749. @5
  3750. // #1491
  3751. A=D-A
  3752. // #1492
  3753. D=M
  3754. // #1493
  3755. @R15
  3756. // #1494
  3757. M=D //R15=*(LCL-5)
  3758. //^^ pop_stack_to_d
  3759. // #1495
  3760. @SP
  3761. // #1496
  3762. M=M-1
  3763. // #1497
  3764. A=M
  3765. // #1498
  3766. D=M
  3767. //vv pop_stack_to_d
  3768. // #1499
  3769. @ARG
  3770. // #1500
  3771. A=M
  3772. // #1501
  3773. M=D //*ARG = pop()
  3774. // #1502
  3775. @ARG
  3776. // #1503
  3777. D=M
  3778. // #1504
  3779. @SP
  3780. // #1505
  3781. M=D+1 //SP=ARG+1
  3782. // #1506
  3783. @R14
  3784. // #1507
  3785. AM=M-1
  3786. // #1508
  3787. D=M
  3788. // #1509
  3789. @THAT
  3790. // #1510
  3791. M=D //THAT = *(--R14)
  3792. // #1511
  3793. @R14
  3794. // #1512
  3795. AM=M-1
  3796. // #1513
  3797. D=M
  3798. // #1514
  3799. @THIS
  3800. // #1515
  3801. M=D //THIS = *(--R14)
  3802. // #1516
  3803. @R14
  3804. // #1517
  3805. AM=M-1
  3806. // #1518
  3807. D=M
  3808. // #1519
  3809. @ARG
  3810. // #1520
  3811. M=D //ARG = *(--R14)
  3812. // #1521
  3813. @R14
  3814. // #1522
  3815. AM=M-1
  3816. // #1523
  3817. D=M
  3818. // #1524
  3819. @LCL
  3820. // #1525
  3821. M=D //LCL = *(--R14)
  3822. // #1526
  3823. @R15
  3824. // #1527
  3825. A=M
  3826. // #1528
  3827. 0;JMP //goto *R15
  3828. //
  3829. //// function Math.multiply 5
  3830. (Math.multiply)
  3831. // #1529
  3832. D=0
  3833. //^^ push_d_to_stack
  3834. // #1530
  3835. @SP
  3836. // #1531
  3837. A=M
  3838. // #1532
  3839. M=D
  3840. // #1533
  3841. @SP
  3842. // #1534
  3843. M=M+1
  3844. //vv push_d_to_stack
  3845. // #1535
  3846. D=0
  3847. //^^ push_d_to_stack
  3848. // #1536
  3849. @SP
  3850. // #1537
  3851. A=M
  3852. // #1538
  3853. M=D
  3854. // #1539
  3855. @SP
  3856. // #1540
  3857. M=M+1
  3858. //vv push_d_to_stack
  3859. // #1541
  3860. D=0
  3861. //^^ push_d_to_stack
  3862. // #1542
  3863. @SP
  3864. // #1543
  3865. A=M
  3866. // #1544
  3867. M=D
  3868. // #1545
  3869. @SP
  3870. // #1546
  3871. M=M+1
  3872. //vv push_d_to_stack
  3873. // #1547
  3874. D=0
  3875. //^^ push_d_to_stack
  3876. // #1548
  3877. @SP
  3878. // #1549
  3879. A=M
  3880. // #1550
  3881. M=D
  3882. // #1551
  3883. @SP
  3884. // #1552
  3885. M=M+1
  3886. //vv push_d_to_stack
  3887. // #1553
  3888. D=0
  3889. //^^ push_d_to_stack
  3890. // #1554
  3891. @SP
  3892. // #1555
  3893. A=M
  3894. // #1556
  3895. M=D
  3896. // #1557
  3897. @SP
  3898. // #1558
  3899. M=M+1
  3900. //vv push_d_to_stack
  3901. //
  3902. //// push argument 0
  3903. //^^ push_from_ram(ARG, 0)
  3904. // #1559
  3905. @ARG
  3906. // #1560
  3907. D=M
  3908. // #1561
  3909. @0
  3910. // #1562
  3911. A=D+A
  3912. // #1563
  3913. D=M
  3914. //^^ push_d_to_stack
  3915. // #1564
  3916. @SP
  3917. // #1565
  3918. A=M
  3919. // #1566
  3920. M=D
  3921. // #1567
  3922. @SP
  3923. // #1568
  3924. M=M+1
  3925. //vv push_d_to_stack
  3926. //vv push_from_ram(ARG, 0)
  3927. //
  3928. //// push constant 0
  3929. //^^ push_constant(0)
  3930. // #1569
  3931. @0
  3932. // #1570
  3933. D=A
  3934. //^^ push_d_to_stack
  3935. // #1571
  3936. @SP
  3937. // #1572
  3938. A=M
  3939. // #1573
  3940. M=D
  3941. // #1574
  3942. @SP
  3943. // #1575
  3944. M=M+1
  3945. //vv push_d_to_stack
  3946. //vv push_constant(0)
  3947. //
  3948. //// lt
  3949. //^^ arith_cmp_op(JLT)
  3950. //^^ pop_stack_to_d
  3951. // #1576
  3952. @SP
  3953. // #1577
  3954. M=M-1
  3955. // #1578
  3956. A=M
  3957. // #1579
  3958. D=M
  3959. //vv pop_stack_to_d
  3960. //^^ arith_d_with_stack_top(D-M)
  3961. // #1580
  3962. @R13
  3963. // #1581
  3964. M=D
  3965. //^^ pop_stack_to_d
  3966. // #1582
  3967. @SP
  3968. // #1583
  3969. M=M-1
  3970. // #1584
  3971. A=M
  3972. // #1585
  3973. D=M
  3974. //vv pop_stack_to_d
  3975. // #1586
  3976. @R13
  3977. // #1587
  3978. D=D-M
  3979. // #1588
  3980. @R13
  3981. // #1589
  3982. M=0
  3983. //vv arith_d_with_stack_top(D-M)
  3984. // #1590
  3985. @PUT_TRUE_33
  3986. // #1591
  3987. D;JLT
  3988. // #1592
  3989. @R13
  3990. // #1593
  3991. M=0
  3992. // #1594
  3993. @CONT_33
  3994. // #1595
  3995. 0;JMP
  3996. (PUT_TRUE_33)
  3997. // #1596
  3998. @R13
  3999. // #1597
  4000. M=-1
  4001. (CONT_33)
  4002. // #1598
  4003. @R13
  4004. // #1599
  4005. D=M
  4006. // #1600
  4007. @R13
  4008. // #1601
  4009. M=0
  4010. //^^ push_d_to_stack
  4011. // #1602
  4012. @SP
  4013. // #1603
  4014. A=M
  4015. // #1604
  4016. M=D
  4017. // #1605
  4018. @SP
  4019. // #1606
  4020. M=M+1
  4021. //vv push_d_to_stack
  4022. //vv arith_cmp_op(JLT)
  4023. //
  4024. //// push argument 1
  4025. //^^ push_from_ram(ARG, 1)
  4026. // #1607
  4027. @ARG
  4028. // #1608
  4029. D=M
  4030. // #1609
  4031. @1
  4032. // #1610
  4033. A=D+A
  4034. // #1611
  4035. D=M
  4036. //^^ push_d_to_stack
  4037. // #1612
  4038. @SP
  4039. // #1613
  4040. A=M
  4041. // #1614
  4042. M=D
  4043. // #1615
  4044. @SP
  4045. // #1616
  4046. M=M+1
  4047. //vv push_d_to_stack
  4048. //vv push_from_ram(ARG, 1)
  4049. //
  4050. //// push constant 0
  4051. //^^ push_constant(0)
  4052. // #1617
  4053. @0
  4054. // #1618
  4055. D=A
  4056. //^^ push_d_to_stack
  4057. // #1619
  4058. @SP
  4059. // #1620
  4060. A=M
  4061. // #1621
  4062. M=D
  4063. // #1622
  4064. @SP
  4065. // #1623
  4066. M=M+1
  4067. //vv push_d_to_stack
  4068. //vv push_constant(0)
  4069. //
  4070. //// gt
  4071. //^^ arith_cmp_op(JGT)
  4072. //^^ pop_stack_to_d
  4073. // #1624
  4074. @SP
  4075. // #1625
  4076. M=M-1
  4077. // #1626
  4078. A=M
  4079. // #1627
  4080. D=M
  4081. //vv pop_stack_to_d
  4082. //^^ arith_d_with_stack_top(D-M)
  4083. // #1628
  4084. @R13
  4085. // #1629
  4086. M=D
  4087. //^^ pop_stack_to_d
  4088. // #1630
  4089. @SP
  4090. // #1631
  4091. M=M-1
  4092. // #1632
  4093. A=M
  4094. // #1633
  4095. D=M
  4096. //vv pop_stack_to_d
  4097. // #1634
  4098. @R13
  4099. // #1635
  4100. D=D-M
  4101. // #1636
  4102. @R13
  4103. // #1637
  4104. M=0
  4105. //vv arith_d_with_stack_top(D-M)
  4106. // #1638
  4107. @PUT_TRUE_34
  4108. // #1639
  4109. D;JGT
  4110. // #1640
  4111. @R13
  4112. // #1641
  4113. M=0
  4114. // #1642
  4115. @CONT_34
  4116. // #1643
  4117. 0;JMP
  4118. (PUT_TRUE_34)
  4119. // #1644
  4120. @R13
  4121. // #1645
  4122. M=-1
  4123. (CONT_34)
  4124. // #1646
  4125. @R13
  4126. // #1647
  4127. D=M
  4128. // #1648
  4129. @R13
  4130. // #1649
  4131. M=0
  4132. //^^ push_d_to_stack
  4133. // #1650
  4134. @SP
  4135. // #1651
  4136. A=M
  4137. // #1652
  4138. M=D
  4139. // #1653
  4140. @SP
  4141. // #1654
  4142. M=M+1
  4143. //vv push_d_to_stack
  4144. //vv arith_cmp_op(JGT)
  4145. //
  4146. //// and
  4147. //^^ arith_binary_op(&)
  4148. //^^ pop_stack_to_d
  4149. // #1655
  4150. @SP
  4151. // #1656
  4152. M=M-1
  4153. // #1657
  4154. A=M
  4155. // #1658
  4156. D=M
  4157. //vv pop_stack_to_d
  4158. //^^ arith_d_with_stack_top(D&M)
  4159. // #1659
  4160. @R13
  4161. // #1660
  4162. M=D
  4163. //^^ pop_stack_to_d
  4164. // #1661
  4165. @SP
  4166. // #1662
  4167. M=M-1
  4168. // #1663
  4169. A=M
  4170. // #1664
  4171. D=M
  4172. //vv pop_stack_to_d
  4173. // #1665
  4174. @R13
  4175. // #1666
  4176. D=D&M
  4177. // #1667
  4178. @R13
  4179. // #1668
  4180. M=0
  4181. //vv arith_d_with_stack_top(D&M)
  4182. //^^ push_d_to_stack
  4183. // #1669
  4184. @SP
  4185. // #1670
  4186. A=M
  4187. // #1671
  4188. M=D
  4189. // #1672
  4190. @SP
  4191. // #1673
  4192. M=M+1
  4193. //vv push_d_to_stack
  4194. //vv arith_binary_op(&)
  4195. //
  4196. //// push argument 0
  4197. //^^ push_from_ram(ARG, 0)
  4198. // #1674
  4199. @ARG
  4200. // #1675
  4201. D=M
  4202. // #1676
  4203. @0
  4204. // #1677
  4205. A=D+A
  4206. // #1678
  4207. D=M
  4208. //^^ push_d_to_stack
  4209. // #1679
  4210. @SP
  4211. // #1680
  4212. A=M
  4213. // #1681
  4214. M=D
  4215. // #1682
  4216. @SP
  4217. // #1683
  4218. M=M+1
  4219. //vv push_d_to_stack
  4220. //vv push_from_ram(ARG, 0)
  4221. //
  4222. //// push constant 0
  4223. //^^ push_constant(0)
  4224. // #1684
  4225. @0
  4226. // #1685
  4227. D=A
  4228. //^^ push_d_to_stack
  4229. // #1686
  4230. @SP
  4231. // #1687
  4232. A=M
  4233. // #1688
  4234. M=D
  4235. // #1689
  4236. @SP
  4237. // #1690
  4238. M=M+1
  4239. //vv push_d_to_stack
  4240. //vv push_constant(0)
  4241. //
  4242. //// gt
  4243. //^^ arith_cmp_op(JGT)
  4244. //^^ pop_stack_to_d
  4245. // #1691
  4246. @SP
  4247. // #1692
  4248. M=M-1
  4249. // #1693
  4250. A=M
  4251. // #1694
  4252. D=M
  4253. //vv pop_stack_to_d
  4254. //^^ arith_d_with_stack_top(D-M)
  4255. // #1695
  4256. @R13
  4257. // #1696
  4258. M=D
  4259. //^^ pop_stack_to_d
  4260. // #1697
  4261. @SP
  4262. // #1698
  4263. M=M-1
  4264. // #1699
  4265. A=M
  4266. // #1700
  4267. D=M
  4268. //vv pop_stack_to_d
  4269. // #1701
  4270. @R13
  4271. // #1702
  4272. D=D-M
  4273. // #1703
  4274. @R13
  4275. // #1704
  4276. M=0
  4277. //vv arith_d_with_stack_top(D-M)
  4278. // #1705
  4279. @PUT_TRUE_35
  4280. // #1706
  4281. D;JGT
  4282. // #1707
  4283. @R13
  4284. // #1708
  4285. M=0
  4286. // #1709
  4287. @CONT_35
  4288. // #1710
  4289. 0;JMP
  4290. (PUT_TRUE_35)
  4291. // #1711
  4292. @R13
  4293. // #1712
  4294. M=-1
  4295. (CONT_35)
  4296. // #1713
  4297. @R13
  4298. // #1714
  4299. D=M
  4300. // #1715
  4301. @R13
  4302. // #1716
  4303. M=0
  4304. //^^ push_d_to_stack
  4305. // #1717
  4306. @SP
  4307. // #1718
  4308. A=M
  4309. // #1719
  4310. M=D
  4311. // #1720
  4312. @SP
  4313. // #1721
  4314. M=M+1
  4315. //vv push_d_to_stack
  4316. //vv arith_cmp_op(JGT)
  4317. //
  4318. //// push argument 1
  4319. //^^ push_from_ram(ARG, 1)
  4320. // #1722
  4321. @ARG
  4322. // #1723
  4323. D=M
  4324. // #1724
  4325. @1
  4326. // #1725
  4327. A=D+A
  4328. // #1726
  4329. D=M
  4330. //^^ push_d_to_stack
  4331. // #1727
  4332. @SP
  4333. // #1728
  4334. A=M
  4335. // #1729
  4336. M=D
  4337. // #1730
  4338. @SP
  4339. // #1731
  4340. M=M+1
  4341. //vv push_d_to_stack
  4342. //vv push_from_ram(ARG, 1)
  4343. //
  4344. //// push constant 0
  4345. //^^ push_constant(0)
  4346. // #1732
  4347. @0
  4348. // #1733
  4349. D=A
  4350. //^^ push_d_to_stack
  4351. // #1734
  4352. @SP
  4353. // #1735
  4354. A=M
  4355. // #1736
  4356. M=D
  4357. // #1737
  4358. @SP
  4359. // #1738
  4360. M=M+1
  4361. //vv push_d_to_stack
  4362. //vv push_constant(0)
  4363. //
  4364. //// lt
  4365. //^^ arith_cmp_op(JLT)
  4366. //^^ pop_stack_to_d
  4367. // #1739
  4368. @SP
  4369. // #1740
  4370. M=M-1
  4371. // #1741
  4372. A=M
  4373. // #1742
  4374. D=M
  4375. //vv pop_stack_to_d
  4376. //^^ arith_d_with_stack_top(D-M)
  4377. // #1743
  4378. @R13
  4379. // #1744
  4380. M=D
  4381. //^^ pop_stack_to_d
  4382. // #1745
  4383. @SP
  4384. // #1746
  4385. M=M-1
  4386. // #1747
  4387. A=M
  4388. // #1748
  4389. D=M
  4390. //vv pop_stack_to_d
  4391. // #1749
  4392. @R13
  4393. // #1750
  4394. D=D-M
  4395. // #1751
  4396. @R13
  4397. // #1752
  4398. M=0
  4399. //vv arith_d_with_stack_top(D-M)
  4400. // #1753
  4401. @PUT_TRUE_36
  4402. // #1754
  4403. D;JLT
  4404. // #1755
  4405. @R13
  4406. // #1756
  4407. M=0
  4408. // #1757
  4409. @CONT_36
  4410. // #1758
  4411. 0;JMP
  4412. (PUT_TRUE_36)
  4413. // #1759
  4414. @R13
  4415. // #1760
  4416. M=-1
  4417. (CONT_36)
  4418. // #1761
  4419. @R13
  4420. // #1762
  4421. D=M
  4422. // #1763
  4423. @R13
  4424. // #1764
  4425. M=0
  4426. //^^ push_d_to_stack
  4427. // #1765
  4428. @SP
  4429. // #1766
  4430. A=M
  4431. // #1767
  4432. M=D
  4433. // #1768
  4434. @SP
  4435. // #1769
  4436. M=M+1
  4437. //vv push_d_to_stack
  4438. //vv arith_cmp_op(JLT)
  4439. //
  4440. //// and
  4441. //^^ arith_binary_op(&)
  4442. //^^ pop_stack_to_d
  4443. // #1770
  4444. @SP
  4445. // #1771
  4446. M=M-1
  4447. // #1772
  4448. A=M
  4449. // #1773
  4450. D=M
  4451. //vv pop_stack_to_d
  4452. //^^ arith_d_with_stack_top(D&M)
  4453. // #1774
  4454. @R13
  4455. // #1775
  4456. M=D
  4457. //^^ pop_stack_to_d
  4458. // #1776
  4459. @SP
  4460. // #1777
  4461. M=M-1
  4462. // #1778
  4463. A=M
  4464. // #1779
  4465. D=M
  4466. //vv pop_stack_to_d
  4467. // #1780
  4468. @R13
  4469. // #1781
  4470. D=D&M
  4471. // #1782
  4472. @R13
  4473. // #1783
  4474. M=0
  4475. //vv arith_d_with_stack_top(D&M)
  4476. //^^ push_d_to_stack
  4477. // #1784
  4478. @SP
  4479. // #1785
  4480. A=M
  4481. // #1786
  4482. M=D
  4483. // #1787
  4484. @SP
  4485. // #1788
  4486. M=M+1
  4487. //vv push_d_to_stack
  4488. //vv arith_binary_op(&)
  4489. //
  4490. //// or
  4491. //^^ arith_binary_op(|)
  4492. //^^ pop_stack_to_d
  4493. // #1789
  4494. @SP
  4495. // #1790
  4496. M=M-1
  4497. // #1791
  4498. A=M
  4499. // #1792
  4500. D=M
  4501. //vv pop_stack_to_d
  4502. //^^ arith_d_with_stack_top(D|M)
  4503. // #1793
  4504. @R13
  4505. // #1794
  4506. M=D
  4507. //^^ pop_stack_to_d
  4508. // #1795
  4509. @SP
  4510. // #1796
  4511. M=M-1
  4512. // #1797
  4513. A=M
  4514. // #1798
  4515. D=M
  4516. //vv pop_stack_to_d
  4517. // #1799
  4518. @R13
  4519. // #1800
  4520. D=D|M
  4521. // #1801
  4522. @R13
  4523. // #1802
  4524. M=0
  4525. //vv arith_d_with_stack_top(D|M)
  4526. //^^ push_d_to_stack
  4527. // #1803
  4528. @SP
  4529. // #1804
  4530. A=M
  4531. // #1805
  4532. M=D
  4533. // #1806
  4534. @SP
  4535. // #1807
  4536. M=M+1
  4537. //vv push_d_to_stack
  4538. //vv arith_binary_op(|)
  4539. //
  4540. //// pop local 4
  4541. //^^ pop_to_ram(LCL, 4)
  4542. // #1808
  4543. @LCL
  4544. // #1809
  4545. D=M
  4546. // #1810
  4547. @4
  4548. // #1811
  4549. D=D+A
  4550. // #1812
  4551. @R13
  4552. // #1813
  4553. M=D
  4554. //^^ pop_stack_to_d
  4555. // #1814
  4556. @SP
  4557. // #1815
  4558. M=M-1
  4559. // #1816
  4560. A=M
  4561. // #1817
  4562. D=M
  4563. //vv pop_stack_to_d
  4564. // #1818
  4565. @R13
  4566. // #1819
  4567. A=M
  4568. // #1820
  4569. M=D
  4570. // #1821
  4571. @R13
  4572. // #1822
  4573. M=0
  4574. //vv pop_to_ram(LCL, 4)
  4575. //
  4576. //// push argument 0
  4577. //^^ push_from_ram(ARG, 0)
  4578. // #1823
  4579. @ARG
  4580. // #1824
  4581. D=M
  4582. // #1825
  4583. @0
  4584. // #1826
  4585. A=D+A
  4586. // #1827
  4587. D=M
  4588. //^^ push_d_to_stack
  4589. // #1828
  4590. @SP
  4591. // #1829
  4592. A=M
  4593. // #1830
  4594. M=D
  4595. // #1831
  4596. @SP
  4597. // #1832
  4598. M=M+1
  4599. //vv push_d_to_stack
  4600. //vv push_from_ram(ARG, 0)
  4601. //
  4602. //// call Math.abs 1
  4603. //^^ push_constant(RET_ADDR_37)
  4604. // #1833
  4605. @RET_ADDR_37
  4606. // #1834
  4607. D=A
  4608. //^^ push_d_to_stack
  4609. // #1835
  4610. @SP
  4611. // #1836
  4612. A=M
  4613. // #1837
  4614. M=D
  4615. // #1838
  4616. @SP
  4617. // #1839
  4618. M=M+1
  4619. //vv push_d_to_stack
  4620. //vv push_constant(RET_ADDR_37)
  4621. //push return-address
  4622. // #1840
  4623. @LCL
  4624. // #1841
  4625. D=M
  4626. //^^ push_d_to_stack
  4627. // #1842
  4628. @SP
  4629. // #1843
  4630. A=M
  4631. // #1844
  4632. M=D
  4633. // #1845
  4634. @SP
  4635. // #1846
  4636. M=M+1
  4637. //vv push_d_to_stack
  4638. //push LCL
  4639. // #1847
  4640. @ARG
  4641. // #1848
  4642. D=M
  4643. //^^ push_d_to_stack
  4644. // #1849
  4645. @SP
  4646. // #1850
  4647. A=M
  4648. // #1851
  4649. M=D
  4650. // #1852
  4651. @SP
  4652. // #1853
  4653. M=M+1
  4654. //vv push_d_to_stack
  4655. //push ARG
  4656. // #1854
  4657. @THIS
  4658. // #1855
  4659. D=M
  4660. //^^ push_d_to_stack
  4661. // #1856
  4662. @SP
  4663. // #1857
  4664. A=M
  4665. // #1858
  4666. M=D
  4667. // #1859
  4668. @SP
  4669. // #1860
  4670. M=M+1
  4671. //vv push_d_to_stack
  4672. //push THIS
  4673. // #1861
  4674. @THAT
  4675. // #1862
  4676. D=M
  4677. //^^ push_d_to_stack
  4678. // #1863
  4679. @SP
  4680. // #1864
  4681. A=M
  4682. // #1865
  4683. M=D
  4684. // #1866
  4685. @SP
  4686. // #1867
  4687. M=M+1
  4688. //vv push_d_to_stack
  4689. //push THAT
  4690. // #1868
  4691. @SP
  4692. // #1869
  4693. D=M
  4694. // #1870
  4695. @ARG
  4696. // #1871
  4697. M=D
  4698. // #1872
  4699. @6
  4700. // #1873
  4701. D=A
  4702. // #1874
  4703. @ARG
  4704. // #1875
  4705. M=M-D // ARG = SP - args - 5
  4706. // #1876
  4707. @SP
  4708. // #1877
  4709. D=M
  4710. // #1878
  4711. @LCL
  4712. // #1879
  4713. M=D // LCL = SP
  4714. // #1880
  4715. @Math.abs
  4716. // #1881
  4717. 0;JMP
  4718. (RET_ADDR_37)
  4719. //
  4720. //// pop argument 0
  4721. //^^ pop_to_ram(ARG, 0)
  4722. // #1882
  4723. @ARG
  4724. // #1883
  4725. D=M
  4726. // #1884
  4727. @0
  4728. // #1885
  4729. D=D+A
  4730. // #1886
  4731. @R13
  4732. // #1887
  4733. M=D
  4734. //^^ pop_stack_to_d
  4735. // #1888
  4736. @SP
  4737. // #1889
  4738. M=M-1
  4739. // #1890
  4740. A=M
  4741. // #1891
  4742. D=M
  4743. //vv pop_stack_to_d
  4744. // #1892
  4745. @R13
  4746. // #1893
  4747. A=M
  4748. // #1894
  4749. M=D
  4750. // #1895
  4751. @R13
  4752. // #1896
  4753. M=0
  4754. //vv pop_to_ram(ARG, 0)
  4755. //
  4756. //// push argument 1
  4757. //^^ push_from_ram(ARG, 1)
  4758. // #1897
  4759. @ARG
  4760. // #1898
  4761. D=M
  4762. // #1899
  4763. @1
  4764. // #1900
  4765. A=D+A
  4766. // #1901
  4767. D=M
  4768. //^^ push_d_to_stack
  4769. // #1902
  4770. @SP
  4771. // #1903
  4772. A=M
  4773. // #1904
  4774. M=D
  4775. // #1905
  4776. @SP
  4777. // #1906
  4778. M=M+1
  4779. //vv push_d_to_stack
  4780. //vv push_from_ram(ARG, 1)
  4781. //
  4782. //// call Math.abs 1
  4783. //^^ push_constant(RET_ADDR_38)
  4784. // #1907
  4785. @RET_ADDR_38
  4786. // #1908
  4787. D=A
  4788. //^^ push_d_to_stack
  4789. // #1909
  4790. @SP
  4791. // #1910
  4792. A=M
  4793. // #1911
  4794. M=D
  4795. // #1912
  4796. @SP
  4797. // #1913
  4798. M=M+1
  4799. //vv push_d_to_stack
  4800. //vv push_constant(RET_ADDR_38)
  4801. //push return-address
  4802. // #1914
  4803. @LCL
  4804. // #1915
  4805. D=M
  4806. //^^ push_d_to_stack
  4807. // #1916
  4808. @SP
  4809. // #1917
  4810. A=M
  4811. // #1918
  4812. M=D
  4813. // #1919
  4814. @SP
  4815. // #1920
  4816. M=M+1
  4817. //vv push_d_to_stack
  4818. //push LCL
  4819. // #1921
  4820. @ARG
  4821. // #1922
  4822. D=M
  4823. //^^ push_d_to_stack
  4824. // #1923
  4825. @SP
  4826. // #1924
  4827. A=M
  4828. // #1925
  4829. M=D
  4830. // #1926
  4831. @SP
  4832. // #1927
  4833. M=M+1
  4834. //vv push_d_to_stack
  4835. //push ARG
  4836. // #1928
  4837. @THIS
  4838. // #1929
  4839. D=M
  4840. //^^ push_d_to_stack
  4841. // #1930
  4842. @SP
  4843. // #1931
  4844. A=M
  4845. // #1932
  4846. M=D
  4847. // #1933
  4848. @SP
  4849. // #1934
  4850. M=M+1
  4851. //vv push_d_to_stack
  4852. //push THIS
  4853. // #1935
  4854. @THAT
  4855. // #1936
  4856. D=M
  4857. //^^ push_d_to_stack
  4858. // #1937
  4859. @SP
  4860. // #1938
  4861. A=M
  4862. // #1939
  4863. M=D
  4864. // #1940
  4865. @SP
  4866. // #1941
  4867. M=M+1
  4868. //vv push_d_to_stack
  4869. //push THAT
  4870. // #1942
  4871. @SP
  4872. // #1943
  4873. D=M
  4874. // #1944
  4875. @ARG
  4876. // #1945
  4877. M=D
  4878. // #1946
  4879. @6
  4880. // #1947
  4881. D=A
  4882. // #1948
  4883. @ARG
  4884. // #1949
  4885. M=M-D // ARG = SP - args - 5
  4886. // #1950
  4887. @SP
  4888. // #1951
  4889. D=M
  4890. // #1952
  4891. @LCL
  4892. // #1953
  4893. M=D // LCL = SP
  4894. // #1954
  4895. @Math.abs
  4896. // #1955
  4897. 0;JMP
  4898. (RET_ADDR_38)
  4899. //
  4900. //// pop argument 1
  4901. //^^ pop_to_ram(ARG, 1)
  4902. // #1956
  4903. @ARG
  4904. // #1957
  4905. D=M
  4906. // #1958
  4907. @1
  4908. // #1959
  4909. D=D+A
  4910. // #1960
  4911. @R13
  4912. // #1961
  4913. M=D
  4914. //^^ pop_stack_to_d
  4915. // #1962
  4916. @SP
  4917. // #1963
  4918. M=M-1
  4919. // #1964
  4920. A=M
  4921. // #1965
  4922. D=M
  4923. //vv pop_stack_to_d
  4924. // #1966
  4925. @R13
  4926. // #1967
  4927. A=M
  4928. // #1968
  4929. M=D
  4930. // #1969
  4931. @R13
  4932. // #1970
  4933. M=0
  4934. //vv pop_to_ram(ARG, 1)
  4935. //
  4936. //// push argument 0
  4937. //^^ push_from_ram(ARG, 0)
  4938. // #1971
  4939. @ARG
  4940. // #1972
  4941. D=M
  4942. // #1973
  4943. @0
  4944. // #1974
  4945. A=D+A
  4946. // #1975
  4947. D=M
  4948. //^^ push_d_to_stack
  4949. // #1976
  4950. @SP
  4951. // #1977
  4952. A=M
  4953. // #1978
  4954. M=D
  4955. // #1979
  4956. @SP
  4957. // #1980
  4958. M=M+1
  4959. //vv push_d_to_stack
  4960. //vv push_from_ram(ARG, 0)
  4961. //
  4962. //// push argument 1
  4963. //^^ push_from_ram(ARG, 1)
  4964. // #1981
  4965. @ARG
  4966. // #1982
  4967. D=M
  4968. // #1983
  4969. @1
  4970. // #1984
  4971. A=D+A
  4972. // #1985
  4973. D=M
  4974. //^^ push_d_to_stack
  4975. // #1986
  4976. @SP
  4977. // #1987
  4978. A=M
  4979. // #1988
  4980. M=D
  4981. // #1989
  4982. @SP
  4983. // #1990
  4984. M=M+1
  4985. //vv push_d_to_stack
  4986. //vv push_from_ram(ARG, 1)
  4987. //
  4988. //// lt
  4989. //^^ arith_cmp_op(JLT)
  4990. //^^ pop_stack_to_d
  4991. // #1991
  4992. @SP
  4993. // #1992
  4994. M=M-1
  4995. // #1993
  4996. A=M
  4997. // #1994
  4998. D=M
  4999. //vv pop_stack_to_d
  5000. //^^ arith_d_with_stack_top(D-M)
  5001. // #1995
  5002. @R13
  5003. // #1996
  5004. M=D
  5005. //^^ pop_stack_to_d
  5006. // #1997
  5007. @SP
  5008. // #1998
  5009. M=M-1
  5010. // #1999
  5011. A=M
  5012. // #2000
  5013. D=M
  5014. //vv pop_stack_to_d
  5015. // #2001
  5016. @R13
  5017. // #2002
  5018. D=D-M
  5019. // #2003
  5020. @R13
  5021. // #2004
  5022. M=0
  5023. //vv arith_d_with_stack_top(D-M)
  5024. // #2005
  5025. @PUT_TRUE_39
  5026. // #2006
  5027. D;JLT
  5028. // #2007
  5029. @R13
  5030. // #2008
  5031. M=0
  5032. // #2009
  5033. @CONT_39
  5034. // #2010
  5035. 0;JMP
  5036. (PUT_TRUE_39)
  5037. // #2011
  5038. @R13
  5039. // #2012
  5040. M=-1
  5041. (CONT_39)
  5042. // #2013
  5043. @R13
  5044. // #2014
  5045. D=M
  5046. // #2015
  5047. @R13
  5048. // #2016
  5049. M=0
  5050. //^^ push_d_to_stack
  5051. // #2017
  5052. @SP
  5053. // #2018
  5054. A=M
  5055. // #2019
  5056. M=D
  5057. // #2020
  5058. @SP
  5059. // #2021
  5060. M=M+1
  5061. //vv push_d_to_stack
  5062. //vv arith_cmp_op(JLT)
  5063. //
  5064. //// if-goto IF_TRUE0
  5065. //^^ pop_stack_to_d
  5066. // #2022
  5067. @SP
  5068. // #2023
  5069. M=M-1
  5070. // #2024
  5071. A=M
  5072. // #2025
  5073. D=M
  5074. //vv pop_stack_to_d
  5075. // #2026
  5076. @Math.multiply$IF_TRUE0
  5077. // #2027
  5078. D;JNE
  5079. //
  5080. //// goto IF_FALSE0
  5081. // #2028
  5082. @Math.multiply$IF_FALSE0
  5083. // #2029
  5084. 0;JMP
  5085. //
  5086. //// label IF_TRUE0
  5087. (Math.multiply$IF_TRUE0)
  5088. //
  5089. //// push argument 0
  5090. //^^ push_from_ram(ARG, 0)
  5091. // #2030
  5092. @ARG
  5093. // #2031
  5094. D=M
  5095. // #2032
  5096. @0
  5097. // #2033
  5098. A=D+A
  5099. // #2034
  5100. D=M
  5101. //^^ push_d_to_stack
  5102. // #2035
  5103. @SP
  5104. // #2036
  5105. A=M
  5106. // #2037
  5107. M=D
  5108. // #2038
  5109. @SP
  5110. // #2039
  5111. M=M+1
  5112. //vv push_d_to_stack
  5113. //vv push_from_ram(ARG, 0)
  5114. //
  5115. //// pop local 1
  5116. //^^ pop_to_ram(LCL, 1)
  5117. // #2040
  5118. @LCL
  5119. // #2041
  5120. D=M
  5121. // #2042
  5122. @1
  5123. // #2043
  5124. D=D+A
  5125. // #2044
  5126. @R13
  5127. // #2045
  5128. M=D
  5129. //^^ pop_stack_to_d
  5130. // #2046
  5131. @SP
  5132. // #2047
  5133. M=M-1
  5134. // #2048
  5135. A=M
  5136. // #2049
  5137. D=M
  5138. //vv pop_stack_to_d
  5139. // #2050
  5140. @R13
  5141. // #2051
  5142. A=M
  5143. // #2052
  5144. M=D
  5145. // #2053
  5146. @R13
  5147. // #2054
  5148. M=0
  5149. //vv pop_to_ram(LCL, 1)
  5150. //
  5151. //// push argument 1
  5152. //^^ push_from_ram(ARG, 1)
  5153. // #2055
  5154. @ARG
  5155. // #2056
  5156. D=M
  5157. // #2057
  5158. @1
  5159. // #2058
  5160. A=D+A
  5161. // #2059
  5162. D=M
  5163. //^^ push_d_to_stack
  5164. // #2060
  5165. @SP
  5166. // #2061
  5167. A=M
  5168. // #2062
  5169. M=D
  5170. // #2063
  5171. @SP
  5172. // #2064
  5173. M=M+1
  5174. //vv push_d_to_stack
  5175. //vv push_from_ram(ARG, 1)
  5176. //
  5177. //// pop argument 0
  5178. //^^ pop_to_ram(ARG, 0)
  5179. // #2065
  5180. @ARG
  5181. // #2066
  5182. D=M
  5183. // #2067
  5184. @0
  5185. // #2068
  5186. D=D+A
  5187. // #2069
  5188. @R13
  5189. // #2070
  5190. M=D
  5191. //^^ pop_stack_to_d
  5192. // #2071
  5193. @SP
  5194. // #2072
  5195. M=M-1
  5196. // #2073
  5197. A=M
  5198. // #2074
  5199. D=M
  5200. //vv pop_stack_to_d
  5201. // #2075
  5202. @R13
  5203. // #2076
  5204. A=M
  5205. // #2077
  5206. M=D
  5207. // #2078
  5208. @R13
  5209. // #2079
  5210. M=0
  5211. //vv pop_to_ram(ARG, 0)
  5212. //
  5213. //// push local 1
  5214. //^^ push_from_ram(LCL, 1)
  5215. // #2080
  5216. @LCL
  5217. // #2081
  5218. D=M
  5219. // #2082
  5220. @1
  5221. // #2083
  5222. A=D+A
  5223. // #2084
  5224. D=M
  5225. //^^ push_d_to_stack
  5226. // #2085
  5227. @SP
  5228. // #2086
  5229. A=M
  5230. // #2087
  5231. M=D
  5232. // #2088
  5233. @SP
  5234. // #2089
  5235. M=M+1
  5236. //vv push_d_to_stack
  5237. //vv push_from_ram(LCL, 1)
  5238. //
  5239. //// pop argument 1
  5240. //^^ pop_to_ram(ARG, 1)
  5241. // #2090
  5242. @ARG
  5243. // #2091
  5244. D=M
  5245. // #2092
  5246. @1
  5247. // #2093
  5248. D=D+A
  5249. // #2094
  5250. @R13
  5251. // #2095
  5252. M=D
  5253. //^^ pop_stack_to_d
  5254. // #2096
  5255. @SP
  5256. // #2097
  5257. M=M-1
  5258. // #2098
  5259. A=M
  5260. // #2099
  5261. D=M
  5262. //vv pop_stack_to_d
  5263. // #2100
  5264. @R13
  5265. // #2101
  5266. A=M
  5267. // #2102
  5268. M=D
  5269. // #2103
  5270. @R13
  5271. // #2104
  5272. M=0
  5273. //vv pop_to_ram(ARG, 1)
  5274. //
  5275. //// label IF_FALSE0
  5276. (Math.multiply$IF_FALSE0)
  5277. //
  5278. //// label WHILE_EXP0
  5279. (Math.multiply$WHILE_EXP0)
  5280. //
  5281. //// push local 2
  5282. //^^ push_from_ram(LCL, 2)
  5283. // #2105
  5284. @LCL
  5285. // #2106
  5286. D=M
  5287. // #2107
  5288. @2
  5289. // #2108
  5290. A=D+A
  5291. // #2109
  5292. D=M
  5293. //^^ push_d_to_stack
  5294. // #2110
  5295. @SP
  5296. // #2111
  5297. A=M
  5298. // #2112
  5299. M=D
  5300. // #2113
  5301. @SP
  5302. // #2114
  5303. M=M+1
  5304. //vv push_d_to_stack
  5305. //vv push_from_ram(LCL, 2)
  5306. //
  5307. //// push argument 1
  5308. //^^ push_from_ram(ARG, 1)
  5309. // #2115
  5310. @ARG
  5311. // #2116
  5312. D=M
  5313. // #2117
  5314. @1
  5315. // #2118
  5316. A=D+A
  5317. // #2119
  5318. D=M
  5319. //^^ push_d_to_stack
  5320. // #2120
  5321. @SP
  5322. // #2121
  5323. A=M
  5324. // #2122
  5325. M=D
  5326. // #2123
  5327. @SP
  5328. // #2124
  5329. M=M+1
  5330. //vv push_d_to_stack
  5331. //vv push_from_ram(ARG, 1)
  5332. //
  5333. //// lt
  5334. //^^ arith_cmp_op(JLT)
  5335. //^^ pop_stack_to_d
  5336. // #2125
  5337. @SP
  5338. // #2126
  5339. M=M-1
  5340. // #2127
  5341. A=M
  5342. // #2128
  5343. D=M
  5344. //vv pop_stack_to_d
  5345. //^^ arith_d_with_stack_top(D-M)
  5346. // #2129
  5347. @R13
  5348. // #2130
  5349. M=D
  5350. //^^ pop_stack_to_d
  5351. // #2131
  5352. @SP
  5353. // #2132
  5354. M=M-1
  5355. // #2133
  5356. A=M
  5357. // #2134
  5358. D=M
  5359. //vv pop_stack_to_d
  5360. // #2135
  5361. @R13
  5362. // #2136
  5363. D=D-M
  5364. // #2137
  5365. @R13
  5366. // #2138
  5367. M=0
  5368. //vv arith_d_with_stack_top(D-M)
  5369. // #2139
  5370. @PUT_TRUE_40
  5371. // #2140
  5372. D;JLT
  5373. // #2141
  5374. @R13
  5375. // #2142
  5376. M=0
  5377. // #2143
  5378. @CONT_40
  5379. // #2144
  5380. 0;JMP
  5381. (PUT_TRUE_40)
  5382. // #2145
  5383. @R13
  5384. // #2146
  5385. M=-1
  5386. (CONT_40)
  5387. // #2147
  5388. @R13
  5389. // #2148
  5390. D=M
  5391. // #2149
  5392. @R13
  5393. // #2150
  5394. M=0
  5395. //^^ push_d_to_stack
  5396. // #2151
  5397. @SP
  5398. // #2152
  5399. A=M
  5400. // #2153
  5401. M=D
  5402. // #2154
  5403. @SP
  5404. // #2155
  5405. M=M+1
  5406. //vv push_d_to_stack
  5407. //vv arith_cmp_op(JLT)
  5408. //
  5409. //// not
  5410. //^^ arith_unary_op(!)
  5411. //^^ pop_stack_to_d
  5412. // #2156
  5413. @SP
  5414. // #2157
  5415. M=M-1
  5416. // #2158
  5417. A=M
  5418. // #2159
  5419. D=M
  5420. //vv pop_stack_to_d
  5421. // #2160
  5422. D=!D
  5423. //^^ push_d_to_stack
  5424. // #2161
  5425. @SP
  5426. // #2162
  5427. A=M
  5428. // #2163
  5429. M=D
  5430. // #2164
  5431. @SP
  5432. // #2165
  5433. M=M+1
  5434. //vv push_d_to_stack
  5435. //vv arith_unary_op(!)
  5436. //
  5437. //// if-goto WHILE_END0
  5438. //^^ pop_stack_to_d
  5439. // #2166
  5440. @SP
  5441. // #2167
  5442. M=M-1
  5443. // #2168
  5444. A=M
  5445. // #2169
  5446. D=M
  5447. //vv pop_stack_to_d
  5448. // #2170
  5449. @Math.multiply$WHILE_END0
  5450. // #2171
  5451. D;JNE
  5452. //
  5453. //// push local 3
  5454. //^^ push_from_ram(LCL, 3)
  5455. // #2172
  5456. @LCL
  5457. // #2173
  5458. D=M
  5459. // #2174
  5460. @3
  5461. // #2175
  5462. A=D+A
  5463. // #2176
  5464. D=M
  5465. //^^ push_d_to_stack
  5466. // #2177
  5467. @SP
  5468. // #2178
  5469. A=M
  5470. // #2179
  5471. M=D
  5472. // #2180
  5473. @SP
  5474. // #2181
  5475. M=M+1
  5476. //vv push_d_to_stack
  5477. //vv push_from_ram(LCL, 3)
  5478. //
  5479. //// push static 0
  5480. //^^ push_from_loc(Math.vm.0)
  5481. // #2182
  5482. @Math.vm.0
  5483. // #2183
  5484. D=M
  5485. //^^ push_d_to_stack
  5486. // #2184
  5487. @SP
  5488. // #2185
  5489. A=M
  5490. // #2186
  5491. M=D
  5492. // #2187
  5493. @SP
  5494. // #2188
  5495. M=M+1
  5496. //vv push_d_to_stack
  5497. //vv push_from_loc(Math.vm.0)
  5498. //
  5499. //// add
  5500. //^^ arith_binary_op(+)
  5501. //^^ pop_stack_to_d
  5502. // #2189
  5503. @SP
  5504. // #2190
  5505. M=M-1
  5506. // #2191
  5507. A=M
  5508. // #2192
  5509. D=M
  5510. //vv pop_stack_to_d
  5511. //^^ arith_d_with_stack_top(D+M)
  5512. // #2193
  5513. @R13
  5514. // #2194
  5515. M=D
  5516. //^^ pop_stack_to_d
  5517. // #2195
  5518. @SP
  5519. // #2196
  5520. M=M-1
  5521. // #2197
  5522. A=M
  5523. // #2198
  5524. D=M
  5525. //vv pop_stack_to_d
  5526. // #2199
  5527. @R13
  5528. // #2200
  5529. D=D+M
  5530. // #2201
  5531. @R13
  5532. // #2202
  5533. M=0
  5534. //vv arith_d_with_stack_top(D+M)
  5535. //^^ push_d_to_stack
  5536. // #2203
  5537. @SP
  5538. // #2204
  5539. A=M
  5540. // #2205
  5541. M=D
  5542. // #2206
  5543. @SP
  5544. // #2207
  5545. M=M+1
  5546. //vv push_d_to_stack
  5547. //vv arith_binary_op(+)
  5548. //
  5549. //// pop pointer 1
  5550. //^^ pop_to_loc{4)
  5551. //^^ pop_stack_to_d
  5552. // #2208
  5553. @SP
  5554. // #2209
  5555. M=M-1
  5556. // #2210
  5557. A=M
  5558. // #2211
  5559. D=M
  5560. //vv pop_stack_to_d
  5561. // #2212
  5562. @4
  5563. // #2213
  5564. M=D
  5565. //vv pop_to_loc{4)
  5566. //
  5567. //// push that 0
  5568. //^^ push_from_ram(THAT, 0)
  5569. // #2214
  5570. @THAT
  5571. // #2215
  5572. D=M
  5573. // #2216
  5574. @0
  5575. // #2217
  5576. A=D+A
  5577. // #2218
  5578. D=M
  5579. //^^ push_d_to_stack
  5580. // #2219
  5581. @SP
  5582. // #2220
  5583. A=M
  5584. // #2221
  5585. M=D
  5586. // #2222
  5587. @SP
  5588. // #2223
  5589. M=M+1
  5590. //vv push_d_to_stack
  5591. //vv push_from_ram(THAT, 0)
  5592. //
  5593. //// push argument 1
  5594. //^^ push_from_ram(ARG, 1)
  5595. // #2224
  5596. @ARG
  5597. // #2225
  5598. D=M
  5599. // #2226
  5600. @1
  5601. // #2227
  5602. A=D+A
  5603. // #2228
  5604. D=M
  5605. //^^ push_d_to_stack
  5606. // #2229
  5607. @SP
  5608. // #2230
  5609. A=M
  5610. // #2231
  5611. M=D
  5612. // #2232
  5613. @SP
  5614. // #2233
  5615. M=M+1
  5616. //vv push_d_to_stack
  5617. //vv push_from_ram(ARG, 1)
  5618. //
  5619. //// and
  5620. //^^ arith_binary_op(&)
  5621. //^^ pop_stack_to_d
  5622. // #2234
  5623. @SP
  5624. // #2235
  5625. M=M-1
  5626. // #2236
  5627. A=M
  5628. // #2237
  5629. D=M
  5630. //vv pop_stack_to_d
  5631. //^^ arith_d_with_stack_top(D&M)
  5632. // #2238
  5633. @R13
  5634. // #2239
  5635. M=D
  5636. //^^ pop_stack_to_d
  5637. // #2240
  5638. @SP
  5639. // #2241
  5640. M=M-1
  5641. // #2242
  5642. A=M
  5643. // #2243
  5644. D=M
  5645. //vv pop_stack_to_d
  5646. // #2244
  5647. @R13
  5648. // #2245
  5649. D=D&M
  5650. // #2246
  5651. @R13
  5652. // #2247
  5653. M=0
  5654. //vv arith_d_with_stack_top(D&M)
  5655. //^^ push_d_to_stack
  5656. // #2248
  5657. @SP
  5658. // #2249
  5659. A=M
  5660. // #2250
  5661. M=D
  5662. // #2251
  5663. @SP
  5664. // #2252
  5665. M=M+1
  5666. //vv push_d_to_stack
  5667. //vv arith_binary_op(&)
  5668. //
  5669. //// push constant 0
  5670. //^^ push_constant(0)
  5671. // #2253
  5672. @0
  5673. // #2254
  5674. D=A
  5675. //^^ push_d_to_stack
  5676. // #2255
  5677. @SP
  5678. // #2256
  5679. A=M
  5680. // #2257
  5681. M=D
  5682. // #2258
  5683. @SP
  5684. // #2259
  5685. M=M+1
  5686. //vv push_d_to_stack
  5687. //vv push_constant(0)
  5688. //
  5689. //// gt
  5690. //^^ arith_cmp_op(JGT)
  5691. //^^ pop_stack_to_d
  5692. // #2260
  5693. @SP
  5694. // #2261
  5695. M=M-1
  5696. // #2262
  5697. A=M
  5698. // #2263
  5699. D=M
  5700. //vv pop_stack_to_d
  5701. //^^ arith_d_with_stack_top(D-M)
  5702. // #2264
  5703. @R13
  5704. // #2265
  5705. M=D
  5706. //^^ pop_stack_to_d
  5707. // #2266
  5708. @SP
  5709. // #2267
  5710. M=M-1
  5711. // #2268
  5712. A=M
  5713. // #2269
  5714. D=M
  5715. //vv pop_stack_to_d
  5716. // #2270
  5717. @R13
  5718. // #2271
  5719. D=D-M
  5720. // #2272
  5721. @R13
  5722. // #2273
  5723. M=0
  5724. //vv arith_d_with_stack_top(D-M)
  5725. // #2274
  5726. @PUT_TRUE_41
  5727. // #2275
  5728. D;JGT
  5729. // #2276
  5730. @R13
  5731. // #2277
  5732. M=0
  5733. // #2278
  5734. @CONT_41
  5735. // #2279
  5736. 0;JMP
  5737. (PUT_TRUE_41)
  5738. // #2280
  5739. @R13
  5740. // #2281
  5741. M=-1
  5742. (CONT_41)
  5743. // #2282
  5744. @R13
  5745. // #2283
  5746. D=M
  5747. // #2284
  5748. @R13
  5749. // #2285
  5750. M=0
  5751. //^^ push_d_to_stack
  5752. // #2286
  5753. @SP
  5754. // #2287
  5755. A=M
  5756. // #2288
  5757. M=D
  5758. // #2289
  5759. @SP
  5760. // #2290
  5761. M=M+1
  5762. //vv push_d_to_stack
  5763. //vv arith_cmp_op(JGT)
  5764. //
  5765. //// if-goto IF_TRUE1
  5766. //^^ pop_stack_to_d
  5767. // #2291
  5768. @SP
  5769. // #2292
  5770. M=M-1
  5771. // #2293
  5772. A=M
  5773. // #2294
  5774. D=M
  5775. //vv pop_stack_to_d
  5776. // #2295
  5777. @Math.multiply$IF_TRUE1
  5778. // #2296
  5779. D;JNE
  5780. //
  5781. //// goto IF_FALSE1
  5782. // #2297
  5783. @Math.multiply$IF_FALSE1
  5784. // #2298
  5785. 0;JMP
  5786. //
  5787. //// label IF_TRUE1
  5788. (Math.multiply$IF_TRUE1)
  5789. //
  5790. //// push local 0
  5791. //^^ push_from_ram(LCL, 0)
  5792. // #2299
  5793. @LCL
  5794. // #2300
  5795. D=M
  5796. // #2301
  5797. @0
  5798. // #2302
  5799. A=D+A
  5800. // #2303
  5801. D=M
  5802. //^^ push_d_to_stack
  5803. // #2304
  5804. @SP
  5805. // #2305
  5806. A=M
  5807. // #2306
  5808. M=D
  5809. // #2307
  5810. @SP
  5811. // #2308
  5812. M=M+1
  5813. //vv push_d_to_stack
  5814. //vv push_from_ram(LCL, 0)
  5815. //
  5816. //// push argument 0
  5817. //^^ push_from_ram(ARG, 0)
  5818. // #2309
  5819. @ARG
  5820. // #2310
  5821. D=M
  5822. // #2311
  5823. @0
  5824. // #2312
  5825. A=D+A
  5826. // #2313
  5827. D=M
  5828. //^^ push_d_to_stack
  5829. // #2314
  5830. @SP
  5831. // #2315
  5832. A=M
  5833. // #2316
  5834. M=D
  5835. // #2317
  5836. @SP
  5837. // #2318
  5838. M=M+1
  5839. //vv push_d_to_stack
  5840. //vv push_from_ram(ARG, 0)
  5841. //
  5842. //// add
  5843. //^^ arith_binary_op(+)
  5844. //^^ pop_stack_to_d
  5845. // #2319
  5846. @SP
  5847. // #2320
  5848. M=M-1
  5849. // #2321
  5850. A=M
  5851. // #2322
  5852. D=M
  5853. //vv pop_stack_to_d
  5854. //^^ arith_d_with_stack_top(D+M)
  5855. // #2323
  5856. @R13
  5857. // #2324
  5858. M=D
  5859. //^^ pop_stack_to_d
  5860. // #2325
  5861. @SP
  5862. // #2326
  5863. M=M-1
  5864. // #2327
  5865. A=M
  5866. // #2328
  5867. D=M
  5868. //vv pop_stack_to_d
  5869. // #2329
  5870. @R13
  5871. // #2330
  5872. D=D+M
  5873. // #2331
  5874. @R13
  5875. // #2332
  5876. M=0
  5877. //vv arith_d_with_stack_top(D+M)
  5878. //^^ push_d_to_stack
  5879. // #2333
  5880. @SP
  5881. // #2334
  5882. A=M
  5883. // #2335
  5884. M=D
  5885. // #2336
  5886. @SP
  5887. // #2337
  5888. M=M+1
  5889. //vv push_d_to_stack
  5890. //vv arith_binary_op(+)
  5891. //
  5892. //// pop local 0
  5893. //^^ pop_to_ram(LCL, 0)
  5894. // #2338
  5895. @LCL
  5896. // #2339
  5897. D=M
  5898. // #2340
  5899. @0
  5900. // #2341
  5901. D=D+A
  5902. // #2342
  5903. @R13
  5904. // #2343
  5905. M=D
  5906. //^^ pop_stack_to_d
  5907. // #2344
  5908. @SP
  5909. // #2345
  5910. M=M-1
  5911. // #2346
  5912. A=M
  5913. // #2347
  5914. D=M
  5915. //vv pop_stack_to_d
  5916. // #2348
  5917. @R13
  5918. // #2349
  5919. A=M
  5920. // #2350
  5921. M=D
  5922. // #2351
  5923. @R13
  5924. // #2352
  5925. M=0
  5926. //vv pop_to_ram(LCL, 0)
  5927. //
  5928. //// push local 2
  5929. //^^ push_from_ram(LCL, 2)
  5930. // #2353
  5931. @LCL
  5932. // #2354
  5933. D=M
  5934. // #2355
  5935. @2
  5936. // #2356
  5937. A=D+A
  5938. // #2357
  5939. D=M
  5940. //^^ push_d_to_stack
  5941. // #2358
  5942. @SP
  5943. // #2359
  5944. A=M
  5945. // #2360
  5946. M=D
  5947. // #2361
  5948. @SP
  5949. // #2362
  5950. M=M+1
  5951. //vv push_d_to_stack
  5952. //vv push_from_ram(LCL, 2)
  5953. //
  5954. //// push local 3
  5955. //^^ push_from_ram(LCL, 3)
  5956. // #2363
  5957. @LCL
  5958. // #2364
  5959. D=M
  5960. // #2365
  5961. @3
  5962. // #2366
  5963. A=D+A
  5964. // #2367
  5965. D=M
  5966. //^^ push_d_to_stack
  5967. // #2368
  5968. @SP
  5969. // #2369
  5970. A=M
  5971. // #2370
  5972. M=D
  5973. // #2371
  5974. @SP
  5975. // #2372
  5976. M=M+1
  5977. //vv push_d_to_stack
  5978. //vv push_from_ram(LCL, 3)
  5979. //
  5980. //// push static 0
  5981. //^^ push_from_loc(Math.vm.0)
  5982. // #2373
  5983. @Math.vm.0
  5984. // #2374
  5985. D=M
  5986. //^^ push_d_to_stack
  5987. // #2375
  5988. @SP
  5989. // #2376
  5990. A=M
  5991. // #2377
  5992. M=D
  5993. // #2378
  5994. @SP
  5995. // #2379
  5996. M=M+1
  5997. //vv push_d_to_stack
  5998. //vv push_from_loc(Math.vm.0)
  5999. //
  6000. //// add
  6001. //^^ arith_binary_op(+)
  6002. //^^ pop_stack_to_d
  6003. // #2380
  6004. @SP
  6005. // #2381
  6006. M=M-1
  6007. // #2382
  6008. A=M
  6009. // #2383
  6010. D=M
  6011. //vv pop_stack_to_d
  6012. //^^ arith_d_with_stack_top(D+M)
  6013. // #2384
  6014. @R13
  6015. // #2385
  6016. M=D
  6017. //^^ pop_stack_to_d
  6018. // #2386
  6019. @SP
  6020. // #2387
  6021. M=M-1
  6022. // #2388
  6023. A=M
  6024. // #2389
  6025. D=M
  6026. //vv pop_stack_to_d
  6027. // #2390
  6028. @R13
  6029. // #2391
  6030. D=D+M
  6031. // #2392
  6032. @R13
  6033. // #2393
  6034. M=0
  6035. //vv arith_d_with_stack_top(D+M)
  6036. //^^ push_d_to_stack
  6037. // #2394
  6038. @SP
  6039. // #2395
  6040. A=M
  6041. // #2396
  6042. M=D
  6043. // #2397
  6044. @SP
  6045. // #2398
  6046. M=M+1
  6047. //vv push_d_to_stack
  6048. //vv arith_binary_op(+)
  6049. //
  6050. //// pop pointer 1
  6051. //^^ pop_to_loc{4)
  6052. //^^ pop_stack_to_d
  6053. // #2399
  6054. @SP
  6055. // #2400
  6056. M=M-1
  6057. // #2401
  6058. A=M
  6059. // #2402
  6060. D=M
  6061. //vv pop_stack_to_d
  6062. // #2403
  6063. @4
  6064. // #2404
  6065. M=D
  6066. //vv pop_to_loc{4)
  6067. //
  6068. //// push that 0
  6069. //^^ push_from_ram(THAT, 0)
  6070. // #2405
  6071. @THAT
  6072. // #2406
  6073. D=M
  6074. // #2407
  6075. @0
  6076. // #2408
  6077. A=D+A
  6078. // #2409
  6079. D=M
  6080. //^^ push_d_to_stack
  6081. // #2410
  6082. @SP
  6083. // #2411
  6084. A=M
  6085. // #2412
  6086. M=D
  6087. // #2413
  6088. @SP
  6089. // #2414
  6090. M=M+1
  6091. //vv push_d_to_stack
  6092. //vv push_from_ram(THAT, 0)
  6093. //
  6094. //// add
  6095. //^^ arith_binary_op(+)
  6096. //^^ pop_stack_to_d
  6097. // #2415
  6098. @SP
  6099. // #2416
  6100. M=M-1
  6101. // #2417
  6102. A=M
  6103. // #2418
  6104. D=M
  6105. //vv pop_stack_to_d
  6106. //^^ arith_d_with_stack_top(D+M)
  6107. // #2419
  6108. @R13
  6109. // #2420
  6110. M=D
  6111. //^^ pop_stack_to_d
  6112. // #2421
  6113. @SP
  6114. // #2422
  6115. M=M-1
  6116. // #2423
  6117. A=M
  6118. // #2424
  6119. D=M
  6120. //vv pop_stack_to_d
  6121. // #2425
  6122. @R13
  6123. // #2426
  6124. D=D+M
  6125. // #2427
  6126. @R13
  6127. // #2428
  6128. M=0
  6129. //vv arith_d_with_stack_top(D+M)
  6130. //^^ push_d_to_stack
  6131. // #2429
  6132. @SP
  6133. // #2430
  6134. A=M
  6135. // #2431
  6136. M=D
  6137. // #2432
  6138. @SP
  6139. // #2433
  6140. M=M+1
  6141. //vv push_d_to_stack
  6142. //vv arith_binary_op(+)
  6143. //
  6144. //// pop local 2
  6145. //^^ pop_to_ram(LCL, 2)
  6146. // #2434
  6147. @LCL
  6148. // #2435
  6149. D=M
  6150. // #2436
  6151. @2
  6152. // #2437
  6153. D=D+A
  6154. // #2438
  6155. @R13
  6156. // #2439
  6157. M=D
  6158. //^^ pop_stack_to_d
  6159. // #2440
  6160. @SP
  6161. // #2441
  6162. M=M-1
  6163. // #2442
  6164. A=M
  6165. // #2443
  6166. D=M
  6167. //vv pop_stack_to_d
  6168. // #2444
  6169. @R13
  6170. // #2445
  6171. A=M
  6172. // #2446
  6173. M=D
  6174. // #2447
  6175. @R13
  6176. // #2448
  6177. M=0
  6178. //vv pop_to_ram(LCL, 2)
  6179. //
  6180. //// label IF_FALSE1
  6181. (Math.multiply$IF_FALSE1)
  6182. //
  6183. //// push argument 0
  6184. //^^ push_from_ram(ARG, 0)
  6185. // #2449
  6186. @ARG
  6187. // #2450
  6188. D=M
  6189. // #2451
  6190. @0
  6191. // #2452
  6192. A=D+A
  6193. // #2453
  6194. D=M
  6195. //^^ push_d_to_stack
  6196. // #2454
  6197. @SP
  6198. // #2455
  6199. A=M
  6200. // #2456
  6201. M=D
  6202. // #2457
  6203. @SP
  6204. // #2458
  6205. M=M+1
  6206. //vv push_d_to_stack
  6207. //vv push_from_ram(ARG, 0)
  6208. //
  6209. //// push argument 0
  6210. //^^ push_from_ram(ARG, 0)
  6211. // #2459
  6212. @ARG
  6213. // #2460
  6214. D=M
  6215. // #2461
  6216. @0
  6217. // #2462
  6218. A=D+A
  6219. // #2463
  6220. D=M
  6221. //^^ push_d_to_stack
  6222. // #2464
  6223. @SP
  6224. // #2465
  6225. A=M
  6226. // #2466
  6227. M=D
  6228. // #2467
  6229. @SP
  6230. // #2468
  6231. M=M+1
  6232. //vv push_d_to_stack
  6233. //vv push_from_ram(ARG, 0)
  6234. //
  6235. //// add
  6236. //^^ arith_binary_op(+)
  6237. //^^ pop_stack_to_d
  6238. // #2469
  6239. @SP
  6240. // #2470
  6241. M=M-1
  6242. // #2471
  6243. A=M
  6244. // #2472
  6245. D=M
  6246. //vv pop_stack_to_d
  6247. //^^ arith_d_with_stack_top(D+M)
  6248. // #2473
  6249. @R13
  6250. // #2474
  6251. M=D
  6252. //^^ pop_stack_to_d
  6253. // #2475
  6254. @SP
  6255. // #2476
  6256. M=M-1
  6257. // #2477
  6258. A=M
  6259. // #2478
  6260. D=M
  6261. //vv pop_stack_to_d
  6262. // #2479
  6263. @R13
  6264. // #2480
  6265. D=D+M
  6266. // #2481
  6267. @R13
  6268. // #2482
  6269. M=0
  6270. //vv arith_d_with_stack_top(D+M)
  6271. //^^ push_d_to_stack
  6272. // #2483
  6273. @SP
  6274. // #2484
  6275. A=M
  6276. // #2485
  6277. M=D
  6278. // #2486
  6279. @SP
  6280. // #2487
  6281. M=M+1
  6282. //vv push_d_to_stack
  6283. //vv arith_binary_op(+)
  6284. //
  6285. //// pop argument 0
  6286. //^^ pop_to_ram(ARG, 0)
  6287. // #2488
  6288. @ARG
  6289. // #2489
  6290. D=M
  6291. // #2490
  6292. @0
  6293. // #2491
  6294. D=D+A
  6295. // #2492
  6296. @R13
  6297. // #2493
  6298. M=D
  6299. //^^ pop_stack_to_d
  6300. // #2494
  6301. @SP
  6302. // #2495
  6303. M=M-1
  6304. // #2496
  6305. A=M
  6306. // #2497
  6307. D=M
  6308. //vv pop_stack_to_d
  6309. // #2498
  6310. @R13
  6311. // #2499
  6312. A=M
  6313. // #2500
  6314. M=D
  6315. // #2501
  6316. @R13
  6317. // #2502
  6318. M=0
  6319. //vv pop_to_ram(ARG, 0)
  6320. //
  6321. //// push local 3
  6322. //^^ push_from_ram(LCL, 3)
  6323. // #2503
  6324. @LCL
  6325. // #2504
  6326. D=M
  6327. // #2505
  6328. @3
  6329. // #2506
  6330. A=D+A
  6331. // #2507
  6332. D=M
  6333. //^^ push_d_to_stack
  6334. // #2508
  6335. @SP
  6336. // #2509
  6337. A=M
  6338. // #2510
  6339. M=D
  6340. // #2511
  6341. @SP
  6342. // #2512
  6343. M=M+1
  6344. //vv push_d_to_stack
  6345. //vv push_from_ram(LCL, 3)
  6346. //
  6347. //// push constant 1
  6348. //^^ push_constant(1)
  6349. // #2513
  6350. @1
  6351. // #2514
  6352. D=A
  6353. //^^ push_d_to_stack
  6354. // #2515
  6355. @SP
  6356. // #2516
  6357. A=M
  6358. // #2517
  6359. M=D
  6360. // #2518
  6361. @SP
  6362. // #2519
  6363. M=M+1
  6364. //vv push_d_to_stack
  6365. //vv push_constant(1)
  6366. //
  6367. //// add
  6368. //^^ arith_binary_op(+)
  6369. //^^ pop_stack_to_d
  6370. // #2520
  6371. @SP
  6372. // #2521
  6373. M=M-1
  6374. // #2522
  6375. A=M
  6376. // #2523
  6377. D=M
  6378. //vv pop_stack_to_d
  6379. //^^ arith_d_with_stack_top(D+M)
  6380. // #2524
  6381. @R13
  6382. // #2525
  6383. M=D
  6384. //^^ pop_stack_to_d
  6385. // #2526
  6386. @SP
  6387. // #2527
  6388. M=M-1
  6389. // #2528
  6390. A=M
  6391. // #2529
  6392. D=M
  6393. //vv pop_stack_to_d
  6394. // #2530
  6395. @R13
  6396. // #2531
  6397. D=D+M
  6398. // #2532
  6399. @R13
  6400. // #2533
  6401. M=0
  6402. //vv arith_d_with_stack_top(D+M)
  6403. //^^ push_d_to_stack
  6404. // #2534
  6405. @SP
  6406. // #2535
  6407. A=M
  6408. // #2536
  6409. M=D
  6410. // #2537
  6411. @SP
  6412. // #2538
  6413. M=M+1
  6414. //vv push_d_to_stack
  6415. //vv arith_binary_op(+)
  6416. //
  6417. //// pop local 3
  6418. //^^ pop_to_ram(LCL, 3)
  6419. // #2539
  6420. @LCL
  6421. // #2540
  6422. D=M
  6423. // #2541
  6424. @3
  6425. // #2542
  6426. D=D+A
  6427. // #2543
  6428. @R13
  6429. // #2544
  6430. M=D
  6431. //^^ pop_stack_to_d
  6432. // #2545
  6433. @SP
  6434. // #2546
  6435. M=M-1
  6436. // #2547
  6437. A=M
  6438. // #2548
  6439. D=M
  6440. //vv pop_stack_to_d
  6441. // #2549
  6442. @R13
  6443. // #2550
  6444. A=M
  6445. // #2551
  6446. M=D
  6447. // #2552
  6448. @R13
  6449. // #2553
  6450. M=0
  6451. //vv pop_to_ram(LCL, 3)
  6452. //
  6453. //// goto WHILE_EXP0
  6454. // #2554
  6455. @Math.multiply$WHILE_EXP0
  6456. // #2555
  6457. 0;JMP
  6458. //
  6459. //// label WHILE_END0
  6460. (Math.multiply$WHILE_END0)
  6461. //
  6462. //// push local 4
  6463. //^^ push_from_ram(LCL, 4)
  6464. // #2556
  6465. @LCL
  6466. // #2557
  6467. D=M
  6468. // #2558
  6469. @4
  6470. // #2559
  6471. A=D+A
  6472. // #2560
  6473. D=M
  6474. //^^ push_d_to_stack
  6475. // #2561
  6476. @SP
  6477. // #2562
  6478. A=M
  6479. // #2563
  6480. M=D
  6481. // #2564
  6482. @SP
  6483. // #2565
  6484. M=M+1
  6485. //vv push_d_to_stack
  6486. //vv push_from_ram(LCL, 4)
  6487. //
  6488. //// if-goto IF_TRUE2
  6489. //^^ pop_stack_to_d
  6490. // #2566
  6491. @SP
  6492. // #2567
  6493. M=M-1
  6494. // #2568
  6495. A=M
  6496. // #2569
  6497. D=M
  6498. //vv pop_stack_to_d
  6499. // #2570
  6500. @Math.multiply$IF_TRUE2
  6501. // #2571
  6502. D;JNE
  6503. //
  6504. //// goto IF_FALSE2
  6505. // #2572
  6506. @Math.multiply$IF_FALSE2
  6507. // #2573
  6508. 0;JMP
  6509. //
  6510. //// label IF_TRUE2
  6511. (Math.multiply$IF_TRUE2)
  6512. //
  6513. //// push local 0
  6514. //^^ push_from_ram(LCL, 0)
  6515. // #2574
  6516. @LCL
  6517. // #2575
  6518. D=M
  6519. // #2576
  6520. @0
  6521. // #2577
  6522. A=D+A
  6523. // #2578
  6524. D=M
  6525. //^^ push_d_to_stack
  6526. // #2579
  6527. @SP
  6528. // #2580
  6529. A=M
  6530. // #2581
  6531. M=D
  6532. // #2582
  6533. @SP
  6534. // #2583
  6535. M=M+1
  6536. //vv push_d_to_stack
  6537. //vv push_from_ram(LCL, 0)
  6538. //
  6539. //// neg
  6540. //^^ arith_unary_op(-)
  6541. //^^ pop_stack_to_d
  6542. // #2584
  6543. @SP
  6544. // #2585
  6545. M=M-1
  6546. // #2586
  6547. A=M
  6548. // #2587
  6549. D=M
  6550. //vv pop_stack_to_d
  6551. // #2588
  6552. D=-D
  6553. //^^ push_d_to_stack
  6554. // #2589
  6555. @SP
  6556. // #2590
  6557. A=M
  6558. // #2591
  6559. M=D
  6560. // #2592
  6561. @SP
  6562. // #2593
  6563. M=M+1
  6564. //vv push_d_to_stack
  6565. //vv arith_unary_op(-)
  6566. //
  6567. //// pop local 0
  6568. //^^ pop_to_ram(LCL, 0)
  6569. // #2594
  6570. @LCL
  6571. // #2595
  6572. D=M
  6573. // #2596
  6574. @0
  6575. // #2597
  6576. D=D+A
  6577. // #2598
  6578. @R13
  6579. // #2599
  6580. M=D
  6581. //^^ pop_stack_to_d
  6582. // #2600
  6583. @SP
  6584. // #2601
  6585. M=M-1
  6586. // #2602
  6587. A=M
  6588. // #2603
  6589. D=M
  6590. //vv pop_stack_to_d
  6591. // #2604
  6592. @R13
  6593. // #2605
  6594. A=M
  6595. // #2606
  6596. M=D
  6597. // #2607
  6598. @R13
  6599. // #2608
  6600. M=0
  6601. //vv pop_to_ram(LCL, 0)
  6602. //
  6603. //// label IF_FALSE2
  6604. (Math.multiply$IF_FALSE2)
  6605. //
  6606. //// push local 0
  6607. //^^ push_from_ram(LCL, 0)
  6608. // #2609
  6609. @LCL
  6610. // #2610
  6611. D=M
  6612. // #2611
  6613. @0
  6614. // #2612
  6615. A=D+A
  6616. // #2613
  6617. D=M
  6618. //^^ push_d_to_stack
  6619. // #2614
  6620. @SP
  6621. // #2615
  6622. A=M
  6623. // #2616
  6624. M=D
  6625. // #2617
  6626. @SP
  6627. // #2618
  6628. M=M+1
  6629. //vv push_d_to_stack
  6630. //vv push_from_ram(LCL, 0)
  6631. //
  6632. //// return
  6633. // #2619
  6634. @LCL
  6635. // #2620
  6636. D=M
  6637. // #2621
  6638. @R14
  6639. // #2622
  6640. M=D //R14=LCL
  6641. // #2623
  6642. @5
  6643. // #2624
  6644. A=D-A
  6645. // #2625
  6646. D=M
  6647. // #2626
  6648. @R15
  6649. // #2627
  6650. M=D //R15=*(LCL-5)
  6651. //^^ pop_stack_to_d
  6652. // #2628
  6653. @SP
  6654. // #2629
  6655. M=M-1
  6656. // #2630
  6657. A=M
  6658. // #2631
  6659. D=M
  6660. //vv pop_stack_to_d
  6661. // #2632
  6662. @ARG
  6663. // #2633
  6664. A=M
  6665. // #2634
  6666. M=D //*ARG = pop()
  6667. // #2635
  6668. @ARG
  6669. // #2636
  6670. D=M
  6671. // #2637
  6672. @SP
  6673. // #2638
  6674. M=D+1 //SP=ARG+1
  6675. // #2639
  6676. @R14
  6677. // #2640
  6678. AM=M-1
  6679. // #2641
  6680. D=M
  6681. // #2642
  6682. @THAT
  6683. // #2643
  6684. M=D //THAT = *(--R14)
  6685. // #2644
  6686. @R14
  6687. // #2645
  6688. AM=M-1
  6689. // #2646
  6690. D=M
  6691. // #2647
  6692. @THIS
  6693. // #2648
  6694. M=D //THIS = *(--R14)
  6695. // #2649
  6696. @R14
  6697. // #2650
  6698. AM=M-1
  6699. // #2651
  6700. D=M
  6701. // #2652
  6702. @ARG
  6703. // #2653
  6704. M=D //ARG = *(--R14)
  6705. // #2654
  6706. @R14
  6707. // #2655
  6708. AM=M-1
  6709. // #2656
  6710. D=M
  6711. // #2657
  6712. @LCL
  6713. // #2658
  6714. M=D //LCL = *(--R14)
  6715. // #2659
  6716. @R15
  6717. // #2660
  6718. A=M
  6719. // #2661
  6720. 0;JMP //goto *R15
  6721. //
  6722. //// function Math.divide 4
  6723. (Math.divide)
  6724. // #2662
  6725. D=0
  6726. //^^ push_d_to_stack
  6727. // #2663
  6728. @SP
  6729. // #2664
  6730. A=M
  6731. // #2665
  6732. M=D
  6733. // #2666
  6734. @SP
  6735. // #2667
  6736. M=M+1
  6737. //vv push_d_to_stack
  6738. // #2668
  6739. D=0
  6740. //^^ push_d_to_stack
  6741. // #2669
  6742. @SP
  6743. // #2670
  6744. A=M
  6745. // #2671
  6746. M=D
  6747. // #2672
  6748. @SP
  6749. // #2673
  6750. M=M+1
  6751. //vv push_d_to_stack
  6752. // #2674
  6753. D=0
  6754. //^^ push_d_to_stack
  6755. // #2675
  6756. @SP
  6757. // #2676
  6758. A=M
  6759. // #2677
  6760. M=D
  6761. // #2678
  6762. @SP
  6763. // #2679
  6764. M=M+1
  6765. //vv push_d_to_stack
  6766. // #2680
  6767. D=0
  6768. //^^ push_d_to_stack
  6769. // #2681
  6770. @SP
  6771. // #2682
  6772. A=M
  6773. // #2683
  6774. M=D
  6775. // #2684
  6776. @SP
  6777. // #2685
  6778. M=M+1
  6779. //vv push_d_to_stack
  6780. //
  6781. //// push argument 1
  6782. //^^ push_from_ram(ARG, 1)
  6783. // #2686
  6784. @ARG
  6785. // #2687
  6786. D=M
  6787. // #2688
  6788. @1
  6789. // #2689
  6790. A=D+A
  6791. // #2690
  6792. D=M
  6793. //^^ push_d_to_stack
  6794. // #2691
  6795. @SP
  6796. // #2692
  6797. A=M
  6798. // #2693
  6799. M=D
  6800. // #2694
  6801. @SP
  6802. // #2695
  6803. M=M+1
  6804. //vv push_d_to_stack
  6805. //vv push_from_ram(ARG, 1)
  6806. //
  6807. //// push constant 0
  6808. //^^ push_constant(0)
  6809. // #2696
  6810. @0
  6811. // #2697
  6812. D=A
  6813. //^^ push_d_to_stack
  6814. // #2698
  6815. @SP
  6816. // #2699
  6817. A=M
  6818. // #2700
  6819. M=D
  6820. // #2701
  6821. @SP
  6822. // #2702
  6823. M=M+1
  6824. //vv push_d_to_stack
  6825. //vv push_constant(0)
  6826. //
  6827. //// eq
  6828. //^^ arith_cmp_op(JEQ)
  6829. //^^ pop_stack_to_d
  6830. // #2703
  6831. @SP
  6832. // #2704
  6833. M=M-1
  6834. // #2705
  6835. A=M
  6836. // #2706
  6837. D=M
  6838. //vv pop_stack_to_d
  6839. //^^ arith_d_with_stack_top(D-M)
  6840. // #2707
  6841. @R13
  6842. // #2708
  6843. M=D
  6844. //^^ pop_stack_to_d
  6845. // #2709
  6846. @SP
  6847. // #2710
  6848. M=M-1
  6849. // #2711
  6850. A=M
  6851. // #2712
  6852. D=M
  6853. //vv pop_stack_to_d
  6854. // #2713
  6855. @R13
  6856. // #2714
  6857. D=D-M
  6858. // #2715
  6859. @R13
  6860. // #2716
  6861. M=0
  6862. //vv arith_d_with_stack_top(D-M)
  6863. // #2717
  6864. @PUT_TRUE_42
  6865. // #2718
  6866. D;JEQ
  6867. // #2719
  6868. @R13
  6869. // #2720
  6870. M=0
  6871. // #2721
  6872. @CONT_42
  6873. // #2722
  6874. 0;JMP
  6875. (PUT_TRUE_42)
  6876. // #2723
  6877. @R13
  6878. // #2724
  6879. M=-1
  6880. (CONT_42)
  6881. // #2725
  6882. @R13
  6883. // #2726
  6884. D=M
  6885. // #2727
  6886. @R13
  6887. // #2728
  6888. M=0
  6889. //^^ push_d_to_stack
  6890. // #2729
  6891. @SP
  6892. // #2730
  6893. A=M
  6894. // #2731
  6895. M=D
  6896. // #2732
  6897. @SP
  6898. // #2733
  6899. M=M+1
  6900. //vv push_d_to_stack
  6901. //vv arith_cmp_op(JEQ)
  6902. //
  6903. //// if-goto IF_TRUE0
  6904. //^^ pop_stack_to_d
  6905. // #2734
  6906. @SP
  6907. // #2735
  6908. M=M-1
  6909. // #2736
  6910. A=M
  6911. // #2737
  6912. D=M
  6913. //vv pop_stack_to_d
  6914. // #2738
  6915. @Math.divide$IF_TRUE0
  6916. // #2739
  6917. D;JNE
  6918. //
  6919. //// goto IF_FALSE0
  6920. // #2740
  6921. @Math.divide$IF_FALSE0
  6922. // #2741
  6923. 0;JMP
  6924. //
  6925. //// label IF_TRUE0
  6926. (Math.divide$IF_TRUE0)
  6927. //
  6928. //// push constant 3
  6929. //^^ push_constant(3)
  6930. // #2742
  6931. @3
  6932. // #2743
  6933. D=A
  6934. //^^ push_d_to_stack
  6935. // #2744
  6936. @SP
  6937. // #2745
  6938. A=M
  6939. // #2746
  6940. M=D
  6941. // #2747
  6942. @SP
  6943. // #2748
  6944. M=M+1
  6945. //vv push_d_to_stack
  6946. //vv push_constant(3)
  6947. //
  6948. //// call Sys.error 1
  6949. //^^ push_constant(RET_ADDR_43)
  6950. // #2749
  6951. @RET_ADDR_43
  6952. // #2750
  6953. D=A
  6954. //^^ push_d_to_stack
  6955. // #2751
  6956. @SP
  6957. // #2752
  6958. A=M
  6959. // #2753
  6960. M=D
  6961. // #2754
  6962. @SP
  6963. // #2755
  6964. M=M+1
  6965. //vv push_d_to_stack
  6966. //vv push_constant(RET_ADDR_43)
  6967. //push return-address
  6968. // #2756
  6969. @LCL
  6970. // #2757
  6971. D=M
  6972. //^^ push_d_to_stack
  6973. // #2758
  6974. @SP
  6975. // #2759
  6976. A=M
  6977. // #2760
  6978. M=D
  6979. // #2761
  6980. @SP
  6981. // #2762
  6982. M=M+1
  6983. //vv push_d_to_stack
  6984. //push LCL
  6985. // #2763
  6986. @ARG
  6987. // #2764
  6988. D=M
  6989. //^^ push_d_to_stack
  6990. // #2765
  6991. @SP
  6992. // #2766
  6993. A=M
  6994. // #2767
  6995. M=D
  6996. // #2768
  6997. @SP
  6998. // #2769
  6999. M=M+1
  7000. //vv push_d_to_stack
  7001. //push ARG
  7002. // #2770
  7003. @THIS
  7004. // #2771
  7005. D=M
  7006. //^^ push_d_to_stack
  7007. // #2772
  7008. @SP
  7009. // #2773
  7010. A=M
  7011. // #2774
  7012. M=D
  7013. // #2775
  7014. @SP
  7015. // #2776
  7016. M=M+1
  7017. //vv push_d_to_stack
  7018. //push THIS
  7019. // #2777
  7020. @THAT
  7021. // #2778
  7022. D=M
  7023. //^^ push_d_to_stack
  7024. // #2779
  7025. @SP
  7026. // #2780
  7027. A=M
  7028. // #2781
  7029. M=D
  7030. // #2782
  7031. @SP
  7032. // #2783
  7033. M=M+1
  7034. //vv push_d_to_stack
  7035. //push THAT
  7036. // #2784
  7037. @SP
  7038. // #2785
  7039. D=M
  7040. // #2786
  7041. @ARG
  7042. // #2787
  7043. M=D
  7044. // #2788
  7045. @6
  7046. // #2789
  7047. D=A
  7048. // #2790
  7049. @ARG
  7050. // #2791
  7051. M=M-D // ARG = SP - args - 5
  7052. // #2792
  7053. @SP
  7054. // #2793
  7055. D=M
  7056. // #2794
  7057. @LCL
  7058. // #2795
  7059. M=D // LCL = SP
  7060. // #2796
  7061. @Sys.error
  7062. // #2797
  7063. 0;JMP
  7064. (RET_ADDR_43)
  7065. //
  7066. //// pop temp 0
  7067. //^^ pop_to_loc{5)
  7068. //^^ pop_stack_to_d
  7069. // #2798
  7070. @SP
  7071. // #2799
  7072. M=M-1
  7073. // #2800
  7074. A=M
  7075. // #2801
  7076. D=M
  7077. //vv pop_stack_to_d
  7078. // #2802
  7079. @5
  7080. // #2803
  7081. M=D
  7082. //vv pop_to_loc{5)
  7083. //
  7084. //// label IF_FALSE0
  7085. (Math.divide$IF_FALSE0)
  7086. //
  7087. //// push argument 0
  7088. //^^ push_from_ram(ARG, 0)
  7089. // #2804
  7090. @ARG
  7091. // #2805
  7092. D=M
  7093. // #2806
  7094. @0
  7095. // #2807
  7096. A=D+A
  7097. // #2808
  7098. D=M
  7099. //^^ push_d_to_stack
  7100. // #2809
  7101. @SP
  7102. // #2810
  7103. A=M
  7104. // #2811
  7105. M=D
  7106. // #2812
  7107. @SP
  7108. // #2813
  7109. M=M+1
  7110. //vv push_d_to_stack
  7111. //vv push_from_ram(ARG, 0)
  7112. //
  7113. //// push constant 0
  7114. //^^ push_constant(0)
  7115. // #2814
  7116. @0
  7117. // #2815
  7118. D=A
  7119. //^^ push_d_to_stack
  7120. // #2816
  7121. @SP
  7122. // #2817
  7123. A=M
  7124. // #2818
  7125. M=D
  7126. // #2819
  7127. @SP
  7128. // #2820
  7129. M=M+1
  7130. //vv push_d_to_stack
  7131. //vv push_constant(0)
  7132. //
  7133. //// lt
  7134. //^^ arith_cmp_op(JLT)
  7135. //^^ pop_stack_to_d
  7136. // #2821
  7137. @SP
  7138. // #2822
  7139. M=M-1
  7140. // #2823
  7141. A=M
  7142. // #2824
  7143. D=M
  7144. //vv pop_stack_to_d
  7145. //^^ arith_d_with_stack_top(D-M)
  7146. // #2825
  7147. @R13
  7148. // #2826
  7149. M=D
  7150. //^^ pop_stack_to_d
  7151. // #2827
  7152. @SP
  7153. // #2828
  7154. M=M-1
  7155. // #2829
  7156. A=M
  7157. // #2830
  7158. D=M
  7159. //vv pop_stack_to_d
  7160. // #2831
  7161. @R13
  7162. // #2832
  7163. D=D-M
  7164. // #2833
  7165. @R13
  7166. // #2834
  7167. M=0
  7168. //vv arith_d_with_stack_top(D-M)
  7169. // #2835
  7170. @PUT_TRUE_44
  7171. // #2836
  7172. D;JLT
  7173. // #2837
  7174. @R13
  7175. // #2838
  7176. M=0
  7177. // #2839
  7178. @CONT_44
  7179. // #2840
  7180. 0;JMP
  7181. (PUT_TRUE_44)
  7182. // #2841
  7183. @R13
  7184. // #2842
  7185. M=-1
  7186. (CONT_44)
  7187. // #2843
  7188. @R13
  7189. // #2844
  7190. D=M
  7191. // #2845
  7192. @R13
  7193. // #2846
  7194. M=0
  7195. //^^ push_d_to_stack
  7196. // #2847
  7197. @SP
  7198. // #2848
  7199. A=M
  7200. // #2849
  7201. M=D
  7202. // #2850
  7203. @SP
  7204. // #2851
  7205. M=M+1
  7206. //vv push_d_to_stack
  7207. //vv arith_cmp_op(JLT)
  7208. //
  7209. //// push argument 1
  7210. //^^ push_from_ram(ARG, 1)
  7211. // #2852
  7212. @ARG
  7213. // #2853
  7214. D=M
  7215. // #2854
  7216. @1
  7217. // #2855
  7218. A=D+A
  7219. // #2856
  7220. D=M
  7221. //^^ push_d_to_stack
  7222. // #2857
  7223. @SP
  7224. // #2858
  7225. A=M
  7226. // #2859
  7227. M=D
  7228. // #2860
  7229. @SP
  7230. // #2861
  7231. M=M+1
  7232. //vv push_d_to_stack
  7233. //vv push_from_ram(ARG, 1)
  7234. //
  7235. //// push constant 0
  7236. //^^ push_constant(0)
  7237. // #2862
  7238. @0
  7239. // #2863
  7240. D=A
  7241. //^^ push_d_to_stack
  7242. // #2864
  7243. @SP
  7244. // #2865
  7245. A=M
  7246. // #2866
  7247. M=D
  7248. // #2867
  7249. @SP
  7250. // #2868
  7251. M=M+1
  7252. //vv push_d_to_stack
  7253. //vv push_constant(0)
  7254. //
  7255. //// gt
  7256. //^^ arith_cmp_op(JGT)
  7257. //^^ pop_stack_to_d
  7258. // #2869
  7259. @SP
  7260. // #2870
  7261. M=M-1
  7262. // #2871
  7263. A=M
  7264. // #2872
  7265. D=M
  7266. //vv pop_stack_to_d
  7267. //^^ arith_d_with_stack_top(D-M)
  7268. // #2873
  7269. @R13
  7270. // #2874
  7271. M=D
  7272. //^^ pop_stack_to_d
  7273. // #2875
  7274. @SP
  7275. // #2876
  7276. M=M-1
  7277. // #2877
  7278. A=M
  7279. // #2878
  7280. D=M
  7281. //vv pop_stack_to_d
  7282. // #2879
  7283. @R13
  7284. // #2880
  7285. D=D-M
  7286. // #2881
  7287. @R13
  7288. // #2882
  7289. M=0
  7290. //vv arith_d_with_stack_top(D-M)
  7291. // #2883
  7292. @PUT_TRUE_45
  7293. // #2884
  7294. D;JGT
  7295. // #2885
  7296. @R13
  7297. // #2886
  7298. M=0
  7299. // #2887
  7300. @CONT_45
  7301. // #2888
  7302. 0;JMP
  7303. (PUT_TRUE_45)
  7304. // #2889
  7305. @R13
  7306. // #2890
  7307. M=-1
  7308. (CONT_45)
  7309. // #2891
  7310. @R13
  7311. // #2892
  7312. D=M
  7313. // #2893
  7314. @R13
  7315. // #2894
  7316. M=0
  7317. //^^ push_d_to_stack
  7318. // #2895
  7319. @SP
  7320. // #2896
  7321. A=M
  7322. // #2897
  7323. M=D
  7324. // #2898
  7325. @SP
  7326. // #2899
  7327. M=M+1
  7328. //vv push_d_to_stack
  7329. //vv arith_cmp_op(JGT)
  7330. //
  7331. //// and
  7332. //^^ arith_binary_op(&)
  7333. //^^ pop_stack_to_d
  7334. // #2900
  7335. @SP
  7336. // #2901
  7337. M=M-1
  7338. // #2902
  7339. A=M
  7340. // #2903
  7341. D=M
  7342. //vv pop_stack_to_d
  7343. //^^ arith_d_with_stack_top(D&M)
  7344. // #2904
  7345. @R13
  7346. // #2905
  7347. M=D
  7348. //^^ pop_stack_to_d
  7349. // #2906
  7350. @SP
  7351. // #2907
  7352. M=M-1
  7353. // #2908
  7354. A=M
  7355. // #2909
  7356. D=M
  7357. //vv pop_stack_to_d
  7358. // #2910
  7359. @R13
  7360. // #2911
  7361. D=D&M
  7362. // #2912
  7363. @R13
  7364. // #2913
  7365. M=0
  7366. //vv arith_d_with_stack_top(D&M)
  7367. //^^ push_d_to_stack
  7368. // #2914
  7369. @SP
  7370. // #2915
  7371. A=M
  7372. // #2916
  7373. M=D
  7374. // #2917
  7375. @SP
  7376. // #2918
  7377. M=M+1
  7378. //vv push_d_to_stack
  7379. //vv arith_binary_op(&)
  7380. //
  7381. //// push argument 0
  7382. //^^ push_from_ram(ARG, 0)
  7383. // #2919
  7384. @ARG
  7385. // #2920
  7386. D=M
  7387. // #2921
  7388. @0
  7389. // #2922
  7390. A=D+A
  7391. // #2923
  7392. D=M
  7393. //^^ push_d_to_stack
  7394. // #2924
  7395. @SP
  7396. // #2925
  7397. A=M
  7398. // #2926
  7399. M=D
  7400. // #2927
  7401. @SP
  7402. // #2928
  7403. M=M+1
  7404. //vv push_d_to_stack
  7405. //vv push_from_ram(ARG, 0)
  7406. //
  7407. //// push constant 0
  7408. //^^ push_constant(0)
  7409. // #2929
  7410. @0
  7411. // #2930
  7412. D=A
  7413. //^^ push_d_to_stack
  7414. // #2931
  7415. @SP
  7416. // #2932
  7417. A=M
  7418. // #2933
  7419. M=D
  7420. // #2934
  7421. @SP
  7422. // #2935
  7423. M=M+1
  7424. //vv push_d_to_stack
  7425. //vv push_constant(0)
  7426. //
  7427. //// gt
  7428. //^^ arith_cmp_op(JGT)
  7429. //^^ pop_stack_to_d
  7430. // #2936
  7431. @SP
  7432. // #2937
  7433. M=M-1
  7434. // #2938
  7435. A=M
  7436. // #2939
  7437. D=M
  7438. //vv pop_stack_to_d
  7439. //^^ arith_d_with_stack_top(D-M)
  7440. // #2940
  7441. @R13
  7442. // #2941
  7443. M=D
  7444. //^^ pop_stack_to_d
  7445. // #2942
  7446. @SP
  7447. // #2943
  7448. M=M-1
  7449. // #2944
  7450. A=M
  7451. // #2945
  7452. D=M
  7453. //vv pop_stack_to_d
  7454. // #2946
  7455. @R13
  7456. // #2947
  7457. D=D-M
  7458. // #2948
  7459. @R13
  7460. // #2949
  7461. M=0
  7462. //vv arith_d_with_stack_top(D-M)
  7463. // #2950
  7464. @PUT_TRUE_46
  7465. // #2951
  7466. D;JGT
  7467. // #2952
  7468. @R13
  7469. // #2953
  7470. M=0
  7471. // #2954
  7472. @CONT_46
  7473. // #2955
  7474. 0;JMP
  7475. (PUT_TRUE_46)
  7476. // #2956
  7477. @R13
  7478. // #2957
  7479. M=-1
  7480. (CONT_46)
  7481. // #2958
  7482. @R13
  7483. // #2959
  7484. D=M
  7485. // #2960
  7486. @R13
  7487. // #2961
  7488. M=0
  7489. //^^ push_d_to_stack
  7490. // #2962
  7491. @SP
  7492. // #2963
  7493. A=M
  7494. // #2964
  7495. M=D
  7496. // #2965
  7497. @SP
  7498. // #2966
  7499. M=M+1
  7500. //vv push_d_to_stack
  7501. //vv arith_cmp_op(JGT)
  7502. //
  7503. //// push argument 1
  7504. //^^ push_from_ram(ARG, 1)
  7505. // #2967
  7506. @ARG
  7507. // #2968
  7508. D=M
  7509. // #2969
  7510. @1
  7511. // #2970
  7512. A=D+A
  7513. // #2971
  7514. D=M
  7515. //^^ push_d_to_stack
  7516. // #2972
  7517. @SP
  7518. // #2973
  7519. A=M
  7520. // #2974
  7521. M=D
  7522. // #2975
  7523. @SP
  7524. // #2976
  7525. M=M+1
  7526. //vv push_d_to_stack
  7527. //vv push_from_ram(ARG, 1)
  7528. //
  7529. //// push constant 0
  7530. //^^ push_constant(0)
  7531. // #2977
  7532. @0
  7533. // #2978
  7534. D=A
  7535. //^^ push_d_to_stack
  7536. // #2979
  7537. @SP
  7538. // #2980
  7539. A=M
  7540. // #2981
  7541. M=D
  7542. // #2982
  7543. @SP
  7544. // #2983
  7545. M=M+1
  7546. //vv push_d_to_stack
  7547. //vv push_constant(0)
  7548. //
  7549. //// lt
  7550. //^^ arith_cmp_op(JLT)
  7551. //^^ pop_stack_to_d
  7552. // #2984
  7553. @SP
  7554. // #2985
  7555. M=M-1
  7556. // #2986
  7557. A=M
  7558. // #2987
  7559. D=M
  7560. //vv pop_stack_to_d
  7561. //^^ arith_d_with_stack_top(D-M)
  7562. // #2988
  7563. @R13
  7564. // #2989
  7565. M=D
  7566. //^^ pop_stack_to_d
  7567. // #2990
  7568. @SP
  7569. // #2991
  7570. M=M-1
  7571. // #2992
  7572. A=M
  7573. // #2993
  7574. D=M
  7575. //vv pop_stack_to_d
  7576. // #2994
  7577. @R13
  7578. // #2995
  7579. D=D-M
  7580. // #2996
  7581. @R13
  7582. // #2997
  7583. M=0
  7584. //vv arith_d_with_stack_top(D-M)
  7585. // #2998
  7586. @PUT_TRUE_47
  7587. // #2999
  7588. D;JLT
  7589. // #3000
  7590. @R13
  7591. // #3001
  7592. M=0
  7593. // #3002
  7594. @CONT_47
  7595. // #3003
  7596. 0;JMP
  7597. (PUT_TRUE_47)
  7598. // #3004
  7599. @R13
  7600. // #3005
  7601. M=-1
  7602. (CONT_47)
  7603. // #3006
  7604. @R13
  7605. // #3007
  7606. D=M
  7607. // #3008
  7608. @R13
  7609. // #3009
  7610. M=0
  7611. //^^ push_d_to_stack
  7612. // #3010
  7613. @SP
  7614. // #3011
  7615. A=M
  7616. // #3012
  7617. M=D
  7618. // #3013
  7619. @SP
  7620. // #3014
  7621. M=M+1
  7622. //vv push_d_to_stack
  7623. //vv arith_cmp_op(JLT)
  7624. //
  7625. //// and
  7626. //^^ arith_binary_op(&)
  7627. //^^ pop_stack_to_d
  7628. // #3015
  7629. @SP
  7630. // #3016
  7631. M=M-1
  7632. // #3017
  7633. A=M
  7634. // #3018
  7635. D=M
  7636. //vv pop_stack_to_d
  7637. //^^ arith_d_with_stack_top(D&M)
  7638. // #3019
  7639. @R13
  7640. // #3020
  7641. M=D
  7642. //^^ pop_stack_to_d
  7643. // #3021
  7644. @SP
  7645. // #3022
  7646. M=M-1
  7647. // #3023
  7648. A=M
  7649. // #3024
  7650. D=M
  7651. //vv pop_stack_to_d
  7652. // #3025
  7653. @R13
  7654. // #3026
  7655. D=D&M
  7656. // #3027
  7657. @R13
  7658. // #3028
  7659. M=0
  7660. //vv arith_d_with_stack_top(D&M)
  7661. //^^ push_d_to_stack
  7662. // #3029
  7663. @SP
  7664. // #3030
  7665. A=M
  7666. // #3031
  7667. M=D
  7668. // #3032
  7669. @SP
  7670. // #3033
  7671. M=M+1
  7672. //vv push_d_to_stack
  7673. //vv arith_binary_op(&)
  7674. //
  7675. //// or
  7676. //^^ arith_binary_op(|)
  7677. //^^ pop_stack_to_d
  7678. // #3034
  7679. @SP
  7680. // #3035
  7681. M=M-1
  7682. // #3036
  7683. A=M
  7684. // #3037
  7685. D=M
  7686. //vv pop_stack_to_d
  7687. //^^ arith_d_with_stack_top(D|M)
  7688. // #3038
  7689. @R13
  7690. // #3039
  7691. M=D
  7692. //^^ pop_stack_to_d
  7693. // #3040
  7694. @SP
  7695. // #3041
  7696. M=M-1
  7697. // #3042
  7698. A=M
  7699. // #3043
  7700. D=M
  7701. //vv pop_stack_to_d
  7702. // #3044
  7703. @R13
  7704. // #3045
  7705. D=D|M
  7706. // #3046
  7707. @R13
  7708. // #3047
  7709. M=0
  7710. //vv arith_d_with_stack_top(D|M)
  7711. //^^ push_d_to_stack
  7712. // #3048
  7713. @SP
  7714. // #3049
  7715. A=M
  7716. // #3050
  7717. M=D
  7718. // #3051
  7719. @SP
  7720. // #3052
  7721. M=M+1
  7722. //vv push_d_to_stack
  7723. //vv arith_binary_op(|)
  7724. //
  7725. //// pop local 2
  7726. //^^ pop_to_ram(LCL, 2)
  7727. // #3053
  7728. @LCL
  7729. // #3054
  7730. D=M
  7731. // #3055
  7732. @2
  7733. // #3056
  7734. D=D+A
  7735. // #3057
  7736. @R13
  7737. // #3058
  7738. M=D
  7739. //^^ pop_stack_to_d
  7740. // #3059
  7741. @SP
  7742. // #3060
  7743. M=M-1
  7744. // #3061
  7745. A=M
  7746. // #3062
  7747. D=M
  7748. //vv pop_stack_to_d
  7749. // #3063
  7750. @R13
  7751. // #3064
  7752. A=M
  7753. // #3065
  7754. M=D
  7755. // #3066
  7756. @R13
  7757. // #3067
  7758. M=0
  7759. //vv pop_to_ram(LCL, 2)
  7760. //
  7761. //// push constant 0
  7762. //^^ push_constant(0)
  7763. // #3068
  7764. @0
  7765. // #3069
  7766. D=A
  7767. //^^ push_d_to_stack
  7768. // #3070
  7769. @SP
  7770. // #3071
  7771. A=M
  7772. // #3072
  7773. M=D
  7774. // #3073
  7775. @SP
  7776. // #3074
  7777. M=M+1
  7778. //vv push_d_to_stack
  7779. //vv push_constant(0)
  7780. //
  7781. //// push static 1
  7782. //^^ push_from_loc(Math.vm.1)
  7783. // #3075
  7784. @Math.vm.1
  7785. // #3076
  7786. D=M
  7787. //^^ push_d_to_stack
  7788. // #3077
  7789. @SP
  7790. // #3078
  7791. A=M
  7792. // #3079
  7793. M=D
  7794. // #3080
  7795. @SP
  7796. // #3081
  7797. M=M+1
  7798. //vv push_d_to_stack
  7799. //vv push_from_loc(Math.vm.1)
  7800. //
  7801. //// add
  7802. //^^ arith_binary_op(+)
  7803. //^^ pop_stack_to_d
  7804. // #3082
  7805. @SP
  7806. // #3083
  7807. M=M-1
  7808. // #3084
  7809. A=M
  7810. // #3085
  7811. D=M
  7812. //vv pop_stack_to_d
  7813. //^^ arith_d_with_stack_top(D+M)
  7814. // #3086
  7815. @R13
  7816. // #3087
  7817. M=D
  7818. //^^ pop_stack_to_d
  7819. // #3088
  7820. @SP
  7821. // #3089
  7822. M=M-1
  7823. // #3090
  7824. A=M
  7825. // #3091
  7826. D=M
  7827. //vv pop_stack_to_d
  7828. // #3092
  7829. @R13
  7830. // #3093
  7831. D=D+M
  7832. // #3094
  7833. @R13
  7834. // #3095
  7835. M=0
  7836. //vv arith_d_with_stack_top(D+M)
  7837. //^^ push_d_to_stack
  7838. // #3096
  7839. @SP
  7840. // #3097
  7841. A=M
  7842. // #3098
  7843. M=D
  7844. // #3099
  7845. @SP
  7846. // #3100
  7847. M=M+1
  7848. //vv push_d_to_stack
  7849. //vv arith_binary_op(+)
  7850. //
  7851. //// push argument 1
  7852. //^^ push_from_ram(ARG, 1)
  7853. // #3101
  7854. @ARG
  7855. // #3102
  7856. D=M
  7857. // #3103
  7858. @1
  7859. // #3104
  7860. A=D+A
  7861. // #3105
  7862. D=M
  7863. //^^ push_d_to_stack
  7864. // #3106
  7865. @SP
  7866. // #3107
  7867. A=M
  7868. // #3108
  7869. M=D
  7870. // #3109
  7871. @SP
  7872. // #3110
  7873. M=M+1
  7874. //vv push_d_to_stack
  7875. //vv push_from_ram(ARG, 1)
  7876. //
  7877. //// call Math.abs 1
  7878. //^^ push_constant(RET_ADDR_48)
  7879. // #3111
  7880. @RET_ADDR_48
  7881. // #3112
  7882. D=A
  7883. //^^ push_d_to_stack
  7884. // #3113
  7885. @SP
  7886. // #3114
  7887. A=M
  7888. // #3115
  7889. M=D
  7890. // #3116
  7891. @SP
  7892. // #3117
  7893. M=M+1
  7894. //vv push_d_to_stack
  7895. //vv push_constant(RET_ADDR_48)
  7896. //push return-address
  7897. // #3118
  7898. @LCL
  7899. // #3119
  7900. D=M
  7901. //^^ push_d_to_stack
  7902. // #3120
  7903. @SP
  7904. // #3121
  7905. A=M
  7906. // #3122
  7907. M=D
  7908. // #3123
  7909. @SP
  7910. // #3124
  7911. M=M+1
  7912. //vv push_d_to_stack
  7913. //push LCL
  7914. // #3125
  7915. @ARG
  7916. // #3126
  7917. D=M
  7918. //^^ push_d_to_stack
  7919. // #3127
  7920. @SP
  7921. // #3128
  7922. A=M
  7923. // #3129
  7924. M=D
  7925. // #3130
  7926. @SP
  7927. // #3131
  7928. M=M+1
  7929. //vv push_d_to_stack
  7930. //push ARG
  7931. // #3132
  7932. @THIS
  7933. // #3133
  7934. D=M
  7935. //^^ push_d_to_stack
  7936. // #3134
  7937. @SP
  7938. // #3135
  7939. A=M
  7940. // #3136
  7941. M=D
  7942. // #3137
  7943. @SP
  7944. // #3138
  7945. M=M+1
  7946. //vv push_d_to_stack
  7947. //push THIS
  7948. // #3139
  7949. @THAT
  7950. // #3140
  7951. D=M
  7952. //^^ push_d_to_stack
  7953. // #3141
  7954. @SP
  7955. // #3142
  7956. A=M
  7957. // #3143
  7958. M=D
  7959. // #3144
  7960. @SP
  7961. // #3145
  7962. M=M+1
  7963. //vv push_d_to_stack
  7964. //push THAT
  7965. // #3146
  7966. @SP
  7967. // #3147
  7968. D=M
  7969. // #3148
  7970. @ARG
  7971. // #3149
  7972. M=D
  7973. // #3150
  7974. @6
  7975. // #3151
  7976. D=A
  7977. // #3152
  7978. @ARG
  7979. // #3153
  7980. M=M-D // ARG = SP - args - 5
  7981. // #3154
  7982. @SP
  7983. // #3155
  7984. D=M
  7985. // #3156
  7986. @LCL
  7987. // #3157
  7988. M=D // LCL = SP
  7989. // #3158
  7990. @Math.abs
  7991. // #3159
  7992. 0;JMP
  7993. (RET_ADDR_48)
  7994. //
  7995. //// pop temp 0
  7996. //^^ pop_to_loc{5)
  7997. //^^ pop_stack_to_d
  7998. // #3160
  7999. @SP
  8000. // #3161
  8001. M=M-1
  8002. // #3162
  8003. A=M
  8004. // #3163
  8005. D=M
  8006. //vv pop_stack_to_d
  8007. // #3164
  8008. @5
  8009. // #3165
  8010. M=D
  8011. //vv pop_to_loc{5)
  8012. //
  8013. //// pop pointer 1
  8014. //^^ pop_to_loc{4)
  8015. //^^ pop_stack_to_d
  8016. // #3166
  8017. @SP
  8018. // #3167
  8019. M=M-1
  8020. // #3168
  8021. A=M
  8022. // #3169
  8023. D=M
  8024. //vv pop_stack_to_d
  8025. // #3170
  8026. @4
  8027. // #3171
  8028. M=D
  8029. //vv pop_to_loc{4)
  8030. //
  8031. //// push temp 0
  8032. //^^ push_from_loc(5)
  8033. // #3172
  8034. @5
  8035. // #3173
  8036. D=M
  8037. //^^ push_d_to_stack
  8038. // #3174
  8039. @SP
  8040. // #3175
  8041. A=M
  8042. // #3176
  8043. M=D
  8044. // #3177
  8045. @SP
  8046. // #3178
  8047. M=M+1
  8048. //vv push_d_to_stack
  8049. //vv push_from_loc(5)
  8050. //
  8051. //// pop that 0
  8052. //^^ pop_to_ram(THAT, 0)
  8053. // #3179
  8054. @THAT
  8055. // #3180
  8056. D=M
  8057. // #3181
  8058. @0
  8059. // #3182
  8060. D=D+A
  8061. // #3183
  8062. @R13
  8063. // #3184
  8064. M=D
  8065. //^^ pop_stack_to_d
  8066. // #3185
  8067. @SP
  8068. // #3186
  8069. M=M-1
  8070. // #3187
  8071. A=M
  8072. // #3188
  8073. D=M
  8074. //vv pop_stack_to_d
  8075. // #3189
  8076. @R13
  8077. // #3190
  8078. A=M
  8079. // #3191
  8080. M=D
  8081. // #3192
  8082. @R13
  8083. // #3193
  8084. M=0
  8085. //vv pop_to_ram(THAT, 0)
  8086. //
  8087. //// push argument 0
  8088. //^^ push_from_ram(ARG, 0)
  8089. // #3194
  8090. @ARG
  8091. // #3195
  8092. D=M
  8093. // #3196
  8094. @0
  8095. // #3197
  8096. A=D+A
  8097. // #3198
  8098. D=M
  8099. //^^ push_d_to_stack
  8100. // #3199
  8101. @SP
  8102. // #3200
  8103. A=M
  8104. // #3201
  8105. M=D
  8106. // #3202
  8107. @SP
  8108. // #3203
  8109. M=M+1
  8110. //vv push_d_to_stack
  8111. //vv push_from_ram(ARG, 0)
  8112. //
  8113. //// call Math.abs 1
  8114. //^^ push_constant(RET_ADDR_49)
  8115. // #3204
  8116. @RET_ADDR_49
  8117. // #3205
  8118. D=A
  8119. //^^ push_d_to_stack
  8120. // #3206
  8121. @SP
  8122. // #3207
  8123. A=M
  8124. // #3208
  8125. M=D
  8126. // #3209
  8127. @SP
  8128. // #3210
  8129. M=M+1
  8130. //vv push_d_to_stack
  8131. //vv push_constant(RET_ADDR_49)
  8132. //push return-address
  8133. // #3211
  8134. @LCL
  8135. // #3212
  8136. D=M
  8137. //^^ push_d_to_stack
  8138. // #3213
  8139. @SP
  8140. // #3214
  8141. A=M
  8142. // #3215
  8143. M=D
  8144. // #3216
  8145. @SP
  8146. // #3217
  8147. M=M+1
  8148. //vv push_d_to_stack
  8149. //push LCL
  8150. // #3218
  8151. @ARG
  8152. // #3219
  8153. D=M
  8154. //^^ push_d_to_stack
  8155. // #3220
  8156. @SP
  8157. // #3221
  8158. A=M
  8159. // #3222
  8160. M=D
  8161. // #3223
  8162. @SP
  8163. // #3224
  8164. M=M+1
  8165. //vv push_d_to_stack
  8166. //push ARG
  8167. // #3225
  8168. @THIS
  8169. // #3226
  8170. D=M
  8171. //^^ push_d_to_stack
  8172. // #3227
  8173. @SP
  8174. // #3228
  8175. A=M
  8176. // #3229
  8177. M=D
  8178. // #3230
  8179. @SP
  8180. // #3231
  8181. M=M+1
  8182. //vv push_d_to_stack
  8183. //push THIS
  8184. // #3232
  8185. @THAT
  8186. // #3233
  8187. D=M
  8188. //^^ push_d_to_stack
  8189. // #3234
  8190. @SP
  8191. // #3235
  8192. A=M
  8193. // #3236
  8194. M=D
  8195. // #3237
  8196. @SP
  8197. // #3238
  8198. M=M+1
  8199. //vv push_d_to_stack
  8200. //push THAT
  8201. // #3239
  8202. @SP
  8203. // #3240
  8204. D=M
  8205. // #3241
  8206. @ARG
  8207. // #3242
  8208. M=D
  8209. // #3243
  8210. @6
  8211. // #3244
  8212. D=A
  8213. // #3245
  8214. @ARG
  8215. // #3246
  8216. M=M-D // ARG = SP - args - 5
  8217. // #3247
  8218. @SP
  8219. // #3248
  8220. D=M
  8221. // #3249
  8222. @LCL
  8223. // #3250
  8224. M=D // LCL = SP
  8225. // #3251
  8226. @Math.abs
  8227. // #3252
  8228. 0;JMP
  8229. (RET_ADDR_49)
  8230. //
  8231. //// pop argument 0
  8232. //^^ pop_to_ram(ARG, 0)
  8233. // #3253
  8234. @ARG
  8235. // #3254
  8236. D=M
  8237. // #3255
  8238. @0
  8239. // #3256
  8240. D=D+A
  8241. // #3257
  8242. @R13
  8243. // #3258
  8244. M=D
  8245. //^^ pop_stack_to_d
  8246. // #3259
  8247. @SP
  8248. // #3260
  8249. M=M-1
  8250. // #3261
  8251. A=M
  8252. // #3262
  8253. D=M
  8254. //vv pop_stack_to_d
  8255. // #3263
  8256. @R13
  8257. // #3264
  8258. A=M
  8259. // #3265
  8260. M=D
  8261. // #3266
  8262. @R13
  8263. // #3267
  8264. M=0
  8265. //vv pop_to_ram(ARG, 0)
  8266. //
  8267. //// label WHILE_EXP0
  8268. (Math.divide$WHILE_EXP0)
  8269. //
  8270. //// push local 3
  8271. //^^ push_from_ram(LCL, 3)
  8272. // #3268
  8273. @LCL
  8274. // #3269
  8275. D=M
  8276. // #3270
  8277. @3
  8278. // #3271
  8279. A=D+A
  8280. // #3272
  8281. D=M
  8282. //^^ push_d_to_stack
  8283. // #3273
  8284. @SP
  8285. // #3274
  8286. A=M
  8287. // #3275
  8288. M=D
  8289. // #3276
  8290. @SP
  8291. // #3277
  8292. M=M+1
  8293. //vv push_d_to_stack
  8294. //vv push_from_ram(LCL, 3)
  8295. //
  8296. //// not
  8297. //^^ arith_unary_op(!)
  8298. //^^ pop_stack_to_d
  8299. // #3278
  8300. @SP
  8301. // #3279
  8302. M=M-1
  8303. // #3280
  8304. A=M
  8305. // #3281
  8306. D=M
  8307. //vv pop_stack_to_d
  8308. // #3282
  8309. D=!D
  8310. //^^ push_d_to_stack
  8311. // #3283
  8312. @SP
  8313. // #3284
  8314. A=M
  8315. // #3285
  8316. M=D
  8317. // #3286
  8318. @SP
  8319. // #3287
  8320. M=M+1
  8321. //vv push_d_to_stack
  8322. //vv arith_unary_op(!)
  8323. //
  8324. //// not
  8325. //^^ arith_unary_op(!)
  8326. //^^ pop_stack_to_d
  8327. // #3288
  8328. @SP
  8329. // #3289
  8330. M=M-1
  8331. // #3290
  8332. A=M
  8333. // #3291
  8334. D=M
  8335. //vv pop_stack_to_d
  8336. // #3292
  8337. D=!D
  8338. //^^ push_d_to_stack
  8339. // #3293
  8340. @SP
  8341. // #3294
  8342. A=M
  8343. // #3295
  8344. M=D
  8345. // #3296
  8346. @SP
  8347. // #3297
  8348. M=M+1
  8349. //vv push_d_to_stack
  8350. //vv arith_unary_op(!)
  8351. //
  8352. //// if-goto WHILE_END0
  8353. //^^ pop_stack_to_d
  8354. // #3298
  8355. @SP
  8356. // #3299
  8357. M=M-1
  8358. // #3300
  8359. A=M
  8360. // #3301
  8361. D=M
  8362. //vv pop_stack_to_d
  8363. // #3302
  8364. @Math.divide$WHILE_END0
  8365. // #3303
  8366. D;JNE
  8367. //
  8368. //// push constant 32767
  8369. //^^ push_constant(32767)
  8370. // #3304
  8371. @32767
  8372. // #3305
  8373. D=A
  8374. //^^ push_d_to_stack
  8375. // #3306
  8376. @SP
  8377. // #3307
  8378. A=M
  8379. // #3308
  8380. M=D
  8381. // #3309
  8382. @SP
  8383. // #3310
  8384. M=M+1
  8385. //vv push_d_to_stack
  8386. //vv push_constant(32767)
  8387. //
  8388. //// push local 0
  8389. //^^ push_from_ram(LCL, 0)
  8390. // #3311
  8391. @LCL
  8392. // #3312
  8393. D=M
  8394. // #3313
  8395. @0
  8396. // #3314
  8397. A=D+A
  8398. // #3315
  8399. D=M
  8400. //^^ push_d_to_stack
  8401. // #3316
  8402. @SP
  8403. // #3317
  8404. A=M
  8405. // #3318
  8406. M=D
  8407. // #3319
  8408. @SP
  8409. // #3320
  8410. M=M+1
  8411. //vv push_d_to_stack
  8412. //vv push_from_ram(LCL, 0)
  8413. //
  8414. //// push static 1
  8415. //^^ push_from_loc(Math.vm.1)
  8416. // #3321
  8417. @Math.vm.1
  8418. // #3322
  8419. D=M
  8420. //^^ push_d_to_stack
  8421. // #3323
  8422. @SP
  8423. // #3324
  8424. A=M
  8425. // #3325
  8426. M=D
  8427. // #3326
  8428. @SP
  8429. // #3327
  8430. M=M+1
  8431. //vv push_d_to_stack
  8432. //vv push_from_loc(Math.vm.1)
  8433. //
  8434. //// add
  8435. //^^ arith_binary_op(+)
  8436. //^^ pop_stack_to_d
  8437. // #3328
  8438. @SP
  8439. // #3329
  8440. M=M-1
  8441. // #3330
  8442. A=M
  8443. // #3331
  8444. D=M
  8445. //vv pop_stack_to_d
  8446. //^^ arith_d_with_stack_top(D+M)
  8447. // #3332
  8448. @R13
  8449. // #3333
  8450. M=D
  8451. //^^ pop_stack_to_d
  8452. // #3334
  8453. @SP
  8454. // #3335
  8455. M=M-1
  8456. // #3336
  8457. A=M
  8458. // #3337
  8459. D=M
  8460. //vv pop_stack_to_d
  8461. // #3338
  8462. @R13
  8463. // #3339
  8464. D=D+M
  8465. // #3340
  8466. @R13
  8467. // #3341
  8468. M=0
  8469. //vv arith_d_with_stack_top(D+M)
  8470. //^^ push_d_to_stack
  8471. // #3342
  8472. @SP
  8473. // #3343
  8474. A=M
  8475. // #3344
  8476. M=D
  8477. // #3345
  8478. @SP
  8479. // #3346
  8480. M=M+1
  8481. //vv push_d_to_stack
  8482. //vv arith_binary_op(+)
  8483. //
  8484. //// pop pointer 1
  8485. //^^ pop_to_loc{4)
  8486. //^^ pop_stack_to_d
  8487. // #3347
  8488. @SP
  8489. // #3348
  8490. M=M-1
  8491. // #3349
  8492. A=M
  8493. // #3350
  8494. D=M
  8495. //vv pop_stack_to_d
  8496. // #3351
  8497. @4
  8498. // #3352
  8499. M=D
  8500. //vv pop_to_loc{4)
  8501. //
  8502. //// push that 0
  8503. //^^ push_from_ram(THAT, 0)
  8504. // #3353
  8505. @THAT
  8506. // #3354
  8507. D=M
  8508. // #3355
  8509. @0
  8510. // #3356
  8511. A=D+A
  8512. // #3357
  8513. D=M
  8514. //^^ push_d_to_stack
  8515. // #3358
  8516. @SP
  8517. // #3359
  8518. A=M
  8519. // #3360
  8520. M=D
  8521. // #3361
  8522. @SP
  8523. // #3362
  8524. M=M+1
  8525. //vv push_d_to_stack
  8526. //vv push_from_ram(THAT, 0)
  8527. //
  8528. //// sub
  8529. //^^ arith_binary_op(-)
  8530. //^^ pop_stack_to_d
  8531. // #3363
  8532. @SP
  8533. // #3364
  8534. M=M-1
  8535. // #3365
  8536. A=M
  8537. // #3366
  8538. D=M
  8539. //vv pop_stack_to_d
  8540. //^^ arith_d_with_stack_top(D-M)
  8541. // #3367
  8542. @R13
  8543. // #3368
  8544. M=D
  8545. //^^ pop_stack_to_d
  8546. // #3369
  8547. @SP
  8548. // #3370
  8549. M=M-1
  8550. // #3371
  8551. A=M
  8552. // #3372
  8553. D=M
  8554. //vv pop_stack_to_d
  8555. // #3373
  8556. @R13
  8557. // #3374
  8558. D=D-M
  8559. // #3375
  8560. @R13
  8561. // #3376
  8562. M=0
  8563. //vv arith_d_with_stack_top(D-M)
  8564. //^^ push_d_to_stack
  8565. // #3377
  8566. @SP
  8567. // #3378
  8568. A=M
  8569. // #3379
  8570. M=D
  8571. // #3380
  8572. @SP
  8573. // #3381
  8574. M=M+1
  8575. //vv push_d_to_stack
  8576. //vv arith_binary_op(-)
  8577. //
  8578. //// push local 0
  8579. //^^ push_from_ram(LCL, 0)
  8580. // #3382
  8581. @LCL
  8582. // #3383
  8583. D=M
  8584. // #3384
  8585. @0
  8586. // #3385
  8587. A=D+A
  8588. // #3386
  8589. D=M
  8590. //^^ push_d_to_stack
  8591. // #3387
  8592. @SP
  8593. // #3388
  8594. A=M
  8595. // #3389
  8596. M=D
  8597. // #3390
  8598. @SP
  8599. // #3391
  8600. M=M+1
  8601. //vv push_d_to_stack
  8602. //vv push_from_ram(LCL, 0)
  8603. //
  8604. //// push static 1
  8605. //^^ push_from_loc(Math.vm.1)
  8606. // #3392
  8607. @Math.vm.1
  8608. // #3393
  8609. D=M
  8610. //^^ push_d_to_stack
  8611. // #3394
  8612. @SP
  8613. // #3395
  8614. A=M
  8615. // #3396
  8616. M=D
  8617. // #3397
  8618. @SP
  8619. // #3398
  8620. M=M+1
  8621. //vv push_d_to_stack
  8622. //vv push_from_loc(Math.vm.1)
  8623. //
  8624. //// add
  8625. //^^ arith_binary_op(+)
  8626. //^^ pop_stack_to_d
  8627. // #3399
  8628. @SP
  8629. // #3400
  8630. M=M-1
  8631. // #3401
  8632. A=M
  8633. // #3402
  8634. D=M
  8635. //vv pop_stack_to_d
  8636. //^^ arith_d_with_stack_top(D+M)
  8637. // #3403
  8638. @R13
  8639. // #3404
  8640. M=D
  8641. //^^ pop_stack_to_d
  8642. // #3405
  8643. @SP
  8644. // #3406
  8645. M=M-1
  8646. // #3407
  8647. A=M
  8648. // #3408
  8649. D=M
  8650. //vv pop_stack_to_d
  8651. // #3409
  8652. @R13
  8653. // #3410
  8654. D=D+M
  8655. // #3411
  8656. @R13
  8657. // #3412
  8658. M=0
  8659. //vv arith_d_with_stack_top(D+M)
  8660. //^^ push_d_to_stack
  8661. // #3413
  8662. @SP
  8663. // #3414
  8664. A=M
  8665. // #3415
  8666. M=D
  8667. // #3416
  8668. @SP
  8669. // #3417
  8670. M=M+1
  8671. //vv push_d_to_stack
  8672. //vv arith_binary_op(+)
  8673. //
  8674. //// pop pointer 1
  8675. //^^ pop_to_loc{4)
  8676. //^^ pop_stack_to_d
  8677. // #3418
  8678. @SP
  8679. // #3419
  8680. M=M-1
  8681. // #3420
  8682. A=M
  8683. // #3421
  8684. D=M
  8685. //vv pop_stack_to_d
  8686. // #3422
  8687. @4
  8688. // #3423
  8689. M=D
  8690. //vv pop_to_loc{4)
  8691. //
  8692. //// push that 0
  8693. //^^ push_from_ram(THAT, 0)
  8694. // #3424
  8695. @THAT
  8696. // #3425
  8697. D=M
  8698. // #3426
  8699. @0
  8700. // #3427
  8701. A=D+A
  8702. // #3428
  8703. D=M
  8704. //^^ push_d_to_stack
  8705. // #3429
  8706. @SP
  8707. // #3430
  8708. A=M
  8709. // #3431
  8710. M=D
  8711. // #3432
  8712. @SP
  8713. // #3433
  8714. M=M+1
  8715. //vv push_d_to_stack
  8716. //vv push_from_ram(THAT, 0)
  8717. //
  8718. //// lt
  8719. //^^ arith_cmp_op(JLT)
  8720. //^^ pop_stack_to_d
  8721. // #3434
  8722. @SP
  8723. // #3435
  8724. M=M-1
  8725. // #3436
  8726. A=M
  8727. // #3437
  8728. D=M
  8729. //vv pop_stack_to_d
  8730. //^^ arith_d_with_stack_top(D-M)
  8731. // #3438
  8732. @R13
  8733. // #3439
  8734. M=D
  8735. //^^ pop_stack_to_d
  8736. // #3440
  8737. @SP
  8738. // #3441
  8739. M=M-1
  8740. // #3442
  8741. A=M
  8742. // #3443
  8743. D=M
  8744. //vv pop_stack_to_d
  8745. // #3444
  8746. @R13
  8747. // #3445
  8748. D=D-M
  8749. // #3446
  8750. @R13
  8751. // #3447
  8752. M=0
  8753. //vv arith_d_with_stack_top(D-M)
  8754. // #3448
  8755. @PUT_TRUE_50
  8756. // #3449
  8757. D;JLT
  8758. // #3450
  8759. @R13
  8760. // #3451
  8761. M=0
  8762. // #3452
  8763. @CONT_50
  8764. // #3453
  8765. 0;JMP
  8766. (PUT_TRUE_50)
  8767. // #3454
  8768. @R13
  8769. // #3455
  8770. M=-1
  8771. (CONT_50)
  8772. // #3456
  8773. @R13
  8774. // #3457
  8775. D=M
  8776. // #3458
  8777. @R13
  8778. // #3459
  8779. M=0
  8780. //^^ push_d_to_stack
  8781. // #3460
  8782. @SP
  8783. // #3461
  8784. A=M
  8785. // #3462
  8786. M=D
  8787. // #3463
  8788. @SP
  8789. // #3464
  8790. M=M+1
  8791. //vv push_d_to_stack
  8792. //vv arith_cmp_op(JLT)
  8793. //
  8794. //// pop local 3
  8795. //^^ pop_to_ram(LCL, 3)
  8796. // #3465
  8797. @LCL
  8798. // #3466
  8799. D=M
  8800. // #3467
  8801. @3
  8802. // #3468
  8803. D=D+A
  8804. // #3469
  8805. @R13
  8806. // #3470
  8807. M=D
  8808. //^^ pop_stack_to_d
  8809. // #3471
  8810. @SP
  8811. // #3472
  8812. M=M-1
  8813. // #3473
  8814. A=M
  8815. // #3474
  8816. D=M
  8817. //vv pop_stack_to_d
  8818. // #3475
  8819. @R13
  8820. // #3476
  8821. A=M
  8822. // #3477
  8823. M=D
  8824. // #3478
  8825. @R13
  8826. // #3479
  8827. M=0
  8828. //vv pop_to_ram(LCL, 3)
  8829. //
  8830. //// push local 3
  8831. //^^ push_from_ram(LCL, 3)
  8832. // #3480
  8833. @LCL
  8834. // #3481
  8835. D=M
  8836. // #3482
  8837. @3
  8838. // #3483
  8839. A=D+A
  8840. // #3484
  8841. D=M
  8842. //^^ push_d_to_stack
  8843. // #3485
  8844. @SP
  8845. // #3486
  8846. A=M
  8847. // #3487
  8848. M=D
  8849. // #3488
  8850. @SP
  8851. // #3489
  8852. M=M+1
  8853. //vv push_d_to_stack
  8854. //vv push_from_ram(LCL, 3)
  8855. //
  8856. //// not
  8857. //^^ arith_unary_op(!)
  8858. //^^ pop_stack_to_d
  8859. // #3490
  8860. @SP
  8861. // #3491
  8862. M=M-1
  8863. // #3492
  8864. A=M
  8865. // #3493
  8866. D=M
  8867. //vv pop_stack_to_d
  8868. // #3494
  8869. D=!D
  8870. //^^ push_d_to_stack
  8871. // #3495
  8872. @SP
  8873. // #3496
  8874. A=M
  8875. // #3497
  8876. M=D
  8877. // #3498
  8878. @SP
  8879. // #3499
  8880. M=M+1
  8881. //vv push_d_to_stack
  8882. //vv arith_unary_op(!)
  8883. //
  8884. //// if-goto IF_TRUE1
  8885. //^^ pop_stack_to_d
  8886. // #3500
  8887. @SP
  8888. // #3501
  8889. M=M-1
  8890. // #3502
  8891. A=M
  8892. // #3503
  8893. D=M
  8894. //vv pop_stack_to_d
  8895. // #3504
  8896. @Math.divide$IF_TRUE1
  8897. // #3505
  8898. D;JNE
  8899. //
  8900. //// goto IF_FALSE1
  8901. // #3506
  8902. @Math.divide$IF_FALSE1
  8903. // #3507
  8904. 0;JMP
  8905. //
  8906. //// label IF_TRUE1
  8907. (Math.divide$IF_TRUE1)
  8908. //
  8909. //// push local 0
  8910. //^^ push_from_ram(LCL, 0)
  8911. // #3508
  8912. @LCL
  8913. // #3509
  8914. D=M
  8915. // #3510
  8916. @0
  8917. // #3511
  8918. A=D+A
  8919. // #3512
  8920. D=M
  8921. //^^ push_d_to_stack
  8922. // #3513
  8923. @SP
  8924. // #3514
  8925. A=M
  8926. // #3515
  8927. M=D
  8928. // #3516
  8929. @SP
  8930. // #3517
  8931. M=M+1
  8932. //vv push_d_to_stack
  8933. //vv push_from_ram(LCL, 0)
  8934. //
  8935. //// push constant 1
  8936. //^^ push_constant(1)
  8937. // #3518
  8938. @1
  8939. // #3519
  8940. D=A
  8941. //^^ push_d_to_stack
  8942. // #3520
  8943. @SP
  8944. // #3521
  8945. A=M
  8946. // #3522
  8947. M=D
  8948. // #3523
  8949. @SP
  8950. // #3524
  8951. M=M+1
  8952. //vv push_d_to_stack
  8953. //vv push_constant(1)
  8954. //
  8955. //// add
  8956. //^^ arith_binary_op(+)
  8957. //^^ pop_stack_to_d
  8958. // #3525
  8959. @SP
  8960. // #3526
  8961. M=M-1
  8962. // #3527
  8963. A=M
  8964. // #3528
  8965. D=M
  8966. //vv pop_stack_to_d
  8967. //^^ arith_d_with_stack_top(D+M)
  8968. // #3529
  8969. @R13
  8970. // #3530
  8971. M=D
  8972. //^^ pop_stack_to_d
  8973. // #3531
  8974. @SP
  8975. // #3532
  8976. M=M-1
  8977. // #3533
  8978. A=M
  8979. // #3534
  8980. D=M
  8981. //vv pop_stack_to_d
  8982. // #3535
  8983. @R13
  8984. // #3536
  8985. D=D+M
  8986. // #3537
  8987. @R13
  8988. // #3538
  8989. M=0
  8990. //vv arith_d_with_stack_top(D+M)
  8991. //^^ push_d_to_stack
  8992. // #3539
  8993. @SP
  8994. // #3540
  8995. A=M
  8996. // #3541
  8997. M=D
  8998. // #3542
  8999. @SP
  9000. // #3543
  9001. M=M+1
  9002. //vv push_d_to_stack
  9003. //vv arith_binary_op(+)
  9004. //
  9005. //// push static 1
  9006. //^^ push_from_loc(Math.vm.1)
  9007. // #3544
  9008. @Math.vm.1
  9009. // #3545
  9010. D=M
  9011. //^^ push_d_to_stack
  9012. // #3546
  9013. @SP
  9014. // #3547
  9015. A=M
  9016. // #3548
  9017. M=D
  9018. // #3549
  9019. @SP
  9020. // #3550
  9021. M=M+1
  9022. //vv push_d_to_stack
  9023. //vv push_from_loc(Math.vm.1)
  9024. //
  9025. //// add
  9026. //^^ arith_binary_op(+)
  9027. //^^ pop_stack_to_d
  9028. // #3551
  9029. @SP
  9030. // #3552
  9031. M=M-1
  9032. // #3553
  9033. A=M
  9034. // #3554
  9035. D=M
  9036. //vv pop_stack_to_d
  9037. //^^ arith_d_with_stack_top(D+M)
  9038. // #3555
  9039. @R13
  9040. // #3556
  9041. M=D
  9042. //^^ pop_stack_to_d
  9043. // #3557
  9044. @SP
  9045. // #3558
  9046. M=M-1
  9047. // #3559
  9048. A=M
  9049. // #3560
  9050. D=M
  9051. //vv pop_stack_to_d
  9052. // #3561
  9053. @R13
  9054. // #3562
  9055. D=D+M
  9056. // #3563
  9057. @R13
  9058. // #3564
  9059. M=0
  9060. //vv arith_d_with_stack_top(D+M)
  9061. //^^ push_d_to_stack
  9062. // #3565
  9063. @SP
  9064. // #3566
  9065. A=M
  9066. // #3567
  9067. M=D
  9068. // #3568
  9069. @SP
  9070. // #3569
  9071. M=M+1
  9072. //vv push_d_to_stack
  9073. //vv arith_binary_op(+)
  9074. //
  9075. //// push local 0
  9076. //^^ push_from_ram(LCL, 0)
  9077. // #3570
  9078. @LCL
  9079. // #3571
  9080. D=M
  9081. // #3572
  9082. @0
  9083. // #3573
  9084. A=D+A
  9085. // #3574
  9086. D=M
  9087. //^^ push_d_to_stack
  9088. // #3575
  9089. @SP
  9090. // #3576
  9091. A=M
  9092. // #3577
  9093. M=D
  9094. // #3578
  9095. @SP
  9096. // #3579
  9097. M=M+1
  9098. //vv push_d_to_stack
  9099. //vv push_from_ram(LCL, 0)
  9100. //
  9101. //// push static 1
  9102. //^^ push_from_loc(Math.vm.1)
  9103. // #3580
  9104. @Math.vm.1
  9105. // #3581
  9106. D=M
  9107. //^^ push_d_to_stack
  9108. // #3582
  9109. @SP
  9110. // #3583
  9111. A=M
  9112. // #3584
  9113. M=D
  9114. // #3585
  9115. @SP
  9116. // #3586
  9117. M=M+1
  9118. //vv push_d_to_stack
  9119. //vv push_from_loc(Math.vm.1)
  9120. //
  9121. //// add
  9122. //^^ arith_binary_op(+)
  9123. //^^ pop_stack_to_d
  9124. // #3587
  9125. @SP
  9126. // #3588
  9127. M=M-1
  9128. // #3589
  9129. A=M
  9130. // #3590
  9131. D=M
  9132. //vv pop_stack_to_d
  9133. //^^ arith_d_with_stack_top(D+M)
  9134. // #3591
  9135. @R13
  9136. // #3592
  9137. M=D
  9138. //^^ pop_stack_to_d
  9139. // #3593
  9140. @SP
  9141. // #3594
  9142. M=M-1
  9143. // #3595
  9144. A=M
  9145. // #3596
  9146. D=M
  9147. //vv pop_stack_to_d
  9148. // #3597
  9149. @R13
  9150. // #3598
  9151. D=D+M
  9152. // #3599
  9153. @R13
  9154. // #3600
  9155. M=0
  9156. //vv arith_d_with_stack_top(D+M)
  9157. //^^ push_d_to_stack
  9158. // #3601
  9159. @SP
  9160. // #3602
  9161. A=M
  9162. // #3603
  9163. M=D
  9164. // #3604
  9165. @SP
  9166. // #3605
  9167. M=M+1
  9168. //vv push_d_to_stack
  9169. //vv arith_binary_op(+)
  9170. //
  9171. //// pop pointer 1
  9172. //^^ pop_to_loc{4)
  9173. //^^ pop_stack_to_d
  9174. // #3606
  9175. @SP
  9176. // #3607
  9177. M=M-1
  9178. // #3608
  9179. A=M
  9180. // #3609
  9181. D=M
  9182. //vv pop_stack_to_d
  9183. // #3610
  9184. @4
  9185. // #3611
  9186. M=D
  9187. //vv pop_to_loc{4)
  9188. //
  9189. //// push that 0
  9190. //^^ push_from_ram(THAT, 0)
  9191. // #3612
  9192. @THAT
  9193. // #3613
  9194. D=M
  9195. // #3614
  9196. @0
  9197. // #3615
  9198. A=D+A
  9199. // #3616
  9200. D=M
  9201. //^^ push_d_to_stack
  9202. // #3617
  9203. @SP
  9204. // #3618
  9205. A=M
  9206. // #3619
  9207. M=D
  9208. // #3620
  9209. @SP
  9210. // #3621
  9211. M=M+1
  9212. //vv push_d_to_stack
  9213. //vv push_from_ram(THAT, 0)
  9214. //
  9215. //// push local 0
  9216. //^^ push_from_ram(LCL, 0)
  9217. // #3622
  9218. @LCL
  9219. // #3623
  9220. D=M
  9221. // #3624
  9222. @0
  9223. // #3625
  9224. A=D+A
  9225. // #3626
  9226. D=M
  9227. //^^ push_d_to_stack
  9228. // #3627
  9229. @SP
  9230. // #3628
  9231. A=M
  9232. // #3629
  9233. M=D
  9234. // #3630
  9235. @SP
  9236. // #3631
  9237. M=M+1
  9238. //vv push_d_to_stack
  9239. //vv push_from_ram(LCL, 0)
  9240. //
  9241. //// push static 1
  9242. //^^ push_from_loc(Math.vm.1)
  9243. // #3632
  9244. @Math.vm.1
  9245. // #3633
  9246. D=M
  9247. //^^ push_d_to_stack
  9248. // #3634
  9249. @SP
  9250. // #3635
  9251. A=M
  9252. // #3636
  9253. M=D
  9254. // #3637
  9255. @SP
  9256. // #3638
  9257. M=M+1
  9258. //vv push_d_to_stack
  9259. //vv push_from_loc(Math.vm.1)
  9260. //
  9261. //// add
  9262. //^^ arith_binary_op(+)
  9263. //^^ pop_stack_to_d
  9264. // #3639
  9265. @SP
  9266. // #3640
  9267. M=M-1
  9268. // #3641
  9269. A=M
  9270. // #3642
  9271. D=M
  9272. //vv pop_stack_to_d
  9273. //^^ arith_d_with_stack_top(D+M)
  9274. // #3643
  9275. @R13
  9276. // #3644
  9277. M=D
  9278. //^^ pop_stack_to_d
  9279. // #3645
  9280. @SP
  9281. // #3646
  9282. M=M-1
  9283. // #3647
  9284. A=M
  9285. // #3648
  9286. D=M
  9287. //vv pop_stack_to_d
  9288. // #3649
  9289. @R13
  9290. // #3650
  9291. D=D+M
  9292. // #3651
  9293. @R13
  9294. // #3652
  9295. M=0
  9296. //vv arith_d_with_stack_top(D+M)
  9297. //^^ push_d_to_stack
  9298. // #3653
  9299. @SP
  9300. // #3654
  9301. A=M
  9302. // #3655
  9303. M=D
  9304. // #3656
  9305. @SP
  9306. // #3657
  9307. M=M+1
  9308. //vv push_d_to_stack
  9309. //vv arith_binary_op(+)
  9310. //
  9311. //// pop pointer 1
  9312. //^^ pop_to_loc{4)
  9313. //^^ pop_stack_to_d
  9314. // #3658
  9315. @SP
  9316. // #3659
  9317. M=M-1
  9318. // #3660
  9319. A=M
  9320. // #3661
  9321. D=M
  9322. //vv pop_stack_to_d
  9323. // #3662
  9324. @4
  9325. // #3663
  9326. M=D
  9327. //vv pop_to_loc{4)
  9328. //
  9329. //// push that 0
  9330. //^^ push_from_ram(THAT, 0)
  9331. // #3664
  9332. @THAT
  9333. // #3665
  9334. D=M
  9335. // #3666
  9336. @0
  9337. // #3667
  9338. A=D+A
  9339. // #3668
  9340. D=M
  9341. //^^ push_d_to_stack
  9342. // #3669
  9343. @SP
  9344. // #3670
  9345. A=M
  9346. // #3671
  9347. M=D
  9348. // #3672
  9349. @SP
  9350. // #3673
  9351. M=M+1
  9352. //vv push_d_to_stack
  9353. //vv push_from_ram(THAT, 0)
  9354. //
  9355. //// add
  9356. //^^ arith_binary_op(+)
  9357. //^^ pop_stack_to_d
  9358. // #3674
  9359. @SP
  9360. // #3675
  9361. M=M-1
  9362. // #3676
  9363. A=M
  9364. // #3677
  9365. D=M
  9366. //vv pop_stack_to_d
  9367. //^^ arith_d_with_stack_top(D+M)
  9368. // #3678
  9369. @R13
  9370. // #3679
  9371. M=D
  9372. //^^ pop_stack_to_d
  9373. // #3680
  9374. @SP
  9375. // #3681
  9376. M=M-1
  9377. // #3682
  9378. A=M
  9379. // #3683
  9380. D=M
  9381. //vv pop_stack_to_d
  9382. // #3684
  9383. @R13
  9384. // #3685
  9385. D=D+M
  9386. // #3686
  9387. @R13
  9388. // #3687
  9389. M=0
  9390. //vv arith_d_with_stack_top(D+M)
  9391. //^^ push_d_to_stack
  9392. // #3688
  9393. @SP
  9394. // #3689
  9395. A=M
  9396. // #3690
  9397. M=D
  9398. // #3691
  9399. @SP
  9400. // #3692
  9401. M=M+1
  9402. //vv push_d_to_stack
  9403. //vv arith_binary_op(+)
  9404. //
  9405. //// pop temp 0
  9406. //^^ pop_to_loc{5)
  9407. //^^ pop_stack_to_d
  9408. // #3693
  9409. @SP
  9410. // #3694
  9411. M=M-1
  9412. // #3695
  9413. A=M
  9414. // #3696
  9415. D=M
  9416. //vv pop_stack_to_d
  9417. // #3697
  9418. @5
  9419. // #3698
  9420. M=D
  9421. //vv pop_to_loc{5)
  9422. //
  9423. //// pop pointer 1
  9424. //^^ pop_to_loc{4)
  9425. //^^ pop_stack_to_d
  9426. // #3699
  9427. @SP
  9428. // #3700
  9429. M=M-1
  9430. // #3701
  9431. A=M
  9432. // #3702
  9433. D=M
  9434. //vv pop_stack_to_d
  9435. // #3703
  9436. @4
  9437. // #3704
  9438. M=D
  9439. //vv pop_to_loc{4)
  9440. //
  9441. //// push temp 0
  9442. //^^ push_from_loc(5)
  9443. // #3705
  9444. @5
  9445. // #3706
  9446. D=M
  9447. //^^ push_d_to_stack
  9448. // #3707
  9449. @SP
  9450. // #3708
  9451. A=M
  9452. // #3709
  9453. M=D
  9454. // #3710
  9455. @SP
  9456. // #3711
  9457. M=M+1
  9458. //vv push_d_to_stack
  9459. //vv push_from_loc(5)
  9460. //
  9461. //// pop that 0
  9462. //^^ pop_to_ram(THAT, 0)
  9463. // #3712
  9464. @THAT
  9465. // #3713
  9466. D=M
  9467. // #3714
  9468. @0
  9469. // #3715
  9470. D=D+A
  9471. // #3716
  9472. @R13
  9473. // #3717
  9474. M=D
  9475. //^^ pop_stack_to_d
  9476. // #3718
  9477. @SP
  9478. // #3719
  9479. M=M-1
  9480. // #3720
  9481. A=M
  9482. // #3721
  9483. D=M
  9484. //vv pop_stack_to_d
  9485. // #3722
  9486. @R13
  9487. // #3723
  9488. A=M
  9489. // #3724
  9490. M=D
  9491. // #3725
  9492. @R13
  9493. // #3726
  9494. M=0
  9495. //vv pop_to_ram(THAT, 0)
  9496. //
  9497. //// push local 0
  9498. //^^ push_from_ram(LCL, 0)
  9499. // #3727
  9500. @LCL
  9501. // #3728
  9502. D=M
  9503. // #3729
  9504. @0
  9505. // #3730
  9506. A=D+A
  9507. // #3731
  9508. D=M
  9509. //^^ push_d_to_stack
  9510. // #3732
  9511. @SP
  9512. // #3733
  9513. A=M
  9514. // #3734
  9515. M=D
  9516. // #3735
  9517. @SP
  9518. // #3736
  9519. M=M+1
  9520. //vv push_d_to_stack
  9521. //vv push_from_ram(LCL, 0)
  9522. //
  9523. //// push constant 1
  9524. //^^ push_constant(1)
  9525. // #3737
  9526. @1
  9527. // #3738
  9528. D=A
  9529. //^^ push_d_to_stack
  9530. // #3739
  9531. @SP
  9532. // #3740
  9533. A=M
  9534. // #3741
  9535. M=D
  9536. // #3742
  9537. @SP
  9538. // #3743
  9539. M=M+1
  9540. //vv push_d_to_stack
  9541. //vv push_constant(1)
  9542. //
  9543. //// add
  9544. //^^ arith_binary_op(+)
  9545. //^^ pop_stack_to_d
  9546. // #3744
  9547. @SP
  9548. // #3745
  9549. M=M-1
  9550. // #3746
  9551. A=M
  9552. // #3747
  9553. D=M
  9554. //vv pop_stack_to_d
  9555. //^^ arith_d_with_stack_top(D+M)
  9556. // #3748
  9557. @R13
  9558. // #3749
  9559. M=D
  9560. //^^ pop_stack_to_d
  9561. // #3750
  9562. @SP
  9563. // #3751
  9564. M=M-1
  9565. // #3752
  9566. A=M
  9567. // #3753
  9568. D=M
  9569. //vv pop_stack_to_d
  9570. // #3754
  9571. @R13
  9572. // #3755
  9573. D=D+M
  9574. // #3756
  9575. @R13
  9576. // #3757
  9577. M=0
  9578. //vv arith_d_with_stack_top(D+M)
  9579. //^^ push_d_to_stack
  9580. // #3758
  9581. @SP
  9582. // #3759
  9583. A=M
  9584. // #3760
  9585. M=D
  9586. // #3761
  9587. @SP
  9588. // #3762
  9589. M=M+1
  9590. //vv push_d_to_stack
  9591. //vv arith_binary_op(+)
  9592. //
  9593. //// push static 1
  9594. //^^ push_from_loc(Math.vm.1)
  9595. // #3763
  9596. @Math.vm.1
  9597. // #3764
  9598. D=M
  9599. //^^ push_d_to_stack
  9600. // #3765
  9601. @SP
  9602. // #3766
  9603. A=M
  9604. // #3767
  9605. M=D
  9606. // #3768
  9607. @SP
  9608. // #3769
  9609. M=M+1
  9610. //vv push_d_to_stack
  9611. //vv push_from_loc(Math.vm.1)
  9612. //
  9613. //// add
  9614. //^^ arith_binary_op(+)
  9615. //^^ pop_stack_to_d
  9616. // #3770
  9617. @SP
  9618. // #3771
  9619. M=M-1
  9620. // #3772
  9621. A=M
  9622. // #3773
  9623. D=M
  9624. //vv pop_stack_to_d
  9625. //^^ arith_d_with_stack_top(D+M)
  9626. // #3774
  9627. @R13
  9628. // #3775
  9629. M=D
  9630. //^^ pop_stack_to_d
  9631. // #3776
  9632. @SP
  9633. // #3777
  9634. M=M-1
  9635. // #3778
  9636. A=M
  9637. // #3779
  9638. D=M
  9639. //vv pop_stack_to_d
  9640. // #3780
  9641. @R13
  9642. // #3781
  9643. D=D+M
  9644. // #3782
  9645. @R13
  9646. // #3783
  9647. M=0
  9648. //vv arith_d_with_stack_top(D+M)
  9649. //^^ push_d_to_stack
  9650. // #3784
  9651. @SP
  9652. // #3785
  9653. A=M
  9654. // #3786
  9655. M=D
  9656. // #3787
  9657. @SP
  9658. // #3788
  9659. M=M+1
  9660. //vv push_d_to_stack
  9661. //vv arith_binary_op(+)
  9662. //
  9663. //// pop pointer 1
  9664. //^^ pop_to_loc{4)
  9665. //^^ pop_stack_to_d
  9666. // #3789
  9667. @SP
  9668. // #3790
  9669. M=M-1
  9670. // #3791
  9671. A=M
  9672. // #3792
  9673. D=M
  9674. //vv pop_stack_to_d
  9675. // #3793
  9676. @4
  9677. // #3794
  9678. M=D
  9679. //vv pop_to_loc{4)
  9680. //
  9681. //// push that 0
  9682. //^^ push_from_ram(THAT, 0)
  9683. // #3795
  9684. @THAT
  9685. // #3796
  9686. D=M
  9687. // #3797
  9688. @0
  9689. // #3798
  9690. A=D+A
  9691. // #3799
  9692. D=M
  9693. //^^ push_d_to_stack
  9694. // #3800
  9695. @SP
  9696. // #3801
  9697. A=M
  9698. // #3802
  9699. M=D
  9700. // #3803
  9701. @SP
  9702. // #3804
  9703. M=M+1
  9704. //vv push_d_to_stack
  9705. //vv push_from_ram(THAT, 0)
  9706. //
  9707. //// push argument 0
  9708. //^^ push_from_ram(ARG, 0)
  9709. // #3805
  9710. @ARG
  9711. // #3806
  9712. D=M
  9713. // #3807
  9714. @0
  9715. // #3808
  9716. A=D+A
  9717. // #3809
  9718. D=M
  9719. //^^ push_d_to_stack
  9720. // #3810
  9721. @SP
  9722. // #3811
  9723. A=M
  9724. // #3812
  9725. M=D
  9726. // #3813
  9727. @SP
  9728. // #3814
  9729. M=M+1
  9730. //vv push_d_to_stack
  9731. //vv push_from_ram(ARG, 0)
  9732. //
  9733. //// gt
  9734. //^^ arith_cmp_op(JGT)
  9735. //^^ pop_stack_to_d
  9736. // #3815
  9737. @SP
  9738. // #3816
  9739. M=M-1
  9740. // #3817
  9741. A=M
  9742. // #3818
  9743. D=M
  9744. //vv pop_stack_to_d
  9745. //^^ arith_d_with_stack_top(D-M)
  9746. // #3819
  9747. @R13
  9748. // #3820
  9749. M=D
  9750. //^^ pop_stack_to_d
  9751. // #3821
  9752. @SP
  9753. // #3822
  9754. M=M-1
  9755. // #3823
  9756. A=M
  9757. // #3824
  9758. D=M
  9759. //vv pop_stack_to_d
  9760. // #3825
  9761. @R13
  9762. // #3826
  9763. D=D-M
  9764. // #3827
  9765. @R13
  9766. // #3828
  9767. M=0
  9768. //vv arith_d_with_stack_top(D-M)
  9769. // #3829
  9770. @PUT_TRUE_51
  9771. // #3830
  9772. D;JGT
  9773. // #3831
  9774. @R13
  9775. // #3832
  9776. M=0
  9777. // #3833
  9778. @CONT_51
  9779. // #3834
  9780. 0;JMP
  9781. (PUT_TRUE_51)
  9782. // #3835
  9783. @R13
  9784. // #3836
  9785. M=-1
  9786. (CONT_51)
  9787. // #3837
  9788. @R13
  9789. // #3838
  9790. D=M
  9791. // #3839
  9792. @R13
  9793. // #3840
  9794. M=0
  9795. //^^ push_d_to_stack
  9796. // #3841
  9797. @SP
  9798. // #3842
  9799. A=M
  9800. // #3843
  9801. M=D
  9802. // #3844
  9803. @SP
  9804. // #3845
  9805. M=M+1
  9806. //vv push_d_to_stack
  9807. //vv arith_cmp_op(JGT)
  9808. //
  9809. //// pop local 3
  9810. //^^ pop_to_ram(LCL, 3)
  9811. // #3846
  9812. @LCL
  9813. // #3847
  9814. D=M
  9815. // #3848
  9816. @3
  9817. // #3849
  9818. D=D+A
  9819. // #3850
  9820. @R13
  9821. // #3851
  9822. M=D
  9823. //^^ pop_stack_to_d
  9824. // #3852
  9825. @SP
  9826. // #3853
  9827. M=M-1
  9828. // #3854
  9829. A=M
  9830. // #3855
  9831. D=M
  9832. //vv pop_stack_to_d
  9833. // #3856
  9834. @R13
  9835. // #3857
  9836. A=M
  9837. // #3858
  9838. M=D
  9839. // #3859
  9840. @R13
  9841. // #3860
  9842. M=0
  9843. //vv pop_to_ram(LCL, 3)
  9844. //
  9845. //// push local 3
  9846. //^^ push_from_ram(LCL, 3)
  9847. // #3861
  9848. @LCL
  9849. // #3862
  9850. D=M
  9851. // #3863
  9852. @3
  9853. // #3864
  9854. A=D+A
  9855. // #3865
  9856. D=M
  9857. //^^ push_d_to_stack
  9858. // #3866
  9859. @SP
  9860. // #3867
  9861. A=M
  9862. // #3868
  9863. M=D
  9864. // #3869
  9865. @SP
  9866. // #3870
  9867. M=M+1
  9868. //vv push_d_to_stack
  9869. //vv push_from_ram(LCL, 3)
  9870. //
  9871. //// not
  9872. //^^ arith_unary_op(!)
  9873. //^^ pop_stack_to_d
  9874. // #3871
  9875. @SP
  9876. // #3872
  9877. M=M-1
  9878. // #3873
  9879. A=M
  9880. // #3874
  9881. D=M
  9882. //vv pop_stack_to_d
  9883. // #3875
  9884. D=!D
  9885. //^^ push_d_to_stack
  9886. // #3876
  9887. @SP
  9888. // #3877
  9889. A=M
  9890. // #3878
  9891. M=D
  9892. // #3879
  9893. @SP
  9894. // #3880
  9895. M=M+1
  9896. //vv push_d_to_stack
  9897. //vv arith_unary_op(!)
  9898. //
  9899. //// if-goto IF_TRUE2
  9900. //^^ pop_stack_to_d
  9901. // #3881
  9902. @SP
  9903. // #3882
  9904. M=M-1
  9905. // #3883
  9906. A=M
  9907. // #3884
  9908. D=M
  9909. //vv pop_stack_to_d
  9910. // #3885
  9911. @Math.divide$IF_TRUE2
  9912. // #3886
  9913. D;JNE
  9914. //
  9915. //// goto IF_FALSE2
  9916. // #3887
  9917. @Math.divide$IF_FALSE2
  9918. // #3888
  9919. 0;JMP
  9920. //
  9921. //// label IF_TRUE2
  9922. (Math.divide$IF_TRUE2)
  9923. //
  9924. //// push local 0
  9925. //^^ push_from_ram(LCL, 0)
  9926. // #3889
  9927. @LCL
  9928. // #3890
  9929. D=M
  9930. // #3891
  9931. @0
  9932. // #3892
  9933. A=D+A
  9934. // #3893
  9935. D=M
  9936. //^^ push_d_to_stack
  9937. // #3894
  9938. @SP
  9939. // #3895
  9940. A=M
  9941. // #3896
  9942. M=D
  9943. // #3897
  9944. @SP
  9945. // #3898
  9946. M=M+1
  9947. //vv push_d_to_stack
  9948. //vv push_from_ram(LCL, 0)
  9949. //
  9950. //// push constant 1
  9951. //^^ push_constant(1)
  9952. // #3899
  9953. @1
  9954. // #3900
  9955. D=A
  9956. //^^ push_d_to_stack
  9957. // #3901
  9958. @SP
  9959. // #3902
  9960. A=M
  9961. // #3903
  9962. M=D
  9963. // #3904
  9964. @SP
  9965. // #3905
  9966. M=M+1
  9967. //vv push_d_to_stack
  9968. //vv push_constant(1)
  9969. //
  9970. //// add
  9971. //^^ arith_binary_op(+)
  9972. //^^ pop_stack_to_d
  9973. // #3906
  9974. @SP
  9975. // #3907
  9976. M=M-1
  9977. // #3908
  9978. A=M
  9979. // #3909
  9980. D=M
  9981. //vv pop_stack_to_d
  9982. //^^ arith_d_with_stack_top(D+M)
  9983. // #3910
  9984. @R13
  9985. // #3911
  9986. M=D
  9987. //^^ pop_stack_to_d
  9988. // #3912
  9989. @SP
  9990. // #3913
  9991. M=M-1
  9992. // #3914
  9993. A=M
  9994. // #3915
  9995. D=M
  9996. //vv pop_stack_to_d
  9997. // #3916
  9998. @R13
  9999. // #3917
  10000. D=D+M
  10001. // #3918
  10002. @R13
  10003. // #3919
  10004. M=0
  10005. //vv arith_d_with_stack_top(D+M)
  10006. //^^ push_d_to_stack
  10007. // #3920
  10008. @SP
  10009. // #3921
  10010. A=M
  10011. // #3922
  10012. M=D
  10013. // #3923
  10014. @SP
  10015. // #3924
  10016. M=M+1
  10017. //vv push_d_to_stack
  10018. //vv arith_binary_op(+)
  10019. //
  10020. //// pop local 0
  10021. //^^ pop_to_ram(LCL, 0)
  10022. // #3925
  10023. @LCL
  10024. // #3926
  10025. D=M
  10026. // #3927
  10027. @0
  10028. // #3928
  10029. D=D+A
  10030. // #3929
  10031. @R13
  10032. // #3930
  10033. M=D
  10034. //^^ pop_stack_to_d
  10035. // #3931
  10036. @SP
  10037. // #3932
  10038. M=M-1
  10039. // #3933
  10040. A=M
  10041. // #3934
  10042. D=M
  10043. //vv pop_stack_to_d
  10044. // #3935
  10045. @R13
  10046. // #3936
  10047. A=M
  10048. // #3937
  10049. M=D
  10050. // #3938
  10051. @R13
  10052. // #3939
  10053. M=0
  10054. //vv pop_to_ram(LCL, 0)
  10055. //
  10056. //// label IF_FALSE2
  10057. (Math.divide$IF_FALSE2)
  10058. //
  10059. //// label IF_FALSE1
  10060. (Math.divide$IF_FALSE1)
  10061. //
  10062. //// goto WHILE_EXP0
  10063. // #3940
  10064. @Math.divide$WHILE_EXP0
  10065. // #3941
  10066. 0;JMP
  10067. //
  10068. //// label WHILE_END0
  10069. (Math.divide$WHILE_END0)
  10070. //
  10071. //// label WHILE_EXP1
  10072. (Math.divide$WHILE_EXP1)
  10073. //
  10074. //// push local 0
  10075. //^^ push_from_ram(LCL, 0)
  10076. // #3942
  10077. @LCL
  10078. // #3943
  10079. D=M
  10080. // #3944
  10081. @0
  10082. // #3945
  10083. A=D+A
  10084. // #3946
  10085. D=M
  10086. //^^ push_d_to_stack
  10087. // #3947
  10088. @SP
  10089. // #3948
  10090. A=M
  10091. // #3949
  10092. M=D
  10093. // #3950
  10094. @SP
  10095. // #3951
  10096. M=M+1
  10097. //vv push_d_to_stack
  10098. //vv push_from_ram(LCL, 0)
  10099. //
  10100. //// push constant 1
  10101. //^^ push_constant(1)
  10102. // #3952
  10103. @1
  10104. // #3953
  10105. D=A
  10106. //^^ push_d_to_stack
  10107. // #3954
  10108. @SP
  10109. // #3955
  10110. A=M
  10111. // #3956
  10112. M=D
  10113. // #3957
  10114. @SP
  10115. // #3958
  10116. M=M+1
  10117. //vv push_d_to_stack
  10118. //vv push_constant(1)
  10119. //
  10120. //// neg
  10121. //^^ arith_unary_op(-)
  10122. //^^ pop_stack_to_d
  10123. // #3959
  10124. @SP
  10125. // #3960
  10126. M=M-1
  10127. // #3961
  10128. A=M
  10129. // #3962
  10130. D=M
  10131. //vv pop_stack_to_d
  10132. // #3963
  10133. D=-D
  10134. //^^ push_d_to_stack
  10135. // #3964
  10136. @SP
  10137. // #3965
  10138. A=M
  10139. // #3966
  10140. M=D
  10141. // #3967
  10142. @SP
  10143. // #3968
  10144. M=M+1
  10145. //vv push_d_to_stack
  10146. //vv arith_unary_op(-)
  10147. //
  10148. //// gt
  10149. //^^ arith_cmp_op(JGT)
  10150. //^^ pop_stack_to_d
  10151. // #3969
  10152. @SP
  10153. // #3970
  10154. M=M-1
  10155. // #3971
  10156. A=M
  10157. // #3972
  10158. D=M
  10159. //vv pop_stack_to_d
  10160. //^^ arith_d_with_stack_top(D-M)
  10161. // #3973
  10162. @R13
  10163. // #3974
  10164. M=D
  10165. //^^ pop_stack_to_d
  10166. // #3975
  10167. @SP
  10168. // #3976
  10169. M=M-1
  10170. // #3977
  10171. A=M
  10172. // #3978
  10173. D=M
  10174. //vv pop_stack_to_d
  10175. // #3979
  10176. @R13
  10177. // #3980
  10178. D=D-M
  10179. // #3981
  10180. @R13
  10181. // #3982
  10182. M=0
  10183. //vv arith_d_with_stack_top(D-M)
  10184. // #3983
  10185. @PUT_TRUE_52
  10186. // #3984
  10187. D;JGT
  10188. // #3985
  10189. @R13
  10190. // #3986
  10191. M=0
  10192. // #3987
  10193. @CONT_52
  10194. // #3988
  10195. 0;JMP
  10196. (PUT_TRUE_52)
  10197. // #3989
  10198. @R13
  10199. // #3990
  10200. M=-1
  10201. (CONT_52)
  10202. // #3991
  10203. @R13
  10204. // #3992
  10205. D=M
  10206. // #3993
  10207. @R13
  10208. // #3994
  10209. M=0
  10210. //^^ push_d_to_stack
  10211. // #3995
  10212. @SP
  10213. // #3996
  10214. A=M
  10215. // #3997
  10216. M=D
  10217. // #3998
  10218. @SP
  10219. // #3999
  10220. M=M+1
  10221. //vv push_d_to_stack
  10222. //vv arith_cmp_op(JGT)
  10223. //
  10224. //// not
  10225. //^^ arith_unary_op(!)
  10226. //^^ pop_stack_to_d
  10227. // #4000
  10228. @SP
  10229. // #4001
  10230. M=M-1
  10231. // #4002
  10232. A=M
  10233. // #4003
  10234. D=M
  10235. //vv pop_stack_to_d
  10236. // #4004
  10237. D=!D
  10238. //^^ push_d_to_stack
  10239. // #4005
  10240. @SP
  10241. // #4006
  10242. A=M
  10243. // #4007
  10244. M=D
  10245. // #4008
  10246. @SP
  10247. // #4009
  10248. M=M+1
  10249. //vv push_d_to_stack
  10250. //vv arith_unary_op(!)
  10251. //
  10252. //// if-goto WHILE_END1
  10253. //^^ pop_stack_to_d
  10254. // #4010
  10255. @SP
  10256. // #4011
  10257. M=M-1
  10258. // #4012
  10259. A=M
  10260. // #4013
  10261. D=M
  10262. //vv pop_stack_to_d
  10263. // #4014
  10264. @Math.divide$WHILE_END1
  10265. // #4015
  10266. D;JNE
  10267. //
  10268. //// push local 0
  10269. //^^ push_from_ram(LCL, 0)
  10270. // #4016
  10271. @LCL
  10272. // #4017
  10273. D=M
  10274. // #4018
  10275. @0
  10276. // #4019
  10277. A=D+A
  10278. // #4020
  10279. D=M
  10280. //^^ push_d_to_stack
  10281. // #4021
  10282. @SP
  10283. // #4022
  10284. A=M
  10285. // #4023
  10286. M=D
  10287. // #4024
  10288. @SP
  10289. // #4025
  10290. M=M+1
  10291. //vv push_d_to_stack
  10292. //vv push_from_ram(LCL, 0)
  10293. //
  10294. //// push static 1
  10295. //^^ push_from_loc(Math.vm.1)
  10296. // #4026
  10297. @Math.vm.1
  10298. // #4027
  10299. D=M
  10300. //^^ push_d_to_stack
  10301. // #4028
  10302. @SP
  10303. // #4029
  10304. A=M
  10305. // #4030
  10306. M=D
  10307. // #4031
  10308. @SP
  10309. // #4032
  10310. M=M+1
  10311. //vv push_d_to_stack
  10312. //vv push_from_loc(Math.vm.1)
  10313. //
  10314. //// add
  10315. //^^ arith_binary_op(+)
  10316. //^^ pop_stack_to_d
  10317. // #4033
  10318. @SP
  10319. // #4034
  10320. M=M-1
  10321. // #4035
  10322. A=M
  10323. // #4036
  10324. D=M
  10325. //vv pop_stack_to_d
  10326. //^^ arith_d_with_stack_top(D+M)
  10327. // #4037
  10328. @R13
  10329. // #4038
  10330. M=D
  10331. //^^ pop_stack_to_d
  10332. // #4039
  10333. @SP
  10334. // #4040
  10335. M=M-1
  10336. // #4041
  10337. A=M
  10338. // #4042
  10339. D=M
  10340. //vv pop_stack_to_d
  10341. // #4043
  10342. @R13
  10343. // #4044
  10344. D=D+M
  10345. // #4045
  10346. @R13
  10347. // #4046
  10348. M=0
  10349. //vv arith_d_with_stack_top(D+M)
  10350. //^^ push_d_to_stack
  10351. // #4047
  10352. @SP
  10353. // #4048
  10354. A=M
  10355. // #4049
  10356. M=D
  10357. // #4050
  10358. @SP
  10359. // #4051
  10360. M=M+1
  10361. //vv push_d_to_stack
  10362. //vv arith_binary_op(+)
  10363. //
  10364. //// pop pointer 1
  10365. //^^ pop_to_loc{4)
  10366. //^^ pop_stack_to_d
  10367. // #4052
  10368. @SP
  10369. // #4053
  10370. M=M-1
  10371. // #4054
  10372. A=M
  10373. // #4055
  10374. D=M
  10375. //vv pop_stack_to_d
  10376. // #4056
  10377. @4
  10378. // #4057
  10379. M=D
  10380. //vv pop_to_loc{4)
  10381. //
  10382. //// push that 0
  10383. //^^ push_from_ram(THAT, 0)
  10384. // #4058
  10385. @THAT
  10386. // #4059
  10387. D=M
  10388. // #4060
  10389. @0
  10390. // #4061
  10391. A=D+A
  10392. // #4062
  10393. D=M
  10394. //^^ push_d_to_stack
  10395. // #4063
  10396. @SP
  10397. // #4064
  10398. A=M
  10399. // #4065
  10400. M=D
  10401. // #4066
  10402. @SP
  10403. // #4067
  10404. M=M+1
  10405. //vv push_d_to_stack
  10406. //vv push_from_ram(THAT, 0)
  10407. //
  10408. //// push argument 0
  10409. //^^ push_from_ram(ARG, 0)
  10410. // #4068
  10411. @ARG
  10412. // #4069
  10413. D=M
  10414. // #4070
  10415. @0
  10416. // #4071
  10417. A=D+A
  10418. // #4072
  10419. D=M
  10420. //^^ push_d_to_stack
  10421. // #4073
  10422. @SP
  10423. // #4074
  10424. A=M
  10425. // #4075
  10426. M=D
  10427. // #4076
  10428. @SP
  10429. // #4077
  10430. M=M+1
  10431. //vv push_d_to_stack
  10432. //vv push_from_ram(ARG, 0)
  10433. //
  10434. //// gt
  10435. //^^ arith_cmp_op(JGT)
  10436. //^^ pop_stack_to_d
  10437. // #4078
  10438. @SP
  10439. // #4079
  10440. M=M-1
  10441. // #4080
  10442. A=M
  10443. // #4081
  10444. D=M
  10445. //vv pop_stack_to_d
  10446. //^^ arith_d_with_stack_top(D-M)
  10447. // #4082
  10448. @R13
  10449. // #4083
  10450. M=D
  10451. //^^ pop_stack_to_d
  10452. // #4084
  10453. @SP
  10454. // #4085
  10455. M=M-1
  10456. // #4086
  10457. A=M
  10458. // #4087
  10459. D=M
  10460. //vv pop_stack_to_d
  10461. // #4088
  10462. @R13
  10463. // #4089
  10464. D=D-M
  10465. // #4090
  10466. @R13
  10467. // #4091
  10468. M=0
  10469. //vv arith_d_with_stack_top(D-M)
  10470. // #4092
  10471. @PUT_TRUE_53
  10472. // #4093
  10473. D;JGT
  10474. // #4094
  10475. @R13
  10476. // #4095
  10477. M=0
  10478. // #4096
  10479. @CONT_53
  10480. // #4097
  10481. 0;JMP
  10482. (PUT_TRUE_53)
  10483. // #4098
  10484. @R13
  10485. // #4099
  10486. M=-1
  10487. (CONT_53)
  10488. // #4100
  10489. @R13
  10490. // #4101
  10491. D=M
  10492. // #4102
  10493. @R13
  10494. // #4103
  10495. M=0
  10496. //^^ push_d_to_stack
  10497. // #4104
  10498. @SP
  10499. // #4105
  10500. A=M
  10501. // #4106
  10502. M=D
  10503. // #4107
  10504. @SP
  10505. // #4108
  10506. M=M+1
  10507. //vv push_d_to_stack
  10508. //vv arith_cmp_op(JGT)
  10509. //
  10510. //// not
  10511. //^^ arith_unary_op(!)
  10512. //^^ pop_stack_to_d
  10513. // #4109
  10514. @SP
  10515. // #4110
  10516. M=M-1
  10517. // #4111
  10518. A=M
  10519. // #4112
  10520. D=M
  10521. //vv pop_stack_to_d
  10522. // #4113
  10523. D=!D
  10524. //^^ push_d_to_stack
  10525. // #4114
  10526. @SP
  10527. // #4115
  10528. A=M
  10529. // #4116
  10530. M=D
  10531. // #4117
  10532. @SP
  10533. // #4118
  10534. M=M+1
  10535. //vv push_d_to_stack
  10536. //vv arith_unary_op(!)
  10537. //
  10538. //// if-goto IF_TRUE3
  10539. //^^ pop_stack_to_d
  10540. // #4119
  10541. @SP
  10542. // #4120
  10543. M=M-1
  10544. // #4121
  10545. A=M
  10546. // #4122
  10547. D=M
  10548. //vv pop_stack_to_d
  10549. // #4123
  10550. @Math.divide$IF_TRUE3
  10551. // #4124
  10552. D;JNE
  10553. //
  10554. //// goto IF_FALSE3
  10555. // #4125
  10556. @Math.divide$IF_FALSE3
  10557. // #4126
  10558. 0;JMP
  10559. //
  10560. //// label IF_TRUE3
  10561. (Math.divide$IF_TRUE3)
  10562. //
  10563. //// push local 1
  10564. //^^ push_from_ram(LCL, 1)
  10565. // #4127
  10566. @LCL
  10567. // #4128
  10568. D=M
  10569. // #4129
  10570. @1
  10571. // #4130
  10572. A=D+A
  10573. // #4131
  10574. D=M
  10575. //^^ push_d_to_stack
  10576. // #4132
  10577. @SP
  10578. // #4133
  10579. A=M
  10580. // #4134
  10581. M=D
  10582. // #4135
  10583. @SP
  10584. // #4136
  10585. M=M+1
  10586. //vv push_d_to_stack
  10587. //vv push_from_ram(LCL, 1)
  10588. //
  10589. //// push local 0
  10590. //^^ push_from_ram(LCL, 0)
  10591. // #4137
  10592. @LCL
  10593. // #4138
  10594. D=M
  10595. // #4139
  10596. @0
  10597. // #4140
  10598. A=D+A
  10599. // #4141
  10600. D=M
  10601. //^^ push_d_to_stack
  10602. // #4142
  10603. @SP
  10604. // #4143
  10605. A=M
  10606. // #4144
  10607. M=D
  10608. // #4145
  10609. @SP
  10610. // #4146
  10611. M=M+1
  10612. //vv push_d_to_stack
  10613. //vv push_from_ram(LCL, 0)
  10614. //
  10615. //// push static 0
  10616. //^^ push_from_loc(Math.vm.0)
  10617. // #4147
  10618. @Math.vm.0
  10619. // #4148
  10620. D=M
  10621. //^^ push_d_to_stack
  10622. // #4149
  10623. @SP
  10624. // #4150
  10625. A=M
  10626. // #4151
  10627. M=D
  10628. // #4152
  10629. @SP
  10630. // #4153
  10631. M=M+1
  10632. //vv push_d_to_stack
  10633. //vv push_from_loc(Math.vm.0)
  10634. //
  10635. //// add
  10636. //^^ arith_binary_op(+)
  10637. //^^ pop_stack_to_d
  10638. // #4154
  10639. @SP
  10640. // #4155
  10641. M=M-1
  10642. // #4156
  10643. A=M
  10644. // #4157
  10645. D=M
  10646. //vv pop_stack_to_d
  10647. //^^ arith_d_with_stack_top(D+M)
  10648. // #4158
  10649. @R13
  10650. // #4159
  10651. M=D
  10652. //^^ pop_stack_to_d
  10653. // #4160
  10654. @SP
  10655. // #4161
  10656. M=M-1
  10657. // #4162
  10658. A=M
  10659. // #4163
  10660. D=M
  10661. //vv pop_stack_to_d
  10662. // #4164
  10663. @R13
  10664. // #4165
  10665. D=D+M
  10666. // #4166
  10667. @R13
  10668. // #4167
  10669. M=0
  10670. //vv arith_d_with_stack_top(D+M)
  10671. //^^ push_d_to_stack
  10672. // #4168
  10673. @SP
  10674. // #4169
  10675. A=M
  10676. // #4170
  10677. M=D
  10678. // #4171
  10679. @SP
  10680. // #4172
  10681. M=M+1
  10682. //vv push_d_to_stack
  10683. //vv arith_binary_op(+)
  10684. //
  10685. //// pop pointer 1
  10686. //^^ pop_to_loc{4)
  10687. //^^ pop_stack_to_d
  10688. // #4173
  10689. @SP
  10690. // #4174
  10691. M=M-1
  10692. // #4175
  10693. A=M
  10694. // #4176
  10695. D=M
  10696. //vv pop_stack_to_d
  10697. // #4177
  10698. @4
  10699. // #4178
  10700. M=D
  10701. //vv pop_to_loc{4)
  10702. //
  10703. //// push that 0
  10704. //^^ push_from_ram(THAT, 0)
  10705. // #4179
  10706. @THAT
  10707. // #4180
  10708. D=M
  10709. // #4181
  10710. @0
  10711. // #4182
  10712. A=D+A
  10713. // #4183
  10714. D=M
  10715. //^^ push_d_to_stack
  10716. // #4184
  10717. @SP
  10718. // #4185
  10719. A=M
  10720. // #4186
  10721. M=D
  10722. // #4187
  10723. @SP
  10724. // #4188
  10725. M=M+1
  10726. //vv push_d_to_stack
  10727. //vv push_from_ram(THAT, 0)
  10728. //
  10729. //// add
  10730. //^^ arith_binary_op(+)
  10731. //^^ pop_stack_to_d
  10732. // #4189
  10733. @SP
  10734. // #4190
  10735. M=M-1
  10736. // #4191
  10737. A=M
  10738. // #4192
  10739. D=M
  10740. //vv pop_stack_to_d
  10741. //^^ arith_d_with_stack_top(D+M)
  10742. // #4193
  10743. @R13
  10744. // #4194
  10745. M=D
  10746. //^^ pop_stack_to_d
  10747. // #4195
  10748. @SP
  10749. // #4196
  10750. M=M-1
  10751. // #4197
  10752. A=M
  10753. // #4198
  10754. D=M
  10755. //vv pop_stack_to_d
  10756. // #4199
  10757. @R13
  10758. // #4200
  10759. D=D+M
  10760. // #4201
  10761. @R13
  10762. // #4202
  10763. M=0
  10764. //vv arith_d_with_stack_top(D+M)
  10765. //^^ push_d_to_stack
  10766. // #4203
  10767. @SP
  10768. // #4204
  10769. A=M
  10770. // #4205
  10771. M=D
  10772. // #4206
  10773. @SP
  10774. // #4207
  10775. M=M+1
  10776. //vv push_d_to_stack
  10777. //vv arith_binary_op(+)
  10778. //
  10779. //// pop local 1
  10780. //^^ pop_to_ram(LCL, 1)
  10781. // #4208
  10782. @LCL
  10783. // #4209
  10784. D=M
  10785. // #4210
  10786. @1
  10787. // #4211
  10788. D=D+A
  10789. // #4212
  10790. @R13
  10791. // #4213
  10792. M=D
  10793. //^^ pop_stack_to_d
  10794. // #4214
  10795. @SP
  10796. // #4215
  10797. M=M-1
  10798. // #4216
  10799. A=M
  10800. // #4217
  10801. D=M
  10802. //vv pop_stack_to_d
  10803. // #4218
  10804. @R13
  10805. // #4219
  10806. A=M
  10807. // #4220
  10808. M=D
  10809. // #4221
  10810. @R13
  10811. // #4222
  10812. M=0
  10813. //vv pop_to_ram(LCL, 1)
  10814. //
  10815. //// push argument 0
  10816. //^^ push_from_ram(ARG, 0)
  10817. // #4223
  10818. @ARG
  10819. // #4224
  10820. D=M
  10821. // #4225
  10822. @0
  10823. // #4226
  10824. A=D+A
  10825. // #4227
  10826. D=M
  10827. //^^ push_d_to_stack
  10828. // #4228
  10829. @SP
  10830. // #4229
  10831. A=M
  10832. // #4230
  10833. M=D
  10834. // #4231
  10835. @SP
  10836. // #4232
  10837. M=M+1
  10838. //vv push_d_to_stack
  10839. //vv push_from_ram(ARG, 0)
  10840. //
  10841. //// push local 0
  10842. //^^ push_from_ram(LCL, 0)
  10843. // #4233
  10844. @LCL
  10845. // #4234
  10846. D=M
  10847. // #4235
  10848. @0
  10849. // #4236
  10850. A=D+A
  10851. // #4237
  10852. D=M
  10853. //^^ push_d_to_stack
  10854. // #4238
  10855. @SP
  10856. // #4239
  10857. A=M
  10858. // #4240
  10859. M=D
  10860. // #4241
  10861. @SP
  10862. // #4242
  10863. M=M+1
  10864. //vv push_d_to_stack
  10865. //vv push_from_ram(LCL, 0)
  10866. //
  10867. //// push static 1
  10868. //^^ push_from_loc(Math.vm.1)
  10869. // #4243
  10870. @Math.vm.1
  10871. // #4244
  10872. D=M
  10873. //^^ push_d_to_stack
  10874. // #4245
  10875. @SP
  10876. // #4246
  10877. A=M
  10878. // #4247
  10879. M=D
  10880. // #4248
  10881. @SP
  10882. // #4249
  10883. M=M+1
  10884. //vv push_d_to_stack
  10885. //vv push_from_loc(Math.vm.1)
  10886. //
  10887. //// add
  10888. //^^ arith_binary_op(+)
  10889. //^^ pop_stack_to_d
  10890. // #4250
  10891. @SP
  10892. // #4251
  10893. M=M-1
  10894. // #4252
  10895. A=M
  10896. // #4253
  10897. D=M
  10898. //vv pop_stack_to_d
  10899. //^^ arith_d_with_stack_top(D+M)
  10900. // #4254
  10901. @R13
  10902. // #4255
  10903. M=D
  10904. //^^ pop_stack_to_d
  10905. // #4256
  10906. @SP
  10907. // #4257
  10908. M=M-1
  10909. // #4258
  10910. A=M
  10911. // #4259
  10912. D=M
  10913. //vv pop_stack_to_d
  10914. // #4260
  10915. @R13
  10916. // #4261
  10917. D=D+M
  10918. // #4262
  10919. @R13
  10920. // #4263
  10921. M=0
  10922. //vv arith_d_with_stack_top(D+M)
  10923. //^^ push_d_to_stack
  10924. // #4264
  10925. @SP
  10926. // #4265
  10927. A=M
  10928. // #4266
  10929. M=D
  10930. // #4267
  10931. @SP
  10932. // #4268
  10933. M=M+1
  10934. //vv push_d_to_stack
  10935. //vv arith_binary_op(+)
  10936. //
  10937. //// pop pointer 1
  10938. //^^ pop_to_loc{4)
  10939. //^^ pop_stack_to_d
  10940. // #4269
  10941. @SP
  10942. // #4270
  10943. M=M-1
  10944. // #4271
  10945. A=M
  10946. // #4272
  10947. D=M
  10948. //vv pop_stack_to_d
  10949. // #4273
  10950. @4
  10951. // #4274
  10952. M=D
  10953. //vv pop_to_loc{4)
  10954. //
  10955. //// push that 0
  10956. //^^ push_from_ram(THAT, 0)
  10957. // #4275
  10958. @THAT
  10959. // #4276
  10960. D=M
  10961. // #4277
  10962. @0
  10963. // #4278
  10964. A=D+A
  10965. // #4279
  10966. D=M
  10967. //^^ push_d_to_stack
  10968. // #4280
  10969. @SP
  10970. // #4281
  10971. A=M
  10972. // #4282
  10973. M=D
  10974. // #4283
  10975. @SP
  10976. // #4284
  10977. M=M+1
  10978. //vv push_d_to_stack
  10979. //vv push_from_ram(THAT, 0)
  10980. //
  10981. //// sub
  10982. //^^ arith_binary_op(-)
  10983. //^^ pop_stack_to_d
  10984. // #4285
  10985. @SP
  10986. // #4286
  10987. M=M-1
  10988. // #4287
  10989. A=M
  10990. // #4288
  10991. D=M
  10992. //vv pop_stack_to_d
  10993. //^^ arith_d_with_stack_top(D-M)
  10994. // #4289
  10995. @R13
  10996. // #4290
  10997. M=D
  10998. //^^ pop_stack_to_d
  10999. // #4291
  11000. @SP
  11001. // #4292
  11002. M=M-1
  11003. // #4293
  11004. A=M
  11005. // #4294
  11006. D=M
  11007. //vv pop_stack_to_d
  11008. // #4295
  11009. @R13
  11010. // #4296
  11011. D=D-M
  11012. // #4297
  11013. @R13
  11014. // #4298
  11015. M=0
  11016. //vv arith_d_with_stack_top(D-M)
  11017. //^^ push_d_to_stack
  11018. // #4299
  11019. @SP
  11020. // #4300
  11021. A=M
  11022. // #4301
  11023. M=D
  11024. // #4302
  11025. @SP
  11026. // #4303
  11027. M=M+1
  11028. //vv push_d_to_stack
  11029. //vv arith_binary_op(-)
  11030. //
  11031. //// pop argument 0
  11032. //^^ pop_to_ram(ARG, 0)
  11033. // #4304
  11034. @ARG
  11035. // #4305
  11036. D=M
  11037. // #4306
  11038. @0
  11039. // #4307
  11040. D=D+A
  11041. // #4308
  11042. @R13
  11043. // #4309
  11044. M=D
  11045. //^^ pop_stack_to_d
  11046. // #4310
  11047. @SP
  11048. // #4311
  11049. M=M-1
  11050. // #4312
  11051. A=M
  11052. // #4313
  11053. D=M
  11054. //vv pop_stack_to_d
  11055. // #4314
  11056. @R13
  11057. // #4315
  11058. A=M
  11059. // #4316
  11060. M=D
  11061. // #4317
  11062. @R13
  11063. // #4318
  11064. M=0
  11065. //vv pop_to_ram(ARG, 0)
  11066. //
  11067. //// label IF_FALSE3
  11068. (Math.divide$IF_FALSE3)
  11069. //
  11070. //// push local 0
  11071. //^^ push_from_ram(LCL, 0)
  11072. // #4319
  11073. @LCL
  11074. // #4320
  11075. D=M
  11076. // #4321
  11077. @0
  11078. // #4322
  11079. A=D+A
  11080. // #4323
  11081. D=M
  11082. //^^ push_d_to_stack
  11083. // #4324
  11084. @SP
  11085. // #4325
  11086. A=M
  11087. // #4326
  11088. M=D
  11089. // #4327
  11090. @SP
  11091. // #4328
  11092. M=M+1
  11093. //vv push_d_to_stack
  11094. //vv push_from_ram(LCL, 0)
  11095. //
  11096. //// push constant 1
  11097. //^^ push_constant(1)
  11098. // #4329
  11099. @1
  11100. // #4330
  11101. D=A
  11102. //^^ push_d_to_stack
  11103. // #4331
  11104. @SP
  11105. // #4332
  11106. A=M
  11107. // #4333
  11108. M=D
  11109. // #4334
  11110. @SP
  11111. // #4335
  11112. M=M+1
  11113. //vv push_d_to_stack
  11114. //vv push_constant(1)
  11115. //
  11116. //// sub
  11117. //^^ arith_binary_op(-)
  11118. //^^ pop_stack_to_d
  11119. // #4336
  11120. @SP
  11121. // #4337
  11122. M=M-1
  11123. // #4338
  11124. A=M
  11125. // #4339
  11126. D=M
  11127. //vv pop_stack_to_d
  11128. //^^ arith_d_with_stack_top(D-M)
  11129. // #4340
  11130. @R13
  11131. // #4341
  11132. M=D
  11133. //^^ pop_stack_to_d
  11134. // #4342
  11135. @SP
  11136. // #4343
  11137. M=M-1
  11138. // #4344
  11139. A=M
  11140. // #4345
  11141. D=M
  11142. //vv pop_stack_to_d
  11143. // #4346
  11144. @R13
  11145. // #4347
  11146. D=D-M
  11147. // #4348
  11148. @R13
  11149. // #4349
  11150. M=0
  11151. //vv arith_d_with_stack_top(D-M)
  11152. //^^ push_d_to_stack
  11153. // #4350
  11154. @SP
  11155. // #4351
  11156. A=M
  11157. // #4352
  11158. M=D
  11159. // #4353
  11160. @SP
  11161. // #4354
  11162. M=M+1
  11163. //vv push_d_to_stack
  11164. //vv arith_binary_op(-)
  11165. //
  11166. //// pop local 0
  11167. //^^ pop_to_ram(LCL, 0)
  11168. // #4355
  11169. @LCL
  11170. // #4356
  11171. D=M
  11172. // #4357
  11173. @0
  11174. // #4358
  11175. D=D+A
  11176. // #4359
  11177. @R13
  11178. // #4360
  11179. M=D
  11180. //^^ pop_stack_to_d
  11181. // #4361
  11182. @SP
  11183. // #4362
  11184. M=M-1
  11185. // #4363
  11186. A=M
  11187. // #4364
  11188. D=M
  11189. //vv pop_stack_to_d
  11190. // #4365
  11191. @R13
  11192. // #4366
  11193. A=M
  11194. // #4367
  11195. M=D
  11196. // #4368
  11197. @R13
  11198. // #4369
  11199. M=0
  11200. //vv pop_to_ram(LCL, 0)
  11201. //
  11202. //// goto WHILE_EXP1
  11203. // #4370
  11204. @Math.divide$WHILE_EXP1
  11205. // #4371
  11206. 0;JMP
  11207. //
  11208. //// label WHILE_END1
  11209. (Math.divide$WHILE_END1)
  11210. //
  11211. //// push local 2
  11212. //^^ push_from_ram(LCL, 2)
  11213. // #4372
  11214. @LCL
  11215. // #4373
  11216. D=M
  11217. // #4374
  11218. @2
  11219. // #4375
  11220. A=D+A
  11221. // #4376
  11222. D=M
  11223. //^^ push_d_to_stack
  11224. // #4377
  11225. @SP
  11226. // #4378
  11227. A=M
  11228. // #4379
  11229. M=D
  11230. // #4380
  11231. @SP
  11232. // #4381
  11233. M=M+1
  11234. //vv push_d_to_stack
  11235. //vv push_from_ram(LCL, 2)
  11236. //
  11237. //// if-goto IF_TRUE4
  11238. //^^ pop_stack_to_d
  11239. // #4382
  11240. @SP
  11241. // #4383
  11242. M=M-1
  11243. // #4384
  11244. A=M
  11245. // #4385
  11246. D=M
  11247. //vv pop_stack_to_d
  11248. // #4386
  11249. @Math.divide$IF_TRUE4
  11250. // #4387
  11251. D;JNE
  11252. //
  11253. //// goto IF_FALSE4
  11254. // #4388
  11255. @Math.divide$IF_FALSE4
  11256. // #4389
  11257. 0;JMP
  11258. //
  11259. //// label IF_TRUE4
  11260. (Math.divide$IF_TRUE4)
  11261. //
  11262. //// push local 1
  11263. //^^ push_from_ram(LCL, 1)
  11264. // #4390
  11265. @LCL
  11266. // #4391
  11267. D=M
  11268. // #4392
  11269. @1
  11270. // #4393
  11271. A=D+A
  11272. // #4394
  11273. D=M
  11274. //^^ push_d_to_stack
  11275. // #4395
  11276. @SP
  11277. // #4396
  11278. A=M
  11279. // #4397
  11280. M=D
  11281. // #4398
  11282. @SP
  11283. // #4399
  11284. M=M+1
  11285. //vv push_d_to_stack
  11286. //vv push_from_ram(LCL, 1)
  11287. //
  11288. //// neg
  11289. //^^ arith_unary_op(-)
  11290. //^^ pop_stack_to_d
  11291. // #4400
  11292. @SP
  11293. // #4401
  11294. M=M-1
  11295. // #4402
  11296. A=M
  11297. // #4403
  11298. D=M
  11299. //vv pop_stack_to_d
  11300. // #4404
  11301. D=-D
  11302. //^^ push_d_to_stack
  11303. // #4405
  11304. @SP
  11305. // #4406
  11306. A=M
  11307. // #4407
  11308. M=D
  11309. // #4408
  11310. @SP
  11311. // #4409
  11312. M=M+1
  11313. //vv push_d_to_stack
  11314. //vv arith_unary_op(-)
  11315. //
  11316. //// pop local 1
  11317. //^^ pop_to_ram(LCL, 1)
  11318. // #4410
  11319. @LCL
  11320. // #4411
  11321. D=M
  11322. // #4412
  11323. @1
  11324. // #4413
  11325. D=D+A
  11326. // #4414
  11327. @R13
  11328. // #4415
  11329. M=D
  11330. //^^ pop_stack_to_d
  11331. // #4416
  11332. @SP
  11333. // #4417
  11334. M=M-1
  11335. // #4418
  11336. A=M
  11337. // #4419
  11338. D=M
  11339. //vv pop_stack_to_d
  11340. // #4420
  11341. @R13
  11342. // #4421
  11343. A=M
  11344. // #4422
  11345. M=D
  11346. // #4423
  11347. @R13
  11348. // #4424
  11349. M=0
  11350. //vv pop_to_ram(LCL, 1)
  11351. //
  11352. //// label IF_FALSE4
  11353. (Math.divide$IF_FALSE4)
  11354. //
  11355. //// push local 1
  11356. //^^ push_from_ram(LCL, 1)
  11357. // #4425
  11358. @LCL
  11359. // #4426
  11360. D=M
  11361. // #4427
  11362. @1
  11363. // #4428
  11364. A=D+A
  11365. // #4429
  11366. D=M
  11367. //^^ push_d_to_stack
  11368. // #4430
  11369. @SP
  11370. // #4431
  11371. A=M
  11372. // #4432
  11373. M=D
  11374. // #4433
  11375. @SP
  11376. // #4434
  11377. M=M+1
  11378. //vv push_d_to_stack
  11379. //vv push_from_ram(LCL, 1)
  11380. //
  11381. //// return
  11382. // #4435
  11383. @LCL
  11384. // #4436
  11385. D=M
  11386. // #4437
  11387. @R14
  11388. // #4438
  11389. M=D //R14=LCL
  11390. // #4439
  11391. @5
  11392. // #4440
  11393. A=D-A
  11394. // #4441
  11395. D=M
  11396. // #4442
  11397. @R15
  11398. // #4443
  11399. M=D //R15=*(LCL-5)
  11400. //^^ pop_stack_to_d
  11401. // #4444
  11402. @SP
  11403. // #4445
  11404. M=M-1
  11405. // #4446
  11406. A=M
  11407. // #4447
  11408. D=M
  11409. //vv pop_stack_to_d
  11410. // #4448
  11411. @ARG
  11412. // #4449
  11413. A=M
  11414. // #4450
  11415. M=D //*ARG = pop()
  11416. // #4451
  11417. @ARG
  11418. // #4452
  11419. D=M
  11420. // #4453
  11421. @SP
  11422. // #4454
  11423. M=D+1 //SP=ARG+1
  11424. // #4455
  11425. @R14
  11426. // #4456
  11427. AM=M-1
  11428. // #4457
  11429. D=M
  11430. // #4458
  11431. @THAT
  11432. // #4459
  11433. M=D //THAT = *(--R14)
  11434. // #4460
  11435. @R14
  11436. // #4461
  11437. AM=M-1
  11438. // #4462
  11439. D=M
  11440. // #4463
  11441. @THIS
  11442. // #4464
  11443. M=D //THIS = *(--R14)
  11444. // #4465
  11445. @R14
  11446. // #4466
  11447. AM=M-1
  11448. // #4467
  11449. D=M
  11450. // #4468
  11451. @ARG
  11452. // #4469
  11453. M=D //ARG = *(--R14)
  11454. // #4470
  11455. @R14
  11456. // #4471
  11457. AM=M-1
  11458. // #4472
  11459. D=M
  11460. // #4473
  11461. @LCL
  11462. // #4474
  11463. M=D //LCL = *(--R14)
  11464. // #4475
  11465. @R15
  11466. // #4476
  11467. A=M
  11468. // #4477
  11469. 0;JMP //goto *R15
  11470. //
  11471. //// function Math.sqrt 4
  11472. (Math.sqrt)
  11473. // #4478
  11474. D=0
  11475. //^^ push_d_to_stack
  11476. // #4479
  11477. @SP
  11478. // #4480
  11479. A=M
  11480. // #4481
  11481. M=D
  11482. // #4482
  11483. @SP
  11484. // #4483
  11485. M=M+1
  11486. //vv push_d_to_stack
  11487. // #4484
  11488. D=0
  11489. //^^ push_d_to_stack
  11490. // #4485
  11491. @SP
  11492. // #4486
  11493. A=M
  11494. // #4487
  11495. M=D
  11496. // #4488
  11497. @SP
  11498. // #4489
  11499. M=M+1
  11500. //vv push_d_to_stack
  11501. // #4490
  11502. D=0
  11503. //^^ push_d_to_stack
  11504. // #4491
  11505. @SP
  11506. // #4492
  11507. A=M
  11508. // #4493
  11509. M=D
  11510. // #4494
  11511. @SP
  11512. // #4495
  11513. M=M+1
  11514. //vv push_d_to_stack
  11515. // #4496
  11516. D=0
  11517. //^^ push_d_to_stack
  11518. // #4497
  11519. @SP
  11520. // #4498
  11521. A=M
  11522. // #4499
  11523. M=D
  11524. // #4500
  11525. @SP
  11526. // #4501
  11527. M=M+1
  11528. //vv push_d_to_stack
  11529. //
  11530. //// push constant 0
  11531. //^^ push_constant(0)
  11532. // #4502
  11533. @0
  11534. // #4503
  11535. D=A
  11536. //^^ push_d_to_stack
  11537. // #4504
  11538. @SP
  11539. // #4505
  11540. A=M
  11541. // #4506
  11542. M=D
  11543. // #4507
  11544. @SP
  11545. // #4508
  11546. M=M+1
  11547. //vv push_d_to_stack
  11548. //vv push_constant(0)
  11549. //
  11550. //// pop static 0
  11551. //^^ pop_to_loc{Memory.vm.0)
  11552. //^^ pop_stack_to_d
  11553. // #4509
  11554. @SP
  11555. // #4510
  11556. M=M-1
  11557. // #4511
  11558. A=M
  11559. // #4512
  11560. D=M
  11561. //vv pop_stack_to_d
  11562. // #4513
  11563. @Memory.vm.0
  11564. // #4514
  11565. M=D
  11566. //vv pop_to_loc{Memory.vm.0)
  11567. //
  11568. //// push constant 2048
  11569. //^^ push_constant(2048)
  11570. // #4515
  11571. @2048
  11572. // #4516
  11573. D=A
  11574. //^^ push_d_to_stack
  11575. // #4517
  11576. @SP
  11577. // #4518
  11578. A=M
  11579. // #4519
  11580. M=D
  11581. // #4520
  11582. @SP
  11583. // #4521
  11584. M=M+1
  11585. //vv push_d_to_stack
  11586. //vv push_constant(2048)
  11587. //
  11588. //// push static 0
  11589. //^^ push_from_loc(Memory.vm.0)
  11590. // #4522
  11591. @Memory.vm.0
  11592. // #4523
  11593. D=M
  11594. //^^ push_d_to_stack
  11595. // #4524
  11596. @SP
  11597. // #4525
  11598. A=M
  11599. // #4526
  11600. M=D
  11601. // #4527
  11602. @SP
  11603. // #4528
  11604. M=M+1
  11605. //vv push_d_to_stack
  11606. //vv push_from_loc(Memory.vm.0)
  11607. //
  11608. //// add
  11609. //^^ arith_binary_op(+)
  11610. //^^ pop_stack_to_d
  11611. // #4529
  11612. @SP
  11613. // #4530
  11614. M=M-1
  11615. // #4531
  11616. A=M
  11617. // #4532
  11618. D=M
  11619. //vv pop_stack_to_d
  11620. //^^ arith_d_with_stack_top(D+M)
  11621. // #4533
  11622. @R13
  11623. // #4534
  11624. M=D
  11625. //^^ pop_stack_to_d
  11626. // #4535
  11627. @SP
  11628. // #4536
  11629. M=M-1
  11630. // #4537
  11631. A=M
  11632. // #4538
  11633. D=M
  11634. //vv pop_stack_to_d
  11635. // #4539
  11636. @R13
  11637. // #4540
  11638. D=D+M
  11639. // #4541
  11640. @R13
  11641. // #4542
  11642. M=0
  11643. //vv arith_d_with_stack_top(D+M)
  11644. //^^ push_d_to_stack
  11645. // #4543
  11646. @SP
  11647. // #4544
  11648. A=M
  11649. // #4545
  11650. M=D
  11651. // #4546
  11652. @SP
  11653. // #4547
  11654. M=M+1
  11655. //vv push_d_to_stack
  11656. //vv arith_binary_op(+)
  11657. //
  11658. //// push constant 14334
  11659. //^^ push_constant(14334)
  11660. // #4548
  11661. @14334
  11662. // #4549
  11663. D=A
  11664. //^^ push_d_to_stack
  11665. // #4550
  11666. @SP
  11667. // #4551
  11668. A=M
  11669. // #4552
  11670. M=D
  11671. // #4553
  11672. @SP
  11673. // #4554
  11674. M=M+1
  11675. //vv push_d_to_stack
  11676. //vv push_constant(14334)
  11677. //
  11678. //// pop temp 0
  11679. //^^ pop_to_loc{5)
  11680. //^^ pop_stack_to_d
  11681. // #4555
  11682. @SP
  11683. // #4556
  11684. M=M-1
  11685. // #4557
  11686. A=M
  11687. // #4558
  11688. D=M
  11689. //vv pop_stack_to_d
  11690. // #4559
  11691. @5
  11692. // #4560
  11693. M=D
  11694. //vv pop_to_loc{5)
  11695. //
  11696. //// pop pointer 1
  11697. //^^ pop_to_loc{4)
  11698. //^^ pop_stack_to_d
  11699. // #4561
  11700. @SP
  11701. // #4562
  11702. M=M-1
  11703. // #4563
  11704. A=M
  11705. // #4564
  11706. D=M
  11707. //vv pop_stack_to_d
  11708. // #4565
  11709. @4
  11710. // #4566
  11711. M=D
  11712. //vv pop_to_loc{4)
  11713. //
  11714. //// push temp 0
  11715. //^^ push_from_loc(5)
  11716. // #4567
  11717. @5
  11718. // #4568
  11719. D=M
  11720. //^^ push_d_to_stack
  11721. // #4569
  11722. @SP
  11723. // #4570
  11724. A=M
  11725. // #4571
  11726. M=D
  11727. // #4572
  11728. @SP
  11729. // #4573
  11730. M=M+1
  11731. //vv push_d_to_stack
  11732. //vv push_from_loc(5)
  11733. //
  11734. //// pop that 0
  11735. //^^ pop_to_ram(THAT, 0)
  11736. // #4574
  11737. @THAT
  11738. // #4575
  11739. D=M
  11740. // #4576
  11741. @0
  11742. // #4577
  11743. D=D+A
  11744. // #4578
  11745. @R13
  11746. // #4579
  11747. M=D
  11748. //^^ pop_stack_to_d
  11749. // #4580
  11750. @SP
  11751. // #4581
  11752. M=M-1
  11753. // #4582
  11754. A=M
  11755. // #4583
  11756. D=M
  11757. //vv pop_stack_to_d
  11758. // #4584
  11759. @R13
  11760. // #4585
  11761. A=M
  11762. // #4586
  11763. M=D
  11764. // #4587
  11765. @R13
  11766. // #4588
  11767. M=0
  11768. //vv pop_to_ram(THAT, 0)
  11769. //
  11770. //// push constant 2049
  11771. //^^ push_constant(2049)
  11772. // #4589
  11773. @2049
  11774. // #4590
  11775. D=A
  11776. //^^ push_d_to_stack
  11777. // #4591
  11778. @SP
  11779. // #4592
  11780. A=M
  11781. // #4593
  11782. M=D
  11783. // #4594
  11784. @SP
  11785. // #4595
  11786. M=M+1
  11787. //vv push_d_to_stack
  11788. //vv push_constant(2049)
  11789. //
  11790. //// push static 0
  11791. //^^ push_from_loc(Memory.vm.0)
  11792. // #4596
  11793. @Memory.vm.0
  11794. // #4597
  11795. D=M
  11796. //^^ push_d_to_stack
  11797. // #4598
  11798. @SP
  11799. // #4599
  11800. A=M
  11801. // #4600
  11802. M=D
  11803. // #4601
  11804. @SP
  11805. // #4602
  11806. M=M+1
  11807. //vv push_d_to_stack
  11808. //vv push_from_loc(Memory.vm.0)
  11809. //
  11810. //// add
  11811. //^^ arith_binary_op(+)
  11812. //^^ pop_stack_to_d
  11813. // #4603
  11814. @SP
  11815. // #4604
  11816. M=M-1
  11817. // #4605
  11818. A=M
  11819. // #4606
  11820. D=M
  11821. //vv pop_stack_to_d
  11822. //^^ arith_d_with_stack_top(D+M)
  11823. // #4607
  11824. @R13
  11825. // #4608
  11826. M=D
  11827. //^^ pop_stack_to_d
  11828. // #4609
  11829. @SP
  11830. // #4610
  11831. M=M-1
  11832. // #4611
  11833. A=M
  11834. // #4612
  11835. D=M
  11836. //vv pop_stack_to_d
  11837. // #4613
  11838. @R13
  11839. // #4614
  11840. D=D+M
  11841. // #4615
  11842. @R13
  11843. // #4616
  11844. M=0
  11845. //vv arith_d_with_stack_top(D+M)
  11846. //^^ push_d_to_stack
  11847. // #4617
  11848. @SP
  11849. // #4618
  11850. A=M
  11851. // #4619
  11852. M=D
  11853. // #4620
  11854. @SP
  11855. // #4621
  11856. M=M+1
  11857. //vv push_d_to_stack
  11858. //vv arith_binary_op(+)
  11859. //
  11860. //// push constant 2050
  11861. //^^ push_constant(2050)
  11862. // #4622
  11863. @2050
  11864. // #4623
  11865. D=A
  11866. //^^ push_d_to_stack
  11867. // #4624
  11868. @SP
  11869. // #4625
  11870. A=M
  11871. // #4626
  11872. M=D
  11873. // #4627
  11874. @SP
  11875. // #4628
  11876. M=M+1
  11877. //vv push_d_to_stack
  11878. //vv push_constant(2050)
  11879. //
  11880. //// pop temp 0
  11881. //^^ pop_to_loc{5)
  11882. //^^ pop_stack_to_d
  11883. // #4629
  11884. @SP
  11885. // #4630
  11886. M=M-1
  11887. // #4631
  11888. A=M
  11889. // #4632
  11890. D=M
  11891. //vv pop_stack_to_d
  11892. // #4633
  11893. @5
  11894. // #4634
  11895. M=D
  11896. //vv pop_to_loc{5)
  11897. //
  11898. //// pop pointer 1
  11899. //^^ pop_to_loc{4)
  11900. //^^ pop_stack_to_d
  11901. // #4635
  11902. @SP
  11903. // #4636
  11904. M=M-1
  11905. // #4637
  11906. A=M
  11907. // #4638
  11908. D=M
  11909. //vv pop_stack_to_d
  11910. // #4639
  11911. @4
  11912. // #4640
  11913. M=D
  11914. //vv pop_to_loc{4)
  11915. //
  11916. //// push temp 0
  11917. //^^ push_from_loc(5)
  11918. // #4641
  11919. @5
  11920. // #4642
  11921. D=M
  11922. //^^ push_d_to_stack
  11923. // #4643
  11924. @SP
  11925. // #4644
  11926. A=M
  11927. // #4645
  11928. M=D
  11929. // #4646
  11930. @SP
  11931. // #4647
  11932. M=M+1
  11933. //vv push_d_to_stack
  11934. //vv push_from_loc(5)
  11935. //
  11936. //// pop that 0
  11937. //^^ pop_to_ram(THAT, 0)
  11938. // #4648
  11939. @THAT
  11940. // #4649
  11941. D=M
  11942. // #4650
  11943. @0
  11944. // #4651
  11945. D=D+A
  11946. // #4652
  11947. @R13
  11948. // #4653
  11949. M=D
  11950. //^^ pop_stack_to_d
  11951. // #4654
  11952. @SP
  11953. // #4655
  11954. M=M-1
  11955. // #4656
  11956. A=M
  11957. // #4657
  11958. D=M
  11959. //vv pop_stack_to_d
  11960. // #4658
  11961. @R13
  11962. // #4659
  11963. A=M
  11964. // #4660
  11965. M=D
  11966. // #4661
  11967. @R13
  11968. // #4662
  11969. M=0
  11970. //vv pop_to_ram(THAT, 0)
  11971. //
  11972. //// push constant 0
  11973. //^^ push_constant(0)
  11974. // #4663
  11975. @0
  11976. // #4664
  11977. D=A
  11978. //^^ push_d_to_stack
  11979. // #4665
  11980. @SP
  11981. // #4666
  11982. A=M
  11983. // #4667
  11984. M=D
  11985. // #4668
  11986. @SP
  11987. // #4669
  11988. M=M+1
  11989. //vv push_d_to_stack
  11990. //vv push_constant(0)
  11991. //
  11992. //// return
  11993. // #4670
  11994. @LCL
  11995. // #4671
  11996. D=M
  11997. // #4672
  11998. @R14
  11999. // #4673
  12000. M=D //R14=LCL
  12001. // #4674
  12002. @5
  12003. // #4675
  12004. A=D-A
  12005. // #4676
  12006. D=M
  12007. // #4677
  12008. @R15
  12009. // #4678
  12010. M=D //R15=*(LCL-5)
  12011. //^^ pop_stack_to_d
  12012. // #4679
  12013. @SP
  12014. // #4680
  12015. M=M-1
  12016. // #4681
  12017. A=M
  12018. // #4682
  12019. D=M
  12020. //vv pop_stack_to_d
  12021. // #4683
  12022. @ARG
  12023. // #4684
  12024. A=M
  12025. // #4685
  12026. M=D //*ARG = pop()
  12027. // #4686
  12028. @ARG
  12029. // #4687
  12030. D=M
  12031. // #4688
  12032. @SP
  12033. // #4689
  12034. M=D+1 //SP=ARG+1
  12035. // #4690
  12036. @R14
  12037. // #4691
  12038. AM=M-1
  12039. // #4692
  12040. D=M
  12041. // #4693
  12042. @THAT
  12043. // #4694
  12044. M=D //THAT = *(--R14)
  12045. // #4695
  12046. @R14
  12047. // #4696
  12048. AM=M-1
  12049. // #4697
  12050. D=M
  12051. // #4698
  12052. @THIS
  12053. // #4699
  12054. M=D //THIS = *(--R14)
  12055. // #4700
  12056. @R14
  12057. // #4701
  12058. AM=M-1
  12059. // #4702
  12060. D=M
  12061. // #4703
  12062. @ARG
  12063. // #4704
  12064. M=D //ARG = *(--R14)
  12065. // #4705
  12066. @R14
  12067. // #4706
  12068. AM=M-1
  12069. // #4707
  12070. D=M
  12071. // #4708
  12072. @LCL
  12073. // #4709
  12074. M=D //LCL = *(--R14)
  12075. // #4710
  12076. @R15
  12077. // #4711
  12078. A=M
  12079. // #4712
  12080. 0;JMP //goto *R15
  12081. //
  12082. //// function Memory.peek 0
  12083. (Memory.peek)
  12084. //
  12085. //// push argument 0
  12086. //^^ push_from_ram(ARG, 0)
  12087. // #4713
  12088. @ARG
  12089. // #4714
  12090. D=M
  12091. // #4715
  12092. @0
  12093. // #4716
  12094. A=D+A
  12095. // #4717
  12096. D=M
  12097. //^^ push_d_to_stack
  12098. // #4718
  12099. @SP
  12100. // #4719
  12101. A=M
  12102. // #4720
  12103. M=D
  12104. // #4721
  12105. @SP
  12106. // #4722
  12107. M=M+1
  12108. //vv push_d_to_stack
  12109. //vv push_from_ram(ARG, 0)
  12110. //
  12111. //// push static 0
  12112. //^^ push_from_loc(Memory.vm.0)
  12113. // #4723
  12114. @Memory.vm.0
  12115. // #4724
  12116. D=M
  12117. //^^ push_d_to_stack
  12118. // #4725
  12119. @SP
  12120. // #4726
  12121. A=M
  12122. // #4727
  12123. M=D
  12124. // #4728
  12125. @SP
  12126. // #4729
  12127. M=M+1
  12128. //vv push_d_to_stack
  12129. //vv push_from_loc(Memory.vm.0)
  12130. //
  12131. //// add
  12132. //^^ arith_binary_op(+)
  12133. //^^ pop_stack_to_d
  12134. // #4730
  12135. @SP
  12136. // #4731
  12137. M=M-1
  12138. // #4732
  12139. A=M
  12140. // #4733
  12141. D=M
  12142. //vv pop_stack_to_d
  12143. //^^ arith_d_with_stack_top(D+M)
  12144. // #4734
  12145. @R13
  12146. // #4735
  12147. M=D
  12148. //^^ pop_stack_to_d
  12149. // #4736
  12150. @SP
  12151. // #4737
  12152. M=M-1
  12153. // #4738
  12154. A=M
  12155. // #4739
  12156. D=M
  12157. //vv pop_stack_to_d
  12158. // #4740
  12159. @R13
  12160. // #4741
  12161. D=D+M
  12162. // #4742
  12163. @R13
  12164. // #4743
  12165. M=0
  12166. //vv arith_d_with_stack_top(D+M)
  12167. //^^ push_d_to_stack
  12168. // #4744
  12169. @SP
  12170. // #4745
  12171. A=M
  12172. // #4746
  12173. M=D
  12174. // #4747
  12175. @SP
  12176. // #4748
  12177. M=M+1
  12178. //vv push_d_to_stack
  12179. //vv arith_binary_op(+)
  12180. //
  12181. //// pop pointer 1
  12182. //^^ pop_to_loc{4)
  12183. //^^ pop_stack_to_d
  12184. // #4749
  12185. @SP
  12186. // #4750
  12187. M=M-1
  12188. // #4751
  12189. A=M
  12190. // #4752
  12191. D=M
  12192. //vv pop_stack_to_d
  12193. // #4753
  12194. @4
  12195. // #4754
  12196. M=D
  12197. //vv pop_to_loc{4)
  12198. //
  12199. //// push that 0
  12200. //^^ push_from_ram(THAT, 0)
  12201. // #4755
  12202. @THAT
  12203. // #4756
  12204. D=M
  12205. // #4757
  12206. @0
  12207. // #4758
  12208. A=D+A
  12209. // #4759
  12210. D=M
  12211. //^^ push_d_to_stack
  12212. // #4760
  12213. @SP
  12214. // #4761
  12215. A=M
  12216. // #4762
  12217. M=D
  12218. // #4763
  12219. @SP
  12220. // #4764
  12221. M=M+1
  12222. //vv push_d_to_stack
  12223. //vv push_from_ram(THAT, 0)
  12224. //
  12225. //// return
  12226. // #4765
  12227. @LCL
  12228. // #4766
  12229. D=M
  12230. // #4767
  12231. @R14
  12232. // #4768
  12233. M=D //R14=LCL
  12234. // #4769
  12235. @5
  12236. // #4770
  12237. A=D-A
  12238. // #4771
  12239. D=M
  12240. // #4772
  12241. @R15
  12242. // #4773
  12243. M=D //R15=*(LCL-5)
  12244. //^^ pop_stack_to_d
  12245. // #4774
  12246. @SP
  12247. // #4775
  12248. M=M-1
  12249. // #4776
  12250. A=M
  12251. // #4777
  12252. D=M
  12253. //vv pop_stack_to_d
  12254. // #4778
  12255. @ARG
  12256. // #4779
  12257. A=M
  12258. // #4780
  12259. M=D //*ARG = pop()
  12260. // #4781
  12261. @ARG
  12262. // #4782
  12263. D=M
  12264. // #4783
  12265. @SP
  12266. // #4784
  12267. M=D+1 //SP=ARG+1
  12268. // #4785
  12269. @R14
  12270. // #4786
  12271. AM=M-1
  12272. // #4787
  12273. D=M
  12274. // #4788
  12275. @THAT
  12276. // #4789
  12277. M=D //THAT = *(--R14)
  12278. // #4790
  12279. @R14
  12280. // #4791
  12281. AM=M-1
  12282. // #4792
  12283. D=M
  12284. // #4793
  12285. @THIS
  12286. // #4794
  12287. M=D //THIS = *(--R14)
  12288. // #4795
  12289. @R14
  12290. // #4796
  12291. AM=M-1
  12292. // #4797
  12293. D=M
  12294. // #4798
  12295. @ARG
  12296. // #4799
  12297. M=D //ARG = *(--R14)
  12298. // #4800
  12299. @R14
  12300. // #4801
  12301. AM=M-1
  12302. // #4802
  12303. D=M
  12304. // #4803
  12305. @LCL
  12306. // #4804
  12307. M=D //LCL = *(--R14)
  12308. // #4805
  12309. @R15
  12310. // #4806
  12311. A=M
  12312. // #4807
  12313. 0;JMP //goto *R15
  12314. //
  12315. //// function Memory.poke 0
  12316. (Memory.poke)
  12317. //
  12318. //// push argument 0
  12319. //^^ push_from_ram(ARG, 0)
  12320. // #4808
  12321. @ARG
  12322. // #4809
  12323. D=M
  12324. // #4810
  12325. @0
  12326. // #4811
  12327. A=D+A
  12328. // #4812
  12329. D=M
  12330. //^^ push_d_to_stack
  12331. // #4813
  12332. @SP
  12333. // #4814
  12334. A=M
  12335. // #4815
  12336. M=D
  12337. // #4816
  12338. @SP
  12339. // #4817
  12340. M=M+1
  12341. //vv push_d_to_stack
  12342. //vv push_from_ram(ARG, 0)
  12343. //
  12344. //// push constant 1
  12345. //^^ push_constant(1)
  12346. // #4818
  12347. @1
  12348. // #4819
  12349. D=A
  12350. //^^ push_d_to_stack
  12351. // #4820
  12352. @SP
  12353. // #4821
  12354. A=M
  12355. // #4822
  12356. M=D
  12357. // #4823
  12358. @SP
  12359. // #4824
  12360. M=M+1
  12361. //vv push_d_to_stack
  12362. //vv push_constant(1)
  12363. //
  12364. //// lt
  12365. //^^ arith_cmp_op(JLT)
  12366. //^^ pop_stack_to_d
  12367. // #4825
  12368. @SP
  12369. // #4826
  12370. M=M-1
  12371. // #4827
  12372. A=M
  12373. // #4828
  12374. D=M
  12375. //vv pop_stack_to_d
  12376. //^^ arith_d_with_stack_top(D-M)
  12377. // #4829
  12378. @R13
  12379. // #4830
  12380. M=D
  12381. //^^ pop_stack_to_d
  12382. // #4831
  12383. @SP
  12384. // #4832
  12385. M=M-1
  12386. // #4833
  12387. A=M
  12388. // #4834
  12389. D=M
  12390. //vv pop_stack_to_d
  12391. // #4835
  12392. @R13
  12393. // #4836
  12394. D=D-M
  12395. // #4837
  12396. @R13
  12397. // #4838
  12398. M=0
  12399. //vv arith_d_with_stack_top(D-M)
  12400. // #4839
  12401. @PUT_TRUE_62
  12402. // #4840
  12403. D;JLT
  12404. // #4841
  12405. @R13
  12406. // #4842
  12407. M=0
  12408. // #4843
  12409. @CONT_62
  12410. // #4844
  12411. 0;JMP
  12412. (PUT_TRUE_62)
  12413. // #4845
  12414. @R13
  12415. // #4846
  12416. M=-1
  12417. (CONT_62)
  12418. // #4847
  12419. @R13
  12420. // #4848
  12421. D=M
  12422. // #4849
  12423. @R13
  12424. // #4850
  12425. M=0
  12426. //^^ push_d_to_stack
  12427. // #4851
  12428. @SP
  12429. // #4852
  12430. A=M
  12431. // #4853
  12432. M=D
  12433. // #4854
  12434. @SP
  12435. // #4855
  12436. M=M+1
  12437. //vv push_d_to_stack
  12438. //vv arith_cmp_op(JLT)
  12439. //
  12440. //// if-goto IF_TRUE0
  12441. //^^ pop_stack_to_d
  12442. // #4856
  12443. @SP
  12444. // #4857
  12445. M=M-1
  12446. // #4858
  12447. A=M
  12448. // #4859
  12449. D=M
  12450. //vv pop_stack_to_d
  12451. // #4860
  12452. @Memory.alloc$IF_TRUE0
  12453. // #4861
  12454. D;JNE
  12455. //
  12456. //// goto IF_FALSE0
  12457. // #4862
  12458. @Memory.alloc$IF_FALSE0
  12459. // #4863
  12460. 0;JMP
  12461. //
  12462. //// label IF_TRUE0
  12463. (Memory.alloc$IF_TRUE0)
  12464. //
  12465. //// push constant 5
  12466. //^^ push_constant(5)
  12467. // #4864
  12468. @5
  12469. // #4865
  12470. D=A
  12471. //^^ push_d_to_stack
  12472. // #4866
  12473. @SP
  12474. // #4867
  12475. A=M
  12476. // #4868
  12477. M=D
  12478. // #4869
  12479. @SP
  12480. // #4870
  12481. M=M+1
  12482. //vv push_d_to_stack
  12483. //vv push_constant(5)
  12484. //
  12485. //// call Sys.error 1
  12486. //^^ push_constant(RET_ADDR_63)
  12487. // #4871
  12488. @RET_ADDR_63
  12489. // #4872
  12490. D=A
  12491. //^^ push_d_to_stack
  12492. // #4873
  12493. @SP
  12494. // #4874
  12495. A=M
  12496. // #4875
  12497. M=D
  12498. // #4876
  12499. @SP
  12500. // #4877
  12501. M=M+1
  12502. //vv push_d_to_stack
  12503. //vv push_constant(RET_ADDR_63)
  12504. //push return-address
  12505. // #4878
  12506. @LCL
  12507. // #4879
  12508. D=M
  12509. //^^ push_d_to_stack
  12510. // #4880
  12511. @SP
  12512. // #4881
  12513. A=M
  12514. // #4882
  12515. M=D
  12516. // #4883
  12517. @SP
  12518. // #4884
  12519. M=M+1
  12520. //vv push_d_to_stack
  12521. //push LCL
  12522. // #4885
  12523. @ARG
  12524. // #4886
  12525. D=M
  12526. //^^ push_d_to_stack
  12527. // #4887
  12528. @SP
  12529. // #4888
  12530. A=M
  12531. // #4889
  12532. M=D
  12533. // #4890
  12534. @SP
  12535. // #4891
  12536. M=M+1
  12537. //vv push_d_to_stack
  12538. //push ARG
  12539. // #4892
  12540. @THIS
  12541. // #4893
  12542. D=M
  12543. //^^ push_d_to_stack
  12544. // #4894
  12545. @SP
  12546. // #4895
  12547. A=M
  12548. // #4896
  12549. M=D
  12550. // #4897
  12551. @SP
  12552. // #4898
  12553. M=M+1
  12554. //vv push_d_to_stack
  12555. //push THIS
  12556. // #4899
  12557. @THAT
  12558. // #4900
  12559. D=M
  12560. //^^ push_d_to_stack
  12561. // #4901
  12562. @SP
  12563. // #4902
  12564. A=M
  12565. // #4903
  12566. M=D
  12567. // #4904
  12568. @SP
  12569. // #4905
  12570. M=M+1
  12571. //vv push_d_to_stack
  12572. //push THAT
  12573. // #4906
  12574. @SP
  12575. // #4907
  12576. D=M
  12577. // #4908
  12578. @ARG
  12579. // #4909
  12580. M=D
  12581. // #4910
  12582. @6
  12583. // #4911
  12584. D=A
  12585. // #4912
  12586. @ARG
  12587. // #4913
  12588. M=M-D // ARG = SP - args - 5
  12589. // #4914
  12590. @SP
  12591. // #4915
  12592. D=M
  12593. // #4916
  12594. @LCL
  12595. // #4917
  12596. M=D // LCL = SP
  12597. // #4918
  12598. @Sys.error
  12599. // #4919
  12600. 0;JMP
  12601. (RET_ADDR_63)
  12602. //
  12603. //// pop temp 0
  12604. //^^ pop_to_loc{5)
  12605. //^^ pop_stack_to_d
  12606. // #4920
  12607. @SP
  12608. // #4921
  12609. M=M-1
  12610. // #4922
  12611. A=M
  12612. // #4923
  12613. D=M
  12614. //vv pop_stack_to_d
  12615. // #4924
  12616. @5
  12617. // #4925
  12618. M=D
  12619. //vv pop_to_loc{5)
  12620. //
  12621. //// label IF_FALSE0
  12622. (Memory.alloc$IF_FALSE0)
  12623. //
  12624. //// push constant 2048
  12625. //^^ push_constant(2048)
  12626. // #4926
  12627. @2048
  12628. // #4927
  12629. D=A
  12630. //^^ push_d_to_stack
  12631. // #4928
  12632. @SP
  12633. // #4929
  12634. A=M
  12635. // #4930
  12636. M=D
  12637. // #4931
  12638. @SP
  12639. // #4932
  12640. M=M+1
  12641. //vv push_d_to_stack
  12642. //vv push_constant(2048)
  12643. //
  12644. //// pop local 0
  12645. //^^ pop_to_ram(LCL, 0)
  12646. // #4933
  12647. @LCL
  12648. // #4934
  12649. D=M
  12650. // #4935
  12651. @0
  12652. // #4936
  12653. D=D+A
  12654. // #4937
  12655. @R13
  12656. // #4938
  12657. M=D
  12658. //^^ pop_stack_to_d
  12659. // #4939
  12660. @SP
  12661. // #4940
  12662. M=M-1
  12663. // #4941
  12664. A=M
  12665. // #4942
  12666. D=M
  12667. //vv pop_stack_to_d
  12668. // #4943
  12669. @R13
  12670. // #4944
  12671. A=M
  12672. // #4945
  12673. M=D
  12674. // #4946
  12675. @R13
  12676. // #4947
  12677. M=0
  12678. //vv pop_to_ram(LCL, 0)
  12679. //
  12680. //// label WHILE_EXP0
  12681. (Memory.alloc$WHILE_EXP0)
  12682. //
  12683. //// push constant 0
  12684. //^^ push_constant(0)
  12685. // #4948
  12686. @0
  12687. // #4949
  12688. D=A
  12689. //^^ push_d_to_stack
  12690. // #4950
  12691. @SP
  12692. // #4951
  12693. A=M
  12694. // #4952
  12695. M=D
  12696. // #4953
  12697. @SP
  12698. // #4954
  12699. M=M+1
  12700. //vv push_d_to_stack
  12701. //vv push_constant(0)
  12702. //
  12703. //// push local 0
  12704. //^^ push_from_ram(LCL, 0)
  12705. // #4955
  12706. @LCL
  12707. // #4956
  12708. D=M
  12709. // #4957
  12710. @0
  12711. // #4958
  12712. A=D+A
  12713. // #4959
  12714. D=M
  12715. //^^ push_d_to_stack
  12716. // #4960
  12717. @SP
  12718. // #4961
  12719. A=M
  12720. // #4962
  12721. M=D
  12722. // #4963
  12723. @SP
  12724. // #4964
  12725. M=M+1
  12726. //vv push_d_to_stack
  12727. //vv push_from_ram(LCL, 0)
  12728. //
  12729. //// add
  12730. //^^ arith_binary_op(+)
  12731. //^^ pop_stack_to_d
  12732. // #4965
  12733. @SP
  12734. // #4966
  12735. M=M-1
  12736. // #4967
  12737. A=M
  12738. // #4968
  12739. D=M
  12740. //vv pop_stack_to_d
  12741. //^^ arith_d_with_stack_top(D+M)
  12742. // #4969
  12743. @R13
  12744. // #4970
  12745. M=D
  12746. //^^ pop_stack_to_d
  12747. // #4971
  12748. @SP
  12749. // #4972
  12750. M=M-1
  12751. // #4973
  12752. A=M
  12753. // #4974
  12754. D=M
  12755. //vv pop_stack_to_d
  12756. // #4975
  12757. @R13
  12758. // #4976
  12759. D=D+M
  12760. // #4977
  12761. @R13
  12762. // #4978
  12763. M=0
  12764. //vv arith_d_with_stack_top(D+M)
  12765. //^^ push_d_to_stack
  12766. // #4979
  12767. @SP
  12768. // #4980
  12769. A=M
  12770. // #4981
  12771. M=D
  12772. // #4982
  12773. @SP
  12774. // #4983
  12775. M=M+1
  12776. //vv push_d_to_stack
  12777. //vv arith_binary_op(+)
  12778. //
  12779. //// pop pointer 1
  12780. //^^ pop_to_loc{4)
  12781. //^^ pop_stack_to_d
  12782. // #4984
  12783. @SP
  12784. // #4985
  12785. M=M-1
  12786. // #4986
  12787. A=M
  12788. // #4987
  12789. D=M
  12790. //vv pop_stack_to_d
  12791. // #4988
  12792. @4
  12793. // #4989
  12794. M=D
  12795. //vv pop_to_loc{4)
  12796. //
  12797. //// push that 0
  12798. //^^ push_from_ram(THAT, 0)
  12799. // #4990
  12800. @THAT
  12801. // #4991
  12802. D=M
  12803. // #4992
  12804. @0
  12805. // #4993
  12806. A=D+A
  12807. // #4994
  12808. D=M
  12809. //^^ push_d_to_stack
  12810. // #4995
  12811. @SP
  12812. // #4996
  12813. A=M
  12814. // #4997
  12815. M=D
  12816. // #4998
  12817. @SP
  12818. // #4999
  12819. M=M+1
  12820. //vv push_d_to_stack
  12821. //vv push_from_ram(THAT, 0)
  12822. //
  12823. //// push argument 0
  12824. //^^ push_from_ram(ARG, 0)
  12825. // #5000
  12826. @ARG
  12827. // #5001
  12828. D=M
  12829. // #5002
  12830. @0
  12831. // #5003
  12832. A=D+A
  12833. // #5004
  12834. D=M
  12835. //^^ push_d_to_stack
  12836. // #5005
  12837. @SP
  12838. // #5006
  12839. A=M
  12840. // #5007
  12841. M=D
  12842. // #5008
  12843. @SP
  12844. // #5009
  12845. M=M+1
  12846. //vv push_d_to_stack
  12847. //vv push_from_ram(ARG, 0)
  12848. //
  12849. //// lt
  12850. //^^ arith_cmp_op(JLT)
  12851. //^^ pop_stack_to_d
  12852. // #5010
  12853. @SP
  12854. // #5011
  12855. M=M-1
  12856. // #5012
  12857. A=M
  12858. // #5013
  12859. D=M
  12860. //vv pop_stack_to_d
  12861. //^^ arith_d_with_stack_top(D-M)
  12862. // #5014
  12863. @R13
  12864. // #5015
  12865. M=D
  12866. //^^ pop_stack_to_d
  12867. // #5016
  12868. @SP
  12869. // #5017
  12870. M=M-1
  12871. // #5018
  12872. A=M
  12873. // #5019
  12874. D=M
  12875. //vv pop_stack_to_d
  12876. // #5020
  12877. @R13
  12878. // #5021
  12879. D=D-M
  12880. // #5022
  12881. @R13
  12882. // #5023
  12883. M=0
  12884. //vv arith_d_with_stack_top(D-M)
  12885. // #5024
  12886. @PUT_TRUE_64
  12887. // #5025
  12888. D;JLT
  12889. // #5026
  12890. @R13
  12891. // #5027
  12892. M=0
  12893. // #5028
  12894. @CONT_64
  12895. // #5029
  12896. 0;JMP
  12897. (PUT_TRUE_64)
  12898. // #5030
  12899. @R13
  12900. // #5031
  12901. M=-1
  12902. (CONT_64)
  12903. // #5032
  12904. @R13
  12905. // #5033
  12906. D=M
  12907. // #5034
  12908. @R13
  12909. // #5035
  12910. M=0
  12911. //^^ push_d_to_stack
  12912. // #5036
  12913. @SP
  12914. // #5037
  12915. A=M
  12916. // #5038
  12917. M=D
  12918. // #5039
  12919. @SP
  12920. // #5040
  12921. M=M+1
  12922. //vv push_d_to_stack
  12923. //vv arith_cmp_op(JLT)
  12924. //
  12925. //// not
  12926. //^^ arith_unary_op(!)
  12927. //^^ pop_stack_to_d
  12928. // #5041
  12929. @SP
  12930. // #5042
  12931. M=M-1
  12932. // #5043
  12933. A=M
  12934. // #5044
  12935. D=M
  12936. //vv pop_stack_to_d
  12937. // #5045
  12938. D=!D
  12939. //^^ push_d_to_stack
  12940. // #5046
  12941. @SP
  12942. // #5047
  12943. A=M
  12944. // #5048
  12945. M=D
  12946. // #5049
  12947. @SP
  12948. // #5050
  12949. M=M+1
  12950. //vv push_d_to_stack
  12951. //vv arith_unary_op(!)
  12952. //
  12953. //// if-goto WHILE_END0
  12954. //^^ pop_stack_to_d
  12955. // #5051
  12956. @SP
  12957. // #5052
  12958. M=M-1
  12959. // #5053
  12960. A=M
  12961. // #5054
  12962. D=M
  12963. //vv pop_stack_to_d
  12964. // #5055
  12965. @Memory.alloc$WHILE_END0
  12966. // #5056
  12967. D;JNE
  12968. //
  12969. //// push constant 1
  12970. //^^ push_constant(1)
  12971. // #5057
  12972. @1
  12973. // #5058
  12974. D=A
  12975. //^^ push_d_to_stack
  12976. // #5059
  12977. @SP
  12978. // #5060
  12979. A=M
  12980. // #5061
  12981. M=D
  12982. // #5062
  12983. @SP
  12984. // #5063
  12985. M=M+1
  12986. //vv push_d_to_stack
  12987. //vv push_constant(1)
  12988. //
  12989. //// push local 0
  12990. //^^ push_from_ram(LCL, 0)
  12991. // #5064
  12992. @LCL
  12993. // #5065
  12994. D=M
  12995. // #5066
  12996. @0
  12997. // #5067
  12998. A=D+A
  12999. // #5068
  13000. D=M
  13001. //^^ push_d_to_stack
  13002. // #5069
  13003. @SP
  13004. // #5070
  13005. A=M
  13006. // #5071
  13007. M=D
  13008. // #5072
  13009. @SP
  13010. // #5073
  13011. M=M+1
  13012. //vv push_d_to_stack
  13013. //vv push_from_ram(LCL, 0)
  13014. //
  13015. //// add
  13016. //^^ arith_binary_op(+)
  13017. //^^ pop_stack_to_d
  13018. // #5074
  13019. @SP
  13020. // #5075
  13021. M=M-1
  13022. // #5076
  13023. A=M
  13024. // #5077
  13025. D=M
  13026. //vv pop_stack_to_d
  13027. //^^ arith_d_with_stack_top(D+M)
  13028. // #5078
  13029. @R13
  13030. // #5079
  13031. M=D
  13032. //^^ pop_stack_to_d
  13033. // #5080
  13034. @SP
  13035. // #5081
  13036. M=M-1
  13037. // #5082
  13038. A=M
  13039. // #5083
  13040. D=M
  13041. //vv pop_stack_to_d
  13042. // #5084
  13043. @R13
  13044. // #5085
  13045. D=D+M
  13046. // #5086
  13047. @R13
  13048. // #5087
  13049. M=0
  13050. //vv arith_d_with_stack_top(D+M)
  13051. //^^ push_d_to_stack
  13052. // #5088
  13053. @SP
  13054. // #5089
  13055. A=M
  13056. // #5090
  13057. M=D
  13058. // #5091
  13059. @SP
  13060. // #5092
  13061. M=M+1
  13062. //vv push_d_to_stack
  13063. //vv arith_binary_op(+)
  13064. //
  13065. //// pop pointer 1
  13066. //^^ pop_to_loc{4)
  13067. //^^ pop_stack_to_d
  13068. // #5093
  13069. @SP
  13070. // #5094
  13071. M=M-1
  13072. // #5095
  13073. A=M
  13074. // #5096
  13075. D=M
  13076. //vv pop_stack_to_d
  13077. // #5097
  13078. @4
  13079. // #5098
  13080. M=D
  13081. //vv pop_to_loc{4)
  13082. //
  13083. //// push that 0
  13084. //^^ push_from_ram(THAT, 0)
  13085. // #5099
  13086. @THAT
  13087. // #5100
  13088. D=M
  13089. // #5101
  13090. @0
  13091. // #5102
  13092. A=D+A
  13093. // #5103
  13094. D=M
  13095. //^^ push_d_to_stack
  13096. // #5104
  13097. @SP
  13098. // #5105
  13099. A=M
  13100. // #5106
  13101. M=D
  13102. // #5107
  13103. @SP
  13104. // #5108
  13105. M=M+1
  13106. //vv push_d_to_stack
  13107. //vv push_from_ram(THAT, 0)
  13108. //
  13109. //// pop local 0
  13110. //^^ pop_to_ram(LCL, 0)
  13111. // #5109
  13112. @LCL
  13113. // #5110
  13114. D=M
  13115. // #5111
  13116. @0
  13117. // #5112
  13118. D=D+A
  13119. // #5113
  13120. @R13
  13121. // #5114
  13122. M=D
  13123. //^^ pop_stack_to_d
  13124. // #5115
  13125. @SP
  13126. // #5116
  13127. M=M-1
  13128. // #5117
  13129. A=M
  13130. // #5118
  13131. D=M
  13132. //vv pop_stack_to_d
  13133. // #5119
  13134. @R13
  13135. // #5120
  13136. A=M
  13137. // #5121
  13138. M=D
  13139. // #5122
  13140. @R13
  13141. // #5123
  13142. M=0
  13143. //vv pop_to_ram(LCL, 0)
  13144. //
  13145. //// goto WHILE_EXP0
  13146. // #5124
  13147. @Memory.alloc$WHILE_EXP0
  13148. // #5125
  13149. 0;JMP
  13150. //
  13151. //// label WHILE_END0
  13152. (Memory.alloc$WHILE_END0)
  13153. //
  13154. //// push local 0
  13155. //^^ push_from_ram(LCL, 0)
  13156. // #5126
  13157. @LCL
  13158. // #5127
  13159. D=M
  13160. // #5128
  13161. @0
  13162. // #5129
  13163. A=D+A
  13164. // #5130
  13165. D=M
  13166. //^^ push_d_to_stack
  13167. // #5131
  13168. @SP
  13169. // #5132
  13170. A=M
  13171. // #5133
  13172. M=D
  13173. // #5134
  13174. @SP
  13175. // #5135
  13176. M=M+1
  13177. //vv push_d_to_stack
  13178. //vv push_from_ram(LCL, 0)
  13179. //
  13180. //// push argument 0
  13181. //^^ push_from_ram(ARG, 0)
  13182. // #5136
  13183. @ARG
  13184. // #5137
  13185. D=M
  13186. // #5138
  13187. @0
  13188. // #5139
  13189. A=D+A
  13190. // #5140
  13191. D=M
  13192. //^^ push_d_to_stack
  13193. // #5141
  13194. @SP
  13195. // #5142
  13196. A=M
  13197. // #5143
  13198. M=D
  13199. // #5144
  13200. @SP
  13201. // #5145
  13202. M=M+1
  13203. //vv push_d_to_stack
  13204. //vv push_from_ram(ARG, 0)
  13205. //
  13206. //// add
  13207. //^^ arith_binary_op(+)
  13208. //^^ pop_stack_to_d
  13209. // #5146
  13210. @SP
  13211. // #5147
  13212. M=M-1
  13213. // #5148
  13214. A=M
  13215. // #5149
  13216. D=M
  13217. //vv pop_stack_to_d
  13218. //^^ arith_d_with_stack_top(D+M)
  13219. // #5150
  13220. @R13
  13221. // #5151
  13222. M=D
  13223. //^^ pop_stack_to_d
  13224. // #5152
  13225. @SP
  13226. // #5153
  13227. M=M-1
  13228. // #5154
  13229. A=M
  13230. // #5155
  13231. D=M
  13232. //vv pop_stack_to_d
  13233. // #5156
  13234. @R13
  13235. // #5157
  13236. D=D+M
  13237. // #5158
  13238. @R13
  13239. // #5159
  13240. M=0
  13241. //vv arith_d_with_stack_top(D+M)
  13242. //^^ push_d_to_stack
  13243. // #5160
  13244. @SP
  13245. // #5161
  13246. A=M
  13247. // #5162
  13248. M=D
  13249. // #5163
  13250. @SP
  13251. // #5164
  13252. M=M+1
  13253. //vv push_d_to_stack
  13254. //vv arith_binary_op(+)
  13255. //
  13256. //// push constant 16379
  13257. //^^ push_constant(16379)
  13258. // #5165
  13259. @16379
  13260. // #5166
  13261. D=A
  13262. //^^ push_d_to_stack
  13263. // #5167
  13264. @SP
  13265. // #5168
  13266. A=M
  13267. // #5169
  13268. M=D
  13269. // #5170
  13270. @SP
  13271. // #5171
  13272. M=M+1
  13273. //vv push_d_to_stack
  13274. //vv push_constant(16379)
  13275. //
  13276. //// gt
  13277. //^^ arith_cmp_op(JGT)
  13278. //^^ pop_stack_to_d
  13279. // #5172
  13280. @SP
  13281. // #5173
  13282. M=M-1
  13283. // #5174
  13284. A=M
  13285. // #5175
  13286. D=M
  13287. //vv pop_stack_to_d
  13288. //^^ arith_d_with_stack_top(D-M)
  13289. // #5176
  13290. @R13
  13291. // #5177
  13292. M=D
  13293. //^^ pop_stack_to_d
  13294. // #5178
  13295. @SP
  13296. // #5179
  13297. M=M-1
  13298. // #5180
  13299. A=M
  13300. // #5181
  13301. D=M
  13302. //vv pop_stack_to_d
  13303. // #5182
  13304. @R13
  13305. // #5183
  13306. D=D-M
  13307. // #5184
  13308. @R13
  13309. // #5185
  13310. M=0
  13311. //vv arith_d_with_stack_top(D-M)
  13312. // #5186
  13313. @PUT_TRUE_65
  13314. // #5187
  13315. D;JGT
  13316. // #5188
  13317. @R13
  13318. // #5189
  13319. M=0
  13320. // #5190
  13321. @CONT_65
  13322. // #5191
  13323. 0;JMP
  13324. (PUT_TRUE_65)
  13325. // #5192
  13326. @R13
  13327. // #5193
  13328. M=-1
  13329. (CONT_65)
  13330. // #5194
  13331. @R13
  13332. // #5195
  13333. D=M
  13334. // #5196
  13335. @R13
  13336. // #5197
  13337. M=0
  13338. //^^ push_d_to_stack
  13339. // #5198
  13340. @SP
  13341. // #5199
  13342. A=M
  13343. // #5200
  13344. M=D
  13345. // #5201
  13346. @SP
  13347. // #5202
  13348. M=M+1
  13349. //vv push_d_to_stack
  13350. //vv arith_cmp_op(JGT)
  13351. //
  13352. //// if-goto IF_TRUE1
  13353. //^^ pop_stack_to_d
  13354. // #5203
  13355. @SP
  13356. // #5204
  13357. M=M-1
  13358. // #5205
  13359. A=M
  13360. // #5206
  13361. D=M
  13362. //vv pop_stack_to_d
  13363. // #5207
  13364. @Memory.alloc$IF_TRUE1
  13365. // #5208
  13366. D;JNE
  13367. //
  13368. //// goto IF_FALSE1
  13369. // #5209
  13370. @Memory.alloc$IF_FALSE1
  13371. // #5210
  13372. 0;JMP
  13373. //
  13374. //// label IF_TRUE1
  13375. (Memory.alloc$IF_TRUE1)
  13376. //
  13377. //// push constant 6
  13378. //^^ push_constant(6)
  13379. // #5211
  13380. @6
  13381. // #5212
  13382. D=A
  13383. //^^ push_d_to_stack
  13384. // #5213
  13385. @SP
  13386. // #5214
  13387. A=M
  13388. // #5215
  13389. M=D
  13390. // #5216
  13391. @SP
  13392. // #5217
  13393. M=M+1
  13394. //vv push_d_to_stack
  13395. //vv push_constant(6)
  13396. //
  13397. //// call Sys.error 1
  13398. //^^ push_constant(RET_ADDR_66)
  13399. // #5218
  13400. @RET_ADDR_66
  13401. // #5219
  13402. D=A
  13403. //^^ push_d_to_stack
  13404. // #5220
  13405. @SP
  13406. // #5221
  13407. A=M
  13408. // #5222
  13409. M=D
  13410. // #5223
  13411. @SP
  13412. // #5224
  13413. M=M+1
  13414. //vv push_d_to_stack
  13415. //vv push_constant(RET_ADDR_66)
  13416. //push return-address
  13417. // #5225
  13418. @LCL
  13419. // #5226
  13420. D=M
  13421. //^^ push_d_to_stack
  13422. // #5227
  13423. @SP
  13424. // #5228
  13425. A=M
  13426. // #5229
  13427. M=D
  13428. // #5230
  13429. @SP
  13430. // #5231
  13431. M=M+1
  13432. //vv push_d_to_stack
  13433. //push LCL
  13434. // #5232
  13435. @ARG
  13436. // #5233
  13437. D=M
  13438. //^^ push_d_to_stack
  13439. // #5234
  13440. @SP
  13441. // #5235
  13442. A=M
  13443. // #5236
  13444. M=D
  13445. // #5237
  13446. @SP
  13447. // #5238
  13448. M=M+1
  13449. //vv push_d_to_stack
  13450. //push ARG
  13451. // #5239
  13452. @THIS
  13453. // #5240
  13454. D=M
  13455. //^^ push_d_to_stack
  13456. // #5241
  13457. @SP
  13458. // #5242
  13459. A=M
  13460. // #5243
  13461. M=D
  13462. // #5244
  13463. @SP
  13464. // #5245
  13465. M=M+1
  13466. //vv push_d_to_stack
  13467. //push THIS
  13468. // #5246
  13469. @THAT
  13470. // #5247
  13471. D=M
  13472. //^^ push_d_to_stack
  13473. // #5248
  13474. @SP
  13475. // #5249
  13476. A=M
  13477. // #5250
  13478. M=D
  13479. // #5251
  13480. @SP
  13481. // #5252
  13482. M=M+1
  13483. //vv push_d_to_stack
  13484. //push THAT
  13485. // #5253
  13486. @SP
  13487. // #5254
  13488. D=M
  13489. // #5255
  13490. @ARG
  13491. // #5256
  13492. M=D
  13493. // #5257
  13494. @6
  13495. // #5258
  13496. D=A
  13497. // #5259
  13498. @ARG
  13499. // #5260
  13500. M=M-D // ARG = SP - args - 5
  13501. // #5261
  13502. @SP
  13503. // #5262
  13504. D=M
  13505. // #5263
  13506. @LCL
  13507. // #5264
  13508. M=D // LCL = SP
  13509. // #5265
  13510. @Sys.error
  13511. // #5266
  13512. 0;JMP
  13513. (RET_ADDR_66)
  13514. //
  13515. //// pop temp 0
  13516. //^^ pop_to_loc{5)
  13517. //^^ pop_stack_to_d
  13518. // #5267
  13519. @SP
  13520. // #5268
  13521. M=M-1
  13522. // #5269
  13523. A=M
  13524. // #5270
  13525. D=M
  13526. //vv pop_stack_to_d
  13527. // #5271
  13528. @5
  13529. // #5272
  13530. M=D
  13531. //vv pop_to_loc{5)
  13532. //
  13533. //// label IF_FALSE1
  13534. (Memory.alloc$IF_FALSE1)
  13535. //
  13536. //// push constant 0
  13537. //^^ push_constant(0)
  13538. // #5273
  13539. @0
  13540. // #5274
  13541. D=A
  13542. //^^ push_d_to_stack
  13543. // #5275
  13544. @SP
  13545. // #5276
  13546. A=M
  13547. // #5277
  13548. M=D
  13549. // #5278
  13550. @SP
  13551. // #5279
  13552. M=M+1
  13553. //vv push_d_to_stack
  13554. //vv push_constant(0)
  13555. //
  13556. //// push local 0
  13557. //^^ push_from_ram(LCL, 0)
  13558. // #5280
  13559. @LCL
  13560. // #5281
  13561. D=M
  13562. // #5282
  13563. @0
  13564. // #5283
  13565. A=D+A
  13566. // #5284
  13567. D=M
  13568. //^^ push_d_to_stack
  13569. // #5285
  13570. @SP
  13571. // #5286
  13572. A=M
  13573. // #5287
  13574. M=D
  13575. // #5288
  13576. @SP
  13577. // #5289
  13578. M=M+1
  13579. //vv push_d_to_stack
  13580. //vv push_from_ram(LCL, 0)
  13581. //
  13582. //// add
  13583. //^^ arith_binary_op(+)
  13584. //^^ pop_stack_to_d
  13585. // #5290
  13586. @SP
  13587. // #5291
  13588. M=M-1
  13589. // #5292
  13590. A=M
  13591. // #5293
  13592. D=M
  13593. //vv pop_stack_to_d
  13594. //^^ arith_d_with_stack_top(D+M)
  13595. // #5294
  13596. @R13
  13597. // #5295
  13598. M=D
  13599. //^^ pop_stack_to_d
  13600. // #5296
  13601. @SP
  13602. // #5297
  13603. M=M-1
  13604. // #5298
  13605. A=M
  13606. // #5299
  13607. D=M
  13608. //vv pop_stack_to_d
  13609. // #5300
  13610. @R13
  13611. // #5301
  13612. D=D+M
  13613. // #5302
  13614. @R13
  13615. // #5303
  13616. M=0
  13617. //vv arith_d_with_stack_top(D+M)
  13618. //^^ push_d_to_stack
  13619. // #5304
  13620. @SP
  13621. // #5305
  13622. A=M
  13623. // #5306
  13624. M=D
  13625. // #5307
  13626. @SP
  13627. // #5308
  13628. M=M+1
  13629. //vv push_d_to_stack
  13630. //vv arith_binary_op(+)
  13631. //
  13632. //// pop pointer 1
  13633. //^^ pop_to_loc{4)
  13634. //^^ pop_stack_to_d
  13635. // #5309
  13636. @SP
  13637. // #5310
  13638. M=M-1
  13639. // #5311
  13640. A=M
  13641. // #5312
  13642. D=M
  13643. //vv pop_stack_to_d
  13644. // #5313
  13645. @4
  13646. // #5314
  13647. M=D
  13648. //vv pop_to_loc{4)
  13649. //
  13650. //// push that 0
  13651. //^^ push_from_ram(THAT, 0)
  13652. // #5315
  13653. @THAT
  13654. // #5316
  13655. D=M
  13656. // #5317
  13657. @0
  13658. // #5318
  13659. A=D+A
  13660. // #5319
  13661. D=M
  13662. //^^ push_d_to_stack
  13663. // #5320
  13664. @SP
  13665. // #5321
  13666. A=M
  13667. // #5322
  13668. M=D
  13669. // #5323
  13670. @SP
  13671. // #5324
  13672. M=M+1
  13673. //vv push_d_to_stack
  13674. //vv push_from_ram(THAT, 0)
  13675. //
  13676. //// push argument 0
  13677. //^^ push_from_ram(ARG, 0)
  13678. // #5325
  13679. @ARG
  13680. // #5326
  13681. D=M
  13682. // #5327
  13683. @0
  13684. // #5328
  13685. A=D+A
  13686. // #5329
  13687. D=M
  13688. //^^ push_d_to_stack
  13689. // #5330
  13690. @SP
  13691. // #5331
  13692. A=M
  13693. // #5332
  13694. M=D
  13695. // #5333
  13696. @SP
  13697. // #5334
  13698. M=M+1
  13699. //vv push_d_to_stack
  13700. //vv push_from_ram(ARG, 0)
  13701. //
  13702. //// push constant 2
  13703. //^^ push_constant(2)
  13704. // #5335
  13705. @2
  13706. // #5336
  13707. D=A
  13708. //^^ push_d_to_stack
  13709. // #5337
  13710. @SP
  13711. // #5338
  13712. A=M
  13713. // #5339
  13714. M=D
  13715. // #5340
  13716. @SP
  13717. // #5341
  13718. M=M+1
  13719. //vv push_d_to_stack
  13720. //vv push_constant(2)
  13721. //
  13722. //// add
  13723. //^^ arith_binary_op(+)
  13724. //^^ pop_stack_to_d
  13725. // #5342
  13726. @SP
  13727. // #5343
  13728. M=M-1
  13729. // #5344
  13730. A=M
  13731. // #5345
  13732. D=M
  13733. //vv pop_stack_to_d
  13734. //^^ arith_d_with_stack_top(D+M)
  13735. // #5346
  13736. @R13
  13737. // #5347
  13738. M=D
  13739. //^^ pop_stack_to_d
  13740. // #5348
  13741. @SP
  13742. // #5349
  13743. M=M-1
  13744. // #5350
  13745. A=M
  13746. // #5351
  13747. D=M
  13748. //vv pop_stack_to_d
  13749. // #5352
  13750. @R13
  13751. // #5353
  13752. D=D+M
  13753. // #5354
  13754. @R13
  13755. // #5355
  13756. M=0
  13757. //vv arith_d_with_stack_top(D+M)
  13758. //^^ push_d_to_stack
  13759. // #5356
  13760. @SP
  13761. // #5357
  13762. A=M
  13763. // #5358
  13764. M=D
  13765. // #5359
  13766. @SP
  13767. // #5360
  13768. M=M+1
  13769. //vv push_d_to_stack
  13770. //vv arith_binary_op(+)
  13771. //
  13772. //// gt
  13773. //^^ arith_cmp_op(JGT)
  13774. //^^ pop_stack_to_d
  13775. // #5361
  13776. @SP
  13777. // #5362
  13778. M=M-1
  13779. // #5363
  13780. A=M
  13781. // #5364
  13782. D=M
  13783. //vv pop_stack_to_d
  13784. //^^ arith_d_with_stack_top(D-M)
  13785. // #5365
  13786. @R13
  13787. // #5366
  13788. M=D
  13789. //^^ pop_stack_to_d
  13790. // #5367
  13791. @SP
  13792. // #5368
  13793. M=M-1
  13794. // #5369
  13795. A=M
  13796. // #5370
  13797. D=M
  13798. //vv pop_stack_to_d
  13799. // #5371
  13800. @R13
  13801. // #5372
  13802. D=D-M
  13803. // #5373
  13804. @R13
  13805. // #5374
  13806. M=0
  13807. //vv arith_d_with_stack_top(D-M)
  13808. // #5375
  13809. @PUT_TRUE_67
  13810. // #5376
  13811. D;JGT
  13812. // #5377
  13813. @R13
  13814. // #5378
  13815. M=0
  13816. // #5379
  13817. @CONT_67
  13818. // #5380
  13819. 0;JMP
  13820. (PUT_TRUE_67)
  13821. // #5381
  13822. @R13
  13823. // #5382
  13824. M=-1
  13825. (CONT_67)
  13826. // #5383
  13827. @R13
  13828. // #5384
  13829. D=M
  13830. // #5385
  13831. @R13
  13832. // #5386
  13833. M=0
  13834. //^^ push_d_to_stack
  13835. // #5387
  13836. @SP
  13837. // #5388
  13838. A=M
  13839. // #5389
  13840. M=D
  13841. // #5390
  13842. @SP
  13843. // #5391
  13844. M=M+1
  13845. //vv push_d_to_stack
  13846. //vv arith_cmp_op(JGT)
  13847. //
  13848. //// if-goto IF_TRUE2
  13849. //^^ pop_stack_to_d
  13850. // #5392
  13851. @SP
  13852. // #5393
  13853. M=M-1
  13854. // #5394
  13855. A=M
  13856. // #5395
  13857. D=M
  13858. //vv pop_stack_to_d
  13859. // #5396
  13860. @Memory.alloc$IF_TRUE2
  13861. // #5397
  13862. D;JNE
  13863. //
  13864. //// goto IF_FALSE2
  13865. // #5398
  13866. @Memory.alloc$IF_FALSE2
  13867. // #5399
  13868. 0;JMP
  13869. //
  13870. //// label IF_TRUE2
  13871. (Memory.alloc$IF_TRUE2)
  13872. //
  13873. //// push argument 0
  13874. //^^ push_from_ram(ARG, 0)
  13875. // #5400
  13876. @ARG
  13877. // #5401
  13878. D=M
  13879. // #5402
  13880. @0
  13881. // #5403
  13882. A=D+A
  13883. // #5404
  13884. D=M
  13885. //^^ push_d_to_stack
  13886. // #5405
  13887. @SP
  13888. // #5406
  13889. A=M
  13890. // #5407
  13891. M=D
  13892. // #5408
  13893. @SP
  13894. // #5409
  13895. M=M+1
  13896. //vv push_d_to_stack
  13897. //vv push_from_ram(ARG, 0)
  13898. //
  13899. //// push constant 2
  13900. //^^ push_constant(2)
  13901. // #5410
  13902. @2
  13903. // #5411
  13904. D=A
  13905. //^^ push_d_to_stack
  13906. // #5412
  13907. @SP
  13908. // #5413
  13909. A=M
  13910. // #5414
  13911. M=D
  13912. // #5415
  13913. @SP
  13914. // #5416
  13915. M=M+1
  13916. //vv push_d_to_stack
  13917. //vv push_constant(2)
  13918. //
  13919. //// add
  13920. //^^ arith_binary_op(+)
  13921. //^^ pop_stack_to_d
  13922. // #5417
  13923. @SP
  13924. // #5418
  13925. M=M-1
  13926. // #5419
  13927. A=M
  13928. // #5420
  13929. D=M
  13930. //vv pop_stack_to_d
  13931. //^^ arith_d_with_stack_top(D+M)
  13932. // #5421
  13933. @R13
  13934. // #5422
  13935. M=D
  13936. //^^ pop_stack_to_d
  13937. // #5423
  13938. @SP
  13939. // #5424
  13940. M=M-1
  13941. // #5425
  13942. A=M
  13943. // #5426
  13944. D=M
  13945. //vv pop_stack_to_d
  13946. // #5427
  13947. @R13
  13948. // #5428
  13949. D=D+M
  13950. // #5429
  13951. @R13
  13952. // #5430
  13953. M=0
  13954. //vv arith_d_with_stack_top(D+M)
  13955. //^^ push_d_to_stack
  13956. // #5431
  13957. @SP
  13958. // #5432
  13959. A=M
  13960. // #5433
  13961. M=D
  13962. // #5434
  13963. @SP
  13964. // #5435
  13965. M=M+1
  13966. //vv push_d_to_stack
  13967. //vv arith_binary_op(+)
  13968. //
  13969. //// push local 0
  13970. //^^ push_from_ram(LCL, 0)
  13971. // #5436
  13972. @LCL
  13973. // #5437
  13974. D=M
  13975. // #5438
  13976. @0
  13977. // #5439
  13978. A=D+A
  13979. // #5440
  13980. D=M
  13981. //^^ push_d_to_stack
  13982. // #5441
  13983. @SP
  13984. // #5442
  13985. A=M
  13986. // #5443
  13987. M=D
  13988. // #5444
  13989. @SP
  13990. // #5445
  13991. M=M+1
  13992. //vv push_d_to_stack
  13993. //vv push_from_ram(LCL, 0)
  13994. //
  13995. //// add
  13996. //^^ arith_binary_op(+)
  13997. //^^ pop_stack_to_d
  13998. // #5446
  13999. @SP
  14000. // #5447
  14001. M=M-1
  14002. // #5448
  14003. A=M
  14004. // #5449
  14005. D=M
  14006. //vv pop_stack_to_d
  14007. //^^ arith_d_with_stack_top(D+M)
  14008. // #5450
  14009. @R13
  14010. // #5451
  14011. M=D
  14012. //^^ pop_stack_to_d
  14013. // #5452
  14014. @SP
  14015. // #5453
  14016. M=M-1
  14017. // #5454
  14018. A=M
  14019. // #5455
  14020. D=M
  14021. //vv pop_stack_to_d
  14022. // #5456
  14023. @R13
  14024. // #5457
  14025. D=D+M
  14026. // #5458
  14027. @R13
  14028. // #5459
  14029. M=0
  14030. //vv arith_d_with_stack_top(D+M)
  14031. //^^ push_d_to_stack
  14032. // #5460
  14033. @SP
  14034. // #5461
  14035. A=M
  14036. // #5462
  14037. M=D
  14038. // #5463
  14039. @SP
  14040. // #5464
  14041. M=M+1
  14042. //vv push_d_to_stack
  14043. //vv arith_binary_op(+)
  14044. //
  14045. //// push constant 0
  14046. //^^ push_constant(0)
  14047. // #5465
  14048. @0
  14049. // #5466
  14050. D=A
  14051. //^^ push_d_to_stack
  14052. // #5467
  14053. @SP
  14054. // #5468
  14055. A=M
  14056. // #5469
  14057. M=D
  14058. // #5470
  14059. @SP
  14060. // #5471
  14061. M=M+1
  14062. //vv push_d_to_stack
  14063. //vv push_constant(0)
  14064. //
  14065. //// push local 0
  14066. //^^ push_from_ram(LCL, 0)
  14067. // #5472
  14068. @LCL
  14069. // #5473
  14070. D=M
  14071. // #5474
  14072. @0
  14073. // #5475
  14074. A=D+A
  14075. // #5476
  14076. D=M
  14077. //^^ push_d_to_stack
  14078. // #5477
  14079. @SP
  14080. // #5478
  14081. A=M
  14082. // #5479
  14083. M=D
  14084. // #5480
  14085. @SP
  14086. // #5481
  14087. M=M+1
  14088. //vv push_d_to_stack
  14089. //vv push_from_ram(LCL, 0)
  14090. //
  14091. //// add
  14092. //^^ arith_binary_op(+)
  14093. //^^ pop_stack_to_d
  14094. // #5482
  14095. @SP
  14096. // #5483
  14097. M=M-1
  14098. // #5484
  14099. A=M
  14100. // #5485
  14101. D=M
  14102. //vv pop_stack_to_d
  14103. //^^ arith_d_with_stack_top(D+M)
  14104. // #5486
  14105. @R13
  14106. // #5487
  14107. M=D
  14108. //^^ pop_stack_to_d
  14109. // #5488
  14110. @SP
  14111. // #5489
  14112. M=M-1
  14113. // #5490
  14114. A=M
  14115. // #5491
  14116. D=M
  14117. //vv pop_stack_to_d
  14118. // #5492
  14119. @R13
  14120. // #5493
  14121. D=D+M
  14122. // #5494
  14123. @R13
  14124. // #5495
  14125. M=0
  14126. //vv arith_d_with_stack_top(D+M)
  14127. //^^ push_d_to_stack
  14128. // #5496
  14129. @SP
  14130. // #5497
  14131. A=M
  14132. // #5498
  14133. M=D
  14134. // #5499
  14135. @SP
  14136. // #5500
  14137. M=M+1
  14138. //vv push_d_to_stack
  14139. //vv arith_binary_op(+)
  14140. //
  14141. //// pop pointer 1
  14142. //^^ pop_to_loc{4)
  14143. //^^ pop_stack_to_d
  14144. // #5501
  14145. @SP
  14146. // #5502
  14147. M=M-1
  14148. // #5503
  14149. A=M
  14150. // #5504
  14151. D=M
  14152. //vv pop_stack_to_d
  14153. // #5505
  14154. @4
  14155. // #5506
  14156. M=D
  14157. //vv pop_to_loc{4)
  14158. //
  14159. //// push that 0
  14160. //^^ push_from_ram(THAT, 0)
  14161. // #5507
  14162. @THAT
  14163. // #5508
  14164. D=M
  14165. // #5509
  14166. @0
  14167. // #5510
  14168. A=D+A
  14169. // #5511
  14170. D=M
  14171. //^^ push_d_to_stack
  14172. // #5512
  14173. @SP
  14174. // #5513
  14175. A=M
  14176. // #5514
  14177. M=D
  14178. // #5515
  14179. @SP
  14180. // #5516
  14181. M=M+1
  14182. //vv push_d_to_stack
  14183. //vv push_from_ram(THAT, 0)
  14184. //
  14185. //// push argument 0
  14186. //^^ push_from_ram(ARG, 0)
  14187. // #5517
  14188. @ARG
  14189. // #5518
  14190. D=M
  14191. // #5519
  14192. @0
  14193. // #5520
  14194. A=D+A
  14195. // #5521
  14196. D=M
  14197. //^^ push_d_to_stack
  14198. // #5522
  14199. @SP
  14200. // #5523
  14201. A=M
  14202. // #5524
  14203. M=D
  14204. // #5525
  14205. @SP
  14206. // #5526
  14207. M=M+1
  14208. //vv push_d_to_stack
  14209. //vv push_from_ram(ARG, 0)
  14210. //
  14211. //// sub
  14212. //^^ arith_binary_op(-)
  14213. //^^ pop_stack_to_d
  14214. // #5527
  14215. @SP
  14216. // #5528
  14217. M=M-1
  14218. // #5529
  14219. A=M
  14220. // #5530
  14221. D=M
  14222. //vv pop_stack_to_d
  14223. //^^ arith_d_with_stack_top(D-M)
  14224. // #5531
  14225. @R13
  14226. // #5532
  14227. M=D
  14228. //^^ pop_stack_to_d
  14229. // #5533
  14230. @SP
  14231. // #5534
  14232. M=M-1
  14233. // #5535
  14234. A=M
  14235. // #5536
  14236. D=M
  14237. //vv pop_stack_to_d
  14238. // #5537
  14239. @R13
  14240. // #5538
  14241. D=D-M
  14242. // #5539
  14243. @R13
  14244. // #5540
  14245. M=0
  14246. //vv arith_d_with_stack_top(D-M)
  14247. //^^ push_d_to_stack
  14248. // #5541
  14249. @SP
  14250. // #5542
  14251. A=M
  14252. // #5543
  14253. M=D
  14254. // #5544
  14255. @SP
  14256. // #5545
  14257. M=M+1
  14258. //vv push_d_to_stack
  14259. //vv arith_binary_op(-)
  14260. //
  14261. //// push constant 2
  14262. //^^ push_constant(2)
  14263. // #5546
  14264. @2
  14265. // #5547
  14266. D=A
  14267. //^^ push_d_to_stack
  14268. // #5548
  14269. @SP
  14270. // #5549
  14271. A=M
  14272. // #5550
  14273. M=D
  14274. // #5551
  14275. @SP
  14276. // #5552
  14277. M=M+1
  14278. //vv push_d_to_stack
  14279. //vv push_constant(2)
  14280. //
  14281. //// sub
  14282. //^^ arith_binary_op(-)
  14283. //^^ pop_stack_to_d
  14284. // #5553
  14285. @SP
  14286. // #5554
  14287. M=M-1
  14288. // #5555
  14289. A=M
  14290. // #5556
  14291. D=M
  14292. //vv pop_stack_to_d
  14293. //^^ arith_d_with_stack_top(D-M)
  14294. // #5557
  14295. @R13
  14296. // #5558
  14297. M=D
  14298. //^^ pop_stack_to_d
  14299. // #5559
  14300. @SP
  14301. // #5560
  14302. M=M-1
  14303. // #5561
  14304. A=M
  14305. // #5562
  14306. D=M
  14307. //vv pop_stack_to_d
  14308. // #5563
  14309. @R13
  14310. // #5564
  14311. D=D-M
  14312. // #5565
  14313. @R13
  14314. // #5566
  14315. M=0
  14316. //vv arith_d_with_stack_top(D-M)
  14317. //^^ push_d_to_stack
  14318. // #5567
  14319. @SP
  14320. // #5568
  14321. A=M
  14322. // #5569
  14323. M=D
  14324. // #5570
  14325. @SP
  14326. // #5571
  14327. M=M+1
  14328. //vv push_d_to_stack
  14329. //vv arith_binary_op(-)
  14330. //
  14331. //// pop temp 0
  14332. //^^ pop_to_loc{5)
  14333. //^^ pop_stack_to_d
  14334. // #5572
  14335. @SP
  14336. // #5573
  14337. M=M-1
  14338. // #5574
  14339. A=M
  14340. // #5575
  14341. D=M
  14342. //vv pop_stack_to_d
  14343. // #5576
  14344. @5
  14345. // #5577
  14346. M=D
  14347. //vv pop_to_loc{5)
  14348. //
  14349. //// pop pointer 1
  14350. //^^ pop_to_loc{4)
  14351. //^^ pop_stack_to_d
  14352. // #5578
  14353. @SP
  14354. // #5579
  14355. M=M-1
  14356. // #5580
  14357. A=M
  14358. // #5581
  14359. D=M
  14360. //vv pop_stack_to_d
  14361. // #5582
  14362. @4
  14363. // #5583
  14364. M=D
  14365. //vv pop_to_loc{4)
  14366. //
  14367. //// push temp 0
  14368. //^^ push_from_loc(5)
  14369. // #5584
  14370. @5
  14371. // #5585
  14372. D=M
  14373. //^^ push_d_to_stack
  14374. // #5586
  14375. @SP
  14376. // #5587
  14377. A=M
  14378. // #5588
  14379. M=D
  14380. // #5589
  14381. @SP
  14382. // #5590
  14383. M=M+1
  14384. //vv push_d_to_stack
  14385. //vv push_from_loc(5)
  14386. //
  14387. //// pop that 0
  14388. //^^ pop_to_ram(THAT, 0)
  14389. // #5591
  14390. @THAT
  14391. // #5592
  14392. D=M
  14393. // #5593
  14394. @0
  14395. // #5594
  14396. D=D+A
  14397. // #5595
  14398. @R13
  14399. // #5596
  14400. M=D
  14401. //^^ pop_stack_to_d
  14402. // #5597
  14403. @SP
  14404. // #5598
  14405. M=M-1
  14406. // #5599
  14407. A=M
  14408. // #5600
  14409. D=M
  14410. //vv pop_stack_to_d
  14411. // #5601
  14412. @R13
  14413. // #5602
  14414. A=M
  14415. // #5603
  14416. M=D
  14417. // #5604
  14418. @R13
  14419. // #5605
  14420. M=0
  14421. //vv pop_to_ram(THAT, 0)
  14422. //
  14423. //// push constant 1
  14424. //^^ push_constant(1)
  14425. // #5606
  14426. @1
  14427. // #5607
  14428. D=A
  14429. //^^ push_d_to_stack
  14430. // #5608
  14431. @SP
  14432. // #5609
  14433. A=M
  14434. // #5610
  14435. M=D
  14436. // #5611
  14437. @SP
  14438. // #5612
  14439. M=M+1
  14440. //vv push_d_to_stack
  14441. //vv push_constant(1)
  14442. //
  14443. //// push local 0
  14444. //^^ push_from_ram(LCL, 0)
  14445. // #5613
  14446. @LCL
  14447. // #5614
  14448. D=M
  14449. // #5615
  14450. @0
  14451. // #5616
  14452. A=D+A
  14453. // #5617
  14454. D=M
  14455. //^^ push_d_to_stack
  14456. // #5618
  14457. @SP
  14458. // #5619
  14459. A=M
  14460. // #5620
  14461. M=D
  14462. // #5621
  14463. @SP
  14464. // #5622
  14465. M=M+1
  14466. //vv push_d_to_stack
  14467. //vv push_from_ram(LCL, 0)
  14468. //
  14469. //// add
  14470. //^^ arith_binary_op(+)
  14471. //^^ pop_stack_to_d
  14472. // #5623
  14473. @SP
  14474. // #5624
  14475. M=M-1
  14476. // #5625
  14477. A=M
  14478. // #5626
  14479. D=M
  14480. //vv pop_stack_to_d
  14481. //^^ arith_d_with_stack_top(D+M)
  14482. // #5627
  14483. @R13
  14484. // #5628
  14485. M=D
  14486. //^^ pop_stack_to_d
  14487. // #5629
  14488. @SP
  14489. // #5630
  14490. M=M-1
  14491. // #5631
  14492. A=M
  14493. // #5632
  14494. D=M
  14495. //vv pop_stack_to_d
  14496. // #5633
  14497. @R13
  14498. // #5634
  14499. D=D+M
  14500. // #5635
  14501. @R13
  14502. // #5636
  14503. M=0
  14504. //vv arith_d_with_stack_top(D+M)
  14505. //^^ push_d_to_stack
  14506. // #5637
  14507. @SP
  14508. // #5638
  14509. A=M
  14510. // #5639
  14511. M=D
  14512. // #5640
  14513. @SP
  14514. // #5641
  14515. M=M+1
  14516. //vv push_d_to_stack
  14517. //vv arith_binary_op(+)
  14518. //
  14519. //// pop pointer 1
  14520. //^^ pop_to_loc{4)
  14521. //^^ pop_stack_to_d
  14522. // #5642
  14523. @SP
  14524. // #5643
  14525. M=M-1
  14526. // #5644
  14527. A=M
  14528. // #5645
  14529. D=M
  14530. //vv pop_stack_to_d
  14531. // #5646
  14532. @4
  14533. // #5647
  14534. M=D
  14535. //vv pop_to_loc{4)
  14536. //
  14537. //// push that 0
  14538. //^^ push_from_ram(THAT, 0)
  14539. // #5648
  14540. @THAT
  14541. // #5649
  14542. D=M
  14543. // #5650
  14544. @0
  14545. // #5651
  14546. A=D+A
  14547. // #5652
  14548. D=M
  14549. //^^ push_d_to_stack
  14550. // #5653
  14551. @SP
  14552. // #5654
  14553. A=M
  14554. // #5655
  14555. M=D
  14556. // #5656
  14557. @SP
  14558. // #5657
  14559. M=M+1
  14560. //vv push_d_to_stack
  14561. //vv push_from_ram(THAT, 0)
  14562. //
  14563. //// push local 0
  14564. //^^ push_from_ram(LCL, 0)
  14565. // #5658
  14566. @LCL
  14567. // #5659
  14568. D=M
  14569. // #5660
  14570. @0
  14571. // #5661
  14572. A=D+A
  14573. // #5662
  14574. D=M
  14575. //^^ push_d_to_stack
  14576. // #5663
  14577. @SP
  14578. // #5664
  14579. A=M
  14580. // #5665
  14581. M=D
  14582. // #5666
  14583. @SP
  14584. // #5667
  14585. M=M+1
  14586. //vv push_d_to_stack
  14587. //vv push_from_ram(LCL, 0)
  14588. //
  14589. //// push constant 2
  14590. //^^ push_constant(2)
  14591. // #5668
  14592. @2
  14593. // #5669
  14594. D=A
  14595. //^^ push_d_to_stack
  14596. // #5670
  14597. @SP
  14598. // #5671
  14599. A=M
  14600. // #5672
  14601. M=D
  14602. // #5673
  14603. @SP
  14604. // #5674
  14605. M=M+1
  14606. //vv push_d_to_stack
  14607. //vv push_constant(2)
  14608. //
  14609. //// add
  14610. //^^ arith_binary_op(+)
  14611. //^^ pop_stack_to_d
  14612. // #5675
  14613. @SP
  14614. // #5676
  14615. M=M-1
  14616. // #5677
  14617. A=M
  14618. // #5678
  14619. D=M
  14620. //vv pop_stack_to_d
  14621. //^^ arith_d_with_stack_top(D+M)
  14622. // #5679
  14623. @R13
  14624. // #5680
  14625. M=D
  14626. //^^ pop_stack_to_d
  14627. // #5681
  14628. @SP
  14629. // #5682
  14630. M=M-1
  14631. // #5683
  14632. A=M
  14633. // #5684
  14634. D=M
  14635. //vv pop_stack_to_d
  14636. // #5685
  14637. @R13
  14638. // #5686
  14639. D=D+M
  14640. // #5687
  14641. @R13
  14642. // #5688
  14643. M=0
  14644. //vv arith_d_with_stack_top(D+M)
  14645. //^^ push_d_to_stack
  14646. // #5689
  14647. @SP
  14648. // #5690
  14649. A=M
  14650. // #5691
  14651. M=D
  14652. // #5692
  14653. @SP
  14654. // #5693
  14655. M=M+1
  14656. //vv push_d_to_stack
  14657. //vv arith_binary_op(+)
  14658. //
  14659. //// eq
  14660. //^^ arith_cmp_op(JEQ)
  14661. //^^ pop_stack_to_d
  14662. // #5694
  14663. @SP
  14664. // #5695
  14665. M=M-1
  14666. // #5696
  14667. A=M
  14668. // #5697
  14669. D=M
  14670. //vv pop_stack_to_d
  14671. //^^ arith_d_with_stack_top(D-M)
  14672. // #5698
  14673. @R13
  14674. // #5699
  14675. M=D
  14676. //^^ pop_stack_to_d
  14677. // #5700
  14678. @SP
  14679. // #5701
  14680. M=M-1
  14681. // #5702
  14682. A=M
  14683. // #5703
  14684. D=M
  14685. //vv pop_stack_to_d
  14686. // #5704
  14687. @R13
  14688. // #5705
  14689. D=D-M
  14690. // #5706
  14691. @R13
  14692. // #5707
  14693. M=0
  14694. //vv arith_d_with_stack_top(D-M)
  14695. // #5708
  14696. @PUT_TRUE_68
  14697. // #5709
  14698. D;JEQ
  14699. // #5710
  14700. @R13
  14701. // #5711
  14702. M=0
  14703. // #5712
  14704. @CONT_68
  14705. // #5713
  14706. 0;JMP
  14707. (PUT_TRUE_68)
  14708. // #5714
  14709. @R13
  14710. // #5715
  14711. M=-1
  14712. (CONT_68)
  14713. // #5716
  14714. @R13
  14715. // #5717
  14716. D=M
  14717. // #5718
  14718. @R13
  14719. // #5719
  14720. M=0
  14721. //^^ push_d_to_stack
  14722. // #5720
  14723. @SP
  14724. // #5721
  14725. A=M
  14726. // #5722
  14727. M=D
  14728. // #5723
  14729. @SP
  14730. // #5724
  14731. M=M+1
  14732. //vv push_d_to_stack
  14733. //vv arith_cmp_op(JEQ)
  14734. //
  14735. //// if-goto IF_TRUE3
  14736. //^^ pop_stack_to_d
  14737. // #5725
  14738. @SP
  14739. // #5726
  14740. M=M-1
  14741. // #5727
  14742. A=M
  14743. // #5728
  14744. D=M
  14745. //vv pop_stack_to_d
  14746. // #5729
  14747. @Memory.alloc$IF_TRUE3
  14748. // #5730
  14749. D;JNE
  14750. //
  14751. //// goto IF_FALSE3
  14752. // #5731
  14753. @Memory.alloc$IF_FALSE3
  14754. // #5732
  14755. 0;JMP
  14756. //
  14757. //// label IF_TRUE3
  14758. (Memory.alloc$IF_TRUE3)
  14759. //
  14760. //// push argument 0
  14761. //^^ push_from_ram(ARG, 0)
  14762. // #5733
  14763. @ARG
  14764. // #5734
  14765. D=M
  14766. // #5735
  14767. @0
  14768. // #5736
  14769. A=D+A
  14770. // #5737
  14771. D=M
  14772. //^^ push_d_to_stack
  14773. // #5738
  14774. @SP
  14775. // #5739
  14776. A=M
  14777. // #5740
  14778. M=D
  14779. // #5741
  14780. @SP
  14781. // #5742
  14782. M=M+1
  14783. //vv push_d_to_stack
  14784. //vv push_from_ram(ARG, 0)
  14785. //
  14786. //// push constant 3
  14787. //^^ push_constant(3)
  14788. // #5743
  14789. @3
  14790. // #5744
  14791. D=A
  14792. //^^ push_d_to_stack
  14793. // #5745
  14794. @SP
  14795. // #5746
  14796. A=M
  14797. // #5747
  14798. M=D
  14799. // #5748
  14800. @SP
  14801. // #5749
  14802. M=M+1
  14803. //vv push_d_to_stack
  14804. //vv push_constant(3)
  14805. //
  14806. //// add
  14807. //^^ arith_binary_op(+)
  14808. //^^ pop_stack_to_d
  14809. // #5750
  14810. @SP
  14811. // #5751
  14812. M=M-1
  14813. // #5752
  14814. A=M
  14815. // #5753
  14816. D=M
  14817. //vv pop_stack_to_d
  14818. //^^ arith_d_with_stack_top(D+M)
  14819. // #5754
  14820. @R13
  14821. // #5755
  14822. M=D
  14823. //^^ pop_stack_to_d
  14824. // #5756
  14825. @SP
  14826. // #5757
  14827. M=M-1
  14828. // #5758
  14829. A=M
  14830. // #5759
  14831. D=M
  14832. //vv pop_stack_to_d
  14833. // #5760
  14834. @R13
  14835. // #5761
  14836. D=D+M
  14837. // #5762
  14838. @R13
  14839. // #5763
  14840. M=0
  14841. //vv arith_d_with_stack_top(D+M)
  14842. //^^ push_d_to_stack
  14843. // #5764
  14844. @SP
  14845. // #5765
  14846. A=M
  14847. // #5766
  14848. M=D
  14849. // #5767
  14850. @SP
  14851. // #5768
  14852. M=M+1
  14853. //vv push_d_to_stack
  14854. //vv arith_binary_op(+)
  14855. //
  14856. //// push local 0
  14857. //^^ push_from_ram(LCL, 0)
  14858. // #5769
  14859. @LCL
  14860. // #5770
  14861. D=M
  14862. // #5771
  14863. @0
  14864. // #5772
  14865. A=D+A
  14866. // #5773
  14867. D=M
  14868. //^^ push_d_to_stack
  14869. // #5774
  14870. @SP
  14871. // #5775
  14872. A=M
  14873. // #5776
  14874. M=D
  14875. // #5777
  14876. @SP
  14877. // #5778
  14878. M=M+1
  14879. //vv push_d_to_stack
  14880. //vv push_from_ram(LCL, 0)
  14881. //
  14882. //// add
  14883. //^^ arith_binary_op(+)
  14884. //^^ pop_stack_to_d
  14885. // #5779
  14886. @SP
  14887. // #5780
  14888. M=M-1
  14889. // #5781
  14890. A=M
  14891. // #5782
  14892. D=M
  14893. //vv pop_stack_to_d
  14894. //^^ arith_d_with_stack_top(D+M)
  14895. // #5783
  14896. @R13
  14897. // #5784
  14898. M=D
  14899. //^^ pop_stack_to_d
  14900. // #5785
  14901. @SP
  14902. // #5786
  14903. M=M-1
  14904. // #5787
  14905. A=M
  14906. // #5788
  14907. D=M
  14908. //vv pop_stack_to_d
  14909. // #5789
  14910. @R13
  14911. // #5790
  14912. D=D+M
  14913. // #5791
  14914. @R13
  14915. // #5792
  14916. M=0
  14917. //vv arith_d_with_stack_top(D+M)
  14918. //^^ push_d_to_stack
  14919. // #5793
  14920. @SP
  14921. // #5794
  14922. A=M
  14923. // #5795
  14924. M=D
  14925. // #5796
  14926. @SP
  14927. // #5797
  14928. M=M+1
  14929. //vv push_d_to_stack
  14930. //vv arith_binary_op(+)
  14931. //
  14932. //// push local 0
  14933. //^^ push_from_ram(LCL, 0)
  14934. // #5798
  14935. @LCL
  14936. // #5799
  14937. D=M
  14938. // #5800
  14939. @0
  14940. // #5801
  14941. A=D+A
  14942. // #5802
  14943. D=M
  14944. //^^ push_d_to_stack
  14945. // #5803
  14946. @SP
  14947. // #5804
  14948. A=M
  14949. // #5805
  14950. M=D
  14951. // #5806
  14952. @SP
  14953. // #5807
  14954. M=M+1
  14955. //vv push_d_to_stack
  14956. //vv push_from_ram(LCL, 0)
  14957. //
  14958. //// push argument 0
  14959. //^^ push_from_ram(ARG, 0)
  14960. // #5808
  14961. @ARG
  14962. // #5809
  14963. D=M
  14964. // #5810
  14965. @0
  14966. // #5811
  14967. A=D+A
  14968. // #5812
  14969. D=M
  14970. //^^ push_d_to_stack
  14971. // #5813
  14972. @SP
  14973. // #5814
  14974. A=M
  14975. // #5815
  14976. M=D
  14977. // #5816
  14978. @SP
  14979. // #5817
  14980. M=M+1
  14981. //vv push_d_to_stack
  14982. //vv push_from_ram(ARG, 0)
  14983. //
  14984. //// add
  14985. //^^ arith_binary_op(+)
  14986. //^^ pop_stack_to_d
  14987. // #5818
  14988. @SP
  14989. // #5819
  14990. M=M-1
  14991. // #5820
  14992. A=M
  14993. // #5821
  14994. D=M
  14995. //vv pop_stack_to_d
  14996. //^^ arith_d_with_stack_top(D+M)
  14997. // #5822
  14998. @R13
  14999. // #5823
  15000. M=D
  15001. //^^ pop_stack_to_d
  15002. // #5824
  15003. @SP
  15004. // #5825
  15005. M=M-1
  15006. // #5826
  15007. A=M
  15008. // #5827
  15009. D=M
  15010. //vv pop_stack_to_d
  15011. // #5828
  15012. @R13
  15013. // #5829
  15014. D=D+M
  15015. // #5830
  15016. @R13
  15017. // #5831
  15018. M=0
  15019. //vv arith_d_with_stack_top(D+M)
  15020. //^^ push_d_to_stack
  15021. // #5832
  15022. @SP
  15023. // #5833
  15024. A=M
  15025. // #5834
  15026. M=D
  15027. // #5835
  15028. @SP
  15029. // #5836
  15030. M=M+1
  15031. //vv push_d_to_stack
  15032. //vv arith_binary_op(+)
  15033. //
  15034. //// push constant 4
  15035. //^^ push_constant(4)
  15036. // #5837
  15037. @4
  15038. // #5838
  15039. D=A
  15040. //^^ push_d_to_stack
  15041. // #5839
  15042. @SP
  15043. // #5840
  15044. A=M
  15045. // #5841
  15046. M=D
  15047. // #5842
  15048. @SP
  15049. // #5843
  15050. M=M+1
  15051. //vv push_d_to_stack
  15052. //vv push_constant(4)
  15053. //
  15054. //// add
  15055. //^^ arith_binary_op(+)
  15056. //^^ pop_stack_to_d
  15057. // #5844
  15058. @SP
  15059. // #5845
  15060. M=M-1
  15061. // #5846
  15062. A=M
  15063. // #5847
  15064. D=M
  15065. //vv pop_stack_to_d
  15066. //^^ arith_d_with_stack_top(D+M)
  15067. // #5848
  15068. @R13
  15069. // #5849
  15070. M=D
  15071. //^^ pop_stack_to_d
  15072. // #5850
  15073. @SP
  15074. // #5851
  15075. M=M-1
  15076. // #5852
  15077. A=M
  15078. // #5853
  15079. D=M
  15080. //vv pop_stack_to_d
  15081. // #5854
  15082. @R13
  15083. // #5855
  15084. D=D+M
  15085. // #5856
  15086. @R13
  15087. // #5857
  15088. M=0
  15089. //vv arith_d_with_stack_top(D+M)
  15090. //^^ push_d_to_stack
  15091. // #5858
  15092. @SP
  15093. // #5859
  15094. A=M
  15095. // #5860
  15096. M=D
  15097. // #5861
  15098. @SP
  15099. // #5862
  15100. M=M+1
  15101. //vv push_d_to_stack
  15102. //vv arith_binary_op(+)
  15103. //
  15104. //// pop temp 0
  15105. //^^ pop_to_loc{5)
  15106. //^^ pop_stack_to_d
  15107. // #5863
  15108. @SP
  15109. // #5864
  15110. M=M-1
  15111. // #5865
  15112. A=M
  15113. // #5866
  15114. D=M
  15115. //vv pop_stack_to_d
  15116. // #5867
  15117. @5
  15118. // #5868
  15119. M=D
  15120. //vv pop_to_loc{5)
  15121. //
  15122. //// pop pointer 1
  15123. //^^ pop_to_loc{4)
  15124. //^^ pop_stack_to_d
  15125. // #5869
  15126. @SP
  15127. // #5870
  15128. M=M-1
  15129. // #5871
  15130. A=M
  15131. // #5872
  15132. D=M
  15133. //vv pop_stack_to_d
  15134. // #5873
  15135. @4
  15136. // #5874
  15137. M=D
  15138. //vv pop_to_loc{4)
  15139. //
  15140. //// push temp 0
  15141. //^^ push_from_loc(5)
  15142. // #5875
  15143. @5
  15144. // #5876
  15145. D=M
  15146. //^^ push_d_to_stack
  15147. // #5877
  15148. @SP
  15149. // #5878
  15150. A=M
  15151. // #5879
  15152. M=D
  15153. // #5880
  15154. @SP
  15155. // #5881
  15156. M=M+1
  15157. //vv push_d_to_stack
  15158. //vv push_from_loc(5)
  15159. //
  15160. //// pop that 0
  15161. //^^ pop_to_ram(THAT, 0)
  15162. // #5882
  15163. @THAT
  15164. // #5883
  15165. D=M
  15166. // #5884
  15167. @0
  15168. // #5885
  15169. D=D+A
  15170. // #5886
  15171. @R13
  15172. // #5887
  15173. M=D
  15174. //^^ pop_stack_to_d
  15175. // #5888
  15176. @SP
  15177. // #5889
  15178. M=M-1
  15179. // #5890
  15180. A=M
  15181. // #5891
  15182. D=M
  15183. //vv pop_stack_to_d
  15184. // #5892
  15185. @R13
  15186. // #5893
  15187. A=M
  15188. // #5894
  15189. M=D
  15190. // #5895
  15191. @R13
  15192. // #5896
  15193. M=0
  15194. //vv pop_to_ram(THAT, 0)
  15195. //
  15196. //// goto IF_END3
  15197. // #5897
  15198. @Memory.alloc$IF_END3
  15199. // #5898
  15200. 0;JMP
  15201. //
  15202. //// label IF_FALSE3
  15203. (Memory.alloc$IF_FALSE3)
  15204. //
  15205. //// push argument 0
  15206. //^^ push_from_ram(ARG, 0)
  15207. // #5899
  15208. @ARG
  15209. // #5900
  15210. D=M
  15211. // #5901
  15212. @0
  15213. // #5902
  15214. A=D+A
  15215. // #5903
  15216. D=M
  15217. //^^ push_d_to_stack
  15218. // #5904
  15219. @SP
  15220. // #5905
  15221. A=M
  15222. // #5906
  15223. M=D
  15224. // #5907
  15225. @SP
  15226. // #5908
  15227. M=M+1
  15228. //vv push_d_to_stack
  15229. //vv push_from_ram(ARG, 0)
  15230. //
  15231. //// push constant 3
  15232. //^^ push_constant(3)
  15233. // #5909
  15234. @3
  15235. // #5910
  15236. D=A
  15237. //^^ push_d_to_stack
  15238. // #5911
  15239. @SP
  15240. // #5912
  15241. A=M
  15242. // #5913
  15243. M=D
  15244. // #5914
  15245. @SP
  15246. // #5915
  15247. M=M+1
  15248. //vv push_d_to_stack
  15249. //vv push_constant(3)
  15250. //
  15251. //// add
  15252. //^^ arith_binary_op(+)
  15253. //^^ pop_stack_to_d
  15254. // #5916
  15255. @SP
  15256. // #5917
  15257. M=M-1
  15258. // #5918
  15259. A=M
  15260. // #5919
  15261. D=M
  15262. //vv pop_stack_to_d
  15263. //^^ arith_d_with_stack_top(D+M)
  15264. // #5920
  15265. @R13
  15266. // #5921
  15267. M=D
  15268. //^^ pop_stack_to_d
  15269. // #5922
  15270. @SP
  15271. // #5923
  15272. M=M-1
  15273. // #5924
  15274. A=M
  15275. // #5925
  15276. D=M
  15277. //vv pop_stack_to_d
  15278. // #5926
  15279. @R13
  15280. // #5927
  15281. D=D+M
  15282. // #5928
  15283. @R13
  15284. // #5929
  15285. M=0
  15286. //vv arith_d_with_stack_top(D+M)
  15287. //^^ push_d_to_stack
  15288. // #5930
  15289. @SP
  15290. // #5931
  15291. A=M
  15292. // #5932
  15293. M=D
  15294. // #5933
  15295. @SP
  15296. // #5934
  15297. M=M+1
  15298. //vv push_d_to_stack
  15299. //vv arith_binary_op(+)
  15300. //
  15301. //// push local 0
  15302. //^^ push_from_ram(LCL, 0)
  15303. // #5935
  15304. @LCL
  15305. // #5936
  15306. D=M
  15307. // #5937
  15308. @0
  15309. // #5938
  15310. A=D+A
  15311. // #5939
  15312. D=M
  15313. //^^ push_d_to_stack
  15314. // #5940
  15315. @SP
  15316. // #5941
  15317. A=M
  15318. // #5942
  15319. M=D
  15320. // #5943
  15321. @SP
  15322. // #5944
  15323. M=M+1
  15324. //vv push_d_to_stack
  15325. //vv push_from_ram(LCL, 0)
  15326. //
  15327. //// add
  15328. //^^ arith_binary_op(+)
  15329. //^^ pop_stack_to_d
  15330. // #5945
  15331. @SP
  15332. // #5946
  15333. M=M-1
  15334. // #5947
  15335. A=M
  15336. // #5948
  15337. D=M
  15338. //vv pop_stack_to_d
  15339. //^^ arith_d_with_stack_top(D+M)
  15340. // #5949
  15341. @R13
  15342. // #5950
  15343. M=D
  15344. //^^ pop_stack_to_d
  15345. // #5951
  15346. @SP
  15347. // #5952
  15348. M=M-1
  15349. // #5953
  15350. A=M
  15351. // #5954
  15352. D=M
  15353. //vv pop_stack_to_d
  15354. // #5955
  15355. @R13
  15356. // #5956
  15357. D=D+M
  15358. // #5957
  15359. @R13
  15360. // #5958
  15361. M=0
  15362. //vv arith_d_with_stack_top(D+M)
  15363. //^^ push_d_to_stack
  15364. // #5959
  15365. @SP
  15366. // #5960
  15367. A=M
  15368. // #5961
  15369. M=D
  15370. // #5962
  15371. @SP
  15372. // #5963
  15373. M=M+1
  15374. //vv push_d_to_stack
  15375. //vv arith_binary_op(+)
  15376. //
  15377. //// push constant 1
  15378. //^^ push_constant(1)
  15379. // #5964
  15380. @1
  15381. // #5965
  15382. D=A
  15383. //^^ push_d_to_stack
  15384. // #5966
  15385. @SP
  15386. // #5967
  15387. A=M
  15388. // #5968
  15389. M=D
  15390. // #5969
  15391. @SP
  15392. // #5970
  15393. M=M+1
  15394. //vv push_d_to_stack
  15395. //vv push_constant(1)
  15396. //
  15397. //// push local 0
  15398. //^^ push_from_ram(LCL, 0)
  15399. // #5971
  15400. @LCL
  15401. // #5972
  15402. D=M
  15403. // #5973
  15404. @0
  15405. // #5974
  15406. A=D+A
  15407. // #5975
  15408. D=M
  15409. //^^ push_d_to_stack
  15410. // #5976
  15411. @SP
  15412. // #5977
  15413. A=M
  15414. // #5978
  15415. M=D
  15416. // #5979
  15417. @SP
  15418. // #5980
  15419. M=M+1
  15420. //vv push_d_to_stack
  15421. //vv push_from_ram(LCL, 0)
  15422. //
  15423. //// add
  15424. //^^ arith_binary_op(+)
  15425. //^^ pop_stack_to_d
  15426. // #5981
  15427. @SP
  15428. // #5982
  15429. M=M-1
  15430. // #5983
  15431. A=M
  15432. // #5984
  15433. D=M
  15434. //vv pop_stack_to_d
  15435. //^^ arith_d_with_stack_top(D+M)
  15436. // #5985
  15437. @R13
  15438. // #5986
  15439. M=D
  15440. //^^ pop_stack_to_d
  15441. // #5987
  15442. @SP
  15443. // #5988
  15444. M=M-1
  15445. // #5989
  15446. A=M
  15447. // #5990
  15448. D=M
  15449. //vv pop_stack_to_d
  15450. // #5991
  15451. @R13
  15452. // #5992
  15453. D=D+M
  15454. // #5993
  15455. @R13
  15456. // #5994
  15457. M=0
  15458. //vv arith_d_with_stack_top(D+M)
  15459. //^^ push_d_to_stack
  15460. // #5995
  15461. @SP
  15462. // #5996
  15463. A=M
  15464. // #5997
  15465. M=D
  15466. // #5998
  15467. @SP
  15468. // #5999
  15469. M=M+1
  15470. //vv push_d_to_stack
  15471. //vv arith_binary_op(+)
  15472. //
  15473. //// pop pointer 1
  15474. //^^ pop_to_loc{4)
  15475. //^^ pop_stack_to_d
  15476. // #6000
  15477. @SP
  15478. // #6001
  15479. M=M-1
  15480. // #6002
  15481. A=M
  15482. // #6003
  15483. D=M
  15484. //vv pop_stack_to_d
  15485. // #6004
  15486. @4
  15487. // #6005
  15488. M=D
  15489. //vv pop_to_loc{4)
  15490. //
  15491. //// push that 0
  15492. //^^ push_from_ram(THAT, 0)
  15493. // #6006
  15494. @THAT
  15495. // #6007
  15496. D=M
  15497. // #6008
  15498. @0
  15499. // #6009
  15500. A=D+A
  15501. // #6010
  15502. D=M
  15503. //^^ push_d_to_stack
  15504. // #6011
  15505. @SP
  15506. // #6012
  15507. A=M
  15508. // #6013
  15509. M=D
  15510. // #6014
  15511. @SP
  15512. // #6015
  15513. M=M+1
  15514. //vv push_d_to_stack
  15515. //vv push_from_ram(THAT, 0)
  15516. //
  15517. //// pop temp 0
  15518. //^^ pop_to_loc{5)
  15519. //^^ pop_stack_to_d
  15520. // #6016
  15521. @SP
  15522. // #6017
  15523. M=M-1
  15524. // #6018
  15525. A=M
  15526. // #6019
  15527. D=M
  15528. //vv pop_stack_to_d
  15529. // #6020
  15530. @5
  15531. // #6021
  15532. M=D
  15533. //vv pop_to_loc{5)
  15534. //
  15535. //// pop pointer 1
  15536. //^^ pop_to_loc{4)
  15537. //^^ pop_stack_to_d
  15538. // #6022
  15539. @SP
  15540. // #6023
  15541. M=M-1
  15542. // #6024
  15543. A=M
  15544. // #6025
  15545. D=M
  15546. //vv pop_stack_to_d
  15547. // #6026
  15548. @4
  15549. // #6027
  15550. M=D
  15551. //vv pop_to_loc{4)
  15552. //
  15553. //// push temp 0
  15554. //^^ push_from_loc(5)
  15555. // #6028
  15556. @5
  15557. // #6029
  15558. D=M
  15559. //^^ push_d_to_stack
  15560. // #6030
  15561. @SP
  15562. // #6031
  15563. A=M
  15564. // #6032
  15565. M=D
  15566. // #6033
  15567. @SP
  15568. // #6034
  15569. M=M+1
  15570. //vv push_d_to_stack
  15571. //vv push_from_loc(5)
  15572. //
  15573. //// pop that 0
  15574. //^^ pop_to_ram(THAT, 0)
  15575. // #6035
  15576. @THAT
  15577. // #6036
  15578. D=M
  15579. // #6037
  15580. @0
  15581. // #6038
  15582. D=D+A
  15583. // #6039
  15584. @R13
  15585. // #6040
  15586. M=D
  15587. //^^ pop_stack_to_d
  15588. // #6041
  15589. @SP
  15590. // #6042
  15591. M=M-1
  15592. // #6043
  15593. A=M
  15594. // #6044
  15595. D=M
  15596. //vv pop_stack_to_d
  15597. // #6045
  15598. @R13
  15599. // #6046
  15600. A=M
  15601. // #6047
  15602. M=D
  15603. // #6048
  15604. @R13
  15605. // #6049
  15606. M=0
  15607. //vv pop_to_ram(THAT, 0)
  15608. //
  15609. //// label IF_END3
  15610. (Memory.alloc$IF_END3)
  15611. //
  15612. //// push constant 1
  15613. //^^ push_constant(1)
  15614. // #6050
  15615. @1
  15616. // #6051
  15617. D=A
  15618. //^^ push_d_to_stack
  15619. // #6052
  15620. @SP
  15621. // #6053
  15622. A=M
  15623. // #6054
  15624. M=D
  15625. // #6055
  15626. @SP
  15627. // #6056
  15628. M=M+1
  15629. //vv push_d_to_stack
  15630. //vv push_constant(1)
  15631. //
  15632. //// push local 0
  15633. //^^ push_from_ram(LCL, 0)
  15634. // #6057
  15635. @LCL
  15636. // #6058
  15637. D=M
  15638. // #6059
  15639. @0
  15640. // #6060
  15641. A=D+A
  15642. // #6061
  15643. D=M
  15644. //^^ push_d_to_stack
  15645. // #6062
  15646. @SP
  15647. // #6063
  15648. A=M
  15649. // #6064
  15650. M=D
  15651. // #6065
  15652. @SP
  15653. // #6066
  15654. M=M+1
  15655. //vv push_d_to_stack
  15656. //vv push_from_ram(LCL, 0)
  15657. //
  15658. //// add
  15659. //^^ arith_binary_op(+)
  15660. //^^ pop_stack_to_d
  15661. // #6067
  15662. @SP
  15663. // #6068
  15664. M=M-1
  15665. // #6069
  15666. A=M
  15667. // #6070
  15668. D=M
  15669. //vv pop_stack_to_d
  15670. //^^ arith_d_with_stack_top(D+M)
  15671. // #6071
  15672. @R13
  15673. // #6072
  15674. M=D
  15675. //^^ pop_stack_to_d
  15676. // #6073
  15677. @SP
  15678. // #6074
  15679. M=M-1
  15680. // #6075
  15681. A=M
  15682. // #6076
  15683. D=M
  15684. //vv pop_stack_to_d
  15685. // #6077
  15686. @R13
  15687. // #6078
  15688. D=D+M
  15689. // #6079
  15690. @R13
  15691. // #6080
  15692. M=0
  15693. //vv arith_d_with_stack_top(D+M)
  15694. //^^ push_d_to_stack
  15695. // #6081
  15696. @SP
  15697. // #6082
  15698. A=M
  15699. // #6083
  15700. M=D
  15701. // #6084
  15702. @SP
  15703. // #6085
  15704. M=M+1
  15705. //vv push_d_to_stack
  15706. //vv arith_binary_op(+)
  15707. //
  15708. //// push local 0
  15709. //^^ push_from_ram(LCL, 0)
  15710. // #6086
  15711. @LCL
  15712. // #6087
  15713. D=M
  15714. // #6088
  15715. @0
  15716. // #6089
  15717. A=D+A
  15718. // #6090
  15719. D=M
  15720. //^^ push_d_to_stack
  15721. // #6091
  15722. @SP
  15723. // #6092
  15724. A=M
  15725. // #6093
  15726. M=D
  15727. // #6094
  15728. @SP
  15729. // #6095
  15730. M=M+1
  15731. //vv push_d_to_stack
  15732. //vv push_from_ram(LCL, 0)
  15733. //
  15734. //// push argument 0
  15735. //^^ push_from_ram(ARG, 0)
  15736. // #6096
  15737. @ARG
  15738. // #6097
  15739. D=M
  15740. // #6098
  15741. @0
  15742. // #6099
  15743. A=D+A
  15744. // #6100
  15745. D=M
  15746. //^^ push_d_to_stack
  15747. // #6101
  15748. @SP
  15749. // #6102
  15750. A=M
  15751. // #6103
  15752. M=D
  15753. // #6104
  15754. @SP
  15755. // #6105
  15756. M=M+1
  15757. //vv push_d_to_stack
  15758. //vv push_from_ram(ARG, 0)
  15759. //
  15760. //// add
  15761. //^^ arith_binary_op(+)
  15762. //^^ pop_stack_to_d
  15763. // #6106
  15764. @SP
  15765. // #6107
  15766. M=M-1
  15767. // #6108
  15768. A=M
  15769. // #6109
  15770. D=M
  15771. //vv pop_stack_to_d
  15772. //^^ arith_d_with_stack_top(D+M)
  15773. // #6110
  15774. @R13
  15775. // #6111
  15776. M=D
  15777. //^^ pop_stack_to_d
  15778. // #6112
  15779. @SP
  15780. // #6113
  15781. M=M-1
  15782. // #6114
  15783. A=M
  15784. // #6115
  15785. D=M
  15786. //vv pop_stack_to_d
  15787. // #6116
  15788. @R13
  15789. // #6117
  15790. D=D+M
  15791. // #6118
  15792. @R13
  15793. // #6119
  15794. M=0
  15795. //vv arith_d_with_stack_top(D+M)
  15796. //^^ push_d_to_stack
  15797. // #6120
  15798. @SP
  15799. // #6121
  15800. A=M
  15801. // #6122
  15802. M=D
  15803. // #6123
  15804. @SP
  15805. // #6124
  15806. M=M+1
  15807. //vv push_d_to_stack
  15808. //vv arith_binary_op(+)
  15809. //
  15810. //// push constant 2
  15811. //^^ push_constant(2)
  15812. // #6125
  15813. @2
  15814. // #6126
  15815. D=A
  15816. //^^ push_d_to_stack
  15817. // #6127
  15818. @SP
  15819. // #6128
  15820. A=M
  15821. // #6129
  15822. M=D
  15823. // #6130
  15824. @SP
  15825. // #6131
  15826. M=M+1
  15827. //vv push_d_to_stack
  15828. //vv push_constant(2)
  15829. //
  15830. //// add
  15831. //^^ arith_binary_op(+)
  15832. //^^ pop_stack_to_d
  15833. // #6132
  15834. @SP
  15835. // #6133
  15836. M=M-1
  15837. // #6134
  15838. A=M
  15839. // #6135
  15840. D=M
  15841. //vv pop_stack_to_d
  15842. //^^ arith_d_with_stack_top(D+M)
  15843. // #6136
  15844. @R13
  15845. // #6137
  15846. M=D
  15847. //^^ pop_stack_to_d
  15848. // #6138
  15849. @SP
  15850. // #6139
  15851. M=M-1
  15852. // #6140
  15853. A=M
  15854. // #6141
  15855. D=M
  15856. //vv pop_stack_to_d
  15857. // #6142
  15858. @R13
  15859. // #6143
  15860. D=D+M
  15861. // #6144
  15862. @R13
  15863. // #6145
  15864. M=0
  15865. //vv arith_d_with_stack_top(D+M)
  15866. //^^ push_d_to_stack
  15867. // #6146
  15868. @SP
  15869. // #6147
  15870. A=M
  15871. // #6148
  15872. M=D
  15873. // #6149
  15874. @SP
  15875. // #6150
  15876. M=M+1
  15877. //vv push_d_to_stack
  15878. //vv arith_binary_op(+)
  15879. //
  15880. //// pop temp 0
  15881. //^^ pop_to_loc{5)
  15882. //^^ pop_stack_to_d
  15883. // #6151
  15884. @SP
  15885. // #6152
  15886. M=M-1
  15887. // #6153
  15888. A=M
  15889. // #6154
  15890. D=M
  15891. //vv pop_stack_to_d
  15892. // #6155
  15893. @5
  15894. // #6156
  15895. M=D
  15896. //vv pop_to_loc{5)
  15897. //
  15898. //// pop pointer 1
  15899. //^^ pop_to_loc{4)
  15900. //^^ pop_stack_to_d
  15901. // #6157
  15902. @SP
  15903. // #6158
  15904. M=M-1
  15905. // #6159
  15906. A=M
  15907. // #6160
  15908. D=M
  15909. //vv pop_stack_to_d
  15910. // #6161
  15911. @4
  15912. // #6162
  15913. M=D
  15914. //vv pop_to_loc{4)
  15915. //
  15916. //// push temp 0
  15917. //^^ push_from_loc(5)
  15918. // #6163
  15919. @5
  15920. // #6164
  15921. D=M
  15922. //^^ push_d_to_stack
  15923. // #6165
  15924. @SP
  15925. // #6166
  15926. A=M
  15927. // #6167
  15928. M=D
  15929. // #6168
  15930. @SP
  15931. // #6169
  15932. M=M+1
  15933. //vv push_d_to_stack
  15934. //vv push_from_loc(5)
  15935. //
  15936. //// pop that 0
  15937. //^^ pop_to_ram(THAT, 0)
  15938. // #6170
  15939. @THAT
  15940. // #6171
  15941. D=M
  15942. // #6172
  15943. @0
  15944. // #6173
  15945. D=D+A
  15946. // #6174
  15947. @R13
  15948. // #6175
  15949. M=D
  15950. //^^ pop_stack_to_d
  15951. // #6176
  15952. @SP
  15953. // #6177
  15954. M=M-1
  15955. // #6178
  15956. A=M
  15957. // #6179
  15958. D=M
  15959. //vv pop_stack_to_d
  15960. // #6180
  15961. @R13
  15962. // #6181
  15963. A=M
  15964. // #6182
  15965. M=D
  15966. // #6183
  15967. @R13
  15968. // #6184
  15969. M=0
  15970. //vv pop_to_ram(THAT, 0)
  15971. //
  15972. //// label IF_FALSE2
  15973. (Memory.alloc$IF_FALSE2)
  15974. //
  15975. //// push constant 0
  15976. //^^ push_constant(0)
  15977. // #6185
  15978. @0
  15979. // #6186
  15980. D=A
  15981. //^^ push_d_to_stack
  15982. // #6187
  15983. @SP
  15984. // #6188
  15985. A=M
  15986. // #6189
  15987. M=D
  15988. // #6190
  15989. @SP
  15990. // #6191
  15991. M=M+1
  15992. //vv push_d_to_stack
  15993. //vv push_constant(0)
  15994. //
  15995. //// push local 0
  15996. //^^ push_from_ram(LCL, 0)
  15997. // #6192
  15998. @LCL
  15999. // #6193
  16000. D=M
  16001. // #6194
  16002. @0
  16003. // #6195
  16004. A=D+A
  16005. // #6196
  16006. D=M
  16007. //^^ push_d_to_stack
  16008. // #6197
  16009. @SP
  16010. // #6198
  16011. A=M
  16012. // #6199
  16013. M=D
  16014. // #6200
  16015. @SP
  16016. // #6201
  16017. M=M+1
  16018. //vv push_d_to_stack
  16019. //vv push_from_ram(LCL, 0)
  16020. //
  16021. //// add
  16022. //^^ arith_binary_op(+)
  16023. //^^ pop_stack_to_d
  16024. // #6202
  16025. @SP
  16026. // #6203
  16027. M=M-1
  16028. // #6204
  16029. A=M
  16030. // #6205
  16031. D=M
  16032. //vv pop_stack_to_d
  16033. //^^ arith_d_with_stack_top(D+M)
  16034. // #6206
  16035. @R13
  16036. // #6207
  16037. M=D
  16038. //^^ pop_stack_to_d
  16039. // #6208
  16040. @SP
  16041. // #6209
  16042. M=M-1
  16043. // #6210
  16044. A=M
  16045. // #6211
  16046. D=M
  16047. //vv pop_stack_to_d
  16048. // #6212
  16049. @R13
  16050. // #6213
  16051. D=D+M
  16052. // #6214
  16053. @R13
  16054. // #6215
  16055. M=0
  16056. //vv arith_d_with_stack_top(D+M)
  16057. //^^ push_d_to_stack
  16058. // #6216
  16059. @SP
  16060. // #6217
  16061. A=M
  16062. // #6218
  16063. M=D
  16064. // #6219
  16065. @SP
  16066. // #6220
  16067. M=M+1
  16068. //vv push_d_to_stack
  16069. //vv arith_binary_op(+)
  16070. //
  16071. //// push constant 0
  16072. //^^ push_constant(0)
  16073. // #6221
  16074. @0
  16075. // #6222
  16076. D=A
  16077. //^^ push_d_to_stack
  16078. // #6223
  16079. @SP
  16080. // #6224
  16081. A=M
  16082. // #6225
  16083. M=D
  16084. // #6226
  16085. @SP
  16086. // #6227
  16087. M=M+1
  16088. //vv push_d_to_stack
  16089. //vv push_constant(0)
  16090. //
  16091. //// pop temp 0
  16092. //^^ pop_to_loc{5)
  16093. //^^ pop_stack_to_d
  16094. // #6228
  16095. @SP
  16096. // #6229
  16097. M=M-1
  16098. // #6230
  16099. A=M
  16100. // #6231
  16101. D=M
  16102. //vv pop_stack_to_d
  16103. // #6232
  16104. @5
  16105. // #6233
  16106. M=D
  16107. //vv pop_to_loc{5)
  16108. //
  16109. //// pop pointer 1
  16110. //^^ pop_to_loc{4)
  16111. //^^ pop_stack_to_d
  16112. // #6234
  16113. @SP
  16114. // #6235
  16115. M=M-1
  16116. // #6236
  16117. A=M
  16118. // #6237
  16119. D=M
  16120. //vv pop_stack_to_d
  16121. // #6238
  16122. @4
  16123. // #6239
  16124. M=D
  16125. //vv pop_to_loc{4)
  16126. //
  16127. //// push temp 0
  16128. //^^ push_from_loc(5)
  16129. // #6240
  16130. @5
  16131. // #6241
  16132. D=M
  16133. //^^ push_d_to_stack
  16134. // #6242
  16135. @SP
  16136. // #6243
  16137. A=M
  16138. // #6244
  16139. M=D
  16140. // #6245
  16141. @SP
  16142. // #6246
  16143. M=M+1
  16144. //vv push_d_to_stack
  16145. //vv push_from_loc(5)
  16146. //
  16147. //// pop that 0
  16148. //^^ pop_to_ram(THAT, 0)
  16149. // #6247
  16150. @THAT
  16151. // #6248
  16152. D=M
  16153. // #6249
  16154. @0
  16155. // #6250
  16156. D=D+A
  16157. // #6251
  16158. @R13
  16159. // #6252
  16160. M=D
  16161. //^^ pop_stack_to_d
  16162. // #6253
  16163. @SP
  16164. // #6254
  16165. M=M-1
  16166. // #6255
  16167. A=M
  16168. // #6256
  16169. D=M
  16170. //vv pop_stack_to_d
  16171. // #6257
  16172. @R13
  16173. // #6258
  16174. A=M
  16175. // #6259
  16176. M=D
  16177. // #6260
  16178. @R13
  16179. // #6261
  16180. M=0
  16181. //vv pop_to_ram(THAT, 0)
  16182. //
  16183. //// push local 0
  16184. //^^ push_from_ram(LCL, 0)
  16185. // #6262
  16186. @LCL
  16187. // #6263
  16188. D=M
  16189. // #6264
  16190. @0
  16191. // #6265
  16192. A=D+A
  16193. // #6266
  16194. D=M
  16195. //^^ push_d_to_stack
  16196. // #6267
  16197. @SP
  16198. // #6268
  16199. A=M
  16200. // #6269
  16201. M=D
  16202. // #6270
  16203. @SP
  16204. // #6271
  16205. M=M+1
  16206. //vv push_d_to_stack
  16207. //vv push_from_ram(LCL, 0)
  16208. //
  16209. //// push constant 2
  16210. //^^ push_constant(2)
  16211. // #6272
  16212. @2
  16213. // #6273
  16214. D=A
  16215. //^^ push_d_to_stack
  16216. // #6274
  16217. @SP
  16218. // #6275
  16219. A=M
  16220. // #6276
  16221. M=D
  16222. // #6277
  16223. @SP
  16224. // #6278
  16225. M=M+1
  16226. //vv push_d_to_stack
  16227. //vv push_constant(2)
  16228. //
  16229. //// add
  16230. //^^ arith_binary_op(+)
  16231. //^^ pop_stack_to_d
  16232. // #6279
  16233. @SP
  16234. // #6280
  16235. M=M-1
  16236. // #6281
  16237. A=M
  16238. // #6282
  16239. D=M
  16240. //vv pop_stack_to_d
  16241. //^^ arith_d_with_stack_top(D+M)
  16242. // #6283
  16243. @R13
  16244. // #6284
  16245. M=D
  16246. //^^ pop_stack_to_d
  16247. // #6285
  16248. @SP
  16249. // #6286
  16250. M=M-1
  16251. // #6287
  16252. A=M
  16253. // #6288
  16254. D=M
  16255. //vv pop_stack_to_d
  16256. // #6289
  16257. @R13
  16258. // #6290
  16259. D=D+M
  16260. // #6291
  16261. @R13
  16262. // #6292
  16263. M=0
  16264. //vv arith_d_with_stack_top(D+M)
  16265. //^^ push_d_to_stack
  16266. // #6293
  16267. @SP
  16268. // #6294
  16269. A=M
  16270. // #6295
  16271. M=D
  16272. // #6296
  16273. @SP
  16274. // #6297
  16275. M=M+1
  16276. //vv push_d_to_stack
  16277. //vv arith_binary_op(+)
  16278. //
  16279. //// return
  16280. // #6298
  16281. @LCL
  16282. // #6299
  16283. D=M
  16284. // #6300
  16285. @R14
  16286. // #6301
  16287. M=D //R14=LCL
  16288. // #6302
  16289. @5
  16290. // #6303
  16291. A=D-A
  16292. // #6304
  16293. D=M
  16294. // #6305
  16295. @R15
  16296. // #6306
  16297. M=D //R15=*(LCL-5)
  16298. //^^ pop_stack_to_d
  16299. // #6307
  16300. @SP
  16301. // #6308
  16302. M=M-1
  16303. // #6309
  16304. A=M
  16305. // #6310
  16306. D=M
  16307. //vv pop_stack_to_d
  16308. // #6311
  16309. @ARG
  16310. // #6312
  16311. A=M
  16312. // #6313
  16313. M=D //*ARG = pop()
  16314. // #6314
  16315. @ARG
  16316. // #6315
  16317. D=M
  16318. // #6316
  16319. @SP
  16320. // #6317
  16321. M=D+1 //SP=ARG+1
  16322. // #6318
  16323. @R14
  16324. // #6319
  16325. AM=M-1
  16326. // #6320
  16327. D=M
  16328. // #6321
  16329. @THAT
  16330. // #6322
  16331. M=D //THAT = *(--R14)
  16332. // #6323
  16333. @R14
  16334. // #6324
  16335. AM=M-1
  16336. // #6325
  16337. D=M
  16338. // #6326
  16339. @THIS
  16340. // #6327
  16341. M=D //THIS = *(--R14)
  16342. // #6328
  16343. @R14
  16344. // #6329
  16345. AM=M-1
  16346. // #6330
  16347. D=M
  16348. // #6331
  16349. @ARG
  16350. // #6332
  16351. M=D //ARG = *(--R14)
  16352. // #6333
  16353. @R14
  16354. // #6334
  16355. AM=M-1
  16356. // #6335
  16357. D=M
  16358. // #6336
  16359. @LCL
  16360. // #6337
  16361. M=D //LCL = *(--R14)
  16362. // #6338
  16363. @R15
  16364. // #6339
  16365. A=M
  16366. // #6340
  16367. 0;JMP //goto *R15
  16368. //
  16369. //// function Memory.deAlloc 2
  16370. (Memory.deAlloc)
  16371. // #6341
  16372. D=0
  16373. //^^ push_d_to_stack
  16374. // #6342
  16375. @SP
  16376. // #6343
  16377. A=M
  16378. // #6344
  16379. M=D
  16380. // #6345
  16381. @SP
  16382. // #6346
  16383. M=M+1
  16384. //vv push_d_to_stack
  16385. // #6347
  16386. D=0
  16387. //^^ push_d_to_stack
  16388. // #6348
  16389. @SP
  16390. // #6349
  16391. A=M
  16392. // #6350
  16393. M=D
  16394. // #6351
  16395. @SP
  16396. // #6352
  16397. M=M+1
  16398. //vv push_d_to_stack
  16399. //
  16400. //// push argument 0
  16401. //^^ push_from_ram(ARG, 0)
  16402. // #6353
  16403. @ARG
  16404. // #6354
  16405. D=M
  16406. // #6355
  16407. @0
  16408. // #6356
  16409. A=D+A
  16410. // #6357
  16411. D=M
  16412. //^^ push_d_to_stack
  16413. // #6358
  16414. @SP
  16415. // #6359
  16416. A=M
  16417. // #6360
  16418. M=D
  16419. // #6361
  16420. @SP
  16421. // #6362
  16422. M=M+1
  16423. //vv push_d_to_stack
  16424. //vv push_from_ram(ARG, 0)
  16425. //
  16426. //// push constant 2
  16427. //^^ push_constant(2)
  16428. // #6363
  16429. @2
  16430. // #6364
  16431. D=A
  16432. //^^ push_d_to_stack
  16433. // #6365
  16434. @SP
  16435. // #6366
  16436. A=M
  16437. // #6367
  16438. M=D
  16439. // #6368
  16440. @SP
  16441. // #6369
  16442. M=M+1
  16443. //vv push_d_to_stack
  16444. //vv push_constant(2)
  16445. //
  16446. //// sub
  16447. //^^ arith_binary_op(-)
  16448. //^^ pop_stack_to_d
  16449. // #6370
  16450. @SP
  16451. // #6371
  16452. M=M-1
  16453. // #6372
  16454. A=M
  16455. // #6373
  16456. D=M
  16457. //vv pop_stack_to_d
  16458. //^^ arith_d_with_stack_top(D-M)
  16459. // #6374
  16460. @R13
  16461. // #6375
  16462. M=D
  16463. //^^ pop_stack_to_d
  16464. // #6376
  16465. @SP
  16466. // #6377
  16467. M=M-1
  16468. // #6378
  16469. A=M
  16470. // #6379
  16471. D=M
  16472. //vv pop_stack_to_d
  16473. // #6380
  16474. @R13
  16475. // #6381
  16476. D=D-M
  16477. // #6382
  16478. @R13
  16479. // #6383
  16480. M=0
  16481. //vv arith_d_with_stack_top(D-M)
  16482. //^^ push_d_to_stack
  16483. // #6384
  16484. @SP
  16485. // #6385
  16486. A=M
  16487. // #6386
  16488. M=D
  16489. // #6387
  16490. @SP
  16491. // #6388
  16492. M=M+1
  16493. //vv push_d_to_stack
  16494. //vv arith_binary_op(-)
  16495. //
  16496. //// pop local 0
  16497. //^^ pop_to_ram(LCL, 0)
  16498. // #6389
  16499. @LCL
  16500. // #6390
  16501. D=M
  16502. // #6391
  16503. @0
  16504. // #6392
  16505. D=D+A
  16506. // #6393
  16507. @R13
  16508. // #6394
  16509. M=D
  16510. //^^ pop_stack_to_d
  16511. // #6395
  16512. @SP
  16513. // #6396
  16514. M=M-1
  16515. // #6397
  16516. A=M
  16517. // #6398
  16518. D=M
  16519. //vv pop_stack_to_d
  16520. // #6399
  16521. @R13
  16522. // #6400
  16523. A=M
  16524. // #6401
  16525. M=D
  16526. // #6402
  16527. @R13
  16528. // #6403
  16529. M=0
  16530. //vv pop_to_ram(LCL, 0)
  16531. //
  16532. //// push constant 1
  16533. //^^ push_constant(1)
  16534. // #6404
  16535. @1
  16536. // #6405
  16537. D=A
  16538. //^^ push_d_to_stack
  16539. // #6406
  16540. @SP
  16541. // #6407
  16542. A=M
  16543. // #6408
  16544. M=D
  16545. // #6409
  16546. @SP
  16547. // #6410
  16548. M=M+1
  16549. //vv push_d_to_stack
  16550. //vv push_constant(1)
  16551. //
  16552. //// push local 0
  16553. //^^ push_from_ram(LCL, 0)
  16554. // #6411
  16555. @LCL
  16556. // #6412
  16557. D=M
  16558. // #6413
  16559. @0
  16560. // #6414
  16561. A=D+A
  16562. // #6415
  16563. D=M
  16564. //^^ push_d_to_stack
  16565. // #6416
  16566. @SP
  16567. // #6417
  16568. A=M
  16569. // #6418
  16570. M=D
  16571. // #6419
  16572. @SP
  16573. // #6420
  16574. M=M+1
  16575. //vv push_d_to_stack
  16576. //vv push_from_ram(LCL, 0)
  16577. //
  16578. //// add
  16579. //^^ arith_binary_op(+)
  16580. //^^ pop_stack_to_d
  16581. // #6421
  16582. @SP
  16583. // #6422
  16584. M=M-1
  16585. // #6423
  16586. A=M
  16587. // #6424
  16588. D=M
  16589. //vv pop_stack_to_d
  16590. //^^ arith_d_with_stack_top(D+M)
  16591. // #6425
  16592. @R13
  16593. // #6426
  16594. M=D
  16595. //^^ pop_stack_to_d
  16596. // #6427
  16597. @SP
  16598. // #6428
  16599. M=M-1
  16600. // #6429
  16601. A=M
  16602. // #6430
  16603. D=M
  16604. //vv pop_stack_to_d
  16605. // #6431
  16606. @R13
  16607. // #6432
  16608. D=D+M
  16609. // #6433
  16610. @R13
  16611. // #6434
  16612. M=0
  16613. //vv arith_d_with_stack_top(D+M)
  16614. //^^ push_d_to_stack
  16615. // #6435
  16616. @SP
  16617. // #6436
  16618. A=M
  16619. // #6437
  16620. M=D
  16621. // #6438
  16622. @SP
  16623. // #6439
  16624. M=M+1
  16625. //vv push_d_to_stack
  16626. //vv arith_binary_op(+)
  16627. //
  16628. //// pop pointer 1
  16629. //^^ pop_to_loc{4)
  16630. //^^ pop_stack_to_d
  16631. // #6440
  16632. @SP
  16633. // #6441
  16634. M=M-1
  16635. // #6442
  16636. A=M
  16637. // #6443
  16638. D=M
  16639. //vv pop_stack_to_d
  16640. // #6444
  16641. @4
  16642. // #6445
  16643. M=D
  16644. //vv pop_to_loc{4)
  16645. //
  16646. //// push that 0
  16647. //^^ push_from_ram(THAT, 0)
  16648. // #6446
  16649. @THAT
  16650. // #6447
  16651. D=M
  16652. // #6448
  16653. @0
  16654. // #6449
  16655. A=D+A
  16656. // #6450
  16657. D=M
  16658. //^^ push_d_to_stack
  16659. // #6451
  16660. @SP
  16661. // #6452
  16662. A=M
  16663. // #6453
  16664. M=D
  16665. // #6454
  16666. @SP
  16667. // #6455
  16668. M=M+1
  16669. //vv push_d_to_stack
  16670. //vv push_from_ram(THAT, 0)
  16671. //
  16672. //// pop local 1
  16673. //^^ pop_to_ram(LCL, 1)
  16674. // #6456
  16675. @LCL
  16676. // #6457
  16677. D=M
  16678. // #6458
  16679. @1
  16680. // #6459
  16681. D=D+A
  16682. // #6460
  16683. @R13
  16684. // #6461
  16685. M=D
  16686. //^^ pop_stack_to_d
  16687. // #6462
  16688. @SP
  16689. // #6463
  16690. M=M-1
  16691. // #6464
  16692. A=M
  16693. // #6465
  16694. D=M
  16695. //vv pop_stack_to_d
  16696. // #6466
  16697. @R13
  16698. // #6467
  16699. A=M
  16700. // #6468
  16701. M=D
  16702. // #6469
  16703. @R13
  16704. // #6470
  16705. M=0
  16706. //vv pop_to_ram(LCL, 1)
  16707. //
  16708. //// push constant 0
  16709. //^^ push_constant(0)
  16710. // #6471
  16711. @0
  16712. // #6472
  16713. D=A
  16714. //^^ push_d_to_stack
  16715. // #6473
  16716. @SP
  16717. // #6474
  16718. A=M
  16719. // #6475
  16720. M=D
  16721. // #6476
  16722. @SP
  16723. // #6477
  16724. M=M+1
  16725. //vv push_d_to_stack
  16726. //vv push_constant(0)
  16727. //
  16728. //// push local 1
  16729. //^^ push_from_ram(LCL, 1)
  16730. // #6478
  16731. @LCL
  16732. // #6479
  16733. D=M
  16734. // #6480
  16735. @1
  16736. // #6481
  16737. A=D+A
  16738. // #6482
  16739. D=M
  16740. //^^ push_d_to_stack
  16741. // #6483
  16742. @SP
  16743. // #6484
  16744. A=M
  16745. // #6485
  16746. M=D
  16747. // #6486
  16748. @SP
  16749. // #6487
  16750. M=M+1
  16751. //vv push_d_to_stack
  16752. //vv push_from_ram(LCL, 1)
  16753. //
  16754. //// add
  16755. //^^ arith_binary_op(+)
  16756. //^^ pop_stack_to_d
  16757. // #6488
  16758. @SP
  16759. // #6489
  16760. M=M-1
  16761. // #6490
  16762. A=M
  16763. // #6491
  16764. D=M
  16765. //vv pop_stack_to_d
  16766. //^^ arith_d_with_stack_top(D+M)
  16767. // #6492
  16768. @R13
  16769. // #6493
  16770. M=D
  16771. //^^ pop_stack_to_d
  16772. // #6494
  16773. @SP
  16774. // #6495
  16775. M=M-1
  16776. // #6496
  16777. A=M
  16778. // #6497
  16779. D=M
  16780. //vv pop_stack_to_d
  16781. // #6498
  16782. @R13
  16783. // #6499
  16784. D=D+M
  16785. // #6500
  16786. @R13
  16787. // #6501
  16788. M=0
  16789. //vv arith_d_with_stack_top(D+M)
  16790. //^^ push_d_to_stack
  16791. // #6502
  16792. @SP
  16793. // #6503
  16794. A=M
  16795. // #6504
  16796. M=D
  16797. // #6505
  16798. @SP
  16799. // #6506
  16800. M=M+1
  16801. //vv push_d_to_stack
  16802. //vv arith_binary_op(+)
  16803. //
  16804. //// pop pointer 1
  16805. //^^ pop_to_loc{4)
  16806. //^^ pop_stack_to_d
  16807. // #6507
  16808. @SP
  16809. // #6508
  16810. M=M-1
  16811. // #6509
  16812. A=M
  16813. // #6510
  16814. D=M
  16815. //vv pop_stack_to_d
  16816. // #6511
  16817. @4
  16818. // #6512
  16819. M=D
  16820. //vv pop_to_loc{4)
  16821. //
  16822. //// push that 0
  16823. //^^ push_from_ram(THAT, 0)
  16824. // #6513
  16825. @THAT
  16826. // #6514
  16827. D=M
  16828. // #6515
  16829. @0
  16830. // #6516
  16831. A=D+A
  16832. // #6517
  16833. D=M
  16834. //^^ push_d_to_stack
  16835. // #6518
  16836. @SP
  16837. // #6519
  16838. A=M
  16839. // #6520
  16840. M=D
  16841. // #6521
  16842. @SP
  16843. // #6522
  16844. M=M+1
  16845. //vv push_d_to_stack
  16846. //vv push_from_ram(THAT, 0)
  16847. //
  16848. //// push constant 0
  16849. //^^ push_constant(0)
  16850. // #6523
  16851. @0
  16852. // #6524
  16853. D=A
  16854. //^^ push_d_to_stack
  16855. // #6525
  16856. @SP
  16857. // #6526
  16858. A=M
  16859. // #6527
  16860. M=D
  16861. // #6528
  16862. @SP
  16863. // #6529
  16864. M=M+1
  16865. //vv push_d_to_stack
  16866. //vv push_constant(0)
  16867. //
  16868. //// eq
  16869. //^^ arith_cmp_op(JEQ)
  16870. //^^ pop_stack_to_d
  16871. // #6530
  16872. @SP
  16873. // #6531
  16874. M=M-1
  16875. // #6532
  16876. A=M
  16877. // #6533
  16878. D=M
  16879. //vv pop_stack_to_d
  16880. //^^ arith_d_with_stack_top(D-M)
  16881. // #6534
  16882. @R13
  16883. // #6535
  16884. M=D
  16885. //^^ pop_stack_to_d
  16886. // #6536
  16887. @SP
  16888. // #6537
  16889. M=M-1
  16890. // #6538
  16891. A=M
  16892. // #6539
  16893. D=M
  16894. //vv pop_stack_to_d
  16895. // #6540
  16896. @R13
  16897. // #6541
  16898. D=D-M
  16899. // #6542
  16900. @R13
  16901. // #6543
  16902. M=0
  16903. //vv arith_d_with_stack_top(D-M)
  16904. // #6544
  16905. @PUT_TRUE_69
  16906. // #6545
  16907. D;JEQ
  16908. // #6546
  16909. @R13
  16910. // #6547
  16911. M=0
  16912. // #6548
  16913. @CONT_69
  16914. // #6549
  16915. 0;JMP
  16916. (PUT_TRUE_69)
  16917. // #6550
  16918. @R13
  16919. // #6551
  16920. M=-1
  16921. (CONT_69)
  16922. // #6552
  16923. @R13
  16924. // #6553
  16925. D=M
  16926. // #6554
  16927. @R13
  16928. // #6555
  16929. M=0
  16930. //^^ push_d_to_stack
  16931. // #6556
  16932. @SP
  16933. // #6557
  16934. A=M
  16935. // #6558
  16936. M=D
  16937. // #6559
  16938. @SP
  16939. // #6560
  16940. M=M+1
  16941. //vv push_d_to_stack
  16942. //vv arith_cmp_op(JEQ)
  16943. //
  16944. //// if-goto IF_TRUE0
  16945. //^^ pop_stack_to_d
  16946. // #6561
  16947. @SP
  16948. // #6562
  16949. M=M-1
  16950. // #6563
  16951. A=M
  16952. // #6564
  16953. D=M
  16954. //vv pop_stack_to_d
  16955. // #6565
  16956. @Memory.deAlloc$IF_TRUE0
  16957. // #6566
  16958. D;JNE
  16959. //
  16960. //// goto IF_FALSE0
  16961. // #6567
  16962. @Memory.deAlloc$IF_FALSE0
  16963. // #6568
  16964. 0;JMP
  16965. //
  16966. //// label IF_TRUE0
  16967. (Memory.deAlloc$IF_TRUE0)
  16968. //
  16969. //// push constant 0
  16970. //^^ push_constant(0)
  16971. // #6569
  16972. @0
  16973. // #6570
  16974. D=A
  16975. //^^ push_d_to_stack
  16976. // #6571
  16977. @SP
  16978. // #6572
  16979. A=M
  16980. // #6573
  16981. M=D
  16982. // #6574
  16983. @SP
  16984. // #6575
  16985. M=M+1
  16986. //vv push_d_to_stack
  16987. //vv push_constant(0)
  16988. //
  16989. //// push local 0
  16990. //^^ push_from_ram(LCL, 0)
  16991. // #6576
  16992. @LCL
  16993. // #6577
  16994. D=M
  16995. // #6578
  16996. @0
  16997. // #6579
  16998. A=D+A
  16999. // #6580
  17000. D=M
  17001. //^^ push_d_to_stack
  17002. // #6581
  17003. @SP
  17004. // #6582
  17005. A=M
  17006. // #6583
  17007. M=D
  17008. // #6584
  17009. @SP
  17010. // #6585
  17011. M=M+1
  17012. //vv push_d_to_stack
  17013. //vv push_from_ram(LCL, 0)
  17014. //
  17015. //// add
  17016. //^^ arith_binary_op(+)
  17017. //^^ pop_stack_to_d
  17018. // #6586
  17019. @SP
  17020. // #6587
  17021. M=M-1
  17022. // #6588
  17023. A=M
  17024. // #6589
  17025. D=M
  17026. //vv pop_stack_to_d
  17027. //^^ arith_d_with_stack_top(D+M)
  17028. // #6590
  17029. @R13
  17030. // #6591
  17031. M=D
  17032. //^^ pop_stack_to_d
  17033. // #6592
  17034. @SP
  17035. // #6593
  17036. M=M-1
  17037. // #6594
  17038. A=M
  17039. // #6595
  17040. D=M
  17041. //vv pop_stack_to_d
  17042. // #6596
  17043. @R13
  17044. // #6597
  17045. D=D+M
  17046. // #6598
  17047. @R13
  17048. // #6599
  17049. M=0
  17050. //vv arith_d_with_stack_top(D+M)
  17051. //^^ push_d_to_stack
  17052. // #6600
  17053. @SP
  17054. // #6601
  17055. A=M
  17056. // #6602
  17057. M=D
  17058. // #6603
  17059. @SP
  17060. // #6604
  17061. M=M+1
  17062. //vv push_d_to_stack
  17063. //vv arith_binary_op(+)
  17064. //
  17065. //// push constant 1
  17066. //^^ push_constant(1)
  17067. // #6605
  17068. @1
  17069. // #6606
  17070. D=A
  17071. //^^ push_d_to_stack
  17072. // #6607
  17073. @SP
  17074. // #6608
  17075. A=M
  17076. // #6609
  17077. M=D
  17078. // #6610
  17079. @SP
  17080. // #6611
  17081. M=M+1
  17082. //vv push_d_to_stack
  17083. //vv push_constant(1)
  17084. //
  17085. //// push local 0
  17086. //^^ push_from_ram(LCL, 0)
  17087. // #6612
  17088. @LCL
  17089. // #6613
  17090. D=M
  17091. // #6614
  17092. @0
  17093. // #6615
  17094. A=D+A
  17095. // #6616
  17096. D=M
  17097. //^^ push_d_to_stack
  17098. // #6617
  17099. @SP
  17100. // #6618
  17101. A=M
  17102. // #6619
  17103. M=D
  17104. // #6620
  17105. @SP
  17106. // #6621
  17107. M=M+1
  17108. //vv push_d_to_stack
  17109. //vv push_from_ram(LCL, 0)
  17110. //
  17111. //// add
  17112. //^^ arith_binary_op(+)
  17113. //^^ pop_stack_to_d
  17114. // #6622
  17115. @SP
  17116. // #6623
  17117. M=M-1
  17118. // #6624
  17119. A=M
  17120. // #6625
  17121. D=M
  17122. //vv pop_stack_to_d
  17123. //^^ arith_d_with_stack_top(D+M)
  17124. // #6626
  17125. @R13
  17126. // #6627
  17127. M=D
  17128. //^^ pop_stack_to_d
  17129. // #6628
  17130. @SP
  17131. // #6629
  17132. M=M-1
  17133. // #6630
  17134. A=M
  17135. // #6631
  17136. D=M
  17137. //vv pop_stack_to_d
  17138. // #6632
  17139. @R13
  17140. // #6633
  17141. D=D+M
  17142. // #6634
  17143. @R13
  17144. // #6635
  17145. M=0
  17146. //vv arith_d_with_stack_top(D+M)
  17147. //^^ push_d_to_stack
  17148. // #6636
  17149. @SP
  17150. // #6637
  17151. A=M
  17152. // #6638
  17153. M=D
  17154. // #6639
  17155. @SP
  17156. // #6640
  17157. M=M+1
  17158. //vv push_d_to_stack
  17159. //vv arith_binary_op(+)
  17160. //
  17161. //// pop pointer 1
  17162. //^^ pop_to_loc{4)
  17163. //^^ pop_stack_to_d
  17164. // #6641
  17165. @SP
  17166. // #6642
  17167. M=M-1
  17168. // #6643
  17169. A=M
  17170. // #6644
  17171. D=M
  17172. //vv pop_stack_to_d
  17173. // #6645
  17174. @4
  17175. // #6646
  17176. M=D
  17177. //vv pop_to_loc{4)
  17178. //
  17179. //// push that 0
  17180. //^^ push_from_ram(THAT, 0)
  17181. // #6647
  17182. @THAT
  17183. // #6648
  17184. D=M
  17185. // #6649
  17186. @0
  17187. // #6650
  17188. A=D+A
  17189. // #6651
  17190. D=M
  17191. //^^ push_d_to_stack
  17192. // #6652
  17193. @SP
  17194. // #6653
  17195. A=M
  17196. // #6654
  17197. M=D
  17198. // #6655
  17199. @SP
  17200. // #6656
  17201. M=M+1
  17202. //vv push_d_to_stack
  17203. //vv push_from_ram(THAT, 0)
  17204. //
  17205. //// push local 0
  17206. //^^ push_from_ram(LCL, 0)
  17207. // #6657
  17208. @LCL
  17209. // #6658
  17210. D=M
  17211. // #6659
  17212. @0
  17213. // #6660
  17214. A=D+A
  17215. // #6661
  17216. D=M
  17217. //^^ push_d_to_stack
  17218. // #6662
  17219. @SP
  17220. // #6663
  17221. A=M
  17222. // #6664
  17223. M=D
  17224. // #6665
  17225. @SP
  17226. // #6666
  17227. M=M+1
  17228. //vv push_d_to_stack
  17229. //vv push_from_ram(LCL, 0)
  17230. //
  17231. //// sub
  17232. //^^ arith_binary_op(-)
  17233. //^^ pop_stack_to_d
  17234. // #6667
  17235. @SP
  17236. // #6668
  17237. M=M-1
  17238. // #6669
  17239. A=M
  17240. // #6670
  17241. D=M
  17242. //vv pop_stack_to_d
  17243. //^^ arith_d_with_stack_top(D-M)
  17244. // #6671
  17245. @R13
  17246. // #6672
  17247. M=D
  17248. //^^ pop_stack_to_d
  17249. // #6673
  17250. @SP
  17251. // #6674
  17252. M=M-1
  17253. // #6675
  17254. A=M
  17255. // #6676
  17256. D=M
  17257. //vv pop_stack_to_d
  17258. // #6677
  17259. @R13
  17260. // #6678
  17261. D=D-M
  17262. // #6679
  17263. @R13
  17264. // #6680
  17265. M=0
  17266. //vv arith_d_with_stack_top(D-M)
  17267. //^^ push_d_to_stack
  17268. // #6681
  17269. @SP
  17270. // #6682
  17271. A=M
  17272. // #6683
  17273. M=D
  17274. // #6684
  17275. @SP
  17276. // #6685
  17277. M=M+1
  17278. //vv push_d_to_stack
  17279. //vv arith_binary_op(-)
  17280. //
  17281. //// push constant 2
  17282. //^^ push_constant(2)
  17283. // #6686
  17284. @2
  17285. // #6687
  17286. D=A
  17287. //^^ push_d_to_stack
  17288. // #6688
  17289. @SP
  17290. // #6689
  17291. A=M
  17292. // #6690
  17293. M=D
  17294. // #6691
  17295. @SP
  17296. // #6692
  17297. M=M+1
  17298. //vv push_d_to_stack
  17299. //vv push_constant(2)
  17300. //
  17301. //// sub
  17302. //^^ arith_binary_op(-)
  17303. //^^ pop_stack_to_d
  17304. // #6693
  17305. @SP
  17306. // #6694
  17307. M=M-1
  17308. // #6695
  17309. A=M
  17310. // #6696
  17311. D=M
  17312. //vv pop_stack_to_d
  17313. //^^ arith_d_with_stack_top(D-M)
  17314. // #6697
  17315. @R13
  17316. // #6698
  17317. M=D
  17318. //^^ pop_stack_to_d
  17319. // #6699
  17320. @SP
  17321. // #6700
  17322. M=M-1
  17323. // #6701
  17324. A=M
  17325. // #6702
  17326. D=M
  17327. //vv pop_stack_to_d
  17328. // #6703
  17329. @R13
  17330. // #6704
  17331. D=D-M
  17332. // #6705
  17333. @R13
  17334. // #6706
  17335. M=0
  17336. //vv arith_d_with_stack_top(D-M)
  17337. //^^ push_d_to_stack
  17338. // #6707
  17339. @SP
  17340. // #6708
  17341. A=M
  17342. // #6709
  17343. M=D
  17344. // #6710
  17345. @SP
  17346. // #6711
  17347. M=M+1
  17348. //vv push_d_to_stack
  17349. //vv arith_binary_op(-)
  17350. //
  17351. //// pop temp 0
  17352. //^^ pop_to_loc{5)
  17353. //^^ pop_stack_to_d
  17354. // #6712
  17355. @SP
  17356. // #6713
  17357. M=M-1
  17358. // #6714
  17359. A=M
  17360. // #6715
  17361. D=M
  17362. //vv pop_stack_to_d
  17363. // #6716
  17364. @5
  17365. // #6717
  17366. M=D
  17367. //vv pop_to_loc{5)
  17368. //
  17369. //// pop pointer 1
  17370. //^^ pop_to_loc{4)
  17371. //^^ pop_stack_to_d
  17372. // #6718
  17373. @SP
  17374. // #6719
  17375. M=M-1
  17376. // #6720
  17377. A=M
  17378. // #6721
  17379. D=M
  17380. //vv pop_stack_to_d
  17381. // #6722
  17382. @4
  17383. // #6723
  17384. M=D
  17385. //vv pop_to_loc{4)
  17386. //
  17387. //// push temp 0
  17388. //^^ push_from_loc(5)
  17389. // #6724
  17390. @5
  17391. // #6725
  17392. D=M
  17393. //^^ push_d_to_stack
  17394. // #6726
  17395. @SP
  17396. // #6727
  17397. A=M
  17398. // #6728
  17399. M=D
  17400. // #6729
  17401. @SP
  17402. // #6730
  17403. M=M+1
  17404. //vv push_d_to_stack
  17405. //vv push_from_loc(5)
  17406. //
  17407. //// pop that 0
  17408. //^^ pop_to_ram(THAT, 0)
  17409. // #6731
  17410. @THAT
  17411. // #6732
  17412. D=M
  17413. // #6733
  17414. @0
  17415. // #6734
  17416. D=D+A
  17417. // #6735
  17418. @R13
  17419. // #6736
  17420. M=D
  17421. //^^ pop_stack_to_d
  17422. // #6737
  17423. @SP
  17424. // #6738
  17425. M=M-1
  17426. // #6739
  17427. A=M
  17428. // #6740
  17429. D=M
  17430. //vv pop_stack_to_d
  17431. // #6741
  17432. @R13
  17433. // #6742
  17434. A=M
  17435. // #6743
  17436. M=D
  17437. // #6744
  17438. @R13
  17439. // #6745
  17440. M=0
  17441. //vv pop_to_ram(THAT, 0)
  17442. //
  17443. //// goto IF_END0
  17444. // #6746
  17445. @Memory.deAlloc$IF_END0
  17446. // #6747
  17447. 0;JMP
  17448. //
  17449. //// label IF_FALSE0
  17450. (Memory.deAlloc$IF_FALSE0)
  17451. //
  17452. //// push constant 0
  17453. //^^ push_constant(0)
  17454. // #6748
  17455. @0
  17456. // #6749
  17457. D=A
  17458. //^^ push_d_to_stack
  17459. // #6750
  17460. @SP
  17461. // #6751
  17462. A=M
  17463. // #6752
  17464. M=D
  17465. // #6753
  17466. @SP
  17467. // #6754
  17468. M=M+1
  17469. //vv push_d_to_stack
  17470. //vv push_constant(0)
  17471. //
  17472. //// push local 0
  17473. //^^ push_from_ram(LCL, 0)
  17474. // #6755
  17475. @LCL
  17476. // #6756
  17477. D=M
  17478. // #6757
  17479. @0
  17480. // #6758
  17481. A=D+A
  17482. // #6759
  17483. D=M
  17484. //^^ push_d_to_stack
  17485. // #6760
  17486. @SP
  17487. // #6761
  17488. A=M
  17489. // #6762
  17490. M=D
  17491. // #6763
  17492. @SP
  17493. // #6764
  17494. M=M+1
  17495. //vv push_d_to_stack
  17496. //vv push_from_ram(LCL, 0)
  17497. //
  17498. //// add
  17499. //^^ arith_binary_op(+)
  17500. //^^ pop_stack_to_d
  17501. // #6765
  17502. @SP
  17503. // #6766
  17504. M=M-1
  17505. // #6767
  17506. A=M
  17507. // #6768
  17508. D=M
  17509. //vv pop_stack_to_d
  17510. //^^ arith_d_with_stack_top(D+M)
  17511. // #6769
  17512. @R13
  17513. // #6770
  17514. M=D
  17515. //^^ pop_stack_to_d
  17516. // #6771
  17517. @SP
  17518. // #6772
  17519. M=M-1
  17520. // #6773
  17521. A=M
  17522. // #6774
  17523. D=M
  17524. //vv pop_stack_to_d
  17525. // #6775
  17526. @R13
  17527. // #6776
  17528. D=D+M
  17529. // #6777
  17530. @R13
  17531. // #6778
  17532. M=0
  17533. //vv arith_d_with_stack_top(D+M)
  17534. //^^ push_d_to_stack
  17535. // #6779
  17536. @SP
  17537. // #6780
  17538. A=M
  17539. // #6781
  17540. M=D
  17541. // #6782
  17542. @SP
  17543. // #6783
  17544. M=M+1
  17545. //vv push_d_to_stack
  17546. //vv arith_binary_op(+)
  17547. //
  17548. //// push constant 1
  17549. //^^ push_constant(1)
  17550. // #6784
  17551. @1
  17552. // #6785
  17553. D=A
  17554. //^^ push_d_to_stack
  17555. // #6786
  17556. @SP
  17557. // #6787
  17558. A=M
  17559. // #6788
  17560. M=D
  17561. // #6789
  17562. @SP
  17563. // #6790
  17564. M=M+1
  17565. //vv push_d_to_stack
  17566. //vv push_constant(1)
  17567. //
  17568. //// push local 0
  17569. //^^ push_from_ram(LCL, 0)
  17570. // #6791
  17571. @LCL
  17572. // #6792
  17573. D=M
  17574. // #6793
  17575. @0
  17576. // #6794
  17577. A=D+A
  17578. // #6795
  17579. D=M
  17580. //^^ push_d_to_stack
  17581. // #6796
  17582. @SP
  17583. // #6797
  17584. A=M
  17585. // #6798
  17586. M=D
  17587. // #6799
  17588. @SP
  17589. // #6800
  17590. M=M+1
  17591. //vv push_d_to_stack
  17592. //vv push_from_ram(LCL, 0)
  17593. //
  17594. //// add
  17595. //^^ arith_binary_op(+)
  17596. //^^ pop_stack_to_d
  17597. // #6801
  17598. @SP
  17599. // #6802
  17600. M=M-1
  17601. // #6803
  17602. A=M
  17603. // #6804
  17604. D=M
  17605. //vv pop_stack_to_d
  17606. //^^ arith_d_with_stack_top(D+M)
  17607. // #6805
  17608. @R13
  17609. // #6806
  17610. M=D
  17611. //^^ pop_stack_to_d
  17612. // #6807
  17613. @SP
  17614. // #6808
  17615. M=M-1
  17616. // #6809
  17617. A=M
  17618. // #6810
  17619. D=M
  17620. //vv pop_stack_to_d
  17621. // #6811
  17622. @R13
  17623. // #6812
  17624. D=D+M
  17625. // #6813
  17626. @R13
  17627. // #6814
  17628. M=0
  17629. //vv arith_d_with_stack_top(D+M)
  17630. //^^ push_d_to_stack
  17631. // #6815
  17632. @SP
  17633. // #6816
  17634. A=M
  17635. // #6817
  17636. M=D
  17637. // #6818
  17638. @SP
  17639. // #6819
  17640. M=M+1
  17641. //vv push_d_to_stack
  17642. //vv arith_binary_op(+)
  17643. //
  17644. //// pop pointer 1
  17645. //^^ pop_to_loc{4)
  17646. //^^ pop_stack_to_d
  17647. // #6820
  17648. @SP
  17649. // #6821
  17650. M=M-1
  17651. // #6822
  17652. A=M
  17653. // #6823
  17654. D=M
  17655. //vv pop_stack_to_d
  17656. // #6824
  17657. @4
  17658. // #6825
  17659. M=D
  17660. //vv pop_to_loc{4)
  17661. //
  17662. //// push that 0
  17663. //^^ push_from_ram(THAT, 0)
  17664. // #6826
  17665. @THAT
  17666. // #6827
  17667. D=M
  17668. // #6828
  17669. @0
  17670. // #6829
  17671. A=D+A
  17672. // #6830
  17673. D=M
  17674. //^^ push_d_to_stack
  17675. // #6831
  17676. @SP
  17677. // #6832
  17678. A=M
  17679. // #6833
  17680. M=D
  17681. // #6834
  17682. @SP
  17683. // #6835
  17684. M=M+1
  17685. //vv push_d_to_stack
  17686. //vv push_from_ram(THAT, 0)
  17687. //
  17688. //// push local 0
  17689. //^^ push_from_ram(LCL, 0)
  17690. // #6836
  17691. @LCL
  17692. // #6837
  17693. D=M
  17694. // #6838
  17695. @0
  17696. // #6839
  17697. A=D+A
  17698. // #6840
  17699. D=M
  17700. //^^ push_d_to_stack
  17701. // #6841
  17702. @SP
  17703. // #6842
  17704. A=M
  17705. // #6843
  17706. M=D
  17707. // #6844
  17708. @SP
  17709. // #6845
  17710. M=M+1
  17711. //vv push_d_to_stack
  17712. //vv push_from_ram(LCL, 0)
  17713. //
  17714. //// sub
  17715. //^^ arith_binary_op(-)
  17716. //^^ pop_stack_to_d
  17717. // #6846
  17718. @SP
  17719. // #6847
  17720. M=M-1
  17721. // #6848
  17722. A=M
  17723. // #6849
  17724. D=M
  17725. //vv pop_stack_to_d
  17726. //^^ arith_d_with_stack_top(D-M)
  17727. // #6850
  17728. @R13
  17729. // #6851
  17730. M=D
  17731. //^^ pop_stack_to_d
  17732. // #6852
  17733. @SP
  17734. // #6853
  17735. M=M-1
  17736. // #6854
  17737. A=M
  17738. // #6855
  17739. D=M
  17740. //vv pop_stack_to_d
  17741. // #6856
  17742. @R13
  17743. // #6857
  17744. D=D-M
  17745. // #6858
  17746. @R13
  17747. // #6859
  17748. M=0
  17749. //vv arith_d_with_stack_top(D-M)
  17750. //^^ push_d_to_stack
  17751. // #6860
  17752. @SP
  17753. // #6861
  17754. A=M
  17755. // #6862
  17756. M=D
  17757. // #6863
  17758. @SP
  17759. // #6864
  17760. M=M+1
  17761. //vv push_d_to_stack
  17762. //vv arith_binary_op(-)
  17763. //
  17764. //// push constant 0
  17765. //^^ push_constant(0)
  17766. // #6865
  17767. @0
  17768. // #6866
  17769. D=A
  17770. //^^ push_d_to_stack
  17771. // #6867
  17772. @SP
  17773. // #6868
  17774. A=M
  17775. // #6869
  17776. M=D
  17777. // #6870
  17778. @SP
  17779. // #6871
  17780. M=M+1
  17781. //vv push_d_to_stack
  17782. //vv push_constant(0)
  17783. //
  17784. //// push local 1
  17785. //^^ push_from_ram(LCL, 1)
  17786. // #6872
  17787. @LCL
  17788. // #6873
  17789. D=M
  17790. // #6874
  17791. @1
  17792. // #6875
  17793. A=D+A
  17794. // #6876
  17795. D=M
  17796. //^^ push_d_to_stack
  17797. // #6877
  17798. @SP
  17799. // #6878
  17800. A=M
  17801. // #6879
  17802. M=D
  17803. // #6880
  17804. @SP
  17805. // #6881
  17806. M=M+1
  17807. //vv push_d_to_stack
  17808. //vv push_from_ram(LCL, 1)
  17809. //
  17810. //// add
  17811. //^^ arith_binary_op(+)
  17812. //^^ pop_stack_to_d
  17813. // #6882
  17814. @SP
  17815. // #6883
  17816. M=M-1
  17817. // #6884
  17818. A=M
  17819. // #6885
  17820. D=M
  17821. //vv pop_stack_to_d
  17822. //^^ arith_d_with_stack_top(D+M)
  17823. // #6886
  17824. @R13
  17825. // #6887
  17826. M=D
  17827. //^^ pop_stack_to_d
  17828. // #6888
  17829. @SP
  17830. // #6889
  17831. M=M-1
  17832. // #6890
  17833. A=M
  17834. // #6891
  17835. D=M
  17836. //vv pop_stack_to_d
  17837. // #6892
  17838. @R13
  17839. // #6893
  17840. D=D+M
  17841. // #6894
  17842. @R13
  17843. // #6895
  17844. M=0
  17845. //vv arith_d_with_stack_top(D+M)
  17846. //^^ push_d_to_stack
  17847. // #6896
  17848. @SP
  17849. // #6897
  17850. A=M
  17851. // #6898
  17852. M=D
  17853. // #6899
  17854. @SP
  17855. // #6900
  17856. M=M+1
  17857. //vv push_d_to_stack
  17858. //vv arith_binary_op(+)
  17859. //
  17860. //// pop pointer 1
  17861. //^^ pop_to_loc{4)
  17862. //^^ pop_stack_to_d
  17863. // #6901
  17864. @SP
  17865. // #6902
  17866. M=M-1
  17867. // #6903
  17868. A=M
  17869. // #6904
  17870. D=M
  17871. //vv pop_stack_to_d
  17872. // #6905
  17873. @4
  17874. // #6906
  17875. M=D
  17876. //vv pop_to_loc{4)
  17877. //
  17878. //// push that 0
  17879. //^^ push_from_ram(THAT, 0)
  17880. // #6907
  17881. @THAT
  17882. // #6908
  17883. D=M
  17884. // #6909
  17885. @0
  17886. // #6910
  17887. A=D+A
  17888. // #6911
  17889. D=M
  17890. //^^ push_d_to_stack
  17891. // #6912
  17892. @SP
  17893. // #6913
  17894. A=M
  17895. // #6914
  17896. M=D
  17897. // #6915
  17898. @SP
  17899. // #6916
  17900. M=M+1
  17901. //vv push_d_to_stack
  17902. //vv push_from_ram(THAT, 0)
  17903. //
  17904. //// add
  17905. //^^ arith_binary_op(+)
  17906. //^^ pop_stack_to_d
  17907. // #6917
  17908. @SP
  17909. // #6918
  17910. M=M-1
  17911. // #6919
  17912. A=M
  17913. // #6920
  17914. D=M
  17915. //vv pop_stack_to_d
  17916. //^^ arith_d_with_stack_top(D+M)
  17917. // #6921
  17918. @R13
  17919. // #6922
  17920. M=D
  17921. //^^ pop_stack_to_d
  17922. // #6923
  17923. @SP
  17924. // #6924
  17925. M=M-1
  17926. // #6925
  17927. A=M
  17928. // #6926
  17929. D=M
  17930. //vv pop_stack_to_d
  17931. // #6927
  17932. @R13
  17933. // #6928
  17934. D=D+M
  17935. // #6929
  17936. @R13
  17937. // #6930
  17938. M=0
  17939. //vv arith_d_with_stack_top(D+M)
  17940. //^^ push_d_to_stack
  17941. // #6931
  17942. @SP
  17943. // #6932
  17944. A=M
  17945. // #6933
  17946. M=D
  17947. // #6934
  17948. @SP
  17949. // #6935
  17950. M=M+1
  17951. //vv push_d_to_stack
  17952. //vv arith_binary_op(+)
  17953. //
  17954. //// pop temp 0
  17955. //^^ pop_to_loc{5)
  17956. //^^ pop_stack_to_d
  17957. // #6936
  17958. @SP
  17959. // #6937
  17960. M=M-1
  17961. // #6938
  17962. A=M
  17963. // #6939
  17964. D=M
  17965. //vv pop_stack_to_d
  17966. // #6940
  17967. @5
  17968. // #6941
  17969. M=D
  17970. //vv pop_to_loc{5)
  17971. //
  17972. //// pop pointer 1
  17973. //^^ pop_to_loc{4)
  17974. //^^ pop_stack_to_d
  17975. // #6942
  17976. @SP
  17977. // #6943
  17978. M=M-1
  17979. // #6944
  17980. A=M
  17981. // #6945
  17982. D=M
  17983. //vv pop_stack_to_d
  17984. // #6946
  17985. @4
  17986. // #6947
  17987. M=D
  17988. //vv pop_to_loc{4)
  17989. //
  17990. //// push temp 0
  17991. //^^ push_from_loc(5)
  17992. // #6948
  17993. @5
  17994. // #6949
  17995. D=M
  17996. //^^ push_d_to_stack
  17997. // #6950
  17998. @SP
  17999. // #6951
  18000. A=M
  18001. // #6952
  18002. M=D
  18003. // #6953
  18004. @SP
  18005. // #6954
  18006. M=M+1
  18007. //vv push_d_to_stack
  18008. //vv push_from_loc(5)
  18009. //
  18010. //// pop that 0
  18011. //^^ pop_to_ram(THAT, 0)
  18012. // #6955
  18013. @THAT
  18014. // #6956
  18015. D=M
  18016. // #6957
  18017. @0
  18018. // #6958
  18019. D=D+A
  18020. // #6959
  18021. @R13
  18022. // #6960
  18023. M=D
  18024. //^^ pop_stack_to_d
  18025. // #6961
  18026. @SP
  18027. // #6962
  18028. M=M-1
  18029. // #6963
  18030. A=M
  18031. // #6964
  18032. D=M
  18033. //vv pop_stack_to_d
  18034. // #6965
  18035. @R13
  18036. // #6966
  18037. A=M
  18038. // #6967
  18039. M=D
  18040. // #6968
  18041. @R13
  18042. // #6969
  18043. M=0
  18044. //vv pop_to_ram(THAT, 0)
  18045. //
  18046. //// push constant 1
  18047. //^^ push_constant(1)
  18048. // #6970
  18049. @1
  18050. // #6971
  18051. D=A
  18052. //^^ push_d_to_stack
  18053. // #6972
  18054. @SP
  18055. // #6973
  18056. A=M
  18057. // #6974
  18058. M=D
  18059. // #6975
  18060. @SP
  18061. // #6976
  18062. M=M+1
  18063. //vv push_d_to_stack
  18064. //vv push_constant(1)
  18065. //
  18066. //// push local 1
  18067. //^^ push_from_ram(LCL, 1)
  18068. // #6977
  18069. @LCL
  18070. // #6978
  18071. D=M
  18072. // #6979
  18073. @1
  18074. // #6980
  18075. A=D+A
  18076. // #6981
  18077. D=M
  18078. //^^ push_d_to_stack
  18079. // #6982
  18080. @SP
  18081. // #6983
  18082. A=M
  18083. // #6984
  18084. M=D
  18085. // #6985
  18086. @SP
  18087. // #6986
  18088. M=M+1
  18089. //vv push_d_to_stack
  18090. //vv push_from_ram(LCL, 1)
  18091. //
  18092. //// add
  18093. //^^ arith_binary_op(+)
  18094. //^^ pop_stack_to_d
  18095. // #6987
  18096. @SP
  18097. // #6988
  18098. M=M-1
  18099. // #6989
  18100. A=M
  18101. // #6990
  18102. D=M
  18103. //vv pop_stack_to_d
  18104. //^^ arith_d_with_stack_top(D+M)
  18105. // #6991
  18106. @R13
  18107. // #6992
  18108. M=D
  18109. //^^ pop_stack_to_d
  18110. // #6993
  18111. @SP
  18112. // #6994
  18113. M=M-1
  18114. // #6995
  18115. A=M
  18116. // #6996
  18117. D=M
  18118. //vv pop_stack_to_d
  18119. // #6997
  18120. @R13
  18121. // #6998
  18122. D=D+M
  18123. // #6999
  18124. @R13
  18125. // #7000
  18126. M=0
  18127. //vv arith_d_with_stack_top(D+M)
  18128. //^^ push_d_to_stack
  18129. // #7001
  18130. @SP
  18131. // #7002
  18132. A=M
  18133. // #7003
  18134. M=D
  18135. // #7004
  18136. @SP
  18137. // #7005
  18138. M=M+1
  18139. //vv push_d_to_stack
  18140. //vv arith_binary_op(+)
  18141. //
  18142. //// pop pointer 1
  18143. //^^ pop_to_loc{4)
  18144. //^^ pop_stack_to_d
  18145. // #7006
  18146. @SP
  18147. // #7007
  18148. M=M-1
  18149. // #7008
  18150. A=M
  18151. // #7009
  18152. D=M
  18153. //vv pop_stack_to_d
  18154. // #7010
  18155. @4
  18156. // #7011
  18157. M=D
  18158. //vv pop_to_loc{4)
  18159. //
  18160. //// push that 0
  18161. //^^ push_from_ram(THAT, 0)
  18162. // #7012
  18163. @THAT
  18164. // #7013
  18165. D=M
  18166. // #7014
  18167. @0
  18168. // #7015
  18169. A=D+A
  18170. // #7016
  18171. D=M
  18172. //^^ push_d_to_stack
  18173. // #7017
  18174. @SP
  18175. // #7018
  18176. A=M
  18177. // #7019
  18178. M=D
  18179. // #7020
  18180. @SP
  18181. // #7021
  18182. M=M+1
  18183. //vv push_d_to_stack
  18184. //vv push_from_ram(THAT, 0)
  18185. //
  18186. //// push local 1
  18187. //^^ push_from_ram(LCL, 1)
  18188. // #7022
  18189. @LCL
  18190. // #7023
  18191. D=M
  18192. // #7024
  18193. @1
  18194. // #7025
  18195. A=D+A
  18196. // #7026
  18197. D=M
  18198. //^^ push_d_to_stack
  18199. // #7027
  18200. @SP
  18201. // #7028
  18202. A=M
  18203. // #7029
  18204. M=D
  18205. // #7030
  18206. @SP
  18207. // #7031
  18208. M=M+1
  18209. //vv push_d_to_stack
  18210. //vv push_from_ram(LCL, 1)
  18211. //
  18212. //// push constant 2
  18213. //^^ push_constant(2)
  18214. // #7032
  18215. @2
  18216. // #7033
  18217. D=A
  18218. //^^ push_d_to_stack
  18219. // #7034
  18220. @SP
  18221. // #7035
  18222. A=M
  18223. // #7036
  18224. M=D
  18225. // #7037
  18226. @SP
  18227. // #7038
  18228. M=M+1
  18229. //vv push_d_to_stack
  18230. //vv push_constant(2)
  18231. //
  18232. //// add
  18233. //^^ arith_binary_op(+)
  18234. //^^ pop_stack_to_d
  18235. // #7039
  18236. @SP
  18237. // #7040
  18238. M=M-1
  18239. // #7041
  18240. A=M
  18241. // #7042
  18242. D=M
  18243. //vv pop_stack_to_d
  18244. //^^ arith_d_with_stack_top(D+M)
  18245. // #7043
  18246. @R13
  18247. // #7044
  18248. M=D
  18249. //^^ pop_stack_to_d
  18250. // #7045
  18251. @SP
  18252. // #7046
  18253. M=M-1
  18254. // #7047
  18255. A=M
  18256. // #7048
  18257. D=M
  18258. //vv pop_stack_to_d
  18259. // #7049
  18260. @R13
  18261. // #7050
  18262. D=D+M
  18263. // #7051
  18264. @R13
  18265. // #7052
  18266. M=0
  18267. //vv arith_d_with_stack_top(D+M)
  18268. //^^ push_d_to_stack
  18269. // #7053
  18270. @SP
  18271. // #7054
  18272. A=M
  18273. // #7055
  18274. M=D
  18275. // #7056
  18276. @SP
  18277. // #7057
  18278. M=M+1
  18279. //vv push_d_to_stack
  18280. //vv arith_binary_op(+)
  18281. //
  18282. //// eq
  18283. //^^ arith_cmp_op(JEQ)
  18284. //^^ pop_stack_to_d
  18285. // #7058
  18286. @SP
  18287. // #7059
  18288. M=M-1
  18289. // #7060
  18290. A=M
  18291. // #7061
  18292. D=M
  18293. //vv pop_stack_to_d
  18294. //^^ arith_d_with_stack_top(D-M)
  18295. // #7062
  18296. @R13
  18297. // #7063
  18298. M=D
  18299. //^^ pop_stack_to_d
  18300. // #7064
  18301. @SP
  18302. // #7065
  18303. M=M-1
  18304. // #7066
  18305. A=M
  18306. // #7067
  18307. D=M
  18308. //vv pop_stack_to_d
  18309. // #7068
  18310. @R13
  18311. // #7069
  18312. D=D-M
  18313. // #7070
  18314. @R13
  18315. // #7071
  18316. M=0
  18317. //vv arith_d_with_stack_top(D-M)
  18318. // #7072
  18319. @PUT_TRUE_70
  18320. // #7073
  18321. D;JEQ
  18322. // #7074
  18323. @R13
  18324. // #7075
  18325. M=0
  18326. // #7076
  18327. @CONT_70
  18328. // #7077
  18329. 0;JMP
  18330. (PUT_TRUE_70)
  18331. // #7078
  18332. @R13
  18333. // #7079
  18334. M=-1
  18335. (CONT_70)
  18336. // #7080
  18337. @R13
  18338. // #7081
  18339. D=M
  18340. // #7082
  18341. @R13
  18342. // #7083
  18343. M=0
  18344. //^^ push_d_to_stack
  18345. // #7084
  18346. @SP
  18347. // #7085
  18348. A=M
  18349. // #7086
  18350. M=D
  18351. // #7087
  18352. @SP
  18353. // #7088
  18354. M=M+1
  18355. //vv push_d_to_stack
  18356. //vv arith_cmp_op(JEQ)
  18357. //
  18358. //// if-goto IF_TRUE1
  18359. //^^ pop_stack_to_d
  18360. // #7089
  18361. @SP
  18362. // #7090
  18363. M=M-1
  18364. // #7091
  18365. A=M
  18366. // #7092
  18367. D=M
  18368. //vv pop_stack_to_d
  18369. // #7093
  18370. @Memory.deAlloc$IF_TRUE1
  18371. // #7094
  18372. D;JNE
  18373. //
  18374. //// goto IF_FALSE1
  18375. // #7095
  18376. @Memory.deAlloc$IF_FALSE1
  18377. // #7096
  18378. 0;JMP
  18379. //
  18380. //// label IF_TRUE1
  18381. (Memory.deAlloc$IF_TRUE1)
  18382. //
  18383. //// push constant 1
  18384. //^^ push_constant(1)
  18385. // #7097
  18386. @1
  18387. // #7098
  18388. D=A
  18389. //^^ push_d_to_stack
  18390. // #7099
  18391. @SP
  18392. // #7100
  18393. A=M
  18394. // #7101
  18395. M=D
  18396. // #7102
  18397. @SP
  18398. // #7103
  18399. M=M+1
  18400. //vv push_d_to_stack
  18401. //vv push_constant(1)
  18402. //
  18403. //// push local 0
  18404. //^^ push_from_ram(LCL, 0)
  18405. // #7104
  18406. @LCL
  18407. // #7105
  18408. D=M
  18409. // #7106
  18410. @0
  18411. // #7107
  18412. A=D+A
  18413. // #7108
  18414. D=M
  18415. //^^ push_d_to_stack
  18416. // #7109
  18417. @SP
  18418. // #7110
  18419. A=M
  18420. // #7111
  18421. M=D
  18422. // #7112
  18423. @SP
  18424. // #7113
  18425. M=M+1
  18426. //vv push_d_to_stack
  18427. //vv push_from_ram(LCL, 0)
  18428. //
  18429. //// add
  18430. //^^ arith_binary_op(+)
  18431. //^^ pop_stack_to_d
  18432. // #7114
  18433. @SP
  18434. // #7115
  18435. M=M-1
  18436. // #7116
  18437. A=M
  18438. // #7117
  18439. D=M
  18440. //vv pop_stack_to_d
  18441. //^^ arith_d_with_stack_top(D+M)
  18442. // #7118
  18443. @R13
  18444. // #7119
  18445. M=D
  18446. //^^ pop_stack_to_d
  18447. // #7120
  18448. @SP
  18449. // #7121
  18450. M=M-1
  18451. // #7122
  18452. A=M
  18453. // #7123
  18454. D=M
  18455. //vv pop_stack_to_d
  18456. // #7124
  18457. @R13
  18458. // #7125
  18459. D=D+M
  18460. // #7126
  18461. @R13
  18462. // #7127
  18463. M=0
  18464. //vv arith_d_with_stack_top(D+M)
  18465. //^^ push_d_to_stack
  18466. // #7128
  18467. @SP
  18468. // #7129
  18469. A=M
  18470. // #7130
  18471. M=D
  18472. // #7131
  18473. @SP
  18474. // #7132
  18475. M=M+1
  18476. //vv push_d_to_stack
  18477. //vv arith_binary_op(+)
  18478. //
  18479. //// push local 0
  18480. //^^ push_from_ram(LCL, 0)
  18481. // #7133
  18482. @LCL
  18483. // #7134
  18484. D=M
  18485. // #7135
  18486. @0
  18487. // #7136
  18488. A=D+A
  18489. // #7137
  18490. D=M
  18491. //^^ push_d_to_stack
  18492. // #7138
  18493. @SP
  18494. // #7139
  18495. A=M
  18496. // #7140
  18497. M=D
  18498. // #7141
  18499. @SP
  18500. // #7142
  18501. M=M+1
  18502. //vv push_d_to_stack
  18503. //vv push_from_ram(LCL, 0)
  18504. //
  18505. //// push constant 2
  18506. //^^ push_constant(2)
  18507. // #7143
  18508. @2
  18509. // #7144
  18510. D=A
  18511. //^^ push_d_to_stack
  18512. // #7145
  18513. @SP
  18514. // #7146
  18515. A=M
  18516. // #7147
  18517. M=D
  18518. // #7148
  18519. @SP
  18520. // #7149
  18521. M=M+1
  18522. //vv push_d_to_stack
  18523. //vv push_constant(2)
  18524. //
  18525. //// add
  18526. //^^ arith_binary_op(+)
  18527. //^^ pop_stack_to_d
  18528. // #7150
  18529. @SP
  18530. // #7151
  18531. M=M-1
  18532. // #7152
  18533. A=M
  18534. // #7153
  18535. D=M
  18536. //vv pop_stack_to_d
  18537. //^^ arith_d_with_stack_top(D+M)
  18538. // #7154
  18539. @R13
  18540. // #7155
  18541. M=D
  18542. //^^ pop_stack_to_d
  18543. // #7156
  18544. @SP
  18545. // #7157
  18546. M=M-1
  18547. // #7158
  18548. A=M
  18549. // #7159
  18550. D=M
  18551. //vv pop_stack_to_d
  18552. // #7160
  18553. @R13
  18554. // #7161
  18555. D=D+M
  18556. // #7162
  18557. @R13
  18558. // #7163
  18559. M=0
  18560. //vv arith_d_with_stack_top(D+M)
  18561. //^^ push_d_to_stack
  18562. // #7164
  18563. @SP
  18564. // #7165
  18565. A=M
  18566. // #7166
  18567. M=D
  18568. // #7167
  18569. @SP
  18570. // #7168
  18571. M=M+1
  18572. //vv push_d_to_stack
  18573. //vv arith_binary_op(+)
  18574. //
  18575. //// pop temp 0
  18576. //^^ pop_to_loc{5)
  18577. //^^ pop_stack_to_d
  18578. // #7169
  18579. @SP
  18580. // #7170
  18581. M=M-1
  18582. // #7171
  18583. A=M
  18584. // #7172
  18585. D=M
  18586. //vv pop_stack_to_d
  18587. // #7173
  18588. @5
  18589. // #7174
  18590. M=D
  18591. //vv pop_to_loc{5)
  18592. //
  18593. //// pop pointer 1
  18594. //^^ pop_to_loc{4)
  18595. //^^ pop_stack_to_d
  18596. // #7175
  18597. @SP
  18598. // #7176
  18599. M=M-1
  18600. // #7177
  18601. A=M
  18602. // #7178
  18603. D=M
  18604. //vv pop_stack_to_d
  18605. // #7179
  18606. @4
  18607. // #7180
  18608. M=D
  18609. //vv pop_to_loc{4)
  18610. //
  18611. //// push temp 0
  18612. //^^ push_from_loc(5)
  18613. // #7181
  18614. @5
  18615. // #7182
  18616. D=M
  18617. //^^ push_d_to_stack
  18618. // #7183
  18619. @SP
  18620. // #7184
  18621. A=M
  18622. // #7185
  18623. M=D
  18624. // #7186
  18625. @SP
  18626. // #7187
  18627. M=M+1
  18628. //vv push_d_to_stack
  18629. //vv push_from_loc(5)
  18630. //
  18631. //// pop that 0
  18632. //^^ pop_to_ram(THAT, 0)
  18633. // #7188
  18634. @THAT
  18635. // #7189
  18636. D=M
  18637. // #7190
  18638. @0
  18639. // #7191
  18640. D=D+A
  18641. // #7192
  18642. @R13
  18643. // #7193
  18644. M=D
  18645. //^^ pop_stack_to_d
  18646. // #7194
  18647. @SP
  18648. // #7195
  18649. M=M-1
  18650. // #7196
  18651. A=M
  18652. // #7197
  18653. D=M
  18654. //vv pop_stack_to_d
  18655. // #7198
  18656. @R13
  18657. // #7199
  18658. A=M
  18659. // #7200
  18660. M=D
  18661. // #7201
  18662. @R13
  18663. // #7202
  18664. M=0
  18665. //vv pop_to_ram(THAT, 0)
  18666. //
  18667. //// goto IF_END1
  18668. // #7203
  18669. @Memory.deAlloc$IF_END1
  18670. // #7204
  18671. 0;JMP
  18672. //
  18673. //// label IF_FALSE1
  18674. (Memory.deAlloc$IF_FALSE1)
  18675. //
  18676. //// push constant 1
  18677. //^^ push_constant(1)
  18678. // #7205
  18679. @1
  18680. // #7206
  18681. D=A
  18682. //^^ push_d_to_stack
  18683. // #7207
  18684. @SP
  18685. // #7208
  18686. A=M
  18687. // #7209
  18688. M=D
  18689. // #7210
  18690. @SP
  18691. // #7211
  18692. M=M+1
  18693. //vv push_d_to_stack
  18694. //vv push_constant(1)
  18695. //
  18696. //// push local 0
  18697. //^^ push_from_ram(LCL, 0)
  18698. // #7212
  18699. @LCL
  18700. // #7213
  18701. D=M
  18702. // #7214
  18703. @0
  18704. // #7215
  18705. A=D+A
  18706. // #7216
  18707. D=M
  18708. //^^ push_d_to_stack
  18709. // #7217
  18710. @SP
  18711. // #7218
  18712. A=M
  18713. // #7219
  18714. M=D
  18715. // #7220
  18716. @SP
  18717. // #7221
  18718. M=M+1
  18719. //vv push_d_to_stack
  18720. //vv push_from_ram(LCL, 0)
  18721. //
  18722. //// add
  18723. //^^ arith_binary_op(+)
  18724. //^^ pop_stack_to_d
  18725. // #7222
  18726. @SP
  18727. // #7223
  18728. M=M-1
  18729. // #7224
  18730. A=M
  18731. // #7225
  18732. D=M
  18733. //vv pop_stack_to_d
  18734. //^^ arith_d_with_stack_top(D+M)
  18735. // #7226
  18736. @R13
  18737. // #7227
  18738. M=D
  18739. //^^ pop_stack_to_d
  18740. // #7228
  18741. @SP
  18742. // #7229
  18743. M=M-1
  18744. // #7230
  18745. A=M
  18746. // #7231
  18747. D=M
  18748. //vv pop_stack_to_d
  18749. // #7232
  18750. @R13
  18751. // #7233
  18752. D=D+M
  18753. // #7234
  18754. @R13
  18755. // #7235
  18756. M=0
  18757. //vv arith_d_with_stack_top(D+M)
  18758. //^^ push_d_to_stack
  18759. // #7236
  18760. @SP
  18761. // #7237
  18762. A=M
  18763. // #7238
  18764. M=D
  18765. // #7239
  18766. @SP
  18767. // #7240
  18768. M=M+1
  18769. //vv push_d_to_stack
  18770. //vv arith_binary_op(+)
  18771. //
  18772. //// push constant 1
  18773. //^^ push_constant(1)
  18774. // #7241
  18775. @1
  18776. // #7242
  18777. D=A
  18778. //^^ push_d_to_stack
  18779. // #7243
  18780. @SP
  18781. // #7244
  18782. A=M
  18783. // #7245
  18784. M=D
  18785. // #7246
  18786. @SP
  18787. // #7247
  18788. M=M+1
  18789. //vv push_d_to_stack
  18790. //vv push_constant(1)
  18791. //
  18792. //// push local 1
  18793. //^^ push_from_ram(LCL, 1)
  18794. // #7248
  18795. @LCL
  18796. // #7249
  18797. D=M
  18798. // #7250
  18799. @1
  18800. // #7251
  18801. A=D+A
  18802. // #7252
  18803. D=M
  18804. //^^ push_d_to_stack
  18805. // #7253
  18806. @SP
  18807. // #7254
  18808. A=M
  18809. // #7255
  18810. M=D
  18811. // #7256
  18812. @SP
  18813. // #7257
  18814. M=M+1
  18815. //vv push_d_to_stack
  18816. //vv push_from_ram(LCL, 1)
  18817. //
  18818. //// add
  18819. //^^ arith_binary_op(+)
  18820. //^^ pop_stack_to_d
  18821. // #7258
  18822. @SP
  18823. // #7259
  18824. M=M-1
  18825. // #7260
  18826. A=M
  18827. // #7261
  18828. D=M
  18829. //vv pop_stack_to_d
  18830. //^^ arith_d_with_stack_top(D+M)
  18831. // #7262
  18832. @R13
  18833. // #7263
  18834. M=D
  18835. //^^ pop_stack_to_d
  18836. // #7264
  18837. @SP
  18838. // #7265
  18839. M=M-1
  18840. // #7266
  18841. A=M
  18842. // #7267
  18843. D=M
  18844. //vv pop_stack_to_d
  18845. // #7268
  18846. @R13
  18847. // #7269
  18848. D=D+M
  18849. // #7270
  18850. @R13
  18851. // #7271
  18852. M=0
  18853. //vv arith_d_with_stack_top(D+M)
  18854. //^^ push_d_to_stack
  18855. // #7272
  18856. @SP
  18857. // #7273
  18858. A=M
  18859. // #7274
  18860. M=D
  18861. // #7275
  18862. @SP
  18863. // #7276
  18864. M=M+1
  18865. //vv push_d_to_stack
  18866. //vv arith_binary_op(+)
  18867. //
  18868. //// pop pointer 1
  18869. //^^ pop_to_loc{4)
  18870. //^^ pop_stack_to_d
  18871. // #7277
  18872. @SP
  18873. // #7278
  18874. M=M-1
  18875. // #7279
  18876. A=M
  18877. // #7280
  18878. D=M
  18879. //vv pop_stack_to_d
  18880. // #7281
  18881. @4
  18882. // #7282
  18883. M=D
  18884. //vv pop_to_loc{4)
  18885. //
  18886. //// push that 0
  18887. //^^ push_from_ram(THAT, 0)
  18888. // #7283
  18889. @THAT
  18890. // #7284
  18891. D=M
  18892. // #7285
  18893. @0
  18894. // #7286
  18895. A=D+A
  18896. // #7287
  18897. D=M
  18898. //^^ push_d_to_stack
  18899. // #7288
  18900. @SP
  18901. // #7289
  18902. A=M
  18903. // #7290
  18904. M=D
  18905. // #7291
  18906. @SP
  18907. // #7292
  18908. M=M+1
  18909. //vv push_d_to_stack
  18910. //vv push_from_ram(THAT, 0)
  18911. //
  18912. //// pop temp 0
  18913. //^^ pop_to_loc{5)
  18914. //^^ pop_stack_to_d
  18915. // #7293
  18916. @SP
  18917. // #7294
  18918. M=M-1
  18919. // #7295
  18920. A=M
  18921. // #7296
  18922. D=M
  18923. //vv pop_stack_to_d
  18924. // #7297
  18925. @5
  18926. // #7298
  18927. M=D
  18928. //vv pop_to_loc{5)
  18929. //
  18930. //// pop pointer 1
  18931. //^^ pop_to_loc{4)
  18932. //^^ pop_stack_to_d
  18933. // #7299
  18934. @SP
  18935. // #7300
  18936. M=M-1
  18937. // #7301
  18938. A=M
  18939. // #7302
  18940. D=M
  18941. //vv pop_stack_to_d
  18942. // #7303
  18943. @4
  18944. // #7304
  18945. M=D
  18946. //vv pop_to_loc{4)
  18947. //
  18948. //// push temp 0
  18949. //^^ push_from_loc(5)
  18950. // #7305
  18951. @5
  18952. // #7306
  18953. D=M
  18954. //^^ push_d_to_stack
  18955. // #7307
  18956. @SP
  18957. // #7308
  18958. A=M
  18959. // #7309
  18960. M=D
  18961. // #7310
  18962. @SP
  18963. // #7311
  18964. M=M+1
  18965. //vv push_d_to_stack
  18966. //vv push_from_loc(5)
  18967. //
  18968. //// pop that 0
  18969. //^^ pop_to_ram(THAT, 0)
  18970. // #7312
  18971. @THAT
  18972. // #7313
  18973. D=M
  18974. // #7314
  18975. @0
  18976. // #7315
  18977. D=D+A
  18978. // #7316
  18979. @R13
  18980. // #7317
  18981. M=D
  18982. //^^ pop_stack_to_d
  18983. // #7318
  18984. @SP
  18985. // #7319
  18986. M=M-1
  18987. // #7320
  18988. A=M
  18989. // #7321
  18990. D=M
  18991. //vv pop_stack_to_d
  18992. // #7322
  18993. @R13
  18994. // #7323
  18995. A=M
  18996. // #7324
  18997. M=D
  18998. // #7325
  18999. @R13
  19000. // #7326
  19001. M=0
  19002. //vv pop_to_ram(THAT, 0)
  19003. //
  19004. //// label IF_END1
  19005. (Memory.deAlloc$IF_END1)
  19006. //
  19007. //// label IF_END0
  19008. (Memory.deAlloc$IF_END0)
  19009. //
  19010. //// push constant 0
  19011. //^^ push_constant(0)
  19012. // #7327
  19013. @0
  19014. // #7328
  19015. D=A
  19016. //^^ push_d_to_stack
  19017. // #7329
  19018. @SP
  19019. // #7330
  19020. A=M
  19021. // #7331
  19022. M=D
  19023. // #7332
  19024. @SP
  19025. // #7333
  19026. M=M+1
  19027. //vv push_d_to_stack
  19028. //vv push_constant(0)
  19029. //
  19030. //// return
  19031. // #7334
  19032. @LCL
  19033. // #7335
  19034. D=M
  19035. // #7336
  19036. @R14
  19037. // #7337
  19038. M=D //R14=LCL
  19039. // #7338
  19040. @5
  19041. // #7339
  19042. A=D-A
  19043. // #7340
  19044. D=M
  19045. // #7341
  19046. @R15
  19047. // #7342
  19048. M=D //R15=*(LCL-5)
  19049. //^^ pop_stack_to_d
  19050. // #7343
  19051. @SP
  19052. // #7344
  19053. M=M-1
  19054. // #7345
  19055. A=M
  19056. // #7346
  19057. D=M
  19058. //vv pop_stack_to_d
  19059. // #7347
  19060. @ARG
  19061. // #7348
  19062. A=M
  19063. // #7349
  19064. M=D //*ARG = pop()
  19065. // #7350
  19066. @ARG
  19067. // #7351
  19068. D=M
  19069. // #7352
  19070. @SP
  19071. // #7353
  19072. M=D+1 //SP=ARG+1
  19073. // #7354
  19074. @R14
  19075. // #7355
  19076. AM=M-1
  19077. // #7356
  19078. D=M
  19079. // #7357
  19080. @THAT
  19081. // #7358
  19082. M=D //THAT = *(--R14)
  19083. // #7359
  19084. @R14
  19085. // #7360
  19086. AM=M-1
  19087. // #7361
  19088. D=M
  19089. // #7362
  19090. @THIS
  19091. // #7363
  19092. M=D //THIS = *(--R14)
  19093. // #7364
  19094. @R14
  19095. // #7365
  19096. AM=M-1
  19097. // #7366
  19098. D=M
  19099. // #7367
  19100. @ARG
  19101. // #7368
  19102. M=D //ARG = *(--R14)
  19103. // #7369
  19104. @R14
  19105. // #7370
  19106. AM=M-1
  19107. // #7371
  19108. D=M
  19109. // #7372
  19110. @LCL
  19111. // #7373
  19112. M=D //LCL = *(--R14)
  19113. // #7374
  19114. @R15
  19115. // #7375
  19116. A=M
  19117. // #7376
  19118. 0;JMP //goto *R15
  19119. //
  19120. //// function Output.init 0
  19121. (Output.init)
  19122. //
  19123. //// push constant 16384
  19124. //^^ push_constant(16384)
  19125. // #7377
  19126. @16384
  19127. // #7378
  19128. D=A
  19129. //^^ push_d_to_stack
  19130. // #7379
  19131. @SP
  19132. // #7380
  19133. A=M
  19134. // #7381
  19135. M=D
  19136. // #7382
  19137. @SP
  19138. // #7383
  19139. M=M+1
  19140. //vv push_d_to_stack
  19141. //vv push_constant(16384)
  19142. //
  19143. //// pop static 4
  19144. //^^ pop_to_loc{Output.vm.4)
  19145. //^^ pop_stack_to_d
  19146. // #7384
  19147. @SP
  19148. // #7385
  19149. M=M-1
  19150. // #7386
  19151. A=M
  19152. // #7387
  19153. D=M
  19154. //vv pop_stack_to_d
  19155. // #7388
  19156. @Output.vm.4
  19157. // #7389
  19158. M=D
  19159. //vv pop_to_loc{Output.vm.4)
  19160. //
  19161. //// push constant 0
  19162. //^^ push_constant(0)
  19163. // #7390
  19164. @0
  19165. // #7391
  19166. D=A
  19167. //^^ push_d_to_stack
  19168. // #7392
  19169. @SP
  19170. // #7393
  19171. A=M
  19172. // #7394
  19173. M=D
  19174. // #7395
  19175. @SP
  19176. // #7396
  19177. M=M+1
  19178. //vv push_d_to_stack
  19179. //vv push_constant(0)
  19180. //
  19181. //// not
  19182. //^^ arith_unary_op(!)
  19183. //^^ pop_stack_to_d
  19184. // #7397
  19185. @SP
  19186. // #7398
  19187. M=M-1
  19188. // #7399
  19189. A=M
  19190. // #7400
  19191. D=M
  19192. //vv pop_stack_to_d
  19193. // #7401
  19194. D=!D
  19195. //^^ push_d_to_stack
  19196. // #7402
  19197. @SP
  19198. // #7403
  19199. A=M
  19200. // #7404
  19201. M=D
  19202. // #7405
  19203. @SP
  19204. // #7406
  19205. M=M+1
  19206. //vv push_d_to_stack
  19207. //vv arith_unary_op(!)
  19208. //
  19209. //// pop static 2
  19210. //^^ pop_to_loc{Output.vm.2)
  19211. //^^ pop_stack_to_d
  19212. // #7407
  19213. @SP
  19214. // #7408
  19215. M=M-1
  19216. // #7409
  19217. A=M
  19218. // #7410
  19219. D=M
  19220. //vv pop_stack_to_d
  19221. // #7411
  19222. @Output.vm.2
  19223. // #7412
  19224. M=D
  19225. //vv pop_to_loc{Output.vm.2)
  19226. //
  19227. //// push constant 32
  19228. //^^ push_constant(32)
  19229. // #7413
  19230. @32
  19231. // #7414
  19232. D=A
  19233. //^^ push_d_to_stack
  19234. // #7415
  19235. @SP
  19236. // #7416
  19237. A=M
  19238. // #7417
  19239. M=D
  19240. // #7418
  19241. @SP
  19242. // #7419
  19243. M=M+1
  19244. //vv push_d_to_stack
  19245. //vv push_constant(32)
  19246. //
  19247. //// pop static 1
  19248. //^^ pop_to_loc{Output.vm.1)
  19249. //^^ pop_stack_to_d
  19250. // #7420
  19251. @SP
  19252. // #7421
  19253. M=M-1
  19254. // #7422
  19255. A=M
  19256. // #7423
  19257. D=M
  19258. //vv pop_stack_to_d
  19259. // #7424
  19260. @Output.vm.1
  19261. // #7425
  19262. M=D
  19263. //vv pop_to_loc{Output.vm.1)
  19264. //
  19265. //// push constant 0
  19266. //^^ push_constant(0)
  19267. // #7426
  19268. @0
  19269. // #7427
  19270. D=A
  19271. //^^ push_d_to_stack
  19272. // #7428
  19273. @SP
  19274. // #7429
  19275. A=M
  19276. // #7430
  19277. M=D
  19278. // #7431
  19279. @SP
  19280. // #7432
  19281. M=M+1
  19282. //vv push_d_to_stack
  19283. //vv push_constant(0)
  19284. //
  19285. //// pop static 0
  19286. //^^ pop_to_loc{Output.vm.0)
  19287. //^^ pop_stack_to_d
  19288. // #7433
  19289. @SP
  19290. // #7434
  19291. M=M-1
  19292. // #7435
  19293. A=M
  19294. // #7436
  19295. D=M
  19296. //vv pop_stack_to_d
  19297. // #7437
  19298. @Output.vm.0
  19299. // #7438
  19300. M=D
  19301. //vv pop_to_loc{Output.vm.0)
  19302. //
  19303. //// push constant 6
  19304. //^^ push_constant(6)
  19305. // #7439
  19306. @6
  19307. // #7440
  19308. D=A
  19309. //^^ push_d_to_stack
  19310. // #7441
  19311. @SP
  19312. // #7442
  19313. A=M
  19314. // #7443
  19315. M=D
  19316. // #7444
  19317. @SP
  19318. // #7445
  19319. M=M+1
  19320. //vv push_d_to_stack
  19321. //vv push_constant(6)
  19322. //
  19323. //// call String.new 1
  19324. //^^ push_constant(RET_ADDR_71)
  19325. // #7446
  19326. @RET_ADDR_71
  19327. // #7447
  19328. D=A
  19329. //^^ push_d_to_stack
  19330. // #7448
  19331. @SP
  19332. // #7449
  19333. A=M
  19334. // #7450
  19335. M=D
  19336. // #7451
  19337. @SP
  19338. // #7452
  19339. M=M+1
  19340. //vv push_d_to_stack
  19341. //vv push_constant(RET_ADDR_71)
  19342. //push return-address
  19343. // #7453
  19344. @LCL
  19345. // #7454
  19346. D=M
  19347. //^^ push_d_to_stack
  19348. // #7455
  19349. @SP
  19350. // #7456
  19351. A=M
  19352. // #7457
  19353. M=D
  19354. // #7458
  19355. @SP
  19356. // #7459
  19357. M=M+1
  19358. //vv push_d_to_stack
  19359. //push LCL
  19360. // #7460
  19361. @ARG
  19362. // #7461
  19363. D=M
  19364. //^^ push_d_to_stack
  19365. // #7462
  19366. @SP
  19367. // #7463
  19368. A=M
  19369. // #7464
  19370. M=D
  19371. // #7465
  19372. @SP
  19373. // #7466
  19374. M=M+1
  19375. //vv push_d_to_stack
  19376. //push ARG
  19377. // #7467
  19378. @THIS
  19379. // #7468
  19380. D=M
  19381. //^^ push_d_to_stack
  19382. // #7469
  19383. @SP
  19384. // #7470
  19385. A=M
  19386. // #7471
  19387. M=D
  19388. // #7472
  19389. @SP
  19390. // #7473
  19391. M=M+1
  19392. //vv push_d_to_stack
  19393. //push THIS
  19394. // #7474
  19395. @THAT
  19396. // #7475
  19397. D=M
  19398. //^^ push_d_to_stack
  19399. // #7476
  19400. @SP
  19401. // #7477
  19402. A=M
  19403. // #7478
  19404. M=D
  19405. // #7479
  19406. @SP
  19407. // #7480
  19408. M=M+1
  19409. //vv push_d_to_stack
  19410. //push THAT
  19411. // #7481
  19412. @SP
  19413. // #7482
  19414. D=M
  19415. // #7483
  19416. @ARG
  19417. // #7484
  19418. M=D
  19419. // #7485
  19420. @6
  19421. // #7486
  19422. D=A
  19423. // #7487
  19424. @ARG
  19425. // #7488
  19426. M=M-D // ARG = SP - args - 5
  19427. // #7489
  19428. @SP
  19429. // #7490
  19430. D=M
  19431. // #7491
  19432. @LCL
  19433. // #7492
  19434. M=D // LCL = SP
  19435. // #7493
  19436. @String.new
  19437. // #7494
  19438. 0;JMP
  19439. (RET_ADDR_71)
  19440. //
  19441. //// pop static 3
  19442. //^^ pop_to_loc{Output.vm.3)
  19443. //^^ pop_stack_to_d
  19444. // #7495
  19445. @SP
  19446. // #7496
  19447. M=M-1
  19448. // #7497
  19449. A=M
  19450. // #7498
  19451. D=M
  19452. //vv pop_stack_to_d
  19453. // #7499
  19454. @Output.vm.3
  19455. // #7500
  19456. M=D
  19457. //vv pop_to_loc{Output.vm.3)
  19458. //
  19459. //// call Output.initMap 0
  19460. //^^ push_constant(RET_ADDR_72)
  19461. // #7501
  19462. @RET_ADDR_72
  19463. // #7502
  19464. D=A
  19465. //^^ push_d_to_stack
  19466. // #7503
  19467. @SP
  19468. // #7504
  19469. A=M
  19470. // #7505
  19471. M=D
  19472. // #7506
  19473. @SP
  19474. // #7507
  19475. M=M+1
  19476. //vv push_d_to_stack
  19477. //vv push_constant(RET_ADDR_72)
  19478. //push return-address
  19479. // #7508
  19480. @LCL
  19481. // #7509
  19482. D=M
  19483. //^^ push_d_to_stack
  19484. // #7510
  19485. @SP
  19486. // #7511
  19487. A=M
  19488. // #7512
  19489. M=D
  19490. // #7513
  19491. @SP
  19492. // #7514
  19493. M=M+1
  19494. //vv push_d_to_stack
  19495. //push LCL
  19496. // #7515
  19497. @ARG
  19498. // #7516
  19499. D=M
  19500. //^^ push_d_to_stack
  19501. // #7517
  19502. @SP
  19503. // #7518
  19504. A=M
  19505. // #7519
  19506. M=D
  19507. // #7520
  19508. @SP
  19509. // #7521
  19510. M=M+1
  19511. //vv push_d_to_stack
  19512. //push ARG
  19513. // #7522
  19514. @THIS
  19515. // #7523
  19516. D=M
  19517. //^^ push_d_to_stack
  19518. // #7524
  19519. @SP
  19520. // #7525
  19521. A=M
  19522. // #7526
  19523. M=D
  19524. // #7527
  19525. @SP
  19526. // #7528
  19527. M=M+1
  19528. //vv push_d_to_stack
  19529. //push THIS
  19530. // #7529
  19531. @THAT
  19532. // #7530
  19533. D=M
  19534. //^^ push_d_to_stack
  19535. // #7531
  19536. @SP
  19537. // #7532
  19538. A=M
  19539. // #7533
  19540. M=D
  19541. // #7534
  19542. @SP
  19543. // #7535
  19544. M=M+1
  19545. //vv push_d_to_stack
  19546. //push THAT
  19547. // #7536
  19548. @SP
  19549. // #7537
  19550. D=M
  19551. // #7538
  19552. @ARG
  19553. // #7539
  19554. M=D
  19555. // #7540
  19556. @5
  19557. // #7541
  19558. D=A
  19559. // #7542
  19560. @ARG
  19561. // #7543
  19562. M=M-D // ARG = SP - args - 5
  19563. // #7544
  19564. @SP
  19565. // #7545
  19566. D=M
  19567. // #7546
  19568. @LCL
  19569. // #7547
  19570. M=D // LCL = SP
  19571. // #7548
  19572. @Output.initMap
  19573. // #7549
  19574. 0;JMP
  19575. (RET_ADDR_72)
  19576. //
  19577. //// pop temp 0
  19578. //^^ pop_to_loc{5)
  19579. //^^ pop_stack_to_d
  19580. // #7550
  19581. @SP
  19582. // #7551
  19583. M=M-1
  19584. // #7552
  19585. A=M
  19586. // #7553
  19587. D=M
  19588. //vv pop_stack_to_d
  19589. // #7554
  19590. @5
  19591. // #7555
  19592. M=D
  19593. //vv pop_to_loc{5)
  19594. //
  19595. //// call Output.createShiftedMap 0
  19596. //^^ push_constant(RET_ADDR_73)
  19597. // #7556
  19598. @RET_ADDR_73
  19599. // #7557
  19600. D=A
  19601. //^^ push_d_to_stack
  19602. // #7558
  19603. @SP
  19604. // #7559
  19605. A=M
  19606. // #7560
  19607. M=D
  19608. // #7561
  19609. @SP
  19610. // #7562
  19611. M=M+1
  19612. //vv push_d_to_stack
  19613. //vv push_constant(RET_ADDR_73)
  19614. //push return-address
  19615. // #7563
  19616. @LCL
  19617. // #7564
  19618. D=M
  19619. //^^ push_d_to_stack
  19620. // #7565
  19621. @SP
  19622. // #7566
  19623. A=M
  19624. // #7567
  19625. M=D
  19626. // #7568
  19627. @SP
  19628. // #7569
  19629. M=M+1
  19630. //vv push_d_to_stack
  19631. //push LCL
  19632. // #7570
  19633. @ARG
  19634. // #7571
  19635. D=M
  19636. //^^ push_d_to_stack
  19637. // #7572
  19638. @SP
  19639. // #7573
  19640. A=M
  19641. // #7574
  19642. M=D
  19643. // #7575
  19644. @SP
  19645. // #7576
  19646. M=M+1
  19647. //vv push_d_to_stack
  19648. //push ARG
  19649. // #7577
  19650. @THIS
  19651. // #7578
  19652. D=M
  19653. //^^ push_d_to_stack
  19654. // #7579
  19655. @SP
  19656. // #7580
  19657. A=M
  19658. // #7581
  19659. M=D
  19660. // #7582
  19661. @SP
  19662. // #7583
  19663. M=M+1
  19664. //vv push_d_to_stack
  19665. //push THIS
  19666. // #7584
  19667. @THAT
  19668. // #7585
  19669. D=M
  19670. //^^ push_d_to_stack
  19671. // #7586
  19672. @SP
  19673. // #7587
  19674. A=M
  19675. // #7588
  19676. M=D
  19677. // #7589
  19678. @SP
  19679. // #7590
  19680. M=M+1
  19681. //vv push_d_to_stack
  19682. //push THAT
  19683. // #7591
  19684. @SP
  19685. // #7592
  19686. D=M
  19687. // #7593
  19688. @ARG
  19689. // #7594
  19690. M=D
  19691. // #7595
  19692. @5
  19693. // #7596
  19694. D=A
  19695. // #7597
  19696. @ARG
  19697. // #7598
  19698. M=M-D // ARG = SP - args - 5
  19699. // #7599
  19700. @SP
  19701. // #7600
  19702. D=M
  19703. // #7601
  19704. @LCL
  19705. // #7602
  19706. M=D // LCL = SP
  19707. // #7603
  19708. @Output.createShiftedMap
  19709. // #7604
  19710. 0;JMP
  19711. (RET_ADDR_73)
  19712. //
  19713. //// pop temp 0
  19714. //^^ pop_to_loc{5)
  19715. //^^ pop_stack_to_d
  19716. // #7605
  19717. @SP
  19718. // #7606
  19719. M=M-1
  19720. // #7607
  19721. A=M
  19722. // #7608
  19723. D=M
  19724. //vv pop_stack_to_d
  19725. // #7609
  19726. @5
  19727. // #7610
  19728. M=D
  19729. //vv pop_to_loc{5)
  19730. //
  19731. //// push constant 0
  19732. //^^ push_constant(0)
  19733. // #7611
  19734. @0
  19735. // #7612
  19736. D=A
  19737. //^^ push_d_to_stack
  19738. // #7613
  19739. @SP
  19740. // #7614
  19741. A=M
  19742. // #7615
  19743. M=D
  19744. // #7616
  19745. @SP
  19746. // #7617
  19747. M=M+1
  19748. //vv push_d_to_stack
  19749. //vv push_constant(0)
  19750. //
  19751. //// return
  19752. // #7618
  19753. @LCL
  19754. // #7619
  19755. D=M
  19756. // #7620
  19757. @R14
  19758. // #7621
  19759. M=D //R14=LCL
  19760. // #7622
  19761. @5
  19762. // #7623
  19763. A=D-A
  19764. // #7624
  19765. D=M
  19766. // #7625
  19767. @R15
  19768. // #7626
  19769. M=D //R15=*(LCL-5)
  19770. //^^ pop_stack_to_d
  19771. // #7627
  19772. @SP
  19773. // #7628
  19774. M=M-1
  19775. // #7629
  19776. A=M
  19777. // #7630
  19778. D=M
  19779. //vv pop_stack_to_d
  19780. // #7631
  19781. @ARG
  19782. // #7632
  19783. A=M
  19784. // #7633
  19785. M=D //*ARG = pop()
  19786. // #7634
  19787. @ARG
  19788. // #7635
  19789. D=M
  19790. // #7636
  19791. @SP
  19792. // #7637
  19793. M=D+1 //SP=ARG+1
  19794. // #7638
  19795. @R14
  19796. // #7639
  19797. AM=M-1
  19798. // #7640
  19799. D=M
  19800. // #7641
  19801. @THAT
  19802. // #7642
  19803. M=D //THAT = *(--R14)
  19804. // #7643
  19805. @R14
  19806. // #7644
  19807. AM=M-1
  19808. // #7645
  19809. D=M
  19810. // #7646
  19811. @THIS
  19812. // #7647
  19813. M=D //THIS = *(--R14)
  19814. // #7648
  19815. @R14
  19816. // #7649
  19817. AM=M-1
  19818. // #7650
  19819. D=M
  19820. // #7651
  19821. @ARG
  19822. // #7652
  19823. M=D //ARG = *(--R14)
  19824. // #7653
  19825. @R14
  19826. // #7654
  19827. AM=M-1
  19828. // #7655
  19829. D=M
  19830. // #7656
  19831. @LCL
  19832. // #7657
  19833. M=D //LCL = *(--R14)
  19834. // #7658
  19835. @R15
  19836. // #7659
  19837. A=M
  19838. // #7660
  19839. 0;JMP //goto *R15
  19840. //
  19841. //// function Output.initMap 0
  19842. (Output.initMap)
  19843. //
  19844. //// push constant 127
  19845. //^^ push_constant(127)
  19846. // #7661
  19847. @127
  19848. // #7662
  19849. D=A
  19850. //^^ push_d_to_stack
  19851. // #7663
  19852. @SP
  19853. // #7664
  19854. A=M
  19855. // #7665
  19856. M=D
  19857. // #7666
  19858. @SP
  19859. // #7667
  19860. M=M+1
  19861. //vv push_d_to_stack
  19862. //vv push_constant(127)
  19863. //
  19864. //// call Array.new 1
  19865. //^^ push_constant(RET_ADDR_74)
  19866. // #7668
  19867. @RET_ADDR_74
  19868. // #7669
  19869. D=A
  19870. //^^ push_d_to_stack
  19871. // #7670
  19872. @SP
  19873. // #7671
  19874. A=M
  19875. // #7672
  19876. M=D
  19877. // #7673
  19878. @SP
  19879. // #7674
  19880. M=M+1
  19881. //vv push_d_to_stack
  19882. //vv push_constant(RET_ADDR_74)
  19883. //push return-address
  19884. // #7675
  19885. @LCL
  19886. // #7676
  19887. D=M
  19888. //^^ push_d_to_stack
  19889. // #7677
  19890. @SP
  19891. // #7678
  19892. A=M
  19893. // #7679
  19894. M=D
  19895. // #7680
  19896. @SP
  19897. // #7681
  19898. M=M+1
  19899. //vv push_d_to_stack
  19900. //push LCL
  19901. // #7682
  19902. @ARG
  19903. // #7683
  19904. D=M
  19905. //^^ push_d_to_stack
  19906. // #7684
  19907. @SP
  19908. // #7685
  19909. A=M
  19910. // #7686
  19911. M=D
  19912. // #7687
  19913. @SP
  19914. // #7688
  19915. M=M+1
  19916. //vv push_d_to_stack
  19917. //push ARG
  19918. // #7689
  19919. @THIS
  19920. // #7690
  19921. D=M
  19922. //^^ push_d_to_stack
  19923. // #7691
  19924. @SP
  19925. // #7692
  19926. A=M
  19927. // #7693
  19928. M=D
  19929. // #7694
  19930. @SP
  19931. // #7695
  19932. M=M+1
  19933. //vv push_d_to_stack
  19934. //push THIS
  19935. // #7696
  19936. @THAT
  19937. // #7697
  19938. D=M
  19939. //^^ push_d_to_stack
  19940. // #7698
  19941. @SP
  19942. // #7699
  19943. A=M
  19944. // #7700
  19945. M=D
  19946. // #7701
  19947. @SP
  19948. // #7702
  19949. M=M+1
  19950. //vv push_d_to_stack
  19951. //push THAT
  19952. // #7703
  19953. @SP
  19954. // #7704
  19955. D=M
  19956. // #7705
  19957. @ARG
  19958. // #7706
  19959. M=D
  19960. // #7707
  19961. @6
  19962. // #7708
  19963. D=A
  19964. // #7709
  19965. @ARG
  19966. // #7710
  19967. M=M-D // ARG = SP - args - 5
  19968. // #7711
  19969. @SP
  19970. // #7712
  19971. D=M
  19972. // #7713
  19973. @LCL
  19974. // #7714
  19975. M=D // LCL = SP
  19976. // #7715
  19977. @Array.new
  19978. // #7716
  19979. 0;JMP
  19980. (RET_ADDR_74)
  19981. //
  19982. //// pop static 5
  19983. //^^ pop_to_loc{Output.vm.5)
  19984. //^^ pop_stack_to_d
  19985. // #7717
  19986. @SP
  19987. // #7718
  19988. M=M-1
  19989. // #7719
  19990. A=M
  19991. // #7720
  19992. D=M
  19993. //vv pop_stack_to_d
  19994. // #7721
  19995. @Output.vm.5
  19996. // #7722
  19997. M=D
  19998. //vv pop_to_loc{Output.vm.5)
  19999. //
  20000. //// push constant 0
  20001. //^^ push_constant(0)
  20002. // #7723
  20003. @0
  20004. // #7724
  20005. D=A
  20006. //^^ push_d_to_stack
  20007. // #7725
  20008. @SP
  20009. // #7726
  20010. A=M
  20011. // #7727
  20012. M=D
  20013. // #7728
  20014. @SP
  20015. // #7729
  20016. M=M+1
  20017. //vv push_d_to_stack
  20018. //vv push_constant(0)
  20019. //
  20020. //// push constant 63
  20021. //^^ push_constant(63)
  20022. // #7730
  20023. @63
  20024. // #7731
  20025. D=A
  20026. //^^ push_d_to_stack
  20027. // #7732
  20028. @SP
  20029. // #7733
  20030. A=M
  20031. // #7734
  20032. M=D
  20033. // #7735
  20034. @SP
  20035. // #7736
  20036. M=M+1
  20037. //vv push_d_to_stack
  20038. //vv push_constant(63)
  20039. //
  20040. //// push constant 63
  20041. //^^ push_constant(63)
  20042. // #7737
  20043. @63
  20044. // #7738
  20045. D=A
  20046. //^^ push_d_to_stack
  20047. // #7739
  20048. @SP
  20049. // #7740
  20050. A=M
  20051. // #7741
  20052. M=D
  20053. // #7742
  20054. @SP
  20055. // #7743
  20056. M=M+1
  20057. //vv push_d_to_stack
  20058. //vv push_constant(63)
  20059. //
  20060. //// push constant 63
  20061. //^^ push_constant(63)
  20062. // #7744
  20063. @63
  20064. // #7745
  20065. D=A
  20066. //^^ push_d_to_stack
  20067. // #7746
  20068. @SP
  20069. // #7747
  20070. A=M
  20071. // #7748
  20072. M=D
  20073. // #7749
  20074. @SP
  20075. // #7750
  20076. M=M+1
  20077. //vv push_d_to_stack
  20078. //vv push_constant(63)
  20079. //
  20080. //// push constant 63
  20081. //^^ push_constant(63)
  20082. // #7751
  20083. @63
  20084. // #7752
  20085. D=A
  20086. //^^ push_d_to_stack
  20087. // #7753
  20088. @SP
  20089. // #7754
  20090. A=M
  20091. // #7755
  20092. M=D
  20093. // #7756
  20094. @SP
  20095. // #7757
  20096. M=M+1
  20097. //vv push_d_to_stack
  20098. //vv push_constant(63)
  20099. //
  20100. //// push constant 63
  20101. //^^ push_constant(63)
  20102. // #7758
  20103. @63
  20104. // #7759
  20105. D=A
  20106. //^^ push_d_to_stack
  20107. // #7760
  20108. @SP
  20109. // #7761
  20110. A=M
  20111. // #7762
  20112. M=D
  20113. // #7763
  20114. @SP
  20115. // #7764
  20116. M=M+1
  20117. //vv push_d_to_stack
  20118. //vv push_constant(63)
  20119. //
  20120. //// push constant 63
  20121. //^^ push_constant(63)
  20122. // #7765
  20123. @63
  20124. // #7766
  20125. D=A
  20126. //^^ push_d_to_stack
  20127. // #7767
  20128. @SP
  20129. // #7768
  20130. A=M
  20131. // #7769
  20132. M=D
  20133. // #7770
  20134. @SP
  20135. // #7771
  20136. M=M+1
  20137. //vv push_d_to_stack
  20138. //vv push_constant(63)
  20139. //
  20140. //// push constant 63
  20141. //^^ push_constant(63)
  20142. // #7772
  20143. @63
  20144. // #7773
  20145. D=A
  20146. //^^ push_d_to_stack
  20147. // #7774
  20148. @SP
  20149. // #7775
  20150. A=M
  20151. // #7776
  20152. M=D
  20153. // #7777
  20154. @SP
  20155. // #7778
  20156. M=M+1
  20157. //vv push_d_to_stack
  20158. //vv push_constant(63)
  20159. //
  20160. //// push constant 63
  20161. //^^ push_constant(63)
  20162. // #7779
  20163. @63
  20164. // #7780
  20165. D=A
  20166. //^^ push_d_to_stack
  20167. // #7781
  20168. @SP
  20169. // #7782
  20170. A=M
  20171. // #7783
  20172. M=D
  20173. // #7784
  20174. @SP
  20175. // #7785
  20176. M=M+1
  20177. //vv push_d_to_stack
  20178. //vv push_constant(63)
  20179. //
  20180. //// push constant 63
  20181. //^^ push_constant(63)
  20182. // #7786
  20183. @63
  20184. // #7787
  20185. D=A
  20186. //^^ push_d_to_stack
  20187. // #7788
  20188. @SP
  20189. // #7789
  20190. A=M
  20191. // #7790
  20192. M=D
  20193. // #7791
  20194. @SP
  20195. // #7792
  20196. M=M+1
  20197. //vv push_d_to_stack
  20198. //vv push_constant(63)
  20199. //
  20200. //// push constant 0
  20201. //^^ push_constant(0)
  20202. // #7793
  20203. @0
  20204. // #7794
  20205. D=A
  20206. //^^ push_d_to_stack
  20207. // #7795
  20208. @SP
  20209. // #7796
  20210. A=M
  20211. // #7797
  20212. M=D
  20213. // #7798
  20214. @SP
  20215. // #7799
  20216. M=M+1
  20217. //vv push_d_to_stack
  20218. //vv push_constant(0)
  20219. //
  20220. //// push constant 0
  20221. //^^ push_constant(0)
  20222. // #7800
  20223. @0
  20224. // #7801
  20225. D=A
  20226. //^^ push_d_to_stack
  20227. // #7802
  20228. @SP
  20229. // #7803
  20230. A=M
  20231. // #7804
  20232. M=D
  20233. // #7805
  20234. @SP
  20235. // #7806
  20236. M=M+1
  20237. //vv push_d_to_stack
  20238. //vv push_constant(0)
  20239. //
  20240. //// call Output.create 12
  20241. //^^ push_constant(RET_ADDR_75)
  20242. // #7807
  20243. @RET_ADDR_75
  20244. // #7808
  20245. D=A
  20246. //^^ push_d_to_stack
  20247. // #7809
  20248. @SP
  20249. // #7810
  20250. A=M
  20251. // #7811
  20252. M=D
  20253. // #7812
  20254. @SP
  20255. // #7813
  20256. M=M+1
  20257. //vv push_d_to_stack
  20258. //vv push_constant(RET_ADDR_75)
  20259. //push return-address
  20260. // #7814
  20261. @LCL
  20262. // #7815
  20263. D=M
  20264. //^^ push_d_to_stack
  20265. // #7816
  20266. @SP
  20267. // #7817
  20268. A=M
  20269. // #7818
  20270. M=D
  20271. // #7819
  20272. @SP
  20273. // #7820
  20274. M=M+1
  20275. //vv push_d_to_stack
  20276. //push LCL
  20277. // #7821
  20278. @ARG
  20279. // #7822
  20280. D=M
  20281. //^^ push_d_to_stack
  20282. // #7823
  20283. @SP
  20284. // #7824
  20285. A=M
  20286. // #7825
  20287. M=D
  20288. // #7826
  20289. @SP
  20290. // #7827
  20291. M=M+1
  20292. //vv push_d_to_stack
  20293. //push ARG
  20294. // #7828
  20295. @THIS
  20296. // #7829
  20297. D=M
  20298. //^^ push_d_to_stack
  20299. // #7830
  20300. @SP
  20301. // #7831
  20302. A=M
  20303. // #7832
  20304. M=D
  20305. // #7833
  20306. @SP
  20307. // #7834
  20308. M=M+1
  20309. //vv push_d_to_stack
  20310. //push THIS
  20311. // #7835
  20312. @THAT
  20313. // #7836
  20314. D=M
  20315. //^^ push_d_to_stack
  20316. // #7837
  20317. @SP
  20318. // #7838
  20319. A=M
  20320. // #7839
  20321. M=D
  20322. // #7840
  20323. @SP
  20324. // #7841
  20325. M=M+1
  20326. //vv push_d_to_stack
  20327. //push THAT
  20328. // #7842
  20329. @SP
  20330. // #7843
  20331. D=M
  20332. // #7844
  20333. @ARG
  20334. // #7845
  20335. M=D
  20336. // #7846
  20337. @17
  20338. // #7847
  20339. D=A
  20340. // #7848
  20341. @ARG
  20342. // #7849
  20343. M=M-D // ARG = SP - args - 5
  20344. // #7850
  20345. @SP
  20346. // #7851
  20347. D=M
  20348. // #7852
  20349. @LCL
  20350. // #7853
  20351. M=D // LCL = SP
  20352. // #7854
  20353. @Output.create
  20354. // #7855
  20355. 0;JMP
  20356. (RET_ADDR_75)
  20357. //
  20358. //// pop temp 0
  20359. //^^ pop_to_loc{5)
  20360. //^^ pop_stack_to_d
  20361. // #7856
  20362. @SP
  20363. // #7857
  20364. M=M-1
  20365. // #7858
  20366. A=M
  20367. // #7859
  20368. D=M
  20369. //vv pop_stack_to_d
  20370. // #7860
  20371. @5
  20372. // #7861
  20373. M=D
  20374. //vv pop_to_loc{5)
  20375. //
  20376. //// push constant 32
  20377. //^^ push_constant(32)
  20378. // #7862
  20379. @32
  20380. // #7863
  20381. D=A
  20382. //^^ push_d_to_stack
  20383. // #7864
  20384. @SP
  20385. // #7865
  20386. A=M
  20387. // #7866
  20388. M=D
  20389. // #7867
  20390. @SP
  20391. // #7868
  20392. M=M+1
  20393. //vv push_d_to_stack
  20394. //vv push_constant(32)
  20395. //
  20396. //// push constant 0
  20397. //^^ push_constant(0)
  20398. // #7869
  20399. @0
  20400. // #7870
  20401. D=A
  20402. //^^ push_d_to_stack
  20403. // #7871
  20404. @SP
  20405. // #7872
  20406. A=M
  20407. // #7873
  20408. M=D
  20409. // #7874
  20410. @SP
  20411. // #7875
  20412. M=M+1
  20413. //vv push_d_to_stack
  20414. //vv push_constant(0)
  20415. //
  20416. //// push constant 0
  20417. //^^ push_constant(0)
  20418. // #7876
  20419. @0
  20420. // #7877
  20421. D=A
  20422. //^^ push_d_to_stack
  20423. // #7878
  20424. @SP
  20425. // #7879
  20426. A=M
  20427. // #7880
  20428. M=D
  20429. // #7881
  20430. @SP
  20431. // #7882
  20432. M=M+1
  20433. //vv push_d_to_stack
  20434. //vv push_constant(0)
  20435. //
  20436. //// push constant 0
  20437. //^^ push_constant(0)
  20438. // #7883
  20439. @0
  20440. // #7884
  20441. D=A
  20442. //^^ push_d_to_stack
  20443. // #7885
  20444. @SP
  20445. // #7886
  20446. A=M
  20447. // #7887
  20448. M=D
  20449. // #7888
  20450. @SP
  20451. // #7889
  20452. M=M+1
  20453. //vv push_d_to_stack
  20454. //vv push_constant(0)
  20455. //
  20456. //// push constant 0
  20457. //^^ push_constant(0)
  20458. // #7890
  20459. @0
  20460. // #7891
  20461. D=A
  20462. //^^ push_d_to_stack
  20463. // #7892
  20464. @SP
  20465. // #7893
  20466. A=M
  20467. // #7894
  20468. M=D
  20469. // #7895
  20470. @SP
  20471. // #7896
  20472. M=M+1
  20473. //vv push_d_to_stack
  20474. //vv push_constant(0)
  20475. //
  20476. //// push constant 0
  20477. //^^ push_constant(0)
  20478. // #7897
  20479. @0
  20480. // #7898
  20481. D=A
  20482. //^^ push_d_to_stack
  20483. // #7899
  20484. @SP
  20485. // #7900
  20486. A=M
  20487. // #7901
  20488. M=D
  20489. // #7902
  20490. @SP
  20491. // #7903
  20492. M=M+1
  20493. //vv push_d_to_stack
  20494. //vv push_constant(0)
  20495. //
  20496. //// push constant 0
  20497. //^^ push_constant(0)
  20498. // #7904
  20499. @0
  20500. // #7905
  20501. D=A
  20502. //^^ push_d_to_stack
  20503. // #7906
  20504. @SP
  20505. // #7907
  20506. A=M
  20507. // #7908
  20508. M=D
  20509. // #7909
  20510. @SP
  20511. // #7910
  20512. M=M+1
  20513. //vv push_d_to_stack
  20514. //vv push_constant(0)
  20515. //
  20516. //// push constant 0
  20517. //^^ push_constant(0)
  20518. // #7911
  20519. @0
  20520. // #7912
  20521. D=A
  20522. //^^ push_d_to_stack
  20523. // #7913
  20524. @SP
  20525. // #7914
  20526. A=M
  20527. // #7915
  20528. M=D
  20529. // #7916
  20530. @SP
  20531. // #7917
  20532. M=M+1
  20533. //vv push_d_to_stack
  20534. //vv push_constant(0)
  20535. //
  20536. //// push constant 0
  20537. //^^ push_constant(0)
  20538. // #7918
  20539. @0
  20540. // #7919
  20541. D=A
  20542. //^^ push_d_to_stack
  20543. // #7920
  20544. @SP
  20545. // #7921
  20546. A=M
  20547. // #7922
  20548. M=D
  20549. // #7923
  20550. @SP
  20551. // #7924
  20552. M=M+1
  20553. //vv push_d_to_stack
  20554. //vv push_constant(0)
  20555. //
  20556. //// push constant 0
  20557. //^^ push_constant(0)
  20558. // #7925
  20559. @0
  20560. // #7926
  20561. D=A
  20562. //^^ push_d_to_stack
  20563. // #7927
  20564. @SP
  20565. // #7928
  20566. A=M
  20567. // #7929
  20568. M=D
  20569. // #7930
  20570. @SP
  20571. // #7931
  20572. M=M+1
  20573. //vv push_d_to_stack
  20574. //vv push_constant(0)
  20575. //
  20576. //// push constant 0
  20577. //^^ push_constant(0)
  20578. // #7932
  20579. @0
  20580. // #7933
  20581. D=A
  20582. //^^ push_d_to_stack
  20583. // #7934
  20584. @SP
  20585. // #7935
  20586. A=M
  20587. // #7936
  20588. M=D
  20589. // #7937
  20590. @SP
  20591. // #7938
  20592. M=M+1
  20593. //vv push_d_to_stack
  20594. //vv push_constant(0)
  20595. //
  20596. //// push constant 0
  20597. //^^ push_constant(0)
  20598. // #7939
  20599. @0
  20600. // #7940
  20601. D=A
  20602. //^^ push_d_to_stack
  20603. // #7941
  20604. @SP
  20605. // #7942
  20606. A=M
  20607. // #7943
  20608. M=D
  20609. // #7944
  20610. @SP
  20611. // #7945
  20612. M=M+1
  20613. //vv push_d_to_stack
  20614. //vv push_constant(0)
  20615. //
  20616. //// call Output.create 12
  20617. //^^ push_constant(RET_ADDR_76)
  20618. // #7946
  20619. @RET_ADDR_76
  20620. // #7947
  20621. D=A
  20622. //^^ push_d_to_stack
  20623. // #7948
  20624. @SP
  20625. // #7949
  20626. A=M
  20627. // #7950
  20628. M=D
  20629. // #7951
  20630. @SP
  20631. // #7952
  20632. M=M+1
  20633. //vv push_d_to_stack
  20634. //vv push_constant(RET_ADDR_76)
  20635. //push return-address
  20636. // #7953
  20637. @LCL
  20638. // #7954
  20639. D=M
  20640. //^^ push_d_to_stack
  20641. // #7955
  20642. @SP
  20643. // #7956
  20644. A=M
  20645. // #7957
  20646. M=D
  20647. // #7958
  20648. @SP
  20649. // #7959
  20650. M=M+1
  20651. //vv push_d_to_stack
  20652. //push LCL
  20653. // #7960
  20654. @ARG
  20655. // #7961
  20656. D=M
  20657. //^^ push_d_to_stack
  20658. // #7962
  20659. @SP
  20660. // #7963
  20661. A=M
  20662. // #7964
  20663. M=D
  20664. // #7965
  20665. @SP
  20666. // #7966
  20667. M=M+1
  20668. //vv push_d_to_stack
  20669. //push ARG
  20670. // #7967
  20671. @THIS
  20672. // #7968
  20673. D=M
  20674. //^^ push_d_to_stack
  20675. // #7969
  20676. @SP
  20677. // #7970
  20678. A=M
  20679. // #7971
  20680. M=D
  20681. // #7972
  20682. @SP
  20683. // #7973
  20684. M=M+1
  20685. //vv push_d_to_stack
  20686. //push THIS
  20687. // #7974
  20688. @THAT
  20689. // #7975
  20690. D=M
  20691. //^^ push_d_to_stack
  20692. // #7976
  20693. @SP
  20694. // #7977
  20695. A=M
  20696. // #7978
  20697. M=D
  20698. // #7979
  20699. @SP
  20700. // #7980
  20701. M=M+1
  20702. //vv push_d_to_stack
  20703. //push THAT
  20704. // #7981
  20705. @SP
  20706. // #7982
  20707. D=M
  20708. // #7983
  20709. @ARG
  20710. // #7984
  20711. M=D
  20712. // #7985
  20713. @17
  20714. // #7986
  20715. D=A
  20716. // #7987
  20717. @ARG
  20718. // #7988
  20719. M=M-D // ARG = SP - args - 5
  20720. // #7989
  20721. @SP
  20722. // #7990
  20723. D=M
  20724. // #7991
  20725. @LCL
  20726. // #7992
  20727. M=D // LCL = SP
  20728. // #7993
  20729. @Output.create
  20730. // #7994
  20731. 0;JMP
  20732. (RET_ADDR_76)
  20733. //
  20734. //// pop temp 0
  20735. //^^ pop_to_loc{5)
  20736. //^^ pop_stack_to_d
  20737. // #7995
  20738. @SP
  20739. // #7996
  20740. M=M-1
  20741. // #7997
  20742. A=M
  20743. // #7998
  20744. D=M
  20745. //vv pop_stack_to_d
  20746. // #7999
  20747. @5
  20748. // #8000
  20749. M=D
  20750. //vv pop_to_loc{5)
  20751. //
  20752. //// push constant 33
  20753. //^^ push_constant(33)
  20754. // #8001
  20755. @33
  20756. // #8002
  20757. D=A
  20758. //^^ push_d_to_stack
  20759. // #8003
  20760. @SP
  20761. // #8004
  20762. A=M
  20763. // #8005
  20764. M=D
  20765. // #8006
  20766. @SP
  20767. // #8007
  20768. M=M+1
  20769. //vv push_d_to_stack
  20770. //vv push_constant(33)
  20771. //
  20772. //// push constant 12
  20773. //^^ push_constant(12)
  20774. // #8008
  20775. @12
  20776. // #8009
  20777. D=A
  20778. //^^ push_d_to_stack
  20779. // #8010
  20780. @SP
  20781. // #8011
  20782. A=M
  20783. // #8012
  20784. M=D
  20785. // #8013
  20786. @SP
  20787. // #8014
  20788. M=M+1
  20789. //vv push_d_to_stack
  20790. //vv push_constant(12)
  20791. //
  20792. //// push constant 30
  20793. //^^ push_constant(30)
  20794. // #8015
  20795. @30
  20796. // #8016
  20797. D=A
  20798. //^^ push_d_to_stack
  20799. // #8017
  20800. @SP
  20801. // #8018
  20802. A=M
  20803. // #8019
  20804. M=D
  20805. // #8020
  20806. @SP
  20807. // #8021
  20808. M=M+1
  20809. //vv push_d_to_stack
  20810. //vv push_constant(30)
  20811. //
  20812. //// push constant 30
  20813. //^^ push_constant(30)
  20814. // #8022
  20815. @30
  20816. // #8023
  20817. D=A
  20818. //^^ push_d_to_stack
  20819. // #8024
  20820. @SP
  20821. // #8025
  20822. A=M
  20823. // #8026
  20824. M=D
  20825. // #8027
  20826. @SP
  20827. // #8028
  20828. M=M+1
  20829. //vv push_d_to_stack
  20830. //vv push_constant(30)
  20831. //
  20832. //// push constant 30
  20833. //^^ push_constant(30)
  20834. // #8029
  20835. @30
  20836. // #8030
  20837. D=A
  20838. //^^ push_d_to_stack
  20839. // #8031
  20840. @SP
  20841. // #8032
  20842. A=M
  20843. // #8033
  20844. M=D
  20845. // #8034
  20846. @SP
  20847. // #8035
  20848. M=M+1
  20849. //vv push_d_to_stack
  20850. //vv push_constant(30)
  20851. //
  20852. //// push constant 12
  20853. //^^ push_constant(12)
  20854. // #8036
  20855. @12
  20856. // #8037
  20857. D=A
  20858. //^^ push_d_to_stack
  20859. // #8038
  20860. @SP
  20861. // #8039
  20862. A=M
  20863. // #8040
  20864. M=D
  20865. // #8041
  20866. @SP
  20867. // #8042
  20868. M=M+1
  20869. //vv push_d_to_stack
  20870. //vv push_constant(12)
  20871. //
  20872. //// push constant 12
  20873. //^^ push_constant(12)
  20874. // #8043
  20875. @12
  20876. // #8044
  20877. D=A
  20878. //^^ push_d_to_stack
  20879. // #8045
  20880. @SP
  20881. // #8046
  20882. A=M
  20883. // #8047
  20884. M=D
  20885. // #8048
  20886. @SP
  20887. // #8049
  20888. M=M+1
  20889. //vv push_d_to_stack
  20890. //vv push_constant(12)
  20891. //
  20892. //// push constant 0
  20893. //^^ push_constant(0)
  20894. // #8050
  20895. @0
  20896. // #8051
  20897. D=A
  20898. //^^ push_d_to_stack
  20899. // #8052
  20900. @SP
  20901. // #8053
  20902. A=M
  20903. // #8054
  20904. M=D
  20905. // #8055
  20906. @SP
  20907. // #8056
  20908. M=M+1
  20909. //vv push_d_to_stack
  20910. //vv push_constant(0)
  20911. //
  20912. //// push constant 12
  20913. //^^ push_constant(12)
  20914. // #8057
  20915. @12
  20916. // #8058
  20917. D=A
  20918. //^^ push_d_to_stack
  20919. // #8059
  20920. @SP
  20921. // #8060
  20922. A=M
  20923. // #8061
  20924. M=D
  20925. // #8062
  20926. @SP
  20927. // #8063
  20928. M=M+1
  20929. //vv push_d_to_stack
  20930. //vv push_constant(12)
  20931. //
  20932. //// push constant 12
  20933. //^^ push_constant(12)
  20934. // #8064
  20935. @12
  20936. // #8065
  20937. D=A
  20938. //^^ push_d_to_stack
  20939. // #8066
  20940. @SP
  20941. // #8067
  20942. A=M
  20943. // #8068
  20944. M=D
  20945. // #8069
  20946. @SP
  20947. // #8070
  20948. M=M+1
  20949. //vv push_d_to_stack
  20950. //vv push_constant(12)
  20951. //
  20952. //// push constant 0
  20953. //^^ push_constant(0)
  20954. // #8071
  20955. @0
  20956. // #8072
  20957. D=A
  20958. //^^ push_d_to_stack
  20959. // #8073
  20960. @SP
  20961. // #8074
  20962. A=M
  20963. // #8075
  20964. M=D
  20965. // #8076
  20966. @SP
  20967. // #8077
  20968. M=M+1
  20969. //vv push_d_to_stack
  20970. //vv push_constant(0)
  20971. //
  20972. //// push constant 0
  20973. //^^ push_constant(0)
  20974. // #8078
  20975. @0
  20976. // #8079
  20977. D=A
  20978. //^^ push_d_to_stack
  20979. // #8080
  20980. @SP
  20981. // #8081
  20982. A=M
  20983. // #8082
  20984. M=D
  20985. // #8083
  20986. @SP
  20987. // #8084
  20988. M=M+1
  20989. //vv push_d_to_stack
  20990. //vv push_constant(0)
  20991. //
  20992. //// call Output.create 12
  20993. //^^ push_constant(RET_ADDR_77)
  20994. // #8085
  20995. @RET_ADDR_77
  20996. // #8086
  20997. D=A
  20998. //^^ push_d_to_stack
  20999. // #8087
  21000. @SP
  21001. // #8088
  21002. A=M
  21003. // #8089
  21004. M=D
  21005. // #8090
  21006. @SP
  21007. // #8091
  21008. M=M+1
  21009. //vv push_d_to_stack
  21010. //vv push_constant(RET_ADDR_77)
  21011. //push return-address
  21012. // #8092
  21013. @LCL
  21014. // #8093
  21015. D=M
  21016. //^^ push_d_to_stack
  21017. // #8094
  21018. @SP
  21019. // #8095
  21020. A=M
  21021. // #8096
  21022. M=D
  21023. // #8097
  21024. @SP
  21025. // #8098
  21026. M=M+1
  21027. //vv push_d_to_stack
  21028. //push LCL
  21029. // #8099
  21030. @ARG
  21031. // #8100
  21032. D=M
  21033. //^^ push_d_to_stack
  21034. // #8101
  21035. @SP
  21036. // #8102
  21037. A=M
  21038. // #8103
  21039. M=D
  21040. // #8104
  21041. @SP
  21042. // #8105
  21043. M=M+1
  21044. //vv push_d_to_stack
  21045. //push ARG
  21046. // #8106
  21047. @THIS
  21048. // #8107
  21049. D=M
  21050. //^^ push_d_to_stack
  21051. // #8108
  21052. @SP
  21053. // #8109
  21054. A=M
  21055. // #8110
  21056. M=D
  21057. // #8111
  21058. @SP
  21059. // #8112
  21060. M=M+1
  21061. //vv push_d_to_stack
  21062. //push THIS
  21063. // #8113
  21064. @THAT
  21065. // #8114
  21066. D=M
  21067. //^^ push_d_to_stack
  21068. // #8115
  21069. @SP
  21070. // #8116
  21071. A=M
  21072. // #8117
  21073. M=D
  21074. // #8118
  21075. @SP
  21076. // #8119
  21077. M=M+1
  21078. //vv push_d_to_stack
  21079. //push THAT
  21080. // #8120
  21081. @SP
  21082. // #8121
  21083. D=M
  21084. // #8122
  21085. @ARG
  21086. // #8123
  21087. M=D
  21088. // #8124
  21089. @17
  21090. // #8125
  21091. D=A
  21092. // #8126
  21093. @ARG
  21094. // #8127
  21095. M=M-D // ARG = SP - args - 5
  21096. // #8128
  21097. @SP
  21098. // #8129
  21099. D=M
  21100. // #8130
  21101. @LCL
  21102. // #8131
  21103. M=D // LCL = SP
  21104. // #8132
  21105. @Output.create
  21106. // #8133
  21107. 0;JMP
  21108. (RET_ADDR_77)
  21109. //
  21110. //// pop temp 0
  21111. //^^ pop_to_loc{5)
  21112. //^^ pop_stack_to_d
  21113. // #8134
  21114. @SP
  21115. // #8135
  21116. M=M-1
  21117. // #8136
  21118. A=M
  21119. // #8137
  21120. D=M
  21121. //vv pop_stack_to_d
  21122. // #8138
  21123. @5
  21124. // #8139
  21125. M=D
  21126. //vv pop_to_loc{5)
  21127. //
  21128. //// push constant 34
  21129. //^^ push_constant(34)
  21130. // #8140
  21131. @34
  21132. // #8141
  21133. D=A
  21134. //^^ push_d_to_stack
  21135. // #8142
  21136. @SP
  21137. // #8143
  21138. A=M
  21139. // #8144
  21140. M=D
  21141. // #8145
  21142. @SP
  21143. // #8146
  21144. M=M+1
  21145. //vv push_d_to_stack
  21146. //vv push_constant(34)
  21147. //
  21148. //// push constant 54
  21149. //^^ push_constant(54)
  21150. // #8147
  21151. @54
  21152. // #8148
  21153. D=A
  21154. //^^ push_d_to_stack
  21155. // #8149
  21156. @SP
  21157. // #8150
  21158. A=M
  21159. // #8151
  21160. M=D
  21161. // #8152
  21162. @SP
  21163. // #8153
  21164. M=M+1
  21165. //vv push_d_to_stack
  21166. //vv push_constant(54)
  21167. //
  21168. //// push constant 54
  21169. //^^ push_constant(54)
  21170. // #8154
  21171. @54
  21172. // #8155
  21173. D=A
  21174. //^^ push_d_to_stack
  21175. // #8156
  21176. @SP
  21177. // #8157
  21178. A=M
  21179. // #8158
  21180. M=D
  21181. // #8159
  21182. @SP
  21183. // #8160
  21184. M=M+1
  21185. //vv push_d_to_stack
  21186. //vv push_constant(54)
  21187. //
  21188. //// push constant 20
  21189. //^^ push_constant(20)
  21190. // #8161
  21191. @20
  21192. // #8162
  21193. D=A
  21194. //^^ push_d_to_stack
  21195. // #8163
  21196. @SP
  21197. // #8164
  21198. A=M
  21199. // #8165
  21200. M=D
  21201. // #8166
  21202. @SP
  21203. // #8167
  21204. M=M+1
  21205. //vv push_d_to_stack
  21206. //vv push_constant(20)
  21207. //
  21208. //// push constant 0
  21209. //^^ push_constant(0)
  21210. // #8168
  21211. @0
  21212. // #8169
  21213. D=A
  21214. //^^ push_d_to_stack
  21215. // #8170
  21216. @SP
  21217. // #8171
  21218. A=M
  21219. // #8172
  21220. M=D
  21221. // #8173
  21222. @SP
  21223. // #8174
  21224. M=M+1
  21225. //vv push_d_to_stack
  21226. //vv push_constant(0)
  21227. //
  21228. //// push constant 0
  21229. //^^ push_constant(0)
  21230. // #8175
  21231. @0
  21232. // #8176
  21233. D=A
  21234. //^^ push_d_to_stack
  21235. // #8177
  21236. @SP
  21237. // #8178
  21238. A=M
  21239. // #8179
  21240. M=D
  21241. // #8180
  21242. @SP
  21243. // #8181
  21244. M=M+1
  21245. //vv push_d_to_stack
  21246. //vv push_constant(0)
  21247. //
  21248. //// push constant 0
  21249. //^^ push_constant(0)
  21250. // #8182
  21251. @0
  21252. // #8183
  21253. D=A
  21254. //^^ push_d_to_stack
  21255. // #8184
  21256. @SP
  21257. // #8185
  21258. A=M
  21259. // #8186
  21260. M=D
  21261. // #8187
  21262. @SP
  21263. // #8188
  21264. M=M+1
  21265. //vv push_d_to_stack
  21266. //vv push_constant(0)
  21267. //
  21268. //// push constant 0
  21269. //^^ push_constant(0)
  21270. // #8189
  21271. @0
  21272. // #8190
  21273. D=A
  21274. //^^ push_d_to_stack
  21275. // #8191
  21276. @SP
  21277. // #8192
  21278. A=M
  21279. // #8193
  21280. M=D
  21281. // #8194
  21282. @SP
  21283. // #8195
  21284. M=M+1
  21285. //vv push_d_to_stack
  21286. //vv push_constant(0)
  21287. //
  21288. //// push constant 0
  21289. //^^ push_constant(0)
  21290. // #8196
  21291. @0
  21292. // #8197
  21293. D=A
  21294. //^^ push_d_to_stack
  21295. // #8198
  21296. @SP
  21297. // #8199
  21298. A=M
  21299. // #8200
  21300. M=D
  21301. // #8201
  21302. @SP
  21303. // #8202
  21304. M=M+1
  21305. //vv push_d_to_stack
  21306. //vv push_constant(0)
  21307. //
  21308. //// push constant 0
  21309. //^^ push_constant(0)
  21310. // #8203
  21311. @0
  21312. // #8204
  21313. D=A
  21314. //^^ push_d_to_stack
  21315. // #8205
  21316. @SP
  21317. // #8206
  21318. A=M
  21319. // #8207
  21320. M=D
  21321. // #8208
  21322. @SP
  21323. // #8209
  21324. M=M+1
  21325. //vv push_d_to_stack
  21326. //vv push_constant(0)
  21327. //
  21328. //// push constant 0
  21329. //^^ push_constant(0)
  21330. // #8210
  21331. @0
  21332. // #8211
  21333. D=A
  21334. //^^ push_d_to_stack
  21335. // #8212
  21336. @SP
  21337. // #8213
  21338. A=M
  21339. // #8214
  21340. M=D
  21341. // #8215
  21342. @SP
  21343. // #8216
  21344. M=M+1
  21345. //vv push_d_to_stack
  21346. //vv push_constant(0)
  21347. //
  21348. //// push constant 0
  21349. //^^ push_constant(0)
  21350. // #8217
  21351. @0
  21352. // #8218
  21353. D=A
  21354. //^^ push_d_to_stack
  21355. // #8219
  21356. @SP
  21357. // #8220
  21358. A=M
  21359. // #8221
  21360. M=D
  21361. // #8222
  21362. @SP
  21363. // #8223
  21364. M=M+1
  21365. //vv push_d_to_stack
  21366. //vv push_constant(0)
  21367. //
  21368. //// call Output.create 12
  21369. //^^ push_constant(RET_ADDR_78)
  21370. // #8224
  21371. @RET_ADDR_78
  21372. // #8225
  21373. D=A
  21374. //^^ push_d_to_stack
  21375. // #8226
  21376. @SP
  21377. // #8227
  21378. A=M
  21379. // #8228
  21380. M=D
  21381. // #8229
  21382. @SP
  21383. // #8230
  21384. M=M+1
  21385. //vv push_d_to_stack
  21386. //vv push_constant(RET_ADDR_78)
  21387. //push return-address
  21388. // #8231
  21389. @LCL
  21390. // #8232
  21391. D=M
  21392. //^^ push_d_to_stack
  21393. // #8233
  21394. @SP
  21395. // #8234
  21396. A=M
  21397. // #8235
  21398. M=D
  21399. // #8236
  21400. @SP
  21401. // #8237
  21402. M=M+1
  21403. //vv push_d_to_stack
  21404. //push LCL
  21405. // #8238
  21406. @ARG
  21407. // #8239
  21408. D=M
  21409. //^^ push_d_to_stack
  21410. // #8240
  21411. @SP
  21412. // #8241
  21413. A=M
  21414. // #8242
  21415. M=D
  21416. // #8243
  21417. @SP
  21418. // #8244
  21419. M=M+1
  21420. //vv push_d_to_stack
  21421. //push ARG
  21422. // #8245
  21423. @THIS
  21424. // #8246
  21425. D=M
  21426. //^^ push_d_to_stack
  21427. // #8247
  21428. @SP
  21429. // #8248
  21430. A=M
  21431. // #8249
  21432. M=D
  21433. // #8250
  21434. @SP
  21435. // #8251
  21436. M=M+1
  21437. //vv push_d_to_stack
  21438. //push THIS
  21439. // #8252
  21440. @THAT
  21441. // #8253
  21442. D=M
  21443. //^^ push_d_to_stack
  21444. // #8254
  21445. @SP
  21446. // #8255
  21447. A=M
  21448. // #8256
  21449. M=D
  21450. // #8257
  21451. @SP
  21452. // #8258
  21453. M=M+1
  21454. //vv push_d_to_stack
  21455. //push THAT
  21456. // #8259
  21457. @SP
  21458. // #8260
  21459. D=M
  21460. // #8261
  21461. @ARG
  21462. // #8262
  21463. M=D
  21464. // #8263
  21465. @17
  21466. // #8264
  21467. D=A
  21468. // #8265
  21469. @ARG
  21470. // #8266
  21471. M=M-D // ARG = SP - args - 5
  21472. // #8267
  21473. @SP
  21474. // #8268
  21475. D=M
  21476. // #8269
  21477. @LCL
  21478. // #8270
  21479. M=D // LCL = SP
  21480. // #8271
  21481. @Output.create
  21482. // #8272
  21483. 0;JMP
  21484. (RET_ADDR_78)
  21485. //
  21486. //// pop temp 0
  21487. //^^ pop_to_loc{5)
  21488. //^^ pop_stack_to_d
  21489. // #8273
  21490. @SP
  21491. // #8274
  21492. M=M-1
  21493. // #8275
  21494. A=M
  21495. // #8276
  21496. D=M
  21497. //vv pop_stack_to_d
  21498. // #8277
  21499. @5
  21500. // #8278
  21501. M=D
  21502. //vv pop_to_loc{5)
  21503. //
  21504. //// push constant 35
  21505. //^^ push_constant(35)
  21506. // #8279
  21507. @35
  21508. // #8280
  21509. D=A
  21510. //^^ push_d_to_stack
  21511. // #8281
  21512. @SP
  21513. // #8282
  21514. A=M
  21515. // #8283
  21516. M=D
  21517. // #8284
  21518. @SP
  21519. // #8285
  21520. M=M+1
  21521. //vv push_d_to_stack
  21522. //vv push_constant(35)
  21523. //
  21524. //// push constant 0
  21525. //^^ push_constant(0)
  21526. // #8286
  21527. @0
  21528. // #8287
  21529. D=A
  21530. //^^ push_d_to_stack
  21531. // #8288
  21532. @SP
  21533. // #8289
  21534. A=M
  21535. // #8290
  21536. M=D
  21537. // #8291
  21538. @SP
  21539. // #8292
  21540. M=M+1
  21541. //vv push_d_to_stack
  21542. //vv push_constant(0)
  21543. //
  21544. //// push constant 18
  21545. //^^ push_constant(18)
  21546. // #8293
  21547. @18
  21548. // #8294
  21549. D=A
  21550. //^^ push_d_to_stack
  21551. // #8295
  21552. @SP
  21553. // #8296
  21554. A=M
  21555. // #8297
  21556. M=D
  21557. // #8298
  21558. @SP
  21559. // #8299
  21560. M=M+1
  21561. //vv push_d_to_stack
  21562. //vv push_constant(18)
  21563. //
  21564. //// push constant 18
  21565. //^^ push_constant(18)
  21566. // #8300
  21567. @18
  21568. // #8301
  21569. D=A
  21570. //^^ push_d_to_stack
  21571. // #8302
  21572. @SP
  21573. // #8303
  21574. A=M
  21575. // #8304
  21576. M=D
  21577. // #8305
  21578. @SP
  21579. // #8306
  21580. M=M+1
  21581. //vv push_d_to_stack
  21582. //vv push_constant(18)
  21583. //
  21584. //// push constant 63
  21585. //^^ push_constant(63)
  21586. // #8307
  21587. @63
  21588. // #8308
  21589. D=A
  21590. //^^ push_d_to_stack
  21591. // #8309
  21592. @SP
  21593. // #8310
  21594. A=M
  21595. // #8311
  21596. M=D
  21597. // #8312
  21598. @SP
  21599. // #8313
  21600. M=M+1
  21601. //vv push_d_to_stack
  21602. //vv push_constant(63)
  21603. //
  21604. //// push constant 18
  21605. //^^ push_constant(18)
  21606. // #8314
  21607. @18
  21608. // #8315
  21609. D=A
  21610. //^^ push_d_to_stack
  21611. // #8316
  21612. @SP
  21613. // #8317
  21614. A=M
  21615. // #8318
  21616. M=D
  21617. // #8319
  21618. @SP
  21619. // #8320
  21620. M=M+1
  21621. //vv push_d_to_stack
  21622. //vv push_constant(18)
  21623. //
  21624. //// push constant 18
  21625. //^^ push_constant(18)
  21626. // #8321
  21627. @18
  21628. // #8322
  21629. D=A
  21630. //^^ push_d_to_stack
  21631. // #8323
  21632. @SP
  21633. // #8324
  21634. A=M
  21635. // #8325
  21636. M=D
  21637. // #8326
  21638. @SP
  21639. // #8327
  21640. M=M+1
  21641. //vv push_d_to_stack
  21642. //vv push_constant(18)
  21643. //
  21644. //// push constant 63
  21645. //^^ push_constant(63)
  21646. // #8328
  21647. @63
  21648. // #8329
  21649. D=A
  21650. //^^ push_d_to_stack
  21651. // #8330
  21652. @SP
  21653. // #8331
  21654. A=M
  21655. // #8332
  21656. M=D
  21657. // #8333
  21658. @SP
  21659. // #8334
  21660. M=M+1
  21661. //vv push_d_to_stack
  21662. //vv push_constant(63)
  21663. //
  21664. //// push constant 18
  21665. //^^ push_constant(18)
  21666. // #8335
  21667. @18
  21668. // #8336
  21669. D=A
  21670. //^^ push_d_to_stack
  21671. // #8337
  21672. @SP
  21673. // #8338
  21674. A=M
  21675. // #8339
  21676. M=D
  21677. // #8340
  21678. @SP
  21679. // #8341
  21680. M=M+1
  21681. //vv push_d_to_stack
  21682. //vv push_constant(18)
  21683. //
  21684. //// push constant 18
  21685. //^^ push_constant(18)
  21686. // #8342
  21687. @18
  21688. // #8343
  21689. D=A
  21690. //^^ push_d_to_stack
  21691. // #8344
  21692. @SP
  21693. // #8345
  21694. A=M
  21695. // #8346
  21696. M=D
  21697. // #8347
  21698. @SP
  21699. // #8348
  21700. M=M+1
  21701. //vv push_d_to_stack
  21702. //vv push_constant(18)
  21703. //
  21704. //// push constant 0
  21705. //^^ push_constant(0)
  21706. // #8349
  21707. @0
  21708. // #8350
  21709. D=A
  21710. //^^ push_d_to_stack
  21711. // #8351
  21712. @SP
  21713. // #8352
  21714. A=M
  21715. // #8353
  21716. M=D
  21717. // #8354
  21718. @SP
  21719. // #8355
  21720. M=M+1
  21721. //vv push_d_to_stack
  21722. //vv push_constant(0)
  21723. //
  21724. //// push constant 0
  21725. //^^ push_constant(0)
  21726. // #8356
  21727. @0
  21728. // #8357
  21729. D=A
  21730. //^^ push_d_to_stack
  21731. // #8358
  21732. @SP
  21733. // #8359
  21734. A=M
  21735. // #8360
  21736. M=D
  21737. // #8361
  21738. @SP
  21739. // #8362
  21740. M=M+1
  21741. //vv push_d_to_stack
  21742. //vv push_constant(0)
  21743. //
  21744. //// call Output.create 12
  21745. //^^ push_constant(RET_ADDR_79)
  21746. // #8363
  21747. @RET_ADDR_79
  21748. // #8364
  21749. D=A
  21750. //^^ push_d_to_stack
  21751. // #8365
  21752. @SP
  21753. // #8366
  21754. A=M
  21755. // #8367
  21756. M=D
  21757. // #8368
  21758. @SP
  21759. // #8369
  21760. M=M+1
  21761. //vv push_d_to_stack
  21762. //vv push_constant(RET_ADDR_79)
  21763. //push return-address
  21764. // #8370
  21765. @LCL
  21766. // #8371
  21767. D=M
  21768. //^^ push_d_to_stack
  21769. // #8372
  21770. @SP
  21771. // #8373
  21772. A=M
  21773. // #8374
  21774. M=D
  21775. // #8375
  21776. @SP
  21777. // #8376
  21778. M=M+1
  21779. //vv push_d_to_stack
  21780. //push LCL
  21781. // #8377
  21782. @ARG
  21783. // #8378
  21784. D=M
  21785. //^^ push_d_to_stack
  21786. // #8379
  21787. @SP
  21788. // #8380
  21789. A=M
  21790. // #8381
  21791. M=D
  21792. // #8382
  21793. @SP
  21794. // #8383
  21795. M=M+1
  21796. //vv push_d_to_stack
  21797. //push ARG
  21798. // #8384
  21799. @THIS
  21800. // #8385
  21801. D=M
  21802. //^^ push_d_to_stack
  21803. // #8386
  21804. @SP
  21805. // #8387
  21806. A=M
  21807. // #8388
  21808. M=D
  21809. // #8389
  21810. @SP
  21811. // #8390
  21812. M=M+1
  21813. //vv push_d_to_stack
  21814. //push THIS
  21815. // #8391
  21816. @THAT
  21817. // #8392
  21818. D=M
  21819. //^^ push_d_to_stack
  21820. // #8393
  21821. @SP
  21822. // #8394
  21823. A=M
  21824. // #8395
  21825. M=D
  21826. // #8396
  21827. @SP
  21828. // #8397
  21829. M=M+1
  21830. //vv push_d_to_stack
  21831. //push THAT
  21832. // #8398
  21833. @SP
  21834. // #8399
  21835. D=M
  21836. // #8400
  21837. @ARG
  21838. // #8401
  21839. M=D
  21840. // #8402
  21841. @17
  21842. // #8403
  21843. D=A
  21844. // #8404
  21845. @ARG
  21846. // #8405
  21847. M=M-D // ARG = SP - args - 5
  21848. // #8406
  21849. @SP
  21850. // #8407
  21851. D=M
  21852. // #8408
  21853. @LCL
  21854. // #8409
  21855. M=D // LCL = SP
  21856. // #8410
  21857. @Output.create
  21858. // #8411
  21859. 0;JMP
  21860. (RET_ADDR_79)
  21861. //
  21862. //// pop temp 0
  21863. //^^ pop_to_loc{5)
  21864. //^^ pop_stack_to_d
  21865. // #8412
  21866. @SP
  21867. // #8413
  21868. M=M-1
  21869. // #8414
  21870. A=M
  21871. // #8415
  21872. D=M
  21873. //vv pop_stack_to_d
  21874. // #8416
  21875. @5
  21876. // #8417
  21877. M=D
  21878. //vv pop_to_loc{5)
  21879. //
  21880. //// push constant 36
  21881. //^^ push_constant(36)
  21882. // #8418
  21883. @36
  21884. // #8419
  21885. D=A
  21886. //^^ push_d_to_stack
  21887. // #8420
  21888. @SP
  21889. // #8421
  21890. A=M
  21891. // #8422
  21892. M=D
  21893. // #8423
  21894. @SP
  21895. // #8424
  21896. M=M+1
  21897. //vv push_d_to_stack
  21898. //vv push_constant(36)
  21899. //
  21900. //// push constant 12
  21901. //^^ push_constant(12)
  21902. // #8425
  21903. @12
  21904. // #8426
  21905. D=A
  21906. //^^ push_d_to_stack
  21907. // #8427
  21908. @SP
  21909. // #8428
  21910. A=M
  21911. // #8429
  21912. M=D
  21913. // #8430
  21914. @SP
  21915. // #8431
  21916. M=M+1
  21917. //vv push_d_to_stack
  21918. //vv push_constant(12)
  21919. //
  21920. //// push constant 30
  21921. //^^ push_constant(30)
  21922. // #8432
  21923. @30
  21924. // #8433
  21925. D=A
  21926. //^^ push_d_to_stack
  21927. // #8434
  21928. @SP
  21929. // #8435
  21930. A=M
  21931. // #8436
  21932. M=D
  21933. // #8437
  21934. @SP
  21935. // #8438
  21936. M=M+1
  21937. //vv push_d_to_stack
  21938. //vv push_constant(30)
  21939. //
  21940. //// push constant 51
  21941. //^^ push_constant(51)
  21942. // #8439
  21943. @51
  21944. // #8440
  21945. D=A
  21946. //^^ push_d_to_stack
  21947. // #8441
  21948. @SP
  21949. // #8442
  21950. A=M
  21951. // #8443
  21952. M=D
  21953. // #8444
  21954. @SP
  21955. // #8445
  21956. M=M+1
  21957. //vv push_d_to_stack
  21958. //vv push_constant(51)
  21959. //
  21960. //// push constant 3
  21961. //^^ push_constant(3)
  21962. // #8446
  21963. @3
  21964. // #8447
  21965. D=A
  21966. //^^ push_d_to_stack
  21967. // #8448
  21968. @SP
  21969. // #8449
  21970. A=M
  21971. // #8450
  21972. M=D
  21973. // #8451
  21974. @SP
  21975. // #8452
  21976. M=M+1
  21977. //vv push_d_to_stack
  21978. //vv push_constant(3)
  21979. //
  21980. //// push constant 30
  21981. //^^ push_constant(30)
  21982. // #8453
  21983. @30
  21984. // #8454
  21985. D=A
  21986. //^^ push_d_to_stack
  21987. // #8455
  21988. @SP
  21989. // #8456
  21990. A=M
  21991. // #8457
  21992. M=D
  21993. // #8458
  21994. @SP
  21995. // #8459
  21996. M=M+1
  21997. //vv push_d_to_stack
  21998. //vv push_constant(30)
  21999. //
  22000. //// push constant 48
  22001. //^^ push_constant(48)
  22002. // #8460
  22003. @48
  22004. // #8461
  22005. D=A
  22006. //^^ push_d_to_stack
  22007. // #8462
  22008. @SP
  22009. // #8463
  22010. A=M
  22011. // #8464
  22012. M=D
  22013. // #8465
  22014. @SP
  22015. // #8466
  22016. M=M+1
  22017. //vv push_d_to_stack
  22018. //vv push_constant(48)
  22019. //
  22020. //// push constant 51
  22021. //^^ push_constant(51)
  22022. // #8467
  22023. @51
  22024. // #8468
  22025. D=A
  22026. //^^ push_d_to_stack
  22027. // #8469
  22028. @SP
  22029. // #8470
  22030. A=M
  22031. // #8471
  22032. M=D
  22033. // #8472
  22034. @SP
  22035. // #8473
  22036. M=M+1
  22037. //vv push_d_to_stack
  22038. //vv push_constant(51)
  22039. //
  22040. //// push constant 30
  22041. //^^ push_constant(30)
  22042. // #8474
  22043. @30
  22044. // #8475
  22045. D=A
  22046. //^^ push_d_to_stack
  22047. // #8476
  22048. @SP
  22049. // #8477
  22050. A=M
  22051. // #8478
  22052. M=D
  22053. // #8479
  22054. @SP
  22055. // #8480
  22056. M=M+1
  22057. //vv push_d_to_stack
  22058. //vv push_constant(30)
  22059. //
  22060. //// push constant 12
  22061. //^^ push_constant(12)
  22062. // #8481
  22063. @12
  22064. // #8482
  22065. D=A
  22066. //^^ push_d_to_stack
  22067. // #8483
  22068. @SP
  22069. // #8484
  22070. A=M
  22071. // #8485
  22072. M=D
  22073. // #8486
  22074. @SP
  22075. // #8487
  22076. M=M+1
  22077. //vv push_d_to_stack
  22078. //vv push_constant(12)
  22079. //
  22080. //// push constant 12
  22081. //^^ push_constant(12)
  22082. // #8488
  22083. @12
  22084. // #8489
  22085. D=A
  22086. //^^ push_d_to_stack
  22087. // #8490
  22088. @SP
  22089. // #8491
  22090. A=M
  22091. // #8492
  22092. M=D
  22093. // #8493
  22094. @SP
  22095. // #8494
  22096. M=M+1
  22097. //vv push_d_to_stack
  22098. //vv push_constant(12)
  22099. //
  22100. //// push constant 0
  22101. //^^ push_constant(0)
  22102. // #8495
  22103. @0
  22104. // #8496
  22105. D=A
  22106. //^^ push_d_to_stack
  22107. // #8497
  22108. @SP
  22109. // #8498
  22110. A=M
  22111. // #8499
  22112. M=D
  22113. // #8500
  22114. @SP
  22115. // #8501
  22116. M=M+1
  22117. //vv push_d_to_stack
  22118. //vv push_constant(0)
  22119. //
  22120. //// call Output.create 12
  22121. //^^ push_constant(RET_ADDR_80)
  22122. // #8502
  22123. @RET_ADDR_80
  22124. // #8503
  22125. D=A
  22126. //^^ push_d_to_stack
  22127. // #8504
  22128. @SP
  22129. // #8505
  22130. A=M
  22131. // #8506
  22132. M=D
  22133. // #8507
  22134. @SP
  22135. // #8508
  22136. M=M+1
  22137. //vv push_d_to_stack
  22138. //vv push_constant(RET_ADDR_80)
  22139. //push return-address
  22140. // #8509
  22141. @LCL
  22142. // #8510
  22143. D=M
  22144. //^^ push_d_to_stack
  22145. // #8511
  22146. @SP
  22147. // #8512
  22148. A=M
  22149. // #8513
  22150. M=D
  22151. // #8514
  22152. @SP
  22153. // #8515
  22154. M=M+1
  22155. //vv push_d_to_stack
  22156. //push LCL
  22157. // #8516
  22158. @ARG
  22159. // #8517
  22160. D=M
  22161. //^^ push_d_to_stack
  22162. // #8518
  22163. @SP
  22164. // #8519
  22165. A=M
  22166. // #8520
  22167. M=D
  22168. // #8521
  22169. @SP
  22170. // #8522
  22171. M=M+1
  22172. //vv push_d_to_stack
  22173. //push ARG
  22174. // #8523
  22175. @THIS
  22176. // #8524
  22177. D=M
  22178. //^^ push_d_to_stack
  22179. // #8525
  22180. @SP
  22181. // #8526
  22182. A=M
  22183. // #8527
  22184. M=D
  22185. // #8528
  22186. @SP
  22187. // #8529
  22188. M=M+1
  22189. //vv push_d_to_stack
  22190. //push THIS
  22191. // #8530
  22192. @THAT
  22193. // #8531
  22194. D=M
  22195. //^^ push_d_to_stack
  22196. // #8532
  22197. @SP
  22198. // #8533
  22199. A=M
  22200. // #8534
  22201. M=D
  22202. // #8535
  22203. @SP
  22204. // #8536
  22205. M=M+1
  22206. //vv push_d_to_stack
  22207. //push THAT
  22208. // #8537
  22209. @SP
  22210. // #8538
  22211. D=M
  22212. // #8539
  22213. @ARG
  22214. // #8540
  22215. M=D
  22216. // #8541
  22217. @17
  22218. // #8542
  22219. D=A
  22220. // #8543
  22221. @ARG
  22222. // #8544
  22223. M=M-D // ARG = SP - args - 5
  22224. // #8545
  22225. @SP
  22226. // #8546
  22227. D=M
  22228. // #8547
  22229. @LCL
  22230. // #8548
  22231. M=D // LCL = SP
  22232. // #8549
  22233. @Output.create
  22234. // #8550
  22235. 0;JMP
  22236. (RET_ADDR_80)
  22237. //
  22238. //// pop temp 0
  22239. //^^ pop_to_loc{5)
  22240. //^^ pop_stack_to_d
  22241. // #8551
  22242. @SP
  22243. // #8552
  22244. M=M-1
  22245. // #8553
  22246. A=M
  22247. // #8554
  22248. D=M
  22249. //vv pop_stack_to_d
  22250. // #8555
  22251. @5
  22252. // #8556
  22253. M=D
  22254. //vv pop_to_loc{5)
  22255. //
  22256. //// push constant 37
  22257. //^^ push_constant(37)
  22258. // #8557
  22259. @37
  22260. // #8558
  22261. D=A
  22262. //^^ push_d_to_stack
  22263. // #8559
  22264. @SP
  22265. // #8560
  22266. A=M
  22267. // #8561
  22268. M=D
  22269. // #8562
  22270. @SP
  22271. // #8563
  22272. M=M+1
  22273. //vv push_d_to_stack
  22274. //vv push_constant(37)
  22275. //
  22276. //// push constant 0
  22277. //^^ push_constant(0)
  22278. // #8564
  22279. @0
  22280. // #8565
  22281. D=A
  22282. //^^ push_d_to_stack
  22283. // #8566
  22284. @SP
  22285. // #8567
  22286. A=M
  22287. // #8568
  22288. M=D
  22289. // #8569
  22290. @SP
  22291. // #8570
  22292. M=M+1
  22293. //vv push_d_to_stack
  22294. //vv push_constant(0)
  22295. //
  22296. //// push constant 0
  22297. //^^ push_constant(0)
  22298. // #8571
  22299. @0
  22300. // #8572
  22301. D=A
  22302. //^^ push_d_to_stack
  22303. // #8573
  22304. @SP
  22305. // #8574
  22306. A=M
  22307. // #8575
  22308. M=D
  22309. // #8576
  22310. @SP
  22311. // #8577
  22312. M=M+1
  22313. //vv push_d_to_stack
  22314. //vv push_constant(0)
  22315. //
  22316. //// push constant 35
  22317. //^^ push_constant(35)
  22318. // #8578
  22319. @35
  22320. // #8579
  22321. D=A
  22322. //^^ push_d_to_stack
  22323. // #8580
  22324. @SP
  22325. // #8581
  22326. A=M
  22327. // #8582
  22328. M=D
  22329. // #8583
  22330. @SP
  22331. // #8584
  22332. M=M+1
  22333. //vv push_d_to_stack
  22334. //vv push_constant(35)
  22335. //
  22336. //// push constant 51
  22337. //^^ push_constant(51)
  22338. // #8585
  22339. @51
  22340. // #8586
  22341. D=A
  22342. //^^ push_d_to_stack
  22343. // #8587
  22344. @SP
  22345. // #8588
  22346. A=M
  22347. // #8589
  22348. M=D
  22349. // #8590
  22350. @SP
  22351. // #8591
  22352. M=M+1
  22353. //vv push_d_to_stack
  22354. //vv push_constant(51)
  22355. //
  22356. //// push constant 24
  22357. //^^ push_constant(24)
  22358. // #8592
  22359. @24
  22360. // #8593
  22361. D=A
  22362. //^^ push_d_to_stack
  22363. // #8594
  22364. @SP
  22365. // #8595
  22366. A=M
  22367. // #8596
  22368. M=D
  22369. // #8597
  22370. @SP
  22371. // #8598
  22372. M=M+1
  22373. //vv push_d_to_stack
  22374. //vv push_constant(24)
  22375. //
  22376. //// push constant 12
  22377. //^^ push_constant(12)
  22378. // #8599
  22379. @12
  22380. // #8600
  22381. D=A
  22382. //^^ push_d_to_stack
  22383. // #8601
  22384. @SP
  22385. // #8602
  22386. A=M
  22387. // #8603
  22388. M=D
  22389. // #8604
  22390. @SP
  22391. // #8605
  22392. M=M+1
  22393. //vv push_d_to_stack
  22394. //vv push_constant(12)
  22395. //
  22396. //// push constant 6
  22397. //^^ push_constant(6)
  22398. // #8606
  22399. @6
  22400. // #8607
  22401. D=A
  22402. //^^ push_d_to_stack
  22403. // #8608
  22404. @SP
  22405. // #8609
  22406. A=M
  22407. // #8610
  22408. M=D
  22409. // #8611
  22410. @SP
  22411. // #8612
  22412. M=M+1
  22413. //vv push_d_to_stack
  22414. //vv push_constant(6)
  22415. //
  22416. //// push constant 51
  22417. //^^ push_constant(51)
  22418. // #8613
  22419. @51
  22420. // #8614
  22421. D=A
  22422. //^^ push_d_to_stack
  22423. // #8615
  22424. @SP
  22425. // #8616
  22426. A=M
  22427. // #8617
  22428. M=D
  22429. // #8618
  22430. @SP
  22431. // #8619
  22432. M=M+1
  22433. //vv push_d_to_stack
  22434. //vv push_constant(51)
  22435. //
  22436. //// push constant 49
  22437. //^^ push_constant(49)
  22438. // #8620
  22439. @49
  22440. // #8621
  22441. D=A
  22442. //^^ push_d_to_stack
  22443. // #8622
  22444. @SP
  22445. // #8623
  22446. A=M
  22447. // #8624
  22448. M=D
  22449. // #8625
  22450. @SP
  22451. // #8626
  22452. M=M+1
  22453. //vv push_d_to_stack
  22454. //vv push_constant(49)
  22455. //
  22456. //// push constant 0
  22457. //^^ push_constant(0)
  22458. // #8627
  22459. @0
  22460. // #8628
  22461. D=A
  22462. //^^ push_d_to_stack
  22463. // #8629
  22464. @SP
  22465. // #8630
  22466. A=M
  22467. // #8631
  22468. M=D
  22469. // #8632
  22470. @SP
  22471. // #8633
  22472. M=M+1
  22473. //vv push_d_to_stack
  22474. //vv push_constant(0)
  22475. //
  22476. //// push constant 0
  22477. //^^ push_constant(0)
  22478. // #8634
  22479. @0
  22480. // #8635
  22481. D=A
  22482. //^^ push_d_to_stack
  22483. // #8636
  22484. @SP
  22485. // #8637
  22486. A=M
  22487. // #8638
  22488. M=D
  22489. // #8639
  22490. @SP
  22491. // #8640
  22492. M=M+1
  22493. //vv push_d_to_stack
  22494. //vv push_constant(0)
  22495. //
  22496. //// call Output.create 12
  22497. //^^ push_constant(RET_ADDR_81)
  22498. // #8641
  22499. @RET_ADDR_81
  22500. // #8642
  22501. D=A
  22502. //^^ push_d_to_stack
  22503. // #8643
  22504. @SP
  22505. // #8644
  22506. A=M
  22507. // #8645
  22508. M=D
  22509. // #8646
  22510. @SP
  22511. // #8647
  22512. M=M+1
  22513. //vv push_d_to_stack
  22514. //vv push_constant(RET_ADDR_81)
  22515. //push return-address
  22516. // #8648
  22517. @LCL
  22518. // #8649
  22519. D=M
  22520. //^^ push_d_to_stack
  22521. // #8650
  22522. @SP
  22523. // #8651
  22524. A=M
  22525. // #8652
  22526. M=D
  22527. // #8653
  22528. @SP
  22529. // #8654
  22530. M=M+1
  22531. //vv push_d_to_stack
  22532. //push LCL
  22533. // #8655
  22534. @ARG
  22535. // #8656
  22536. D=M
  22537. //^^ push_d_to_stack
  22538. // #8657
  22539. @SP
  22540. // #8658
  22541. A=M
  22542. // #8659
  22543. M=D
  22544. // #8660
  22545. @SP
  22546. // #8661
  22547. M=M+1
  22548. //vv push_d_to_stack
  22549. //push ARG
  22550. // #8662
  22551. @THIS
  22552. // #8663
  22553. D=M
  22554. //^^ push_d_to_stack
  22555. // #8664
  22556. @SP
  22557. // #8665
  22558. A=M
  22559. // #8666
  22560. M=D
  22561. // #8667
  22562. @SP
  22563. // #8668
  22564. M=M+1
  22565. //vv push_d_to_stack
  22566. //push THIS
  22567. // #8669
  22568. @THAT
  22569. // #8670
  22570. D=M
  22571. //^^ push_d_to_stack
  22572. // #8671
  22573. @SP
  22574. // #8672
  22575. A=M
  22576. // #8673
  22577. M=D
  22578. // #8674
  22579. @SP
  22580. // #8675
  22581. M=M+1
  22582. //vv push_d_to_stack
  22583. //push THAT
  22584. // #8676
  22585. @SP
  22586. // #8677
  22587. D=M
  22588. // #8678
  22589. @ARG
  22590. // #8679
  22591. M=D
  22592. // #8680
  22593. @17
  22594. // #8681
  22595. D=A
  22596. // #8682
  22597. @ARG
  22598. // #8683
  22599. M=M-D // ARG = SP - args - 5
  22600. // #8684
  22601. @SP
  22602. // #8685
  22603. D=M
  22604. // #8686
  22605. @LCL
  22606. // #8687
  22607. M=D // LCL = SP
  22608. // #8688
  22609. @Output.create
  22610. // #8689
  22611. 0;JMP
  22612. (RET_ADDR_81)
  22613. //
  22614. //// pop temp 0
  22615. //^^ pop_to_loc{5)
  22616. //^^ pop_stack_to_d
  22617. // #8690
  22618. @SP
  22619. // #8691
  22620. M=M-1
  22621. // #8692
  22622. A=M
  22623. // #8693
  22624. D=M
  22625. //vv pop_stack_to_d
  22626. // #8694
  22627. @5
  22628. // #8695
  22629. M=D
  22630. //vv pop_to_loc{5)
  22631. //
  22632. //// push constant 38
  22633. //^^ push_constant(38)
  22634. // #8696
  22635. @38
  22636. // #8697
  22637. D=A
  22638. //^^ push_d_to_stack
  22639. // #8698
  22640. @SP
  22641. // #8699
  22642. A=M
  22643. // #8700
  22644. M=D
  22645. // #8701
  22646. @SP
  22647. // #8702
  22648. M=M+1
  22649. //vv push_d_to_stack
  22650. //vv push_constant(38)
  22651. //
  22652. //// push constant 12
  22653. //^^ push_constant(12)
  22654. // #8703
  22655. @12
  22656. // #8704
  22657. D=A
  22658. //^^ push_d_to_stack
  22659. // #8705
  22660. @SP
  22661. // #8706
  22662. A=M
  22663. // #8707
  22664. M=D
  22665. // #8708
  22666. @SP
  22667. // #8709
  22668. M=M+1
  22669. //vv push_d_to_stack
  22670. //vv push_constant(12)
  22671. //
  22672. //// push constant 30
  22673. //^^ push_constant(30)
  22674. // #8710
  22675. @30
  22676. // #8711
  22677. D=A
  22678. //^^ push_d_to_stack
  22679. // #8712
  22680. @SP
  22681. // #8713
  22682. A=M
  22683. // #8714
  22684. M=D
  22685. // #8715
  22686. @SP
  22687. // #8716
  22688. M=M+1
  22689. //vv push_d_to_stack
  22690. //vv push_constant(30)
  22691. //
  22692. //// push constant 30
  22693. //^^ push_constant(30)
  22694. // #8717
  22695. @30
  22696. // #8718
  22697. D=A
  22698. //^^ push_d_to_stack
  22699. // #8719
  22700. @SP
  22701. // #8720
  22702. A=M
  22703. // #8721
  22704. M=D
  22705. // #8722
  22706. @SP
  22707. // #8723
  22708. M=M+1
  22709. //vv push_d_to_stack
  22710. //vv push_constant(30)
  22711. //
  22712. //// push constant 12
  22713. //^^ push_constant(12)
  22714. // #8724
  22715. @12
  22716. // #8725
  22717. D=A
  22718. //^^ push_d_to_stack
  22719. // #8726
  22720. @SP
  22721. // #8727
  22722. A=M
  22723. // #8728
  22724. M=D
  22725. // #8729
  22726. @SP
  22727. // #8730
  22728. M=M+1
  22729. //vv push_d_to_stack
  22730. //vv push_constant(12)
  22731. //
  22732. //// push constant 54
  22733. //^^ push_constant(54)
  22734. // #8731
  22735. @54
  22736. // #8732
  22737. D=A
  22738. //^^ push_d_to_stack
  22739. // #8733
  22740. @SP
  22741. // #8734
  22742. A=M
  22743. // #8735
  22744. M=D
  22745. // #8736
  22746. @SP
  22747. // #8737
  22748. M=M+1
  22749. //vv push_d_to_stack
  22750. //vv push_constant(54)
  22751. //
  22752. //// push constant 27
  22753. //^^ push_constant(27)
  22754. // #8738
  22755. @27
  22756. // #8739
  22757. D=A
  22758. //^^ push_d_to_stack
  22759. // #8740
  22760. @SP
  22761. // #8741
  22762. A=M
  22763. // #8742
  22764. M=D
  22765. // #8743
  22766. @SP
  22767. // #8744
  22768. M=M+1
  22769. //vv push_d_to_stack
  22770. //vv push_constant(27)
  22771. //
  22772. //// push constant 27
  22773. //^^ push_constant(27)
  22774. // #8745
  22775. @27
  22776. // #8746
  22777. D=A
  22778. //^^ push_d_to_stack
  22779. // #8747
  22780. @SP
  22781. // #8748
  22782. A=M
  22783. // #8749
  22784. M=D
  22785. // #8750
  22786. @SP
  22787. // #8751
  22788. M=M+1
  22789. //vv push_d_to_stack
  22790. //vv push_constant(27)
  22791. //
  22792. //// push constant 27
  22793. //^^ push_constant(27)
  22794. // #8752
  22795. @27
  22796. // #8753
  22797. D=A
  22798. //^^ push_d_to_stack
  22799. // #8754
  22800. @SP
  22801. // #8755
  22802. A=M
  22803. // #8756
  22804. M=D
  22805. // #8757
  22806. @SP
  22807. // #8758
  22808. M=M+1
  22809. //vv push_d_to_stack
  22810. //vv push_constant(27)
  22811. //
  22812. //// push constant 54
  22813. //^^ push_constant(54)
  22814. // #8759
  22815. @54
  22816. // #8760
  22817. D=A
  22818. //^^ push_d_to_stack
  22819. // #8761
  22820. @SP
  22821. // #8762
  22822. A=M
  22823. // #8763
  22824. M=D
  22825. // #8764
  22826. @SP
  22827. // #8765
  22828. M=M+1
  22829. //vv push_d_to_stack
  22830. //vv push_constant(54)
  22831. //
  22832. //// push constant 0
  22833. //^^ push_constant(0)
  22834. // #8766
  22835. @0
  22836. // #8767
  22837. D=A
  22838. //^^ push_d_to_stack
  22839. // #8768
  22840. @SP
  22841. // #8769
  22842. A=M
  22843. // #8770
  22844. M=D
  22845. // #8771
  22846. @SP
  22847. // #8772
  22848. M=M+1
  22849. //vv push_d_to_stack
  22850. //vv push_constant(0)
  22851. //
  22852. //// push constant 0
  22853. //^^ push_constant(0)
  22854. // #8773
  22855. @0
  22856. // #8774
  22857. D=A
  22858. //^^ push_d_to_stack
  22859. // #8775
  22860. @SP
  22861. // #8776
  22862. A=M
  22863. // #8777
  22864. M=D
  22865. // #8778
  22866. @SP
  22867. // #8779
  22868. M=M+1
  22869. //vv push_d_to_stack
  22870. //vv push_constant(0)
  22871. //
  22872. //// call Output.create 12
  22873. //^^ push_constant(RET_ADDR_82)
  22874. // #8780
  22875. @RET_ADDR_82
  22876. // #8781
  22877. D=A
  22878. //^^ push_d_to_stack
  22879. // #8782
  22880. @SP
  22881. // #8783
  22882. A=M
  22883. // #8784
  22884. M=D
  22885. // #8785
  22886. @SP
  22887. // #8786
  22888. M=M+1
  22889. //vv push_d_to_stack
  22890. //vv push_constant(RET_ADDR_82)
  22891. //push return-address
  22892. // #8787
  22893. @LCL
  22894. // #8788
  22895. D=M
  22896. //^^ push_d_to_stack
  22897. // #8789
  22898. @SP
  22899. // #8790
  22900. A=M
  22901. // #8791
  22902. M=D
  22903. // #8792
  22904. @SP
  22905. // #8793
  22906. M=M+1
  22907. //vv push_d_to_stack
  22908. //push LCL
  22909. // #8794
  22910. @ARG
  22911. // #8795
  22912. D=M
  22913. //^^ push_d_to_stack
  22914. // #8796
  22915. @SP
  22916. // #8797
  22917. A=M
  22918. // #8798
  22919. M=D
  22920. // #8799
  22921. @SP
  22922. // #8800
  22923. M=M+1
  22924. //vv push_d_to_stack
  22925. //push ARG
  22926. // #8801
  22927. @THIS
  22928. // #8802
  22929. D=M
  22930. //^^ push_d_to_stack
  22931. // #8803
  22932. @SP
  22933. // #8804
  22934. A=M
  22935. // #8805
  22936. M=D
  22937. // #8806
  22938. @SP
  22939. // #8807
  22940. M=M+1
  22941. //vv push_d_to_stack
  22942. //push THIS
  22943. // #8808
  22944. @THAT
  22945. // #8809
  22946. D=M
  22947. //^^ push_d_to_stack
  22948. // #8810
  22949. @SP
  22950. // #8811
  22951. A=M
  22952. // #8812
  22953. M=D
  22954. // #8813
  22955. @SP
  22956. // #8814
  22957. M=M+1
  22958. //vv push_d_to_stack
  22959. //push THAT
  22960. // #8815
  22961. @SP
  22962. // #8816
  22963. D=M
  22964. // #8817
  22965. @ARG
  22966. // #8818
  22967. M=D
  22968. // #8819
  22969. @17
  22970. // #8820
  22971. D=A
  22972. // #8821
  22973. @ARG
  22974. // #8822
  22975. M=M-D // ARG = SP - args - 5
  22976. // #8823
  22977. @SP
  22978. // #8824
  22979. D=M
  22980. // #8825
  22981. @LCL
  22982. // #8826
  22983. M=D // LCL = SP
  22984. // #8827
  22985. @Output.create
  22986. // #8828
  22987. 0;JMP
  22988. (RET_ADDR_82)
  22989. //
  22990. //// pop temp 0
  22991. //^^ pop_to_loc{5)
  22992. //^^ pop_stack_to_d
  22993. // #8829
  22994. @SP
  22995. // #8830
  22996. M=M-1
  22997. // #8831
  22998. A=M
  22999. // #8832
  23000. D=M
  23001. //vv pop_stack_to_d
  23002. // #8833
  23003. @5
  23004. // #8834
  23005. M=D
  23006. //vv pop_to_loc{5)
  23007. //
  23008. //// push constant 39
  23009. //^^ push_constant(39)
  23010. // #8835
  23011. @39
  23012. // #8836
  23013. D=A
  23014. //^^ push_d_to_stack
  23015. // #8837
  23016. @SP
  23017. // #8838
  23018. A=M
  23019. // #8839
  23020. M=D
  23021. // #8840
  23022. @SP
  23023. // #8841
  23024. M=M+1
  23025. //vv push_d_to_stack
  23026. //vv push_constant(39)
  23027. //
  23028. //// push constant 12
  23029. //^^ push_constant(12)
  23030. // #8842
  23031. @12
  23032. // #8843
  23033. D=A
  23034. //^^ push_d_to_stack
  23035. // #8844
  23036. @SP
  23037. // #8845
  23038. A=M
  23039. // #8846
  23040. M=D
  23041. // #8847
  23042. @SP
  23043. // #8848
  23044. M=M+1
  23045. //vv push_d_to_stack
  23046. //vv push_constant(12)
  23047. //
  23048. //// push constant 12
  23049. //^^ push_constant(12)
  23050. // #8849
  23051. @12
  23052. // #8850
  23053. D=A
  23054. //^^ push_d_to_stack
  23055. // #8851
  23056. @SP
  23057. // #8852
  23058. A=M
  23059. // #8853
  23060. M=D
  23061. // #8854
  23062. @SP
  23063. // #8855
  23064. M=M+1
  23065. //vv push_d_to_stack
  23066. //vv push_constant(12)
  23067. //
  23068. //// push constant 6
  23069. //^^ push_constant(6)
  23070. // #8856
  23071. @6
  23072. // #8857
  23073. D=A
  23074. //^^ push_d_to_stack
  23075. // #8858
  23076. @SP
  23077. // #8859
  23078. A=M
  23079. // #8860
  23080. M=D
  23081. // #8861
  23082. @SP
  23083. // #8862
  23084. M=M+1
  23085. //vv push_d_to_stack
  23086. //vv push_constant(6)
  23087. //
  23088. //// push constant 0
  23089. //^^ push_constant(0)
  23090. // #8863
  23091. @0
  23092. // #8864
  23093. D=A
  23094. //^^ push_d_to_stack
  23095. // #8865
  23096. @SP
  23097. // #8866
  23098. A=M
  23099. // #8867
  23100. M=D
  23101. // #8868
  23102. @SP
  23103. // #8869
  23104. M=M+1
  23105. //vv push_d_to_stack
  23106. //vv push_constant(0)
  23107. //
  23108. //// push constant 0
  23109. //^^ push_constant(0)
  23110. // #8870
  23111. @0
  23112. // #8871
  23113. D=A
  23114. //^^ push_d_to_stack
  23115. // #8872
  23116. @SP
  23117. // #8873
  23118. A=M
  23119. // #8874
  23120. M=D
  23121. // #8875
  23122. @SP
  23123. // #8876
  23124. M=M+1
  23125. //vv push_d_to_stack
  23126. //vv push_constant(0)
  23127. //
  23128. //// push constant 0
  23129. //^^ push_constant(0)
  23130. // #8877
  23131. @0
  23132. // #8878
  23133. D=A
  23134. //^^ push_d_to_stack
  23135. // #8879
  23136. @SP
  23137. // #8880
  23138. A=M
  23139. // #8881
  23140. M=D
  23141. // #8882
  23142. @SP
  23143. // #8883
  23144. M=M+1
  23145. //vv push_d_to_stack
  23146. //vv push_constant(0)
  23147. //
  23148. //// push constant 0
  23149. //^^ push_constant(0)
  23150. // #8884
  23151. @0
  23152. // #8885
  23153. D=A
  23154. //^^ push_d_to_stack
  23155. // #8886
  23156. @SP
  23157. // #8887
  23158. A=M
  23159. // #8888
  23160. M=D
  23161. // #8889
  23162. @SP
  23163. // #8890
  23164. M=M+1
  23165. //vv push_d_to_stack
  23166. //vv push_constant(0)
  23167. //
  23168. //// push constant 0
  23169. //^^ push_constant(0)
  23170. // #8891
  23171. @0
  23172. // #8892
  23173. D=A
  23174. //^^ push_d_to_stack
  23175. // #8893
  23176. @SP
  23177. // #8894
  23178. A=M
  23179. // #8895
  23180. M=D
  23181. // #8896
  23182. @SP
  23183. // #8897
  23184. M=M+1
  23185. //vv push_d_to_stack
  23186. //vv push_constant(0)
  23187. //
  23188. //// push constant 0
  23189. //^^ push_constant(0)
  23190. // #8898
  23191. @0
  23192. // #8899
  23193. D=A
  23194. //^^ push_d_to_stack
  23195. // #8900
  23196. @SP
  23197. // #8901
  23198. A=M
  23199. // #8902
  23200. M=D
  23201. // #8903
  23202. @SP
  23203. // #8904
  23204. M=M+1
  23205. //vv push_d_to_stack
  23206. //vv push_constant(0)
  23207. //
  23208. //// push constant 0
  23209. //^^ push_constant(0)
  23210. // #8905
  23211. @0
  23212. // #8906
  23213. D=A
  23214. //^^ push_d_to_stack
  23215. // #8907
  23216. @SP
  23217. // #8908
  23218. A=M
  23219. // #8909
  23220. M=D
  23221. // #8910
  23222. @SP
  23223. // #8911
  23224. M=M+1
  23225. //vv push_d_to_stack
  23226. //vv push_constant(0)
  23227. //
  23228. //// push constant 0
  23229. //^^ push_constant(0)
  23230. // #8912
  23231. @0
  23232. // #8913
  23233. D=A
  23234. //^^ push_d_to_stack
  23235. // #8914
  23236. @SP
  23237. // #8915
  23238. A=M
  23239. // #8916
  23240. M=D
  23241. // #8917
  23242. @SP
  23243. // #8918
  23244. M=M+1
  23245. //vv push_d_to_stack
  23246. //vv push_constant(0)
  23247. //
  23248. //// call Output.create 12
  23249. //^^ push_constant(RET_ADDR_83)
  23250. // #8919
  23251. @RET_ADDR_83
  23252. // #8920
  23253. D=A
  23254. //^^ push_d_to_stack
  23255. // #8921
  23256. @SP
  23257. // #8922
  23258. A=M
  23259. // #8923
  23260. M=D
  23261. // #8924
  23262. @SP
  23263. // #8925
  23264. M=M+1
  23265. //vv push_d_to_stack
  23266. //vv push_constant(RET_ADDR_83)
  23267. //push return-address
  23268. // #8926
  23269. @LCL
  23270. // #8927
  23271. D=M
  23272. //^^ push_d_to_stack
  23273. // #8928
  23274. @SP
  23275. // #8929
  23276. A=M
  23277. // #8930
  23278. M=D
  23279. // #8931
  23280. @SP
  23281. // #8932
  23282. M=M+1
  23283. //vv push_d_to_stack
  23284. //push LCL
  23285. // #8933
  23286. @ARG
  23287. // #8934
  23288. D=M
  23289. //^^ push_d_to_stack
  23290. // #8935
  23291. @SP
  23292. // #8936
  23293. A=M
  23294. // #8937
  23295. M=D
  23296. // #8938
  23297. @SP
  23298. // #8939
  23299. M=M+1
  23300. //vv push_d_to_stack
  23301. //push ARG
  23302. // #8940
  23303. @THIS
  23304. // #8941
  23305. D=M
  23306. //^^ push_d_to_stack
  23307. // #8942
  23308. @SP
  23309. // #8943
  23310. A=M
  23311. // #8944
  23312. M=D
  23313. // #8945
  23314. @SP
  23315. // #8946
  23316. M=M+1
  23317. //vv push_d_to_stack
  23318. //push THIS
  23319. // #8947
  23320. @THAT
  23321. // #8948
  23322. D=M
  23323. //^^ push_d_to_stack
  23324. // #8949
  23325. @SP
  23326. // #8950
  23327. A=M
  23328. // #8951
  23329. M=D
  23330. // #8952
  23331. @SP
  23332. // #8953
  23333. M=M+1
  23334. //vv push_d_to_stack
  23335. //push THAT
  23336. // #8954
  23337. @SP
  23338. // #8955
  23339. D=M
  23340. // #8956
  23341. @ARG
  23342. // #8957
  23343. M=D
  23344. // #8958
  23345. @17
  23346. // #8959
  23347. D=A
  23348. // #8960
  23349. @ARG
  23350. // #8961
  23351. M=M-D // ARG = SP - args - 5
  23352. // #8962
  23353. @SP
  23354. // #8963
  23355. D=M
  23356. // #8964
  23357. @LCL
  23358. // #8965
  23359. M=D // LCL = SP
  23360. // #8966
  23361. @Output.create
  23362. // #8967
  23363. 0;JMP
  23364. (RET_ADDR_83)
  23365. //
  23366. //// pop temp 0
  23367. //^^ pop_to_loc{5)
  23368. //^^ pop_stack_to_d
  23369. // #8968
  23370. @SP
  23371. // #8969
  23372. M=M-1
  23373. // #8970
  23374. A=M
  23375. // #8971
  23376. D=M
  23377. //vv pop_stack_to_d
  23378. // #8972
  23379. @5
  23380. // #8973
  23381. M=D
  23382. //vv pop_to_loc{5)
  23383. //
  23384. //// push constant 40
  23385. //^^ push_constant(40)
  23386. // #8974
  23387. @40
  23388. // #8975
  23389. D=A
  23390. //^^ push_d_to_stack
  23391. // #8976
  23392. @SP
  23393. // #8977
  23394. A=M
  23395. // #8978
  23396. M=D
  23397. // #8979
  23398. @SP
  23399. // #8980
  23400. M=M+1
  23401. //vv push_d_to_stack
  23402. //vv push_constant(40)
  23403. //
  23404. //// push constant 24
  23405. //^^ push_constant(24)
  23406. // #8981
  23407. @24
  23408. // #8982
  23409. D=A
  23410. //^^ push_d_to_stack
  23411. // #8983
  23412. @SP
  23413. // #8984
  23414. A=M
  23415. // #8985
  23416. M=D
  23417. // #8986
  23418. @SP
  23419. // #8987
  23420. M=M+1
  23421. //vv push_d_to_stack
  23422. //vv push_constant(24)
  23423. //
  23424. //// push constant 12
  23425. //^^ push_constant(12)
  23426. // #8988
  23427. @12
  23428. // #8989
  23429. D=A
  23430. //^^ push_d_to_stack
  23431. // #8990
  23432. @SP
  23433. // #8991
  23434. A=M
  23435. // #8992
  23436. M=D
  23437. // #8993
  23438. @SP
  23439. // #8994
  23440. M=M+1
  23441. //vv push_d_to_stack
  23442. //vv push_constant(12)
  23443. //
  23444. //// push constant 6
  23445. //^^ push_constant(6)
  23446. // #8995
  23447. @6
  23448. // #8996
  23449. D=A
  23450. //^^ push_d_to_stack
  23451. // #8997
  23452. @SP
  23453. // #8998
  23454. A=M
  23455. // #8999
  23456. M=D
  23457. // #9000
  23458. @SP
  23459. // #9001
  23460. M=M+1
  23461. //vv push_d_to_stack
  23462. //vv push_constant(6)
  23463. //
  23464. //// push constant 6
  23465. //^^ push_constant(6)
  23466. // #9002
  23467. @6
  23468. // #9003
  23469. D=A
  23470. //^^ push_d_to_stack
  23471. // #9004
  23472. @SP
  23473. // #9005
  23474. A=M
  23475. // #9006
  23476. M=D
  23477. // #9007
  23478. @SP
  23479. // #9008
  23480. M=M+1
  23481. //vv push_d_to_stack
  23482. //vv push_constant(6)
  23483. //
  23484. //// push constant 6
  23485. //^^ push_constant(6)
  23486. // #9009
  23487. @6
  23488. // #9010
  23489. D=A
  23490. //^^ push_d_to_stack
  23491. // #9011
  23492. @SP
  23493. // #9012
  23494. A=M
  23495. // #9013
  23496. M=D
  23497. // #9014
  23498. @SP
  23499. // #9015
  23500. M=M+1
  23501. //vv push_d_to_stack
  23502. //vv push_constant(6)
  23503. //
  23504. //// push constant 6
  23505. //^^ push_constant(6)
  23506. // #9016
  23507. @6
  23508. // #9017
  23509. D=A
  23510. //^^ push_d_to_stack
  23511. // #9018
  23512. @SP
  23513. // #9019
  23514. A=M
  23515. // #9020
  23516. M=D
  23517. // #9021
  23518. @SP
  23519. // #9022
  23520. M=M+1
  23521. //vv push_d_to_stack
  23522. //vv push_constant(6)
  23523. //
  23524. //// push constant 6
  23525. //^^ push_constant(6)
  23526. // #9023
  23527. @6
  23528. // #9024
  23529. D=A
  23530. //^^ push_d_to_stack
  23531. // #9025
  23532. @SP
  23533. // #9026
  23534. A=M
  23535. // #9027
  23536. M=D
  23537. // #9028
  23538. @SP
  23539. // #9029
  23540. M=M+1
  23541. //vv push_d_to_stack
  23542. //vv push_constant(6)
  23543. //
  23544. //// push constant 12
  23545. //^^ push_constant(12)
  23546. // #9030
  23547. @12
  23548. // #9031
  23549. D=A
  23550. //^^ push_d_to_stack
  23551. // #9032
  23552. @SP
  23553. // #9033
  23554. A=M
  23555. // #9034
  23556. M=D
  23557. // #9035
  23558. @SP
  23559. // #9036
  23560. M=M+1
  23561. //vv push_d_to_stack
  23562. //vv push_constant(12)
  23563. //
  23564. //// push constant 24
  23565. //^^ push_constant(24)
  23566. // #9037
  23567. @24
  23568. // #9038
  23569. D=A
  23570. //^^ push_d_to_stack
  23571. // #9039
  23572. @SP
  23573. // #9040
  23574. A=M
  23575. // #9041
  23576. M=D
  23577. // #9042
  23578. @SP
  23579. // #9043
  23580. M=M+1
  23581. //vv push_d_to_stack
  23582. //vv push_constant(24)
  23583. //
  23584. //// push constant 0
  23585. //^^ push_constant(0)
  23586. // #9044
  23587. @0
  23588. // #9045
  23589. D=A
  23590. //^^ push_d_to_stack
  23591. // #9046
  23592. @SP
  23593. // #9047
  23594. A=M
  23595. // #9048
  23596. M=D
  23597. // #9049
  23598. @SP
  23599. // #9050
  23600. M=M+1
  23601. //vv push_d_to_stack
  23602. //vv push_constant(0)
  23603. //
  23604. //// push constant 0
  23605. //^^ push_constant(0)
  23606. // #9051
  23607. @0
  23608. // #9052
  23609. D=A
  23610. //^^ push_d_to_stack
  23611. // #9053
  23612. @SP
  23613. // #9054
  23614. A=M
  23615. // #9055
  23616. M=D
  23617. // #9056
  23618. @SP
  23619. // #9057
  23620. M=M+1
  23621. //vv push_d_to_stack
  23622. //vv push_constant(0)
  23623. //
  23624. //// call Output.create 12
  23625. //^^ push_constant(RET_ADDR_84)
  23626. // #9058
  23627. @RET_ADDR_84
  23628. // #9059
  23629. D=A
  23630. //^^ push_d_to_stack
  23631. // #9060
  23632. @SP
  23633. // #9061
  23634. A=M
  23635. // #9062
  23636. M=D
  23637. // #9063
  23638. @SP
  23639. // #9064
  23640. M=M+1
  23641. //vv push_d_to_stack
  23642. //vv push_constant(RET_ADDR_84)
  23643. //push return-address
  23644. // #9065
  23645. @LCL
  23646. // #9066
  23647. D=M
  23648. //^^ push_d_to_stack
  23649. // #9067
  23650. @SP
  23651. // #9068
  23652. A=M
  23653. // #9069
  23654. M=D
  23655. // #9070
  23656. @SP
  23657. // #9071
  23658. M=M+1
  23659. //vv push_d_to_stack
  23660. //push LCL
  23661. // #9072
  23662. @ARG
  23663. // #9073
  23664. D=M
  23665. //^^ push_d_to_stack
  23666. // #9074
  23667. @SP
  23668. // #9075
  23669. A=M
  23670. // #9076
  23671. M=D
  23672. // #9077
  23673. @SP
  23674. // #9078
  23675. M=M+1
  23676. //vv push_d_to_stack
  23677. //push ARG
  23678. // #9079
  23679. @THIS
  23680. // #9080
  23681. D=M
  23682. //^^ push_d_to_stack
  23683. // #9081
  23684. @SP
  23685. // #9082
  23686. A=M
  23687. // #9083
  23688. M=D
  23689. // #9084
  23690. @SP
  23691. // #9085
  23692. M=M+1
  23693. //vv push_d_to_stack
  23694. //push THIS
  23695. // #9086
  23696. @THAT
  23697. // #9087
  23698. D=M
  23699. //^^ push_d_to_stack
  23700. // #9088
  23701. @SP
  23702. // #9089
  23703. A=M
  23704. // #9090
  23705. M=D
  23706. // #9091
  23707. @SP
  23708. // #9092
  23709. M=M+1
  23710. //vv push_d_to_stack
  23711. //push THAT
  23712. // #9093
  23713. @SP
  23714. // #9094
  23715. D=M
  23716. // #9095
  23717. @ARG
  23718. // #9096
  23719. M=D
  23720. // #9097
  23721. @17
  23722. // #9098
  23723. D=A
  23724. // #9099
  23725. @ARG
  23726. // #9100
  23727. M=M-D // ARG = SP - args - 5
  23728. // #9101
  23729. @SP
  23730. // #9102
  23731. D=M
  23732. // #9103
  23733. @LCL
  23734. // #9104
  23735. M=D // LCL = SP
  23736. // #9105
  23737. @Output.create
  23738. // #9106
  23739. 0;JMP
  23740. (RET_ADDR_84)
  23741. //
  23742. //// pop temp 0
  23743. //^^ pop_to_loc{5)
  23744. //^^ pop_stack_to_d
  23745. // #9107
  23746. @SP
  23747. // #9108
  23748. M=M-1
  23749. // #9109
  23750. A=M
  23751. // #9110
  23752. D=M
  23753. //vv pop_stack_to_d
  23754. // #9111
  23755. @5
  23756. // #9112
  23757. M=D
  23758. //vv pop_to_loc{5)
  23759. //
  23760. //// push constant 41
  23761. //^^ push_constant(41)
  23762. // #9113
  23763. @41
  23764. // #9114
  23765. D=A
  23766. //^^ push_d_to_stack
  23767. // #9115
  23768. @SP
  23769. // #9116
  23770. A=M
  23771. // #9117
  23772. M=D
  23773. // #9118
  23774. @SP
  23775. // #9119
  23776. M=M+1
  23777. //vv push_d_to_stack
  23778. //vv push_constant(41)
  23779. //
  23780. //// push constant 6
  23781. //^^ push_constant(6)
  23782. // #9120
  23783. @6
  23784. // #9121
  23785. D=A
  23786. //^^ push_d_to_stack
  23787. // #9122
  23788. @SP
  23789. // #9123
  23790. A=M
  23791. // #9124
  23792. M=D
  23793. // #9125
  23794. @SP
  23795. // #9126
  23796. M=M+1
  23797. //vv push_d_to_stack
  23798. //vv push_constant(6)
  23799. //
  23800. //// push constant 12
  23801. //^^ push_constant(12)
  23802. // #9127
  23803. @12
  23804. // #9128
  23805. D=A
  23806. //^^ push_d_to_stack
  23807. // #9129
  23808. @SP
  23809. // #9130
  23810. A=M
  23811. // #9131
  23812. M=D
  23813. // #9132
  23814. @SP
  23815. // #9133
  23816. M=M+1
  23817. //vv push_d_to_stack
  23818. //vv push_constant(12)
  23819. //
  23820. //// push constant 24
  23821. //^^ push_constant(24)
  23822. // #9134
  23823. @24
  23824. // #9135
  23825. D=A
  23826. //^^ push_d_to_stack
  23827. // #9136
  23828. @SP
  23829. // #9137
  23830. A=M
  23831. // #9138
  23832. M=D
  23833. // #9139
  23834. @SP
  23835. // #9140
  23836. M=M+1
  23837. //vv push_d_to_stack
  23838. //vv push_constant(24)
  23839. //
  23840. //// push constant 24
  23841. //^^ push_constant(24)
  23842. // #9141
  23843. @24
  23844. // #9142
  23845. D=A
  23846. //^^ push_d_to_stack
  23847. // #9143
  23848. @SP
  23849. // #9144
  23850. A=M
  23851. // #9145
  23852. M=D
  23853. // #9146
  23854. @SP
  23855. // #9147
  23856. M=M+1
  23857. //vv push_d_to_stack
  23858. //vv push_constant(24)
  23859. //
  23860. //// push constant 24
  23861. //^^ push_constant(24)
  23862. // #9148
  23863. @24
  23864. // #9149
  23865. D=A
  23866. //^^ push_d_to_stack
  23867. // #9150
  23868. @SP
  23869. // #9151
  23870. A=M
  23871. // #9152
  23872. M=D
  23873. // #9153
  23874. @SP
  23875. // #9154
  23876. M=M+1
  23877. //vv push_d_to_stack
  23878. //vv push_constant(24)
  23879. //
  23880. //// push constant 24
  23881. //^^ push_constant(24)
  23882. // #9155
  23883. @24
  23884. // #9156
  23885. D=A
  23886. //^^ push_d_to_stack
  23887. // #9157
  23888. @SP
  23889. // #9158
  23890. A=M
  23891. // #9159
  23892. M=D
  23893. // #9160
  23894. @SP
  23895. // #9161
  23896. M=M+1
  23897. //vv push_d_to_stack
  23898. //vv push_constant(24)
  23899. //
  23900. //// push constant 24
  23901. //^^ push_constant(24)
  23902. // #9162
  23903. @24
  23904. // #9163
  23905. D=A
  23906. //^^ push_d_to_stack
  23907. // #9164
  23908. @SP
  23909. // #9165
  23910. A=M
  23911. // #9166
  23912. M=D
  23913. // #9167
  23914. @SP
  23915. // #9168
  23916. M=M+1
  23917. //vv push_d_to_stack
  23918. //vv push_constant(24)
  23919. //
  23920. //// push constant 12
  23921. //^^ push_constant(12)
  23922. // #9169
  23923. @12
  23924. // #9170
  23925. D=A
  23926. //^^ push_d_to_stack
  23927. // #9171
  23928. @SP
  23929. // #9172
  23930. A=M
  23931. // #9173
  23932. M=D
  23933. // #9174
  23934. @SP
  23935. // #9175
  23936. M=M+1
  23937. //vv push_d_to_stack
  23938. //vv push_constant(12)
  23939. //
  23940. //// push constant 6
  23941. //^^ push_constant(6)
  23942. // #9176
  23943. @6
  23944. // #9177
  23945. D=A
  23946. //^^ push_d_to_stack
  23947. // #9178
  23948. @SP
  23949. // #9179
  23950. A=M
  23951. // #9180
  23952. M=D
  23953. // #9181
  23954. @SP
  23955. // #9182
  23956. M=M+1
  23957. //vv push_d_to_stack
  23958. //vv push_constant(6)
  23959. //
  23960. //// push constant 0
  23961. //^^ push_constant(0)
  23962. // #9183
  23963. @0
  23964. // #9184
  23965. D=A
  23966. //^^ push_d_to_stack
  23967. // #9185
  23968. @SP
  23969. // #9186
  23970. A=M
  23971. // #9187
  23972. M=D
  23973. // #9188
  23974. @SP
  23975. // #9189
  23976. M=M+1
  23977. //vv push_d_to_stack
  23978. //vv push_constant(0)
  23979. //
  23980. //// push constant 0
  23981. //^^ push_constant(0)
  23982. // #9190
  23983. @0
  23984. // #9191
  23985. D=A
  23986. //^^ push_d_to_stack
  23987. // #9192
  23988. @SP
  23989. // #9193
  23990. A=M
  23991. // #9194
  23992. M=D
  23993. // #9195
  23994. @SP
  23995. // #9196
  23996. M=M+1
  23997. //vv push_d_to_stack
  23998. //vv push_constant(0)
  23999. //
  24000. //// call Output.create 12
  24001. //^^ push_constant(RET_ADDR_85)
  24002. // #9197
  24003. @RET_ADDR_85
  24004. // #9198
  24005. D=A
  24006. //^^ push_d_to_stack
  24007. // #9199
  24008. @SP
  24009. // #9200
  24010. A=M
  24011. // #9201
  24012. M=D
  24013. // #9202
  24014. @SP
  24015. // #9203
  24016. M=M+1
  24017. //vv push_d_to_stack
  24018. //vv push_constant(RET_ADDR_85)
  24019. //push return-address
  24020. // #9204
  24021. @LCL
  24022. // #9205
  24023. D=M
  24024. //^^ push_d_to_stack
  24025. // #9206
  24026. @SP
  24027. // #9207
  24028. A=M
  24029. // #9208
  24030. M=D
  24031. // #9209
  24032. @SP
  24033. // #9210
  24034. M=M+1
  24035. //vv push_d_to_stack
  24036. //push LCL
  24037. // #9211
  24038. @ARG
  24039. // #9212
  24040. D=M
  24041. //^^ push_d_to_stack
  24042. // #9213
  24043. @SP
  24044. // #9214
  24045. A=M
  24046. // #9215
  24047. M=D
  24048. // #9216
  24049. @SP
  24050. // #9217
  24051. M=M+1
  24052. //vv push_d_to_stack
  24053. //push ARG
  24054. // #9218
  24055. @THIS
  24056. // #9219
  24057. D=M
  24058. //^^ push_d_to_stack
  24059. // #9220
  24060. @SP
  24061. // #9221
  24062. A=M
  24063. // #9222
  24064. M=D
  24065. // #9223
  24066. @SP
  24067. // #9224
  24068. M=M+1
  24069. //vv push_d_to_stack
  24070. //push THIS
  24071. // #9225
  24072. @THAT
  24073. // #9226
  24074. D=M
  24075. //^^ push_d_to_stack
  24076. // #9227
  24077. @SP
  24078. // #9228
  24079. A=M
  24080. // #9229
  24081. M=D
  24082. // #9230
  24083. @SP
  24084. // #9231
  24085. M=M+1
  24086. //vv push_d_to_stack
  24087. //push THAT
  24088. // #9232
  24089. @SP
  24090. // #9233
  24091. D=M
  24092. // #9234
  24093. @ARG
  24094. // #9235
  24095. M=D
  24096. // #9236
  24097. @17
  24098. // #9237
  24099. D=A
  24100. // #9238
  24101. @ARG
  24102. // #9239
  24103. M=M-D // ARG = SP - args - 5
  24104. // #9240
  24105. @SP
  24106. // #9241
  24107. D=M
  24108. // #9242
  24109. @LCL
  24110. // #9243
  24111. M=D // LCL = SP
  24112. // #9244
  24113. @Output.create
  24114. // #9245
  24115. 0;JMP
  24116. (RET_ADDR_85)
  24117. //
  24118. //// pop temp 0
  24119. //^^ pop_to_loc{5)
  24120. //^^ pop_stack_to_d
  24121. // #9246
  24122. @SP
  24123. // #9247
  24124. M=M-1
  24125. // #9248
  24126. A=M
  24127. // #9249
  24128. D=M
  24129. //vv pop_stack_to_d
  24130. // #9250
  24131. @5
  24132. // #9251
  24133. M=D
  24134. //vv pop_to_loc{5)
  24135. //
  24136. //// push constant 42
  24137. //^^ push_constant(42)
  24138. // #9252
  24139. @42
  24140. // #9253
  24141. D=A
  24142. //^^ push_d_to_stack
  24143. // #9254
  24144. @SP
  24145. // #9255
  24146. A=M
  24147. // #9256
  24148. M=D
  24149. // #9257
  24150. @SP
  24151. // #9258
  24152. M=M+1
  24153. //vv push_d_to_stack
  24154. //vv push_constant(42)
  24155. //
  24156. //// push constant 0
  24157. //^^ push_constant(0)
  24158. // #9259
  24159. @0
  24160. // #9260
  24161. D=A
  24162. //^^ push_d_to_stack
  24163. // #9261
  24164. @SP
  24165. // #9262
  24166. A=M
  24167. // #9263
  24168. M=D
  24169. // #9264
  24170. @SP
  24171. // #9265
  24172. M=M+1
  24173. //vv push_d_to_stack
  24174. //vv push_constant(0)
  24175. //
  24176. //// push constant 0
  24177. //^^ push_constant(0)
  24178. // #9266
  24179. @0
  24180. // #9267
  24181. D=A
  24182. //^^ push_d_to_stack
  24183. // #9268
  24184. @SP
  24185. // #9269
  24186. A=M
  24187. // #9270
  24188. M=D
  24189. // #9271
  24190. @SP
  24191. // #9272
  24192. M=M+1
  24193. //vv push_d_to_stack
  24194. //vv push_constant(0)
  24195. //
  24196. //// push constant 0
  24197. //^^ push_constant(0)
  24198. // #9273
  24199. @0
  24200. // #9274
  24201. D=A
  24202. //^^ push_d_to_stack
  24203. // #9275
  24204. @SP
  24205. // #9276
  24206. A=M
  24207. // #9277
  24208. M=D
  24209. // #9278
  24210. @SP
  24211. // #9279
  24212. M=M+1
  24213. //vv push_d_to_stack
  24214. //vv push_constant(0)
  24215. //
  24216. //// push constant 51
  24217. //^^ push_constant(51)
  24218. // #9280
  24219. @51
  24220. // #9281
  24221. D=A
  24222. //^^ push_d_to_stack
  24223. // #9282
  24224. @SP
  24225. // #9283
  24226. A=M
  24227. // #9284
  24228. M=D
  24229. // #9285
  24230. @SP
  24231. // #9286
  24232. M=M+1
  24233. //vv push_d_to_stack
  24234. //vv push_constant(51)
  24235. //
  24236. //// push constant 30
  24237. //^^ push_constant(30)
  24238. // #9287
  24239. @30
  24240. // #9288
  24241. D=A
  24242. //^^ push_d_to_stack
  24243. // #9289
  24244. @SP
  24245. // #9290
  24246. A=M
  24247. // #9291
  24248. M=D
  24249. // #9292
  24250. @SP
  24251. // #9293
  24252. M=M+1
  24253. //vv push_d_to_stack
  24254. //vv push_constant(30)
  24255. //
  24256. //// push constant 63
  24257. //^^ push_constant(63)
  24258. // #9294
  24259. @63
  24260. // #9295
  24261. D=A
  24262. //^^ push_d_to_stack
  24263. // #9296
  24264. @SP
  24265. // #9297
  24266. A=M
  24267. // #9298
  24268. M=D
  24269. // #9299
  24270. @SP
  24271. // #9300
  24272. M=M+1
  24273. //vv push_d_to_stack
  24274. //vv push_constant(63)
  24275. //
  24276. //// push constant 30
  24277. //^^ push_constant(30)
  24278. // #9301
  24279. @30
  24280. // #9302
  24281. D=A
  24282. //^^ push_d_to_stack
  24283. // #9303
  24284. @SP
  24285. // #9304
  24286. A=M
  24287. // #9305
  24288. M=D
  24289. // #9306
  24290. @SP
  24291. // #9307
  24292. M=M+1
  24293. //vv push_d_to_stack
  24294. //vv push_constant(30)
  24295. //
  24296. //// push constant 51
  24297. //^^ push_constant(51)
  24298. // #9308
  24299. @51
  24300. // #9309
  24301. D=A
  24302. //^^ push_d_to_stack
  24303. // #9310
  24304. @SP
  24305. // #9311
  24306. A=M
  24307. // #9312
  24308. M=D
  24309. // #9313
  24310. @SP
  24311. // #9314
  24312. M=M+1
  24313. //vv push_d_to_stack
  24314. //vv push_constant(51)
  24315. //
  24316. //// push constant 0
  24317. //^^ push_constant(0)
  24318. // #9315
  24319. @0
  24320. // #9316
  24321. D=A
  24322. //^^ push_d_to_stack
  24323. // #9317
  24324. @SP
  24325. // #9318
  24326. A=M
  24327. // #9319
  24328. M=D
  24329. // #9320
  24330. @SP
  24331. // #9321
  24332. M=M+1
  24333. //vv push_d_to_stack
  24334. //vv push_constant(0)
  24335. //
  24336. //// push constant 0
  24337. //^^ push_constant(0)
  24338. // #9322
  24339. @0
  24340. // #9323
  24341. D=A
  24342. //^^ push_d_to_stack
  24343. // #9324
  24344. @SP
  24345. // #9325
  24346. A=M
  24347. // #9326
  24348. M=D
  24349. // #9327
  24350. @SP
  24351. // #9328
  24352. M=M+1
  24353. //vv push_d_to_stack
  24354. //vv push_constant(0)
  24355. //
  24356. //// push constant 0
  24357. //^^ push_constant(0)
  24358. // #9329
  24359. @0
  24360. // #9330
  24361. D=A
  24362. //^^ push_d_to_stack
  24363. // #9331
  24364. @SP
  24365. // #9332
  24366. A=M
  24367. // #9333
  24368. M=D
  24369. // #9334
  24370. @SP
  24371. // #9335
  24372. M=M+1
  24373. //vv push_d_to_stack
  24374. //vv push_constant(0)
  24375. //
  24376. //// call Output.create 12
  24377. //^^ push_constant(RET_ADDR_86)
  24378. // #9336
  24379. @RET_ADDR_86
  24380. // #9337
  24381. D=A
  24382. //^^ push_d_to_stack
  24383. // #9338
  24384. @SP
  24385. // #9339
  24386. A=M
  24387. // #9340
  24388. M=D
  24389. // #9341
  24390. @SP
  24391. // #9342
  24392. M=M+1
  24393. //vv push_d_to_stack
  24394. //vv push_constant(RET_ADDR_86)
  24395. //push return-address
  24396. // #9343
  24397. @LCL
  24398. // #9344
  24399. D=M
  24400. //^^ push_d_to_stack
  24401. // #9345
  24402. @SP
  24403. // #9346
  24404. A=M
  24405. // #9347
  24406. M=D
  24407. // #9348
  24408. @SP
  24409. // #9349
  24410. M=M+1
  24411. //vv push_d_to_stack
  24412. //push LCL
  24413. // #9350
  24414. @ARG
  24415. // #9351
  24416. D=M
  24417. //^^ push_d_to_stack
  24418. // #9352
  24419. @SP
  24420. // #9353
  24421. A=M
  24422. // #9354
  24423. M=D
  24424. // #9355
  24425. @SP
  24426. // #9356
  24427. M=M+1
  24428. //vv push_d_to_stack
  24429. //push ARG
  24430. // #9357
  24431. @THIS
  24432. // #9358
  24433. D=M
  24434. //^^ push_d_to_stack
  24435. // #9359
  24436. @SP
  24437. // #9360
  24438. A=M
  24439. // #9361
  24440. M=D
  24441. // #9362
  24442. @SP
  24443. // #9363
  24444. M=M+1
  24445. //vv push_d_to_stack
  24446. //push THIS
  24447. // #9364
  24448. @THAT
  24449. // #9365
  24450. D=M
  24451. //^^ push_d_to_stack
  24452. // #9366
  24453. @SP
  24454. // #9367
  24455. A=M
  24456. // #9368
  24457. M=D
  24458. // #9369
  24459. @SP
  24460. // #9370
  24461. M=M+1
  24462. //vv push_d_to_stack
  24463. //push THAT
  24464. // #9371
  24465. @SP
  24466. // #9372
  24467. D=M
  24468. // #9373
  24469. @ARG
  24470. // #9374
  24471. M=D
  24472. // #9375
  24473. @17
  24474. // #9376
  24475. D=A
  24476. // #9377
  24477. @ARG
  24478. // #9378
  24479. M=M-D // ARG = SP - args - 5
  24480. // #9379
  24481. @SP
  24482. // #9380
  24483. D=M
  24484. // #9381
  24485. @LCL
  24486. // #9382
  24487. M=D // LCL = SP
  24488. // #9383
  24489. @Output.create
  24490. // #9384
  24491. 0;JMP
  24492. (RET_ADDR_86)
  24493. //
  24494. //// pop temp 0
  24495. //^^ pop_to_loc{5)
  24496. //^^ pop_stack_to_d
  24497. // #9385
  24498. @SP
  24499. // #9386
  24500. M=M-1
  24501. // #9387
  24502. A=M
  24503. // #9388
  24504. D=M
  24505. //vv pop_stack_to_d
  24506. // #9389
  24507. @5
  24508. // #9390
  24509. M=D
  24510. //vv pop_to_loc{5)
  24511. //
  24512. //// push constant 43
  24513. //^^ push_constant(43)
  24514. // #9391
  24515. @43
  24516. // #9392
  24517. D=A
  24518. //^^ push_d_to_stack
  24519. // #9393
  24520. @SP
  24521. // #9394
  24522. A=M
  24523. // #9395
  24524. M=D
  24525. // #9396
  24526. @SP
  24527. // #9397
  24528. M=M+1
  24529. //vv push_d_to_stack
  24530. //vv push_constant(43)
  24531. //
  24532. //// push constant 0
  24533. //^^ push_constant(0)
  24534. // #9398
  24535. @0
  24536. // #9399
  24537. D=A
  24538. //^^ push_d_to_stack
  24539. // #9400
  24540. @SP
  24541. // #9401
  24542. A=M
  24543. // #9402
  24544. M=D
  24545. // #9403
  24546. @SP
  24547. // #9404
  24548. M=M+1
  24549. //vv push_d_to_stack
  24550. //vv push_constant(0)
  24551. //
  24552. //// push constant 0
  24553. //^^ push_constant(0)
  24554. // #9405
  24555. @0
  24556. // #9406
  24557. D=A
  24558. //^^ push_d_to_stack
  24559. // #9407
  24560. @SP
  24561. // #9408
  24562. A=M
  24563. // #9409
  24564. M=D
  24565. // #9410
  24566. @SP
  24567. // #9411
  24568. M=M+1
  24569. //vv push_d_to_stack
  24570. //vv push_constant(0)
  24571. //
  24572. //// push constant 0
  24573. //^^ push_constant(0)
  24574. // #9412
  24575. @0
  24576. // #9413
  24577. D=A
  24578. //^^ push_d_to_stack
  24579. // #9414
  24580. @SP
  24581. // #9415
  24582. A=M
  24583. // #9416
  24584. M=D
  24585. // #9417
  24586. @SP
  24587. // #9418
  24588. M=M+1
  24589. //vv push_d_to_stack
  24590. //vv push_constant(0)
  24591. //
  24592. //// push constant 12
  24593. //^^ push_constant(12)
  24594. // #9419
  24595. @12
  24596. // #9420
  24597. D=A
  24598. //^^ push_d_to_stack
  24599. // #9421
  24600. @SP
  24601. // #9422
  24602. A=M
  24603. // #9423
  24604. M=D
  24605. // #9424
  24606. @SP
  24607. // #9425
  24608. M=M+1
  24609. //vv push_d_to_stack
  24610. //vv push_constant(12)
  24611. //
  24612. //// push constant 12
  24613. //^^ push_constant(12)
  24614. // #9426
  24615. @12
  24616. // #9427
  24617. D=A
  24618. //^^ push_d_to_stack
  24619. // #9428
  24620. @SP
  24621. // #9429
  24622. A=M
  24623. // #9430
  24624. M=D
  24625. // #9431
  24626. @SP
  24627. // #9432
  24628. M=M+1
  24629. //vv push_d_to_stack
  24630. //vv push_constant(12)
  24631. //
  24632. //// push constant 63
  24633. //^^ push_constant(63)
  24634. // #9433
  24635. @63
  24636. // #9434
  24637. D=A
  24638. //^^ push_d_to_stack
  24639. // #9435
  24640. @SP
  24641. // #9436
  24642. A=M
  24643. // #9437
  24644. M=D
  24645. // #9438
  24646. @SP
  24647. // #9439
  24648. M=M+1
  24649. //vv push_d_to_stack
  24650. //vv push_constant(63)
  24651. //
  24652. //// push constant 12
  24653. //^^ push_constant(12)
  24654. // #9440
  24655. @12
  24656. // #9441
  24657. D=A
  24658. //^^ push_d_to_stack
  24659. // #9442
  24660. @SP
  24661. // #9443
  24662. A=M
  24663. // #9444
  24664. M=D
  24665. // #9445
  24666. @SP
  24667. // #9446
  24668. M=M+1
  24669. //vv push_d_to_stack
  24670. //vv push_constant(12)
  24671. //
  24672. //// push constant 12
  24673. //^^ push_constant(12)
  24674. // #9447
  24675. @12
  24676. // #9448
  24677. D=A
  24678. //^^ push_d_to_stack
  24679. // #9449
  24680. @SP
  24681. // #9450
  24682. A=M
  24683. // #9451
  24684. M=D
  24685. // #9452
  24686. @SP
  24687. // #9453
  24688. M=M+1
  24689. //vv push_d_to_stack
  24690. //vv push_constant(12)
  24691. //
  24692. //// push constant 0
  24693. //^^ push_constant(0)
  24694. // #9454
  24695. @0
  24696. // #9455
  24697. D=A
  24698. //^^ push_d_to_stack
  24699. // #9456
  24700. @SP
  24701. // #9457
  24702. A=M
  24703. // #9458
  24704. M=D
  24705. // #9459
  24706. @SP
  24707. // #9460
  24708. M=M+1
  24709. //vv push_d_to_stack
  24710. //vv push_constant(0)
  24711. //
  24712. //// push constant 0
  24713. //^^ push_constant(0)
  24714. // #9461
  24715. @0
  24716. // #9462
  24717. D=A
  24718. //^^ push_d_to_stack
  24719. // #9463
  24720. @SP
  24721. // #9464
  24722. A=M
  24723. // #9465
  24724. M=D
  24725. // #9466
  24726. @SP
  24727. // #9467
  24728. M=M+1
  24729. //vv push_d_to_stack
  24730. //vv push_constant(0)
  24731. //
  24732. //// push constant 0
  24733. //^^ push_constant(0)
  24734. // #9468
  24735. @0
  24736. // #9469
  24737. D=A
  24738. //^^ push_d_to_stack
  24739. // #9470
  24740. @SP
  24741. // #9471
  24742. A=M
  24743. // #9472
  24744. M=D
  24745. // #9473
  24746. @SP
  24747. // #9474
  24748. M=M+1
  24749. //vv push_d_to_stack
  24750. //vv push_constant(0)
  24751. //
  24752. //// call Output.create 12
  24753. //^^ push_constant(RET_ADDR_87)
  24754. // #9475
  24755. @RET_ADDR_87
  24756. // #9476
  24757. D=A
  24758. //^^ push_d_to_stack
  24759. // #9477
  24760. @SP
  24761. // #9478
  24762. A=M
  24763. // #9479
  24764. M=D
  24765. // #9480
  24766. @SP
  24767. // #9481
  24768. M=M+1
  24769. //vv push_d_to_stack
  24770. //vv push_constant(RET_ADDR_87)
  24771. //push return-address
  24772. // #9482
  24773. @LCL
  24774. // #9483
  24775. D=M
  24776. //^^ push_d_to_stack
  24777. // #9484
  24778. @SP
  24779. // #9485
  24780. A=M
  24781. // #9486
  24782. M=D
  24783. // #9487
  24784. @SP
  24785. // #9488
  24786. M=M+1
  24787. //vv push_d_to_stack
  24788. //push LCL
  24789. // #9489
  24790. @ARG
  24791. // #9490
  24792. D=M
  24793. //^^ push_d_to_stack
  24794. // #9491
  24795. @SP
  24796. // #9492
  24797. A=M
  24798. // #9493
  24799. M=D
  24800. // #9494
  24801. @SP
  24802. // #9495
  24803. M=M+1
  24804. //vv push_d_to_stack
  24805. //push ARG
  24806. // #9496
  24807. @THIS
  24808. // #9497
  24809. D=M
  24810. //^^ push_d_to_stack
  24811. // #9498
  24812. @SP
  24813. // #9499
  24814. A=M
  24815. // #9500
  24816. M=D
  24817. // #9501
  24818. @SP
  24819. // #9502
  24820. M=M+1
  24821. //vv push_d_to_stack
  24822. //push THIS
  24823. // #9503
  24824. @THAT
  24825. // #9504
  24826. D=M
  24827. //^^ push_d_to_stack
  24828. // #9505
  24829. @SP
  24830. // #9506
  24831. A=M
  24832. // #9507
  24833. M=D
  24834. // #9508
  24835. @SP
  24836. // #9509
  24837. M=M+1
  24838. //vv push_d_to_stack
  24839. //push THAT
  24840. // #9510
  24841. @SP
  24842. // #9511
  24843. D=M
  24844. // #9512
  24845. @ARG
  24846. // #9513
  24847. M=D
  24848. // #9514
  24849. @17
  24850. // #9515
  24851. D=A
  24852. // #9516
  24853. @ARG
  24854. // #9517
  24855. M=M-D // ARG = SP - args - 5
  24856. // #9518
  24857. @SP
  24858. // #9519
  24859. D=M
  24860. // #9520
  24861. @LCL
  24862. // #9521
  24863. M=D // LCL = SP
  24864. // #9522
  24865. @Output.create
  24866. // #9523
  24867. 0;JMP
  24868. (RET_ADDR_87)
  24869. //
  24870. //// pop temp 0
  24871. //^^ pop_to_loc{5)
  24872. //^^ pop_stack_to_d
  24873. // #9524
  24874. @SP
  24875. // #9525
  24876. M=M-1
  24877. // #9526
  24878. A=M
  24879. // #9527
  24880. D=M
  24881. //vv pop_stack_to_d
  24882. // #9528
  24883. @5
  24884. // #9529
  24885. M=D
  24886. //vv pop_to_loc{5)
  24887. //
  24888. //// push constant 44
  24889. //^^ push_constant(44)
  24890. // #9530
  24891. @44
  24892. // #9531
  24893. D=A
  24894. //^^ push_d_to_stack
  24895. // #9532
  24896. @SP
  24897. // #9533
  24898. A=M
  24899. // #9534
  24900. M=D
  24901. // #9535
  24902. @SP
  24903. // #9536
  24904. M=M+1
  24905. //vv push_d_to_stack
  24906. //vv push_constant(44)
  24907. //
  24908. //// push constant 0
  24909. //^^ push_constant(0)
  24910. // #9537
  24911. @0
  24912. // #9538
  24913. D=A
  24914. //^^ push_d_to_stack
  24915. // #9539
  24916. @SP
  24917. // #9540
  24918. A=M
  24919. // #9541
  24920. M=D
  24921. // #9542
  24922. @SP
  24923. // #9543
  24924. M=M+1
  24925. //vv push_d_to_stack
  24926. //vv push_constant(0)
  24927. //
  24928. //// push constant 0
  24929. //^^ push_constant(0)
  24930. // #9544
  24931. @0
  24932. // #9545
  24933. D=A
  24934. //^^ push_d_to_stack
  24935. // #9546
  24936. @SP
  24937. // #9547
  24938. A=M
  24939. // #9548
  24940. M=D
  24941. // #9549
  24942. @SP
  24943. // #9550
  24944. M=M+1
  24945. //vv push_d_to_stack
  24946. //vv push_constant(0)
  24947. //
  24948. //// push constant 0
  24949. //^^ push_constant(0)
  24950. // #9551
  24951. @0
  24952. // #9552
  24953. D=A
  24954. //^^ push_d_to_stack
  24955. // #9553
  24956. @SP
  24957. // #9554
  24958. A=M
  24959. // #9555
  24960. M=D
  24961. // #9556
  24962. @SP
  24963. // #9557
  24964. M=M+1
  24965. //vv push_d_to_stack
  24966. //vv push_constant(0)
  24967. //
  24968. //// push constant 0
  24969. //^^ push_constant(0)
  24970. // #9558
  24971. @0
  24972. // #9559
  24973. D=A
  24974. //^^ push_d_to_stack
  24975. // #9560
  24976. @SP
  24977. // #9561
  24978. A=M
  24979. // #9562
  24980. M=D
  24981. // #9563
  24982. @SP
  24983. // #9564
  24984. M=M+1
  24985. //vv push_d_to_stack
  24986. //vv push_constant(0)
  24987. //
  24988. //// push constant 0
  24989. //^^ push_constant(0)
  24990. // #9565
  24991. @0
  24992. // #9566
  24993. D=A
  24994. //^^ push_d_to_stack
  24995. // #9567
  24996. @SP
  24997. // #9568
  24998. A=M
  24999. // #9569
  25000. M=D
  25001. // #9570
  25002. @SP
  25003. // #9571
  25004. M=M+1
  25005. //vv push_d_to_stack
  25006. //vv push_constant(0)
  25007. //
  25008. //// push constant 0
  25009. //^^ push_constant(0)
  25010. // #9572
  25011. @0
  25012. // #9573
  25013. D=A
  25014. //^^ push_d_to_stack
  25015. // #9574
  25016. @SP
  25017. // #9575
  25018. A=M
  25019. // #9576
  25020. M=D
  25021. // #9577
  25022. @SP
  25023. // #9578
  25024. M=M+1
  25025. //vv push_d_to_stack
  25026. //vv push_constant(0)
  25027. //
  25028. //// push constant 0
  25029. //^^ push_constant(0)
  25030. // #9579
  25031. @0
  25032. // #9580
  25033. D=A
  25034. //^^ push_d_to_stack
  25035. // #9581
  25036. @SP
  25037. // #9582
  25038. A=M
  25039. // #9583
  25040. M=D
  25041. // #9584
  25042. @SP
  25043. // #9585
  25044. M=M+1
  25045. //vv push_d_to_stack
  25046. //vv push_constant(0)
  25047. //
  25048. //// push constant 12
  25049. //^^ push_constant(12)
  25050. // #9586
  25051. @12
  25052. // #9587
  25053. D=A
  25054. //^^ push_d_to_stack
  25055. // #9588
  25056. @SP
  25057. // #9589
  25058. A=M
  25059. // #9590
  25060. M=D
  25061. // #9591
  25062. @SP
  25063. // #9592
  25064. M=M+1
  25065. //vv push_d_to_stack
  25066. //vv push_constant(12)
  25067. //
  25068. //// push constant 12
  25069. //^^ push_constant(12)
  25070. // #9593
  25071. @12
  25072. // #9594
  25073. D=A
  25074. //^^ push_d_to_stack
  25075. // #9595
  25076. @SP
  25077. // #9596
  25078. A=M
  25079. // #9597
  25080. M=D
  25081. // #9598
  25082. @SP
  25083. // #9599
  25084. M=M+1
  25085. //vv push_d_to_stack
  25086. //vv push_constant(12)
  25087. //
  25088. //// push constant 6
  25089. //^^ push_constant(6)
  25090. // #9600
  25091. @6
  25092. // #9601
  25093. D=A
  25094. //^^ push_d_to_stack
  25095. // #9602
  25096. @SP
  25097. // #9603
  25098. A=M
  25099. // #9604
  25100. M=D
  25101. // #9605
  25102. @SP
  25103. // #9606
  25104. M=M+1
  25105. //vv push_d_to_stack
  25106. //vv push_constant(6)
  25107. //
  25108. //// push constant 0
  25109. //^^ push_constant(0)
  25110. // #9607
  25111. @0
  25112. // #9608
  25113. D=A
  25114. //^^ push_d_to_stack
  25115. // #9609
  25116. @SP
  25117. // #9610
  25118. A=M
  25119. // #9611
  25120. M=D
  25121. // #9612
  25122. @SP
  25123. // #9613
  25124. M=M+1
  25125. //vv push_d_to_stack
  25126. //vv push_constant(0)
  25127. //
  25128. //// call Output.create 12
  25129. //^^ push_constant(RET_ADDR_88)
  25130. // #9614
  25131. @RET_ADDR_88
  25132. // #9615
  25133. D=A
  25134. //^^ push_d_to_stack
  25135. // #9616
  25136. @SP
  25137. // #9617
  25138. A=M
  25139. // #9618
  25140. M=D
  25141. // #9619
  25142. @SP
  25143. // #9620
  25144. M=M+1
  25145. //vv push_d_to_stack
  25146. //vv push_constant(RET_ADDR_88)
  25147. //push return-address
  25148. // #9621
  25149. @LCL
  25150. // #9622
  25151. D=M
  25152. //^^ push_d_to_stack
  25153. // #9623
  25154. @SP
  25155. // #9624
  25156. A=M
  25157. // #9625
  25158. M=D
  25159. // #9626
  25160. @SP
  25161. // #9627
  25162. M=M+1
  25163. //vv push_d_to_stack
  25164. //push LCL
  25165. // #9628
  25166. @ARG
  25167. // #9629
  25168. D=M
  25169. //^^ push_d_to_stack
  25170. // #9630
  25171. @SP
  25172. // #9631
  25173. A=M
  25174. // #9632
  25175. M=D
  25176. // #9633
  25177. @SP
  25178. // #9634
  25179. M=M+1
  25180. //vv push_d_to_stack
  25181. //push ARG
  25182. // #9635
  25183. @THIS
  25184. // #9636
  25185. D=M
  25186. //^^ push_d_to_stack
  25187. // #9637
  25188. @SP
  25189. // #9638
  25190. A=M
  25191. // #9639
  25192. M=D
  25193. // #9640
  25194. @SP
  25195. // #9641
  25196. M=M+1
  25197. //vv push_d_to_stack
  25198. //push THIS
  25199. // #9642
  25200. @THAT
  25201. // #9643
  25202. D=M
  25203. //^^ push_d_to_stack
  25204. // #9644
  25205. @SP
  25206. // #9645
  25207. A=M
  25208. // #9646
  25209. M=D
  25210. // #9647
  25211. @SP
  25212. // #9648
  25213. M=M+1
  25214. //vv push_d_to_stack
  25215. //push THAT
  25216. // #9649
  25217. @SP
  25218. // #9650
  25219. D=M
  25220. // #9651
  25221. @ARG
  25222. // #9652
  25223. M=D
  25224. // #9653
  25225. @17
  25226. // #9654
  25227. D=A
  25228. // #9655
  25229. @ARG
  25230. // #9656
  25231. M=M-D // ARG = SP - args - 5
  25232. // #9657
  25233. @SP
  25234. // #9658
  25235. D=M
  25236. // #9659
  25237. @LCL
  25238. // #9660
  25239. M=D // LCL = SP
  25240. // #9661
  25241. @Output.create
  25242. // #9662
  25243. 0;JMP
  25244. (RET_ADDR_88)
  25245. //
  25246. //// pop temp 0
  25247. //^^ pop_to_loc{5)
  25248. //^^ pop_stack_to_d
  25249. // #9663
  25250. @SP
  25251. // #9664
  25252. M=M-1
  25253. // #9665
  25254. A=M
  25255. // #9666
  25256. D=M
  25257. //vv pop_stack_to_d
  25258. // #9667
  25259. @5
  25260. // #9668
  25261. M=D
  25262. //vv pop_to_loc{5)
  25263. //
  25264. //// push constant 45
  25265. //^^ push_constant(45)
  25266. // #9669
  25267. @45
  25268. // #9670
  25269. D=A
  25270. //^^ push_d_to_stack
  25271. // #9671
  25272. @SP
  25273. // #9672
  25274. A=M
  25275. // #9673
  25276. M=D
  25277. // #9674
  25278. @SP
  25279. // #9675
  25280. M=M+1
  25281. //vv push_d_to_stack
  25282. //vv push_constant(45)
  25283. //
  25284. //// push constant 0
  25285. //^^ push_constant(0)
  25286. // #9676
  25287. @0
  25288. // #9677
  25289. D=A
  25290. //^^ push_d_to_stack
  25291. // #9678
  25292. @SP
  25293. // #9679
  25294. A=M
  25295. // #9680
  25296. M=D
  25297. // #9681
  25298. @SP
  25299. // #9682
  25300. M=M+1
  25301. //vv push_d_to_stack
  25302. //vv push_constant(0)
  25303. //
  25304. //// push constant 0
  25305. //^^ push_constant(0)
  25306. // #9683
  25307. @0
  25308. // #9684
  25309. D=A
  25310. //^^ push_d_to_stack
  25311. // #9685
  25312. @SP
  25313. // #9686
  25314. A=M
  25315. // #9687
  25316. M=D
  25317. // #9688
  25318. @SP
  25319. // #9689
  25320. M=M+1
  25321. //vv push_d_to_stack
  25322. //vv push_constant(0)
  25323. //
  25324. //// push constant 0
  25325. //^^ push_constant(0)
  25326. // #9690
  25327. @0
  25328. // #9691
  25329. D=A
  25330. //^^ push_d_to_stack
  25331. // #9692
  25332. @SP
  25333. // #9693
  25334. A=M
  25335. // #9694
  25336. M=D
  25337. // #9695
  25338. @SP
  25339. // #9696
  25340. M=M+1
  25341. //vv push_d_to_stack
  25342. //vv push_constant(0)
  25343. //
  25344. //// push constant 0
  25345. //^^ push_constant(0)
  25346. // #9697
  25347. @0
  25348. // #9698
  25349. D=A
  25350. //^^ push_d_to_stack
  25351. // #9699
  25352. @SP
  25353. // #9700
  25354. A=M
  25355. // #9701
  25356. M=D
  25357. // #9702
  25358. @SP
  25359. // #9703
  25360. M=M+1
  25361. //vv push_d_to_stack
  25362. //vv push_constant(0)
  25363. //
  25364. //// push constant 0
  25365. //^^ push_constant(0)
  25366. // #9704
  25367. @0
  25368. // #9705
  25369. D=A
  25370. //^^ push_d_to_stack
  25371. // #9706
  25372. @SP
  25373. // #9707
  25374. A=M
  25375. // #9708
  25376. M=D
  25377. // #9709
  25378. @SP
  25379. // #9710
  25380. M=M+1
  25381. //vv push_d_to_stack
  25382. //vv push_constant(0)
  25383. //
  25384. //// push constant 63
  25385. //^^ push_constant(63)
  25386. // #9711
  25387. @63
  25388. // #9712
  25389. D=A
  25390. //^^ push_d_to_stack
  25391. // #9713
  25392. @SP
  25393. // #9714
  25394. A=M
  25395. // #9715
  25396. M=D
  25397. // #9716
  25398. @SP
  25399. // #9717
  25400. M=M+1
  25401. //vv push_d_to_stack
  25402. //vv push_constant(63)
  25403. //
  25404. //// push constant 0
  25405. //^^ push_constant(0)
  25406. // #9718
  25407. @0
  25408. // #9719
  25409. D=A
  25410. //^^ push_d_to_stack
  25411. // #9720
  25412. @SP
  25413. // #9721
  25414. A=M
  25415. // #9722
  25416. M=D
  25417. // #9723
  25418. @SP
  25419. // #9724
  25420. M=M+1
  25421. //vv push_d_to_stack
  25422. //vv push_constant(0)
  25423. //
  25424. //// push constant 0
  25425. //^^ push_constant(0)
  25426. // #9725
  25427. @0
  25428. // #9726
  25429. D=A
  25430. //^^ push_d_to_stack
  25431. // #9727
  25432. @SP
  25433. // #9728
  25434. A=M
  25435. // #9729
  25436. M=D
  25437. // #9730
  25438. @SP
  25439. // #9731
  25440. M=M+1
  25441. //vv push_d_to_stack
  25442. //vv push_constant(0)
  25443. //
  25444. //// push constant 0
  25445. //^^ push_constant(0)
  25446. // #9732
  25447. @0
  25448. // #9733
  25449. D=A
  25450. //^^ push_d_to_stack
  25451. // #9734
  25452. @SP
  25453. // #9735
  25454. A=M
  25455. // #9736
  25456. M=D
  25457. // #9737
  25458. @SP
  25459. // #9738
  25460. M=M+1
  25461. //vv push_d_to_stack
  25462. //vv push_constant(0)
  25463. //
  25464. //// push constant 0
  25465. //^^ push_constant(0)
  25466. // #9739
  25467. @0
  25468. // #9740
  25469. D=A
  25470. //^^ push_d_to_stack
  25471. // #9741
  25472. @SP
  25473. // #9742
  25474. A=M
  25475. // #9743
  25476. M=D
  25477. // #9744
  25478. @SP
  25479. // #9745
  25480. M=M+1
  25481. //vv push_d_to_stack
  25482. //vv push_constant(0)
  25483. //
  25484. //// push constant 0
  25485. //^^ push_constant(0)
  25486. // #9746
  25487. @0
  25488. // #9747
  25489. D=A
  25490. //^^ push_d_to_stack
  25491. // #9748
  25492. @SP
  25493. // #9749
  25494. A=M
  25495. // #9750
  25496. M=D
  25497. // #9751
  25498. @SP
  25499. // #9752
  25500. M=M+1
  25501. //vv push_d_to_stack
  25502. //vv push_constant(0)
  25503. //
  25504. //// call Output.create 12
  25505. //^^ push_constant(RET_ADDR_89)
  25506. // #9753
  25507. @RET_ADDR_89
  25508. // #9754
  25509. D=A
  25510. //^^ push_d_to_stack
  25511. // #9755
  25512. @SP
  25513. // #9756
  25514. A=M
  25515. // #9757
  25516. M=D
  25517. // #9758
  25518. @SP
  25519. // #9759
  25520. M=M+1
  25521. //vv push_d_to_stack
  25522. //vv push_constant(RET_ADDR_89)
  25523. //push return-address
  25524. // #9760
  25525. @LCL
  25526. // #9761
  25527. D=M
  25528. //^^ push_d_to_stack
  25529. // #9762
  25530. @SP
  25531. // #9763
  25532. A=M
  25533. // #9764
  25534. M=D
  25535. // #9765
  25536. @SP
  25537. // #9766
  25538. M=M+1
  25539. //vv push_d_to_stack
  25540. //push LCL
  25541. // #9767
  25542. @ARG
  25543. // #9768
  25544. D=M
  25545. //^^ push_d_to_stack
  25546. // #9769
  25547. @SP
  25548. // #9770
  25549. A=M
  25550. // #9771
  25551. M=D
  25552. // #9772
  25553. @SP
  25554. // #9773
  25555. M=M+1
  25556. //vv push_d_to_stack
  25557. //push ARG
  25558. // #9774
  25559. @THIS
  25560. // #9775
  25561. D=M
  25562. //^^ push_d_to_stack
  25563. // #9776
  25564. @SP
  25565. // #9777
  25566. A=M
  25567. // #9778
  25568. M=D
  25569. // #9779
  25570. @SP
  25571. // #9780
  25572. M=M+1
  25573. //vv push_d_to_stack
  25574. //push THIS
  25575. // #9781
  25576. @THAT
  25577. // #9782
  25578. D=M
  25579. //^^ push_d_to_stack
  25580. // #9783
  25581. @SP
  25582. // #9784
  25583. A=M
  25584. // #9785
  25585. M=D
  25586. // #9786
  25587. @SP
  25588. // #9787
  25589. M=M+1
  25590. //vv push_d_to_stack
  25591. //push THAT
  25592. // #9788
  25593. @SP
  25594. // #9789
  25595. D=M
  25596. // #9790
  25597. @ARG
  25598. // #9791
  25599. M=D
  25600. // #9792
  25601. @17
  25602. // #9793
  25603. D=A
  25604. // #9794
  25605. @ARG
  25606. // #9795
  25607. M=M-D // ARG = SP - args - 5
  25608. // #9796
  25609. @SP
  25610. // #9797
  25611. D=M
  25612. // #9798
  25613. @LCL
  25614. // #9799
  25615. M=D // LCL = SP
  25616. // #9800
  25617. @Output.create
  25618. // #9801
  25619. 0;JMP
  25620. (RET_ADDR_89)
  25621. //
  25622. //// pop temp 0
  25623. //^^ pop_to_loc{5)
  25624. //^^ pop_stack_to_d
  25625. // #9802
  25626. @SP
  25627. // #9803
  25628. M=M-1
  25629. // #9804
  25630. A=M
  25631. // #9805
  25632. D=M
  25633. //vv pop_stack_to_d
  25634. // #9806
  25635. @5
  25636. // #9807
  25637. M=D
  25638. //vv pop_to_loc{5)
  25639. //
  25640. //// push constant 46
  25641. //^^ push_constant(46)
  25642. // #9808
  25643. @46
  25644. // #9809
  25645. D=A
  25646. //^^ push_d_to_stack
  25647. // #9810
  25648. @SP
  25649. // #9811
  25650. A=M
  25651. // #9812
  25652. M=D
  25653. // #9813
  25654. @SP
  25655. // #9814
  25656. M=M+1
  25657. //vv push_d_to_stack
  25658. //vv push_constant(46)
  25659. //
  25660. //// push constant 0
  25661. //^^ push_constant(0)
  25662. // #9815
  25663. @0
  25664. // #9816
  25665. D=A
  25666. //^^ push_d_to_stack
  25667. // #9817
  25668. @SP
  25669. // #9818
  25670. A=M
  25671. // #9819
  25672. M=D
  25673. // #9820
  25674. @SP
  25675. // #9821
  25676. M=M+1
  25677. //vv push_d_to_stack
  25678. //vv push_constant(0)
  25679. //
  25680. //// push constant 0
  25681. //^^ push_constant(0)
  25682. // #9822
  25683. @0
  25684. // #9823
  25685. D=A
  25686. //^^ push_d_to_stack
  25687. // #9824
  25688. @SP
  25689. // #9825
  25690. A=M
  25691. // #9826
  25692. M=D
  25693. // #9827
  25694. @SP
  25695. // #9828
  25696. M=M+1
  25697. //vv push_d_to_stack
  25698. //vv push_constant(0)
  25699. //
  25700. //// push constant 0
  25701. //^^ push_constant(0)
  25702. // #9829
  25703. @0
  25704. // #9830
  25705. D=A
  25706. //^^ push_d_to_stack
  25707. // #9831
  25708. @SP
  25709. // #9832
  25710. A=M
  25711. // #9833
  25712. M=D
  25713. // #9834
  25714. @SP
  25715. // #9835
  25716. M=M+1
  25717. //vv push_d_to_stack
  25718. //vv push_constant(0)
  25719. //
  25720. //// push constant 0
  25721. //^^ push_constant(0)
  25722. // #9836
  25723. @0
  25724. // #9837
  25725. D=A
  25726. //^^ push_d_to_stack
  25727. // #9838
  25728. @SP
  25729. // #9839
  25730. A=M
  25731. // #9840
  25732. M=D
  25733. // #9841
  25734. @SP
  25735. // #9842
  25736. M=M+1
  25737. //vv push_d_to_stack
  25738. //vv push_constant(0)
  25739. //
  25740. //// push constant 0
  25741. //^^ push_constant(0)
  25742. // #9843
  25743. @0
  25744. // #9844
  25745. D=A
  25746. //^^ push_d_to_stack
  25747. // #9845
  25748. @SP
  25749. // #9846
  25750. A=M
  25751. // #9847
  25752. M=D
  25753. // #9848
  25754. @SP
  25755. // #9849
  25756. M=M+1
  25757. //vv push_d_to_stack
  25758. //vv push_constant(0)
  25759. //
  25760. //// push constant 0
  25761. //^^ push_constant(0)
  25762. // #9850
  25763. @0
  25764. // #9851
  25765. D=A
  25766. //^^ push_d_to_stack
  25767. // #9852
  25768. @SP
  25769. // #9853
  25770. A=M
  25771. // #9854
  25772. M=D
  25773. // #9855
  25774. @SP
  25775. // #9856
  25776. M=M+1
  25777. //vv push_d_to_stack
  25778. //vv push_constant(0)
  25779. //
  25780. //// push constant 0
  25781. //^^ push_constant(0)
  25782. // #9857
  25783. @0
  25784. // #9858
  25785. D=A
  25786. //^^ push_d_to_stack
  25787. // #9859
  25788. @SP
  25789. // #9860
  25790. A=M
  25791. // #9861
  25792. M=D
  25793. // #9862
  25794. @SP
  25795. // #9863
  25796. M=M+1
  25797. //vv push_d_to_stack
  25798. //vv push_constant(0)
  25799. //
  25800. //// push constant 12
  25801. //^^ push_constant(12)
  25802. // #9864
  25803. @12
  25804. // #9865
  25805. D=A
  25806. //^^ push_d_to_stack
  25807. // #9866
  25808. @SP
  25809. // #9867
  25810. A=M
  25811. // #9868
  25812. M=D
  25813. // #9869
  25814. @SP
  25815. // #9870
  25816. M=M+1
  25817. //vv push_d_to_stack
  25818. //vv push_constant(12)
  25819. //
  25820. //// push constant 12
  25821. //^^ push_constant(12)
  25822. // #9871
  25823. @12
  25824. // #9872
  25825. D=A
  25826. //^^ push_d_to_stack
  25827. // #9873
  25828. @SP
  25829. // #9874
  25830. A=M
  25831. // #9875
  25832. M=D
  25833. // #9876
  25834. @SP
  25835. // #9877
  25836. M=M+1
  25837. //vv push_d_to_stack
  25838. //vv push_constant(12)
  25839. //
  25840. //// push constant 0
  25841. //^^ push_constant(0)
  25842. // #9878
  25843. @0
  25844. // #9879
  25845. D=A
  25846. //^^ push_d_to_stack
  25847. // #9880
  25848. @SP
  25849. // #9881
  25850. A=M
  25851. // #9882
  25852. M=D
  25853. // #9883
  25854. @SP
  25855. // #9884
  25856. M=M+1
  25857. //vv push_d_to_stack
  25858. //vv push_constant(0)
  25859. //
  25860. //// push constant 0
  25861. //^^ push_constant(0)
  25862. // #9885
  25863. @0
  25864. // #9886
  25865. D=A
  25866. //^^ push_d_to_stack
  25867. // #9887
  25868. @SP
  25869. // #9888
  25870. A=M
  25871. // #9889
  25872. M=D
  25873. // #9890
  25874. @SP
  25875. // #9891
  25876. M=M+1
  25877. //vv push_d_to_stack
  25878. //vv push_constant(0)
  25879. //
  25880. //// call Output.create 12
  25881. //^^ push_constant(RET_ADDR_90)
  25882. // #9892
  25883. @RET_ADDR_90
  25884. // #9893
  25885. D=A
  25886. //^^ push_d_to_stack
  25887. // #9894
  25888. @SP
  25889. // #9895
  25890. A=M
  25891. // #9896
  25892. M=D
  25893. // #9897
  25894. @SP
  25895. // #9898
  25896. M=M+1
  25897. //vv push_d_to_stack
  25898. //vv push_constant(RET_ADDR_90)
  25899. //push return-address
  25900. // #9899
  25901. @LCL
  25902. // #9900
  25903. D=M
  25904. //^^ push_d_to_stack
  25905. // #9901
  25906. @SP
  25907. // #9902
  25908. A=M
  25909. // #9903
  25910. M=D
  25911. // #9904
  25912. @SP
  25913. // #9905
  25914. M=M+1
  25915. //vv push_d_to_stack
  25916. //push LCL
  25917. // #9906
  25918. @ARG
  25919. // #9907
  25920. D=M
  25921. //^^ push_d_to_stack
  25922. // #9908
  25923. @SP
  25924. // #9909
  25925. A=M
  25926. // #9910
  25927. M=D
  25928. // #9911
  25929. @SP
  25930. // #9912
  25931. M=M+1
  25932. //vv push_d_to_stack
  25933. //push ARG
  25934. // #9913
  25935. @THIS
  25936. // #9914
  25937. D=M
  25938. //^^ push_d_to_stack
  25939. // #9915
  25940. @SP
  25941. // #9916
  25942. A=M
  25943. // #9917
  25944. M=D
  25945. // #9918
  25946. @SP
  25947. // #9919
  25948. M=M+1
  25949. //vv push_d_to_stack
  25950. //push THIS
  25951. // #9920
  25952. @THAT
  25953. // #9921
  25954. D=M
  25955. //^^ push_d_to_stack
  25956. // #9922
  25957. @SP
  25958. // #9923
  25959. A=M
  25960. // #9924
  25961. M=D
  25962. // #9925
  25963. @SP
  25964. // #9926
  25965. M=M+1
  25966. //vv push_d_to_stack
  25967. //push THAT
  25968. // #9927
  25969. @SP
  25970. // #9928
  25971. D=M
  25972. // #9929
  25973. @ARG
  25974. // #9930
  25975. M=D
  25976. // #9931
  25977. @17
  25978. // #9932
  25979. D=A
  25980. // #9933
  25981. @ARG
  25982. // #9934
  25983. M=M-D // ARG = SP - args - 5
  25984. // #9935
  25985. @SP
  25986. // #9936
  25987. D=M
  25988. // #9937
  25989. @LCL
  25990. // #9938
  25991. M=D // LCL = SP
  25992. // #9939
  25993. @Output.create
  25994. // #9940
  25995. 0;JMP
  25996. (RET_ADDR_90)
  25997. //
  25998. //// pop temp 0
  25999. //^^ pop_to_loc{5)
  26000. //^^ pop_stack_to_d
  26001. // #9941
  26002. @SP
  26003. // #9942
  26004. M=M-1
  26005. // #9943
  26006. A=M
  26007. // #9944
  26008. D=M
  26009. //vv pop_stack_to_d
  26010. // #9945
  26011. @5
  26012. // #9946
  26013. M=D
  26014. //vv pop_to_loc{5)
  26015. //
  26016. //// push constant 47
  26017. //^^ push_constant(47)
  26018. // #9947
  26019. @47
  26020. // #9948
  26021. D=A
  26022. //^^ push_d_to_stack
  26023. // #9949
  26024. @SP
  26025. // #9950
  26026. A=M
  26027. // #9951
  26028. M=D
  26029. // #9952
  26030. @SP
  26031. // #9953
  26032. M=M+1
  26033. //vv push_d_to_stack
  26034. //vv push_constant(47)
  26035. //
  26036. //// push constant 0
  26037. //^^ push_constant(0)
  26038. // #9954
  26039. @0
  26040. // #9955
  26041. D=A
  26042. //^^ push_d_to_stack
  26043. // #9956
  26044. @SP
  26045. // #9957
  26046. A=M
  26047. // #9958
  26048. M=D
  26049. // #9959
  26050. @SP
  26051. // #9960
  26052. M=M+1
  26053. //vv push_d_to_stack
  26054. //vv push_constant(0)
  26055. //
  26056. //// push constant 0
  26057. //^^ push_constant(0)
  26058. // #9961
  26059. @0
  26060. // #9962
  26061. D=A
  26062. //^^ push_d_to_stack
  26063. // #9963
  26064. @SP
  26065. // #9964
  26066. A=M
  26067. // #9965
  26068. M=D
  26069. // #9966
  26070. @SP
  26071. // #9967
  26072. M=M+1
  26073. //vv push_d_to_stack
  26074. //vv push_constant(0)
  26075. //
  26076. //// push constant 32
  26077. //^^ push_constant(32)
  26078. // #9968
  26079. @32
  26080. // #9969
  26081. D=A
  26082. //^^ push_d_to_stack
  26083. // #9970
  26084. @SP
  26085. // #9971
  26086. A=M
  26087. // #9972
  26088. M=D
  26089. // #9973
  26090. @SP
  26091. // #9974
  26092. M=M+1
  26093. //vv push_d_to_stack
  26094. //vv push_constant(32)
  26095. //
  26096. //// push constant 48
  26097. //^^ push_constant(48)
  26098. // #9975
  26099. @48
  26100. // #9976
  26101. D=A
  26102. //^^ push_d_to_stack
  26103. // #9977
  26104. @SP
  26105. // #9978
  26106. A=M
  26107. // #9979
  26108. M=D
  26109. // #9980
  26110. @SP
  26111. // #9981
  26112. M=M+1
  26113. //vv push_d_to_stack
  26114. //vv push_constant(48)
  26115. //
  26116. //// push constant 24
  26117. //^^ push_constant(24)
  26118. // #9982
  26119. @24
  26120. // #9983
  26121. D=A
  26122. //^^ push_d_to_stack
  26123. // #9984
  26124. @SP
  26125. // #9985
  26126. A=M
  26127. // #9986
  26128. M=D
  26129. // #9987
  26130. @SP
  26131. // #9988
  26132. M=M+1
  26133. //vv push_d_to_stack
  26134. //vv push_constant(24)
  26135. //
  26136. //// push constant 12
  26137. //^^ push_constant(12)
  26138. // #9989
  26139. @12
  26140. // #9990
  26141. D=A
  26142. //^^ push_d_to_stack
  26143. // #9991
  26144. @SP
  26145. // #9992
  26146. A=M
  26147. // #9993
  26148. M=D
  26149. // #9994
  26150. @SP
  26151. // #9995
  26152. M=M+1
  26153. //vv push_d_to_stack
  26154. //vv push_constant(12)
  26155. //
  26156. //// push constant 6
  26157. //^^ push_constant(6)
  26158. // #9996
  26159. @6
  26160. // #9997
  26161. D=A
  26162. //^^ push_d_to_stack
  26163. // #9998
  26164. @SP
  26165. // #9999
  26166. A=M
  26167. // #10000
  26168. M=D
  26169. // #10001
  26170. @SP
  26171. // #10002
  26172. M=M+1
  26173. //vv push_d_to_stack
  26174. //vv push_constant(6)
  26175. //
  26176. //// push constant 3
  26177. //^^ push_constant(3)
  26178. // #10003
  26179. @3
  26180. // #10004
  26181. D=A
  26182. //^^ push_d_to_stack
  26183. // #10005
  26184. @SP
  26185. // #10006
  26186. A=M
  26187. // #10007
  26188. M=D
  26189. // #10008
  26190. @SP
  26191. // #10009
  26192. M=M+1
  26193. //vv push_d_to_stack
  26194. //vv push_constant(3)
  26195. //
  26196. //// push constant 1
  26197. //^^ push_constant(1)
  26198. // #10010
  26199. @1
  26200. // #10011
  26201. D=A
  26202. //^^ push_d_to_stack
  26203. // #10012
  26204. @SP
  26205. // #10013
  26206. A=M
  26207. // #10014
  26208. M=D
  26209. // #10015
  26210. @SP
  26211. // #10016
  26212. M=M+1
  26213. //vv push_d_to_stack
  26214. //vv push_constant(1)
  26215. //
  26216. //// push constant 0
  26217. //^^ push_constant(0)
  26218. // #10017
  26219. @0
  26220. // #10018
  26221. D=A
  26222. //^^ push_d_to_stack
  26223. // #10019
  26224. @SP
  26225. // #10020
  26226. A=M
  26227. // #10021
  26228. M=D
  26229. // #10022
  26230. @SP
  26231. // #10023
  26232. M=M+1
  26233. //vv push_d_to_stack
  26234. //vv push_constant(0)
  26235. //
  26236. //// push constant 0
  26237. //^^ push_constant(0)
  26238. // #10024
  26239. @0
  26240. // #10025
  26241. D=A
  26242. //^^ push_d_to_stack
  26243. // #10026
  26244. @SP
  26245. // #10027
  26246. A=M
  26247. // #10028
  26248. M=D
  26249. // #10029
  26250. @SP
  26251. // #10030
  26252. M=M+1
  26253. //vv push_d_to_stack
  26254. //vv push_constant(0)
  26255. //
  26256. //// call Output.create 12
  26257. //^^ push_constant(RET_ADDR_91)
  26258. // #10031
  26259. @RET_ADDR_91
  26260. // #10032
  26261. D=A
  26262. //^^ push_d_to_stack
  26263. // #10033
  26264. @SP
  26265. // #10034
  26266. A=M
  26267. // #10035
  26268. M=D
  26269. // #10036
  26270. @SP
  26271. // #10037
  26272. M=M+1
  26273. //vv push_d_to_stack
  26274. //vv push_constant(RET_ADDR_91)
  26275. //push return-address
  26276. // #10038
  26277. @LCL
  26278. // #10039
  26279. D=M
  26280. //^^ push_d_to_stack
  26281. // #10040
  26282. @SP
  26283. // #10041
  26284. A=M
  26285. // #10042
  26286. M=D
  26287. // #10043
  26288. @SP
  26289. // #10044
  26290. M=M+1
  26291. //vv push_d_to_stack
  26292. //push LCL
  26293. // #10045
  26294. @ARG
  26295. // #10046
  26296. D=M
  26297. //^^ push_d_to_stack
  26298. // #10047
  26299. @SP
  26300. // #10048
  26301. A=M
  26302. // #10049
  26303. M=D
  26304. // #10050
  26305. @SP
  26306. // #10051
  26307. M=M+1
  26308. //vv push_d_to_stack
  26309. //push ARG
  26310. // #10052
  26311. @THIS
  26312. // #10053
  26313. D=M
  26314. //^^ push_d_to_stack
  26315. // #10054
  26316. @SP
  26317. // #10055
  26318. A=M
  26319. // #10056
  26320. M=D
  26321. // #10057
  26322. @SP
  26323. // #10058
  26324. M=M+1
  26325. //vv push_d_to_stack
  26326. //push THIS
  26327. // #10059
  26328. @THAT
  26329. // #10060
  26330. D=M
  26331. //^^ push_d_to_stack
  26332. // #10061
  26333. @SP
  26334. // #10062
  26335. A=M
  26336. // #10063
  26337. M=D
  26338. // #10064
  26339. @SP
  26340. // #10065
  26341. M=M+1
  26342. //vv push_d_to_stack
  26343. //push THAT
  26344. // #10066
  26345. @SP
  26346. // #10067
  26347. D=M
  26348. // #10068
  26349. @ARG
  26350. // #10069
  26351. M=D
  26352. // #10070
  26353. @17
  26354. // #10071
  26355. D=A
  26356. // #10072
  26357. @ARG
  26358. // #10073
  26359. M=M-D // ARG = SP - args - 5
  26360. // #10074
  26361. @SP
  26362. // #10075
  26363. D=M
  26364. // #10076
  26365. @LCL
  26366. // #10077
  26367. M=D // LCL = SP
  26368. // #10078
  26369. @Output.create
  26370. // #10079
  26371. 0;JMP
  26372. (RET_ADDR_91)
  26373. //
  26374. //// pop temp 0
  26375. //^^ pop_to_loc{5)
  26376. //^^ pop_stack_to_d
  26377. // #10080
  26378. @SP
  26379. // #10081
  26380. M=M-1
  26381. // #10082
  26382. A=M
  26383. // #10083
  26384. D=M
  26385. //vv pop_stack_to_d
  26386. // #10084
  26387. @5
  26388. // #10085
  26389. M=D
  26390. //vv pop_to_loc{5)
  26391. //
  26392. //// push constant 48
  26393. //^^ push_constant(48)
  26394. // #10086
  26395. @48
  26396. // #10087
  26397. D=A
  26398. //^^ push_d_to_stack
  26399. // #10088
  26400. @SP
  26401. // #10089
  26402. A=M
  26403. // #10090
  26404. M=D
  26405. // #10091
  26406. @SP
  26407. // #10092
  26408. M=M+1
  26409. //vv push_d_to_stack
  26410. //vv push_constant(48)
  26411. //
  26412. //// push constant 12
  26413. //^^ push_constant(12)
  26414. // #10093
  26415. @12
  26416. // #10094
  26417. D=A
  26418. //^^ push_d_to_stack
  26419. // #10095
  26420. @SP
  26421. // #10096
  26422. A=M
  26423. // #10097
  26424. M=D
  26425. // #10098
  26426. @SP
  26427. // #10099
  26428. M=M+1
  26429. //vv push_d_to_stack
  26430. //vv push_constant(12)
  26431. //
  26432. //// push constant 30
  26433. //^^ push_constant(30)
  26434. // #10100
  26435. @30
  26436. // #10101
  26437. D=A
  26438. //^^ push_d_to_stack
  26439. // #10102
  26440. @SP
  26441. // #10103
  26442. A=M
  26443. // #10104
  26444. M=D
  26445. // #10105
  26446. @SP
  26447. // #10106
  26448. M=M+1
  26449. //vv push_d_to_stack
  26450. //vv push_constant(30)
  26451. //
  26452. //// push constant 51
  26453. //^^ push_constant(51)
  26454. // #10107
  26455. @51
  26456. // #10108
  26457. D=A
  26458. //^^ push_d_to_stack
  26459. // #10109
  26460. @SP
  26461. // #10110
  26462. A=M
  26463. // #10111
  26464. M=D
  26465. // #10112
  26466. @SP
  26467. // #10113
  26468. M=M+1
  26469. //vv push_d_to_stack
  26470. //vv push_constant(51)
  26471. //
  26472. //// push constant 51
  26473. //^^ push_constant(51)
  26474. // #10114
  26475. @51
  26476. // #10115
  26477. D=A
  26478. //^^ push_d_to_stack
  26479. // #10116
  26480. @SP
  26481. // #10117
  26482. A=M
  26483. // #10118
  26484. M=D
  26485. // #10119
  26486. @SP
  26487. // #10120
  26488. M=M+1
  26489. //vv push_d_to_stack
  26490. //vv push_constant(51)
  26491. //
  26492. //// push constant 51
  26493. //^^ push_constant(51)
  26494. // #10121
  26495. @51
  26496. // #10122
  26497. D=A
  26498. //^^ push_d_to_stack
  26499. // #10123
  26500. @SP
  26501. // #10124
  26502. A=M
  26503. // #10125
  26504. M=D
  26505. // #10126
  26506. @SP
  26507. // #10127
  26508. M=M+1
  26509. //vv push_d_to_stack
  26510. //vv push_constant(51)
  26511. //
  26512. //// push constant 51
  26513. //^^ push_constant(51)
  26514. // #10128
  26515. @51
  26516. // #10129
  26517. D=A
  26518. //^^ push_d_to_stack
  26519. // #10130
  26520. @SP
  26521. // #10131
  26522. A=M
  26523. // #10132
  26524. M=D
  26525. // #10133
  26526. @SP
  26527. // #10134
  26528. M=M+1
  26529. //vv push_d_to_stack
  26530. //vv push_constant(51)
  26531. //
  26532. //// push constant 51
  26533. //^^ push_constant(51)
  26534. // #10135
  26535. @51
  26536. // #10136
  26537. D=A
  26538. //^^ push_d_to_stack
  26539. // #10137
  26540. @SP
  26541. // #10138
  26542. A=M
  26543. // #10139
  26544. M=D
  26545. // #10140
  26546. @SP
  26547. // #10141
  26548. M=M+1
  26549. //vv push_d_to_stack
  26550. //vv push_constant(51)
  26551. //
  26552. //// push constant 30
  26553. //^^ push_constant(30)
  26554. // #10142
  26555. @30
  26556. // #10143
  26557. D=A
  26558. //^^ push_d_to_stack
  26559. // #10144
  26560. @SP
  26561. // #10145
  26562. A=M
  26563. // #10146
  26564. M=D
  26565. // #10147
  26566. @SP
  26567. // #10148
  26568. M=M+1
  26569. //vv push_d_to_stack
  26570. //vv push_constant(30)
  26571. //
  26572. //// push constant 12
  26573. //^^ push_constant(12)
  26574. // #10149
  26575. @12
  26576. // #10150
  26577. D=A
  26578. //^^ push_d_to_stack
  26579. // #10151
  26580. @SP
  26581. // #10152
  26582. A=M
  26583. // #10153
  26584. M=D
  26585. // #10154
  26586. @SP
  26587. // #10155
  26588. M=M+1
  26589. //vv push_d_to_stack
  26590. //vv push_constant(12)
  26591. //
  26592. //// push constant 0
  26593. //^^ push_constant(0)
  26594. // #10156
  26595. @0
  26596. // #10157
  26597. D=A
  26598. //^^ push_d_to_stack
  26599. // #10158
  26600. @SP
  26601. // #10159
  26602. A=M
  26603. // #10160
  26604. M=D
  26605. // #10161
  26606. @SP
  26607. // #10162
  26608. M=M+1
  26609. //vv push_d_to_stack
  26610. //vv push_constant(0)
  26611. //
  26612. //// push constant 0
  26613. //^^ push_constant(0)
  26614. // #10163
  26615. @0
  26616. // #10164
  26617. D=A
  26618. //^^ push_d_to_stack
  26619. // #10165
  26620. @SP
  26621. // #10166
  26622. A=M
  26623. // #10167
  26624. M=D
  26625. // #10168
  26626. @SP
  26627. // #10169
  26628. M=M+1
  26629. //vv push_d_to_stack
  26630. //vv push_constant(0)
  26631. //
  26632. //// call Output.create 12
  26633. //^^ push_constant(RET_ADDR_92)
  26634. // #10170
  26635. @RET_ADDR_92
  26636. // #10171
  26637. D=A
  26638. //^^ push_d_to_stack
  26639. // #10172
  26640. @SP
  26641. // #10173
  26642. A=M
  26643. // #10174
  26644. M=D
  26645. // #10175
  26646. @SP
  26647. // #10176
  26648. M=M+1
  26649. //vv push_d_to_stack
  26650. //vv push_constant(RET_ADDR_92)
  26651. //push return-address
  26652. // #10177
  26653. @LCL
  26654. // #10178
  26655. D=M
  26656. //^^ push_d_to_stack
  26657. // #10179
  26658. @SP
  26659. // #10180
  26660. A=M
  26661. // #10181
  26662. M=D
  26663. // #10182
  26664. @SP
  26665. // #10183
  26666. M=M+1
  26667. //vv push_d_to_stack
  26668. //push LCL
  26669. // #10184
  26670. @ARG
  26671. // #10185
  26672. D=M
  26673. //^^ push_d_to_stack
  26674. // #10186
  26675. @SP
  26676. // #10187
  26677. A=M
  26678. // #10188
  26679. M=D
  26680. // #10189
  26681. @SP
  26682. // #10190
  26683. M=M+1
  26684. //vv push_d_to_stack
  26685. //push ARG
  26686. // #10191
  26687. @THIS
  26688. // #10192
  26689. D=M
  26690. //^^ push_d_to_stack
  26691. // #10193
  26692. @SP
  26693. // #10194
  26694. A=M
  26695. // #10195
  26696. M=D
  26697. // #10196
  26698. @SP
  26699. // #10197
  26700. M=M+1
  26701. //vv push_d_to_stack
  26702. //push THIS
  26703. // #10198
  26704. @THAT
  26705. // #10199
  26706. D=M
  26707. //^^ push_d_to_stack
  26708. // #10200
  26709. @SP
  26710. // #10201
  26711. A=M
  26712. // #10202
  26713. M=D
  26714. // #10203
  26715. @SP
  26716. // #10204
  26717. M=M+1
  26718. //vv push_d_to_stack
  26719. //push THAT
  26720. // #10205
  26721. @SP
  26722. // #10206
  26723. D=M
  26724. // #10207
  26725. @ARG
  26726. // #10208
  26727. M=D
  26728. // #10209
  26729. @17
  26730. // #10210
  26731. D=A
  26732. // #10211
  26733. @ARG
  26734. // #10212
  26735. M=M-D // ARG = SP - args - 5
  26736. // #10213
  26737. @SP
  26738. // #10214
  26739. D=M
  26740. // #10215
  26741. @LCL
  26742. // #10216
  26743. M=D // LCL = SP
  26744. // #10217
  26745. @Output.create
  26746. // #10218
  26747. 0;JMP
  26748. (RET_ADDR_92)
  26749. //
  26750. //// pop temp 0
  26751. //^^ pop_to_loc{5)
  26752. //^^ pop_stack_to_d
  26753. // #10219
  26754. @SP
  26755. // #10220
  26756. M=M-1
  26757. // #10221
  26758. A=M
  26759. // #10222
  26760. D=M
  26761. //vv pop_stack_to_d
  26762. // #10223
  26763. @5
  26764. // #10224
  26765. M=D
  26766. //vv pop_to_loc{5)
  26767. //
  26768. //// push constant 49
  26769. //^^ push_constant(49)
  26770. // #10225
  26771. @49
  26772. // #10226
  26773. D=A
  26774. //^^ push_d_to_stack
  26775. // #10227
  26776. @SP
  26777. // #10228
  26778. A=M
  26779. // #10229
  26780. M=D
  26781. // #10230
  26782. @SP
  26783. // #10231
  26784. M=M+1
  26785. //vv push_d_to_stack
  26786. //vv push_constant(49)
  26787. //
  26788. //// push constant 12
  26789. //^^ push_constant(12)
  26790. // #10232
  26791. @12
  26792. // #10233
  26793. D=A
  26794. //^^ push_d_to_stack
  26795. // #10234
  26796. @SP
  26797. // #10235
  26798. A=M
  26799. // #10236
  26800. M=D
  26801. // #10237
  26802. @SP
  26803. // #10238
  26804. M=M+1
  26805. //vv push_d_to_stack
  26806. //vv push_constant(12)
  26807. //
  26808. //// push constant 14
  26809. //^^ push_constant(14)
  26810. // #10239
  26811. @14
  26812. // #10240
  26813. D=A
  26814. //^^ push_d_to_stack
  26815. // #10241
  26816. @SP
  26817. // #10242
  26818. A=M
  26819. // #10243
  26820. M=D
  26821. // #10244
  26822. @SP
  26823. // #10245
  26824. M=M+1
  26825. //vv push_d_to_stack
  26826. //vv push_constant(14)
  26827. //
  26828. //// push constant 15
  26829. //^^ push_constant(15)
  26830. // #10246
  26831. @15
  26832. // #10247
  26833. D=A
  26834. //^^ push_d_to_stack
  26835. // #10248
  26836. @SP
  26837. // #10249
  26838. A=M
  26839. // #10250
  26840. M=D
  26841. // #10251
  26842. @SP
  26843. // #10252
  26844. M=M+1
  26845. //vv push_d_to_stack
  26846. //vv push_constant(15)
  26847. //
  26848. //// push constant 12
  26849. //^^ push_constant(12)
  26850. // #10253
  26851. @12
  26852. // #10254
  26853. D=A
  26854. //^^ push_d_to_stack
  26855. // #10255
  26856. @SP
  26857. // #10256
  26858. A=M
  26859. // #10257
  26860. M=D
  26861. // #10258
  26862. @SP
  26863. // #10259
  26864. M=M+1
  26865. //vv push_d_to_stack
  26866. //vv push_constant(12)
  26867. //
  26868. //// push constant 12
  26869. //^^ push_constant(12)
  26870. // #10260
  26871. @12
  26872. // #10261
  26873. D=A
  26874. //^^ push_d_to_stack
  26875. // #10262
  26876. @SP
  26877. // #10263
  26878. A=M
  26879. // #10264
  26880. M=D
  26881. // #10265
  26882. @SP
  26883. // #10266
  26884. M=M+1
  26885. //vv push_d_to_stack
  26886. //vv push_constant(12)
  26887. //
  26888. //// push constant 12
  26889. //^^ push_constant(12)
  26890. // #10267
  26891. @12
  26892. // #10268
  26893. D=A
  26894. //^^ push_d_to_stack
  26895. // #10269
  26896. @SP
  26897. // #10270
  26898. A=M
  26899. // #10271
  26900. M=D
  26901. // #10272
  26902. @SP
  26903. // #10273
  26904. M=M+1
  26905. //vv push_d_to_stack
  26906. //vv push_constant(12)
  26907. //
  26908. //// push constant 12
  26909. //^^ push_constant(12)
  26910. // #10274
  26911. @12
  26912. // #10275
  26913. D=A
  26914. //^^ push_d_to_stack
  26915. // #10276
  26916. @SP
  26917. // #10277
  26918. A=M
  26919. // #10278
  26920. M=D
  26921. // #10279
  26922. @SP
  26923. // #10280
  26924. M=M+1
  26925. //vv push_d_to_stack
  26926. //vv push_constant(12)
  26927. //
  26928. //// push constant 12
  26929. //^^ push_constant(12)
  26930. // #10281
  26931. @12
  26932. // #10282
  26933. D=A
  26934. //^^ push_d_to_stack
  26935. // #10283
  26936. @SP
  26937. // #10284
  26938. A=M
  26939. // #10285
  26940. M=D
  26941. // #10286
  26942. @SP
  26943. // #10287
  26944. M=M+1
  26945. //vv push_d_to_stack
  26946. //vv push_constant(12)
  26947. //
  26948. //// push constant 63
  26949. //^^ push_constant(63)
  26950. // #10288
  26951. @63
  26952. // #10289
  26953. D=A
  26954. //^^ push_d_to_stack
  26955. // #10290
  26956. @SP
  26957. // #10291
  26958. A=M
  26959. // #10292
  26960. M=D
  26961. // #10293
  26962. @SP
  26963. // #10294
  26964. M=M+1
  26965. //vv push_d_to_stack
  26966. //vv push_constant(63)
  26967. //
  26968. //// push constant 0
  26969. //^^ push_constant(0)
  26970. // #10295
  26971. @0
  26972. // #10296
  26973. D=A
  26974. //^^ push_d_to_stack
  26975. // #10297
  26976. @SP
  26977. // #10298
  26978. A=M
  26979. // #10299
  26980. M=D
  26981. // #10300
  26982. @SP
  26983. // #10301
  26984. M=M+1
  26985. //vv push_d_to_stack
  26986. //vv push_constant(0)
  26987. //
  26988. //// push constant 0
  26989. //^^ push_constant(0)
  26990. // #10302
  26991. @0
  26992. // #10303
  26993. D=A
  26994. //^^ push_d_to_stack
  26995. // #10304
  26996. @SP
  26997. // #10305
  26998. A=M
  26999. // #10306
  27000. M=D
  27001. // #10307
  27002. @SP
  27003. // #10308
  27004. M=M+1
  27005. //vv push_d_to_stack
  27006. //vv push_constant(0)
  27007. //
  27008. //// call Output.create 12
  27009. //^^ push_constant(RET_ADDR_93)
  27010. // #10309
  27011. @RET_ADDR_93
  27012. // #10310
  27013. D=A
  27014. //^^ push_d_to_stack
  27015. // #10311
  27016. @SP
  27017. // #10312
  27018. A=M
  27019. // #10313
  27020. M=D
  27021. // #10314
  27022. @SP
  27023. // #10315
  27024. M=M+1
  27025. //vv push_d_to_stack
  27026. //vv push_constant(RET_ADDR_93)
  27027. //push return-address
  27028. // #10316
  27029. @LCL
  27030. // #10317
  27031. D=M
  27032. //^^ push_d_to_stack
  27033. // #10318
  27034. @SP
  27035. // #10319
  27036. A=M
  27037. // #10320
  27038. M=D
  27039. // #10321
  27040. @SP
  27041. // #10322
  27042. M=M+1
  27043. //vv push_d_to_stack
  27044. //push LCL
  27045. // #10323
  27046. @ARG
  27047. // #10324
  27048. D=M
  27049. //^^ push_d_to_stack
  27050. // #10325
  27051. @SP
  27052. // #10326
  27053. A=M
  27054. // #10327
  27055. M=D
  27056. // #10328
  27057. @SP
  27058. // #10329
  27059. M=M+1
  27060. //vv push_d_to_stack
  27061. //push ARG
  27062. // #10330
  27063. @THIS
  27064. // #10331
  27065. D=M
  27066. //^^ push_d_to_stack
  27067. // #10332
  27068. @SP
  27069. // #10333
  27070. A=M
  27071. // #10334
  27072. M=D
  27073. // #10335
  27074. @SP
  27075. // #10336
  27076. M=M+1
  27077. //vv push_d_to_stack
  27078. //push THIS
  27079. // #10337
  27080. @THAT
  27081. // #10338
  27082. D=M
  27083. //^^ push_d_to_stack
  27084. // #10339
  27085. @SP
  27086. // #10340
  27087. A=M
  27088. // #10341
  27089. M=D
  27090. // #10342
  27091. @SP
  27092. // #10343
  27093. M=M+1
  27094. //vv push_d_to_stack
  27095. //push THAT
  27096. // #10344
  27097. @SP
  27098. // #10345
  27099. D=M
  27100. // #10346
  27101. @ARG
  27102. // #10347
  27103. M=D
  27104. // #10348
  27105. @17
  27106. // #10349
  27107. D=A
  27108. // #10350
  27109. @ARG
  27110. // #10351
  27111. M=M-D // ARG = SP - args - 5
  27112. // #10352
  27113. @SP
  27114. // #10353
  27115. D=M
  27116. // #10354
  27117. @LCL
  27118. // #10355
  27119. M=D // LCL = SP
  27120. // #10356
  27121. @Output.create
  27122. // #10357
  27123. 0;JMP
  27124. (RET_ADDR_93)
  27125. //
  27126. //// pop temp 0
  27127. //^^ pop_to_loc{5)
  27128. //^^ pop_stack_to_d
  27129. // #10358
  27130. @SP
  27131. // #10359
  27132. M=M-1
  27133. // #10360
  27134. A=M
  27135. // #10361
  27136. D=M
  27137. //vv pop_stack_to_d
  27138. // #10362
  27139. @5
  27140. // #10363
  27141. M=D
  27142. //vv pop_to_loc{5)
  27143. //
  27144. //// push constant 50
  27145. //^^ push_constant(50)
  27146. // #10364
  27147. @50
  27148. // #10365
  27149. D=A
  27150. //^^ push_d_to_stack
  27151. // #10366
  27152. @SP
  27153. // #10367
  27154. A=M
  27155. // #10368
  27156. M=D
  27157. // #10369
  27158. @SP
  27159. // #10370
  27160. M=M+1
  27161. //vv push_d_to_stack
  27162. //vv push_constant(50)
  27163. //
  27164. //// push constant 30
  27165. //^^ push_constant(30)
  27166. // #10371
  27167. @30
  27168. // #10372
  27169. D=A
  27170. //^^ push_d_to_stack
  27171. // #10373
  27172. @SP
  27173. // #10374
  27174. A=M
  27175. // #10375
  27176. M=D
  27177. // #10376
  27178. @SP
  27179. // #10377
  27180. M=M+1
  27181. //vv push_d_to_stack
  27182. //vv push_constant(30)
  27183. //
  27184. //// push constant 51
  27185. //^^ push_constant(51)
  27186. // #10378
  27187. @51
  27188. // #10379
  27189. D=A
  27190. //^^ push_d_to_stack
  27191. // #10380
  27192. @SP
  27193. // #10381
  27194. A=M
  27195. // #10382
  27196. M=D
  27197. // #10383
  27198. @SP
  27199. // #10384
  27200. M=M+1
  27201. //vv push_d_to_stack
  27202. //vv push_constant(51)
  27203. //
  27204. //// push constant 48
  27205. //^^ push_constant(48)
  27206. // #10385
  27207. @48
  27208. // #10386
  27209. D=A
  27210. //^^ push_d_to_stack
  27211. // #10387
  27212. @SP
  27213. // #10388
  27214. A=M
  27215. // #10389
  27216. M=D
  27217. // #10390
  27218. @SP
  27219. // #10391
  27220. M=M+1
  27221. //vv push_d_to_stack
  27222. //vv push_constant(48)
  27223. //
  27224. //// push constant 24
  27225. //^^ push_constant(24)
  27226. // #10392
  27227. @24
  27228. // #10393
  27229. D=A
  27230. //^^ push_d_to_stack
  27231. // #10394
  27232. @SP
  27233. // #10395
  27234. A=M
  27235. // #10396
  27236. M=D
  27237. // #10397
  27238. @SP
  27239. // #10398
  27240. M=M+1
  27241. //vv push_d_to_stack
  27242. //vv push_constant(24)
  27243. //
  27244. //// push constant 12
  27245. //^^ push_constant(12)
  27246. // #10399
  27247. @12
  27248. // #10400
  27249. D=A
  27250. //^^ push_d_to_stack
  27251. // #10401
  27252. @SP
  27253. // #10402
  27254. A=M
  27255. // #10403
  27256. M=D
  27257. // #10404
  27258. @SP
  27259. // #10405
  27260. M=M+1
  27261. //vv push_d_to_stack
  27262. //vv push_constant(12)
  27263. //
  27264. //// push constant 6
  27265. //^^ push_constant(6)
  27266. // #10406
  27267. @6
  27268. // #10407
  27269. D=A
  27270. //^^ push_d_to_stack
  27271. // #10408
  27272. @SP
  27273. // #10409
  27274. A=M
  27275. // #10410
  27276. M=D
  27277. // #10411
  27278. @SP
  27279. // #10412
  27280. M=M+1
  27281. //vv push_d_to_stack
  27282. //vv push_constant(6)
  27283. //
  27284. //// push constant 3
  27285. //^^ push_constant(3)
  27286. // #10413
  27287. @3
  27288. // #10414
  27289. D=A
  27290. //^^ push_d_to_stack
  27291. // #10415
  27292. @SP
  27293. // #10416
  27294. A=M
  27295. // #10417
  27296. M=D
  27297. // #10418
  27298. @SP
  27299. // #10419
  27300. M=M+1
  27301. //vv push_d_to_stack
  27302. //vv push_constant(3)
  27303. //
  27304. //// push constant 51
  27305. //^^ push_constant(51)
  27306. // #10420
  27307. @51
  27308. // #10421
  27309. D=A
  27310. //^^ push_d_to_stack
  27311. // #10422
  27312. @SP
  27313. // #10423
  27314. A=M
  27315. // #10424
  27316. M=D
  27317. // #10425
  27318. @SP
  27319. // #10426
  27320. M=M+1
  27321. //vv push_d_to_stack
  27322. //vv push_constant(51)
  27323. //
  27324. //// push constant 63
  27325. //^^ push_constant(63)
  27326. // #10427
  27327. @63
  27328. // #10428
  27329. D=A
  27330. //^^ push_d_to_stack
  27331. // #10429
  27332. @SP
  27333. // #10430
  27334. A=M
  27335. // #10431
  27336. M=D
  27337. // #10432
  27338. @SP
  27339. // #10433
  27340. M=M+1
  27341. //vv push_d_to_stack
  27342. //vv push_constant(63)
  27343. //
  27344. //// push constant 0
  27345. //^^ push_constant(0)
  27346. // #10434
  27347. @0
  27348. // #10435
  27349. D=A
  27350. //^^ push_d_to_stack
  27351. // #10436
  27352. @SP
  27353. // #10437
  27354. A=M
  27355. // #10438
  27356. M=D
  27357. // #10439
  27358. @SP
  27359. // #10440
  27360. M=M+1
  27361. //vv push_d_to_stack
  27362. //vv push_constant(0)
  27363. //
  27364. //// push constant 0
  27365. //^^ push_constant(0)
  27366. // #10441
  27367. @0
  27368. // #10442
  27369. D=A
  27370. //^^ push_d_to_stack
  27371. // #10443
  27372. @SP
  27373. // #10444
  27374. A=M
  27375. // #10445
  27376. M=D
  27377. // #10446
  27378. @SP
  27379. // #10447
  27380. M=M+1
  27381. //vv push_d_to_stack
  27382. //vv push_constant(0)
  27383. //
  27384. //// call Output.create 12
  27385. //^^ push_constant(RET_ADDR_94)
  27386. // #10448
  27387. @RET_ADDR_94
  27388. // #10449
  27389. D=A
  27390. //^^ push_d_to_stack
  27391. // #10450
  27392. @SP
  27393. // #10451
  27394. A=M
  27395. // #10452
  27396. M=D
  27397. // #10453
  27398. @SP
  27399. // #10454
  27400. M=M+1
  27401. //vv push_d_to_stack
  27402. //vv push_constant(RET_ADDR_94)
  27403. //push return-address
  27404. // #10455
  27405. @LCL
  27406. // #10456
  27407. D=M
  27408. //^^ push_d_to_stack
  27409. // #10457
  27410. @SP
  27411. // #10458
  27412. A=M
  27413. // #10459
  27414. M=D
  27415. // #10460
  27416. @SP
  27417. // #10461
  27418. M=M+1
  27419. //vv push_d_to_stack
  27420. //push LCL
  27421. // #10462
  27422. @ARG
  27423. // #10463
  27424. D=M
  27425. //^^ push_d_to_stack
  27426. // #10464
  27427. @SP
  27428. // #10465
  27429. A=M
  27430. // #10466
  27431. M=D
  27432. // #10467
  27433. @SP
  27434. // #10468
  27435. M=M+1
  27436. //vv push_d_to_stack
  27437. //push ARG
  27438. // #10469
  27439. @THIS
  27440. // #10470
  27441. D=M
  27442. //^^ push_d_to_stack
  27443. // #10471
  27444. @SP
  27445. // #10472
  27446. A=M
  27447. // #10473
  27448. M=D
  27449. // #10474
  27450. @SP
  27451. // #10475
  27452. M=M+1
  27453. //vv push_d_to_stack
  27454. //push THIS
  27455. // #10476
  27456. @THAT
  27457. // #10477
  27458. D=M
  27459. //^^ push_d_to_stack
  27460. // #10478
  27461. @SP
  27462. // #10479
  27463. A=M
  27464. // #10480
  27465. M=D
  27466. // #10481
  27467. @SP
  27468. // #10482
  27469. M=M+1
  27470. //vv push_d_to_stack
  27471. //push THAT
  27472. // #10483
  27473. @SP
  27474. // #10484
  27475. D=M
  27476. // #10485
  27477. @ARG
  27478. // #10486
  27479. M=D
  27480. // #10487
  27481. @17
  27482. // #10488
  27483. D=A
  27484. // #10489
  27485. @ARG
  27486. // #10490
  27487. M=M-D // ARG = SP - args - 5
  27488. // #10491
  27489. @SP
  27490. // #10492
  27491. D=M
  27492. // #10493
  27493. @LCL
  27494. // #10494
  27495. M=D // LCL = SP
  27496. // #10495
  27497. @Output.create
  27498. // #10496
  27499. 0;JMP
  27500. (RET_ADDR_94)
  27501. //
  27502. //// pop temp 0
  27503. //^^ pop_to_loc{5)
  27504. //^^ pop_stack_to_d
  27505. // #10497
  27506. @SP
  27507. // #10498
  27508. M=M-1
  27509. // #10499
  27510. A=M
  27511. // #10500
  27512. D=M
  27513. //vv pop_stack_to_d
  27514. // #10501
  27515. @5
  27516. // #10502
  27517. M=D
  27518. //vv pop_to_loc{5)
  27519. //
  27520. //// push constant 51
  27521. //^^ push_constant(51)
  27522. // #10503
  27523. @51
  27524. // #10504
  27525. D=A
  27526. //^^ push_d_to_stack
  27527. // #10505
  27528. @SP
  27529. // #10506
  27530. A=M
  27531. // #10507
  27532. M=D
  27533. // #10508
  27534. @SP
  27535. // #10509
  27536. M=M+1
  27537. //vv push_d_to_stack
  27538. //vv push_constant(51)
  27539. //
  27540. //// push constant 30
  27541. //^^ push_constant(30)
  27542. // #10510
  27543. @30
  27544. // #10511
  27545. D=A
  27546. //^^ push_d_to_stack
  27547. // #10512
  27548. @SP
  27549. // #10513
  27550. A=M
  27551. // #10514
  27552. M=D
  27553. // #10515
  27554. @SP
  27555. // #10516
  27556. M=M+1
  27557. //vv push_d_to_stack
  27558. //vv push_constant(30)
  27559. //
  27560. //// push constant 51
  27561. //^^ push_constant(51)
  27562. // #10517
  27563. @51
  27564. // #10518
  27565. D=A
  27566. //^^ push_d_to_stack
  27567. // #10519
  27568. @SP
  27569. // #10520
  27570. A=M
  27571. // #10521
  27572. M=D
  27573. // #10522
  27574. @SP
  27575. // #10523
  27576. M=M+1
  27577. //vv push_d_to_stack
  27578. //vv push_constant(51)
  27579. //
  27580. //// push constant 48
  27581. //^^ push_constant(48)
  27582. // #10524
  27583. @48
  27584. // #10525
  27585. D=A
  27586. //^^ push_d_to_stack
  27587. // #10526
  27588. @SP
  27589. // #10527
  27590. A=M
  27591. // #10528
  27592. M=D
  27593. // #10529
  27594. @SP
  27595. // #10530
  27596. M=M+1
  27597. //vv push_d_to_stack
  27598. //vv push_constant(48)
  27599. //
  27600. //// push constant 48
  27601. //^^ push_constant(48)
  27602. // #10531
  27603. @48
  27604. // #10532
  27605. D=A
  27606. //^^ push_d_to_stack
  27607. // #10533
  27608. @SP
  27609. // #10534
  27610. A=M
  27611. // #10535
  27612. M=D
  27613. // #10536
  27614. @SP
  27615. // #10537
  27616. M=M+1
  27617. //vv push_d_to_stack
  27618. //vv push_constant(48)
  27619. //
  27620. //// push constant 28
  27621. //^^ push_constant(28)
  27622. // #10538
  27623. @28
  27624. // #10539
  27625. D=A
  27626. //^^ push_d_to_stack
  27627. // #10540
  27628. @SP
  27629. // #10541
  27630. A=M
  27631. // #10542
  27632. M=D
  27633. // #10543
  27634. @SP
  27635. // #10544
  27636. M=M+1
  27637. //vv push_d_to_stack
  27638. //vv push_constant(28)
  27639. //
  27640. //// push constant 48
  27641. //^^ push_constant(48)
  27642. // #10545
  27643. @48
  27644. // #10546
  27645. D=A
  27646. //^^ push_d_to_stack
  27647. // #10547
  27648. @SP
  27649. // #10548
  27650. A=M
  27651. // #10549
  27652. M=D
  27653. // #10550
  27654. @SP
  27655. // #10551
  27656. M=M+1
  27657. //vv push_d_to_stack
  27658. //vv push_constant(48)
  27659. //
  27660. //// push constant 48
  27661. //^^ push_constant(48)
  27662. // #10552
  27663. @48
  27664. // #10553
  27665. D=A
  27666. //^^ push_d_to_stack
  27667. // #10554
  27668. @SP
  27669. // #10555
  27670. A=M
  27671. // #10556
  27672. M=D
  27673. // #10557
  27674. @SP
  27675. // #10558
  27676. M=M+1
  27677. //vv push_d_to_stack
  27678. //vv push_constant(48)
  27679. //
  27680. //// push constant 51
  27681. //^^ push_constant(51)
  27682. // #10559
  27683. @51
  27684. // #10560
  27685. D=A
  27686. //^^ push_d_to_stack
  27687. // #10561
  27688. @SP
  27689. // #10562
  27690. A=M
  27691. // #10563
  27692. M=D
  27693. // #10564
  27694. @SP
  27695. // #10565
  27696. M=M+1
  27697. //vv push_d_to_stack
  27698. //vv push_constant(51)
  27699. //
  27700. //// push constant 30
  27701. //^^ push_constant(30)
  27702. // #10566
  27703. @30
  27704. // #10567
  27705. D=A
  27706. //^^ push_d_to_stack
  27707. // #10568
  27708. @SP
  27709. // #10569
  27710. A=M
  27711. // #10570
  27712. M=D
  27713. // #10571
  27714. @SP
  27715. // #10572
  27716. M=M+1
  27717. //vv push_d_to_stack
  27718. //vv push_constant(30)
  27719. //
  27720. //// push constant 0
  27721. //^^ push_constant(0)
  27722. // #10573
  27723. @0
  27724. // #10574
  27725. D=A
  27726. //^^ push_d_to_stack
  27727. // #10575
  27728. @SP
  27729. // #10576
  27730. A=M
  27731. // #10577
  27732. M=D
  27733. // #10578
  27734. @SP
  27735. // #10579
  27736. M=M+1
  27737. //vv push_d_to_stack
  27738. //vv push_constant(0)
  27739. //
  27740. //// push constant 0
  27741. //^^ push_constant(0)
  27742. // #10580
  27743. @0
  27744. // #10581
  27745. D=A
  27746. //^^ push_d_to_stack
  27747. // #10582
  27748. @SP
  27749. // #10583
  27750. A=M
  27751. // #10584
  27752. M=D
  27753. // #10585
  27754. @SP
  27755. // #10586
  27756. M=M+1
  27757. //vv push_d_to_stack
  27758. //vv push_constant(0)
  27759. //
  27760. //// call Output.create 12
  27761. //^^ push_constant(RET_ADDR_95)
  27762. // #10587
  27763. @RET_ADDR_95
  27764. // #10588
  27765. D=A
  27766. //^^ push_d_to_stack
  27767. // #10589
  27768. @SP
  27769. // #10590
  27770. A=M
  27771. // #10591
  27772. M=D
  27773. // #10592
  27774. @SP
  27775. // #10593
  27776. M=M+1
  27777. //vv push_d_to_stack
  27778. //vv push_constant(RET_ADDR_95)
  27779. //push return-address
  27780. // #10594
  27781. @LCL
  27782. // #10595
  27783. D=M
  27784. //^^ push_d_to_stack
  27785. // #10596
  27786. @SP
  27787. // #10597
  27788. A=M
  27789. // #10598
  27790. M=D
  27791. // #10599
  27792. @SP
  27793. // #10600
  27794. M=M+1
  27795. //vv push_d_to_stack
  27796. //push LCL
  27797. // #10601
  27798. @ARG
  27799. // #10602
  27800. D=M
  27801. //^^ push_d_to_stack
  27802. // #10603
  27803. @SP
  27804. // #10604
  27805. A=M
  27806. // #10605
  27807. M=D
  27808. // #10606
  27809. @SP
  27810. // #10607
  27811. M=M+1
  27812. //vv push_d_to_stack
  27813. //push ARG
  27814. // #10608
  27815. @THIS
  27816. // #10609
  27817. D=M
  27818. //^^ push_d_to_stack
  27819. // #10610
  27820. @SP
  27821. // #10611
  27822. A=M
  27823. // #10612
  27824. M=D
  27825. // #10613
  27826. @SP
  27827. // #10614
  27828. M=M+1
  27829. //vv push_d_to_stack
  27830. //push THIS
  27831. // #10615
  27832. @THAT
  27833. // #10616
  27834. D=M
  27835. //^^ push_d_to_stack
  27836. // #10617
  27837. @SP
  27838. // #10618
  27839. A=M
  27840. // #10619
  27841. M=D
  27842. // #10620
  27843. @SP
  27844. // #10621
  27845. M=M+1
  27846. //vv push_d_to_stack
  27847. //push THAT
  27848. // #10622
  27849. @SP
  27850. // #10623
  27851. D=M
  27852. // #10624
  27853. @ARG
  27854. // #10625
  27855. M=D
  27856. // #10626
  27857. @17
  27858. // #10627
  27859. D=A
  27860. // #10628
  27861. @ARG
  27862. // #10629
  27863. M=M-D // ARG = SP - args - 5
  27864. // #10630
  27865. @SP
  27866. // #10631
  27867. D=M
  27868. // #10632
  27869. @LCL
  27870. // #10633
  27871. M=D // LCL = SP
  27872. // #10634
  27873. @Output.create
  27874. // #10635
  27875. 0;JMP
  27876. (RET_ADDR_95)
  27877. //
  27878. //// pop temp 0
  27879. //^^ pop_to_loc{5)
  27880. //^^ pop_stack_to_d
  27881. // #10636
  27882. @SP
  27883. // #10637
  27884. M=M-1
  27885. // #10638
  27886. A=M
  27887. // #10639
  27888. D=M
  27889. //vv pop_stack_to_d
  27890. // #10640
  27891. @5
  27892. // #10641
  27893. M=D
  27894. //vv pop_to_loc{5)
  27895. //
  27896. //// push constant 52
  27897. //^^ push_constant(52)
  27898. // #10642
  27899. @52
  27900. // #10643
  27901. D=A
  27902. //^^ push_d_to_stack
  27903. // #10644
  27904. @SP
  27905. // #10645
  27906. A=M
  27907. // #10646
  27908. M=D
  27909. // #10647
  27910. @SP
  27911. // #10648
  27912. M=M+1
  27913. //vv push_d_to_stack
  27914. //vv push_constant(52)
  27915. //
  27916. //// push constant 16
  27917. //^^ push_constant(16)
  27918. // #10649
  27919. @16
  27920. // #10650
  27921. D=A
  27922. //^^ push_d_to_stack
  27923. // #10651
  27924. @SP
  27925. // #10652
  27926. A=M
  27927. // #10653
  27928. M=D
  27929. // #10654
  27930. @SP
  27931. // #10655
  27932. M=M+1
  27933. //vv push_d_to_stack
  27934. //vv push_constant(16)
  27935. //
  27936. //// push constant 24
  27937. //^^ push_constant(24)
  27938. // #10656
  27939. @24
  27940. // #10657
  27941. D=A
  27942. //^^ push_d_to_stack
  27943. // #10658
  27944. @SP
  27945. // #10659
  27946. A=M
  27947. // #10660
  27948. M=D
  27949. // #10661
  27950. @SP
  27951. // #10662
  27952. M=M+1
  27953. //vv push_d_to_stack
  27954. //vv push_constant(24)
  27955. //
  27956. //// push constant 28
  27957. //^^ push_constant(28)
  27958. // #10663
  27959. @28
  27960. // #10664
  27961. D=A
  27962. //^^ push_d_to_stack
  27963. // #10665
  27964. @SP
  27965. // #10666
  27966. A=M
  27967. // #10667
  27968. M=D
  27969. // #10668
  27970. @SP
  27971. // #10669
  27972. M=M+1
  27973. //vv push_d_to_stack
  27974. //vv push_constant(28)
  27975. //
  27976. //// push constant 26
  27977. //^^ push_constant(26)
  27978. // #10670
  27979. @26
  27980. // #10671
  27981. D=A
  27982. //^^ push_d_to_stack
  27983. // #10672
  27984. @SP
  27985. // #10673
  27986. A=M
  27987. // #10674
  27988. M=D
  27989. // #10675
  27990. @SP
  27991. // #10676
  27992. M=M+1
  27993. //vv push_d_to_stack
  27994. //vv push_constant(26)
  27995. //
  27996. //// push constant 25
  27997. //^^ push_constant(25)
  27998. // #10677
  27999. @25
  28000. // #10678
  28001. D=A
  28002. //^^ push_d_to_stack
  28003. // #10679
  28004. @SP
  28005. // #10680
  28006. A=M
  28007. // #10681
  28008. M=D
  28009. // #10682
  28010. @SP
  28011. // #10683
  28012. M=M+1
  28013. //vv push_d_to_stack
  28014. //vv push_constant(25)
  28015. //
  28016. //// push constant 63
  28017. //^^ push_constant(63)
  28018. // #10684
  28019. @63
  28020. // #10685
  28021. D=A
  28022. //^^ push_d_to_stack
  28023. // #10686
  28024. @SP
  28025. // #10687
  28026. A=M
  28027. // #10688
  28028. M=D
  28029. // #10689
  28030. @SP
  28031. // #10690
  28032. M=M+1
  28033. //vv push_d_to_stack
  28034. //vv push_constant(63)
  28035. //
  28036. //// push constant 24
  28037. //^^ push_constant(24)
  28038. // #10691
  28039. @24
  28040. // #10692
  28041. D=A
  28042. //^^ push_d_to_stack
  28043. // #10693
  28044. @SP
  28045. // #10694
  28046. A=M
  28047. // #10695
  28048. M=D
  28049. // #10696
  28050. @SP
  28051. // #10697
  28052. M=M+1
  28053. //vv push_d_to_stack
  28054. //vv push_constant(24)
  28055. //
  28056. //// push constant 24
  28057. //^^ push_constant(24)
  28058. // #10698
  28059. @24
  28060. // #10699
  28061. D=A
  28062. //^^ push_d_to_stack
  28063. // #10700
  28064. @SP
  28065. // #10701
  28066. A=M
  28067. // #10702
  28068. M=D
  28069. // #10703
  28070. @SP
  28071. // #10704
  28072. M=M+1
  28073. //vv push_d_to_stack
  28074. //vv push_constant(24)
  28075. //
  28076. //// push constant 60
  28077. //^^ push_constant(60)
  28078. // #10705
  28079. @60
  28080. // #10706
  28081. D=A
  28082. //^^ push_d_to_stack
  28083. // #10707
  28084. @SP
  28085. // #10708
  28086. A=M
  28087. // #10709
  28088. M=D
  28089. // #10710
  28090. @SP
  28091. // #10711
  28092. M=M+1
  28093. //vv push_d_to_stack
  28094. //vv push_constant(60)
  28095. //
  28096. //// push constant 0
  28097. //^^ push_constant(0)
  28098. // #10712
  28099. @0
  28100. // #10713
  28101. D=A
  28102. //^^ push_d_to_stack
  28103. // #10714
  28104. @SP
  28105. // #10715
  28106. A=M
  28107. // #10716
  28108. M=D
  28109. // #10717
  28110. @SP
  28111. // #10718
  28112. M=M+1
  28113. //vv push_d_to_stack
  28114. //vv push_constant(0)
  28115. //
  28116. //// push constant 0
  28117. //^^ push_constant(0)
  28118. // #10719
  28119. @0
  28120. // #10720
  28121. D=A
  28122. //^^ push_d_to_stack
  28123. // #10721
  28124. @SP
  28125. // #10722
  28126. A=M
  28127. // #10723
  28128. M=D
  28129. // #10724
  28130. @SP
  28131. // #10725
  28132. M=M+1
  28133. //vv push_d_to_stack
  28134. //vv push_constant(0)
  28135. //
  28136. //// call Output.create 12
  28137. //^^ push_constant(RET_ADDR_96)
  28138. // #10726
  28139. @RET_ADDR_96
  28140. // #10727
  28141. D=A
  28142. //^^ push_d_to_stack
  28143. // #10728
  28144. @SP
  28145. // #10729
  28146. A=M
  28147. // #10730
  28148. M=D
  28149. // #10731
  28150. @SP
  28151. // #10732
  28152. M=M+1
  28153. //vv push_d_to_stack
  28154. //vv push_constant(RET_ADDR_96)
  28155. //push return-address
  28156. // #10733
  28157. @LCL
  28158. // #10734
  28159. D=M
  28160. //^^ push_d_to_stack
  28161. // #10735
  28162. @SP
  28163. // #10736
  28164. A=M
  28165. // #10737
  28166. M=D
  28167. // #10738
  28168. @SP
  28169. // #10739
  28170. M=M+1
  28171. //vv push_d_to_stack
  28172. //push LCL
  28173. // #10740
  28174. @ARG
  28175. // #10741
  28176. D=M
  28177. //^^ push_d_to_stack
  28178. // #10742
  28179. @SP
  28180. // #10743
  28181. A=M
  28182. // #10744
  28183. M=D
  28184. // #10745
  28185. @SP
  28186. // #10746
  28187. M=M+1
  28188. //vv push_d_to_stack
  28189. //push ARG
  28190. // #10747
  28191. @THIS
  28192. // #10748
  28193. D=M
  28194. //^^ push_d_to_stack
  28195. // #10749
  28196. @SP
  28197. // #10750
  28198. A=M
  28199. // #10751
  28200. M=D
  28201. // #10752
  28202. @SP
  28203. // #10753
  28204. M=M+1
  28205. //vv push_d_to_stack
  28206. //push THIS
  28207. // #10754
  28208. @THAT
  28209. // #10755
  28210. D=M
  28211. //^^ push_d_to_stack
  28212. // #10756
  28213. @SP
  28214. // #10757
  28215. A=M
  28216. // #10758
  28217. M=D
  28218. // #10759
  28219. @SP
  28220. // #10760
  28221. M=M+1
  28222. //vv push_d_to_stack
  28223. //push THAT
  28224. // #10761
  28225. @SP
  28226. // #10762
  28227. D=M
  28228. // #10763
  28229. @ARG
  28230. // #10764
  28231. M=D
  28232. // #10765
  28233. @17
  28234. // #10766
  28235. D=A
  28236. // #10767
  28237. @ARG
  28238. // #10768
  28239. M=M-D // ARG = SP - args - 5
  28240. // #10769
  28241. @SP
  28242. // #10770
  28243. D=M
  28244. // #10771
  28245. @LCL
  28246. // #10772
  28247. M=D // LCL = SP
  28248. // #10773
  28249. @Output.create
  28250. // #10774
  28251. 0;JMP
  28252. (RET_ADDR_96)
  28253. //
  28254. //// pop temp 0
  28255. //^^ pop_to_loc{5)
  28256. //^^ pop_stack_to_d
  28257. // #10775
  28258. @SP
  28259. // #10776
  28260. M=M-1
  28261. // #10777
  28262. A=M
  28263. // #10778
  28264. D=M
  28265. //vv pop_stack_to_d
  28266. // #10779
  28267. @5
  28268. // #10780
  28269. M=D
  28270. //vv pop_to_loc{5)
  28271. //
  28272. //// push constant 53
  28273. //^^ push_constant(53)
  28274. // #10781
  28275. @53
  28276. // #10782
  28277. D=A
  28278. //^^ push_d_to_stack
  28279. // #10783
  28280. @SP
  28281. // #10784
  28282. A=M
  28283. // #10785
  28284. M=D
  28285. // #10786
  28286. @SP
  28287. // #10787
  28288. M=M+1
  28289. //vv push_d_to_stack
  28290. //vv push_constant(53)
  28291. //
  28292. //// push constant 63
  28293. //^^ push_constant(63)
  28294. // #10788
  28295. @63
  28296. // #10789
  28297. D=A
  28298. //^^ push_d_to_stack
  28299. // #10790
  28300. @SP
  28301. // #10791
  28302. A=M
  28303. // #10792
  28304. M=D
  28305. // #10793
  28306. @SP
  28307. // #10794
  28308. M=M+1
  28309. //vv push_d_to_stack
  28310. //vv push_constant(63)
  28311. //
  28312. //// push constant 3
  28313. //^^ push_constant(3)
  28314. // #10795
  28315. @3
  28316. // #10796
  28317. D=A
  28318. //^^ push_d_to_stack
  28319. // #10797
  28320. @SP
  28321. // #10798
  28322. A=M
  28323. // #10799
  28324. M=D
  28325. // #10800
  28326. @SP
  28327. // #10801
  28328. M=M+1
  28329. //vv push_d_to_stack
  28330. //vv push_constant(3)
  28331. //
  28332. //// push constant 3
  28333. //^^ push_constant(3)
  28334. // #10802
  28335. @3
  28336. // #10803
  28337. D=A
  28338. //^^ push_d_to_stack
  28339. // #10804
  28340. @SP
  28341. // #10805
  28342. A=M
  28343. // #10806
  28344. M=D
  28345. // #10807
  28346. @SP
  28347. // #10808
  28348. M=M+1
  28349. //vv push_d_to_stack
  28350. //vv push_constant(3)
  28351. //
  28352. //// push constant 31
  28353. //^^ push_constant(31)
  28354. // #10809
  28355. @31
  28356. // #10810
  28357. D=A
  28358. //^^ push_d_to_stack
  28359. // #10811
  28360. @SP
  28361. // #10812
  28362. A=M
  28363. // #10813
  28364. M=D
  28365. // #10814
  28366. @SP
  28367. // #10815
  28368. M=M+1
  28369. //vv push_d_to_stack
  28370. //vv push_constant(31)
  28371. //
  28372. //// push constant 48
  28373. //^^ push_constant(48)
  28374. // #10816
  28375. @48
  28376. // #10817
  28377. D=A
  28378. //^^ push_d_to_stack
  28379. // #10818
  28380. @SP
  28381. // #10819
  28382. A=M
  28383. // #10820
  28384. M=D
  28385. // #10821
  28386. @SP
  28387. // #10822
  28388. M=M+1
  28389. //vv push_d_to_stack
  28390. //vv push_constant(48)
  28391. //
  28392. //// push constant 48
  28393. //^^ push_constant(48)
  28394. // #10823
  28395. @48
  28396. // #10824
  28397. D=A
  28398. //^^ push_d_to_stack
  28399. // #10825
  28400. @SP
  28401. // #10826
  28402. A=M
  28403. // #10827
  28404. M=D
  28405. // #10828
  28406. @SP
  28407. // #10829
  28408. M=M+1
  28409. //vv push_d_to_stack
  28410. //vv push_constant(48)
  28411. //
  28412. //// push constant 48
  28413. //^^ push_constant(48)
  28414. // #10830
  28415. @48
  28416. // #10831
  28417. D=A
  28418. //^^ push_d_to_stack
  28419. // #10832
  28420. @SP
  28421. // #10833
  28422. A=M
  28423. // #10834
  28424. M=D
  28425. // #10835
  28426. @SP
  28427. // #10836
  28428. M=M+1
  28429. //vv push_d_to_stack
  28430. //vv push_constant(48)
  28431. //
  28432. //// push constant 51
  28433. //^^ push_constant(51)
  28434. // #10837
  28435. @51
  28436. // #10838
  28437. D=A
  28438. //^^ push_d_to_stack
  28439. // #10839
  28440. @SP
  28441. // #10840
  28442. A=M
  28443. // #10841
  28444. M=D
  28445. // #10842
  28446. @SP
  28447. // #10843
  28448. M=M+1
  28449. //vv push_d_to_stack
  28450. //vv push_constant(51)
  28451. //
  28452. //// push constant 30
  28453. //^^ push_constant(30)
  28454. // #10844
  28455. @30
  28456. // #10845
  28457. D=A
  28458. //^^ push_d_to_stack
  28459. // #10846
  28460. @SP
  28461. // #10847
  28462. A=M
  28463. // #10848
  28464. M=D
  28465. // #10849
  28466. @SP
  28467. // #10850
  28468. M=M+1
  28469. //vv push_d_to_stack
  28470. //vv push_constant(30)
  28471. //
  28472. //// push constant 0
  28473. //^^ push_constant(0)
  28474. // #10851
  28475. @0
  28476. // #10852
  28477. D=A
  28478. //^^ push_d_to_stack
  28479. // #10853
  28480. @SP
  28481. // #10854
  28482. A=M
  28483. // #10855
  28484. M=D
  28485. // #10856
  28486. @SP
  28487. // #10857
  28488. M=M+1
  28489. //vv push_d_to_stack
  28490. //vv push_constant(0)
  28491. //
  28492. //// push constant 0
  28493. //^^ push_constant(0)
  28494. // #10858
  28495. @0
  28496. // #10859
  28497. D=A
  28498. //^^ push_d_to_stack
  28499. // #10860
  28500. @SP
  28501. // #10861
  28502. A=M
  28503. // #10862
  28504. M=D
  28505. // #10863
  28506. @SP
  28507. // #10864
  28508. M=M+1
  28509. //vv push_d_to_stack
  28510. //vv push_constant(0)
  28511. //
  28512. //// call Output.create 12
  28513. //^^ push_constant(RET_ADDR_97)
  28514. // #10865
  28515. @RET_ADDR_97
  28516. // #10866
  28517. D=A
  28518. //^^ push_d_to_stack
  28519. // #10867
  28520. @SP
  28521. // #10868
  28522. A=M
  28523. // #10869
  28524. M=D
  28525. // #10870
  28526. @SP
  28527. // #10871
  28528. M=M+1
  28529. //vv push_d_to_stack
  28530. //vv push_constant(RET_ADDR_97)
  28531. //push return-address
  28532. // #10872
  28533. @LCL
  28534. // #10873
  28535. D=M
  28536. //^^ push_d_to_stack
  28537. // #10874
  28538. @SP
  28539. // #10875
  28540. A=M
  28541. // #10876
  28542. M=D
  28543. // #10877
  28544. @SP
  28545. // #10878
  28546. M=M+1
  28547. //vv push_d_to_stack
  28548. //push LCL
  28549. // #10879
  28550. @ARG
  28551. // #10880
  28552. D=M
  28553. //^^ push_d_to_stack
  28554. // #10881
  28555. @SP
  28556. // #10882
  28557. A=M
  28558. // #10883
  28559. M=D
  28560. // #10884
  28561. @SP
  28562. // #10885
  28563. M=M+1
  28564. //vv push_d_to_stack
  28565. //push ARG
  28566. // #10886
  28567. @THIS
  28568. // #10887
  28569. D=M
  28570. //^^ push_d_to_stack
  28571. // #10888
  28572. @SP
  28573. // #10889
  28574. A=M
  28575. // #10890
  28576. M=D
  28577. // #10891
  28578. @SP
  28579. // #10892
  28580. M=M+1
  28581. //vv push_d_to_stack
  28582. //push THIS
  28583. // #10893
  28584. @THAT
  28585. // #10894
  28586. D=M
  28587. //^^ push_d_to_stack
  28588. // #10895
  28589. @SP
  28590. // #10896
  28591. A=M
  28592. // #10897
  28593. M=D
  28594. // #10898
  28595. @SP
  28596. // #10899
  28597. M=M+1
  28598. //vv push_d_to_stack
  28599. //push THAT
  28600. // #10900
  28601. @SP
  28602. // #10901
  28603. D=M
  28604. // #10902
  28605. @ARG
  28606. // #10903
  28607. M=D
  28608. // #10904
  28609. @17
  28610. // #10905
  28611. D=A
  28612. // #10906
  28613. @ARG
  28614. // #10907
  28615. M=M-D // ARG = SP - args - 5
  28616. // #10908
  28617. @SP
  28618. // #10909
  28619. D=M
  28620. // #10910
  28621. @LCL
  28622. // #10911
  28623. M=D // LCL = SP
  28624. // #10912
  28625. @Output.create
  28626. // #10913
  28627. 0;JMP
  28628. (RET_ADDR_97)
  28629. //
  28630. //// pop temp 0
  28631. //^^ pop_to_loc{5)
  28632. //^^ pop_stack_to_d
  28633. // #10914
  28634. @SP
  28635. // #10915
  28636. M=M-1
  28637. // #10916
  28638. A=M
  28639. // #10917
  28640. D=M
  28641. //vv pop_stack_to_d
  28642. // #10918
  28643. @5
  28644. // #10919
  28645. M=D
  28646. //vv pop_to_loc{5)
  28647. //
  28648. //// push constant 54
  28649. //^^ push_constant(54)
  28650. // #10920
  28651. @54
  28652. // #10921
  28653. D=A
  28654. //^^ push_d_to_stack
  28655. // #10922
  28656. @SP
  28657. // #10923
  28658. A=M
  28659. // #10924
  28660. M=D
  28661. // #10925
  28662. @SP
  28663. // #10926
  28664. M=M+1
  28665. //vv push_d_to_stack
  28666. //vv push_constant(54)
  28667. //
  28668. //// push constant 28
  28669. //^^ push_constant(28)
  28670. // #10927
  28671. @28
  28672. // #10928
  28673. D=A
  28674. //^^ push_d_to_stack
  28675. // #10929
  28676. @SP
  28677. // #10930
  28678. A=M
  28679. // #10931
  28680. M=D
  28681. // #10932
  28682. @SP
  28683. // #10933
  28684. M=M+1
  28685. //vv push_d_to_stack
  28686. //vv push_constant(28)
  28687. //
  28688. //// push constant 6
  28689. //^^ push_constant(6)
  28690. // #10934
  28691. @6
  28692. // #10935
  28693. D=A
  28694. //^^ push_d_to_stack
  28695. // #10936
  28696. @SP
  28697. // #10937
  28698. A=M
  28699. // #10938
  28700. M=D
  28701. // #10939
  28702. @SP
  28703. // #10940
  28704. M=M+1
  28705. //vv push_d_to_stack
  28706. //vv push_constant(6)
  28707. //
  28708. //// push constant 3
  28709. //^^ push_constant(3)
  28710. // #10941
  28711. @3
  28712. // #10942
  28713. D=A
  28714. //^^ push_d_to_stack
  28715. // #10943
  28716. @SP
  28717. // #10944
  28718. A=M
  28719. // #10945
  28720. M=D
  28721. // #10946
  28722. @SP
  28723. // #10947
  28724. M=M+1
  28725. //vv push_d_to_stack
  28726. //vv push_constant(3)
  28727. //
  28728. //// push constant 3
  28729. //^^ push_constant(3)
  28730. // #10948
  28731. @3
  28732. // #10949
  28733. D=A
  28734. //^^ push_d_to_stack
  28735. // #10950
  28736. @SP
  28737. // #10951
  28738. A=M
  28739. // #10952
  28740. M=D
  28741. // #10953
  28742. @SP
  28743. // #10954
  28744. M=M+1
  28745. //vv push_d_to_stack
  28746. //vv push_constant(3)
  28747. //
  28748. //// push constant 31
  28749. //^^ push_constant(31)
  28750. // #10955
  28751. @31
  28752. // #10956
  28753. D=A
  28754. //^^ push_d_to_stack
  28755. // #10957
  28756. @SP
  28757. // #10958
  28758. A=M
  28759. // #10959
  28760. M=D
  28761. // #10960
  28762. @SP
  28763. // #10961
  28764. M=M+1
  28765. //vv push_d_to_stack
  28766. //vv push_constant(31)
  28767. //
  28768. //// push constant 51
  28769. //^^ push_constant(51)
  28770. // #10962
  28771. @51
  28772. // #10963
  28773. D=A
  28774. //^^ push_d_to_stack
  28775. // #10964
  28776. @SP
  28777. // #10965
  28778. A=M
  28779. // #10966
  28780. M=D
  28781. // #10967
  28782. @SP
  28783. // #10968
  28784. M=M+1
  28785. //vv push_d_to_stack
  28786. //vv push_constant(51)
  28787. //
  28788. //// push constant 51
  28789. //^^ push_constant(51)
  28790. // #10969
  28791. @51
  28792. // #10970
  28793. D=A
  28794. //^^ push_d_to_stack
  28795. // #10971
  28796. @SP
  28797. // #10972
  28798. A=M
  28799. // #10973
  28800. M=D
  28801. // #10974
  28802. @SP
  28803. // #10975
  28804. M=M+1
  28805. //vv push_d_to_stack
  28806. //vv push_constant(51)
  28807. //
  28808. //// push constant 51
  28809. //^^ push_constant(51)
  28810. // #10976
  28811. @51
  28812. // #10977
  28813. D=A
  28814. //^^ push_d_to_stack
  28815. // #10978
  28816. @SP
  28817. // #10979
  28818. A=M
  28819. // #10980
  28820. M=D
  28821. // #10981
  28822. @SP
  28823. // #10982
  28824. M=M+1
  28825. //vv push_d_to_stack
  28826. //vv push_constant(51)
  28827. //
  28828. //// push constant 30
  28829. //^^ push_constant(30)
  28830. // #10983
  28831. @30
  28832. // #10984
  28833. D=A
  28834. //^^ push_d_to_stack
  28835. // #10985
  28836. @SP
  28837. // #10986
  28838. A=M
  28839. // #10987
  28840. M=D
  28841. // #10988
  28842. @SP
  28843. // #10989
  28844. M=M+1
  28845. //vv push_d_to_stack
  28846. //vv push_constant(30)
  28847. //
  28848. //// push constant 0
  28849. //^^ push_constant(0)
  28850. // #10990
  28851. @0
  28852. // #10991
  28853. D=A
  28854. //^^ push_d_to_stack
  28855. // #10992
  28856. @SP
  28857. // #10993
  28858. A=M
  28859. // #10994
  28860. M=D
  28861. // #10995
  28862. @SP
  28863. // #10996
  28864. M=M+1
  28865. //vv push_d_to_stack
  28866. //vv push_constant(0)
  28867. //
  28868. //// push constant 0
  28869. //^^ push_constant(0)
  28870. // #10997
  28871. @0
  28872. // #10998
  28873. D=A
  28874. //^^ push_d_to_stack
  28875. // #10999
  28876. @SP
  28877. // #11000
  28878. A=M
  28879. // #11001
  28880. M=D
  28881. // #11002
  28882. @SP
  28883. // #11003
  28884. M=M+1
  28885. //vv push_d_to_stack
  28886. //vv push_constant(0)
  28887. //
  28888. //// call Output.create 12
  28889. //^^ push_constant(RET_ADDR_98)
  28890. // #11004
  28891. @RET_ADDR_98
  28892. // #11005
  28893. D=A
  28894. //^^ push_d_to_stack
  28895. // #11006
  28896. @SP
  28897. // #11007
  28898. A=M
  28899. // #11008
  28900. M=D
  28901. // #11009
  28902. @SP
  28903. // #11010
  28904. M=M+1
  28905. //vv push_d_to_stack
  28906. //vv push_constant(RET_ADDR_98)
  28907. //push return-address
  28908. // #11011
  28909. @LCL
  28910. // #11012
  28911. D=M
  28912. //^^ push_d_to_stack
  28913. // #11013
  28914. @SP
  28915. // #11014
  28916. A=M
  28917. // #11015
  28918. M=D
  28919. // #11016
  28920. @SP
  28921. // #11017
  28922. M=M+1
  28923. //vv push_d_to_stack
  28924. //push LCL
  28925. // #11018
  28926. @ARG
  28927. // #11019
  28928. D=M
  28929. //^^ push_d_to_stack
  28930. // #11020
  28931. @SP
  28932. // #11021
  28933. A=M
  28934. // #11022
  28935. M=D
  28936. // #11023
  28937. @SP
  28938. // #11024
  28939. M=M+1
  28940. //vv push_d_to_stack
  28941. //push ARG
  28942. // #11025
  28943. @THIS
  28944. // #11026
  28945. D=M
  28946. //^^ push_d_to_stack
  28947. // #11027
  28948. @SP
  28949. // #11028
  28950. A=M
  28951. // #11029
  28952. M=D
  28953. // #11030
  28954. @SP
  28955. // #11031
  28956. M=M+1
  28957. //vv push_d_to_stack
  28958. //push THIS
  28959. // #11032
  28960. @THAT
  28961. // #11033
  28962. D=M
  28963. //^^ push_d_to_stack
  28964. // #11034
  28965. @SP
  28966. // #11035
  28967. A=M
  28968. // #11036
  28969. M=D
  28970. // #11037
  28971. @SP
  28972. // #11038
  28973. M=M+1
  28974. //vv push_d_to_stack
  28975. //push THAT
  28976. // #11039
  28977. @SP
  28978. // #11040
  28979. D=M
  28980. // #11041
  28981. @ARG
  28982. // #11042
  28983. M=D
  28984. // #11043
  28985. @17
  28986. // #11044
  28987. D=A
  28988. // #11045
  28989. @ARG
  28990. // #11046
  28991. M=M-D // ARG = SP - args - 5
  28992. // #11047
  28993. @SP
  28994. // #11048
  28995. D=M
  28996. // #11049
  28997. @LCL
  28998. // #11050
  28999. M=D // LCL = SP
  29000. // #11051
  29001. @Output.create
  29002. // #11052
  29003. 0;JMP
  29004. (RET_ADDR_98)
  29005. //
  29006. //// pop temp 0
  29007. //^^ pop_to_loc{5)
  29008. //^^ pop_stack_to_d
  29009. // #11053
  29010. @SP
  29011. // #11054
  29012. M=M-1
  29013. // #11055
  29014. A=M
  29015. // #11056
  29016. D=M
  29017. //vv pop_stack_to_d
  29018. // #11057
  29019. @5
  29020. // #11058
  29021. M=D
  29022. //vv pop_to_loc{5)
  29023. //
  29024. //// push constant 55
  29025. //^^ push_constant(55)
  29026. // #11059
  29027. @55
  29028. // #11060
  29029. D=A
  29030. //^^ push_d_to_stack
  29031. // #11061
  29032. @SP
  29033. // #11062
  29034. A=M
  29035. // #11063
  29036. M=D
  29037. // #11064
  29038. @SP
  29039. // #11065
  29040. M=M+1
  29041. //vv push_d_to_stack
  29042. //vv push_constant(55)
  29043. //
  29044. //// push constant 63
  29045. //^^ push_constant(63)
  29046. // #11066
  29047. @63
  29048. // #11067
  29049. D=A
  29050. //^^ push_d_to_stack
  29051. // #11068
  29052. @SP
  29053. // #11069
  29054. A=M
  29055. // #11070
  29056. M=D
  29057. // #11071
  29058. @SP
  29059. // #11072
  29060. M=M+1
  29061. //vv push_d_to_stack
  29062. //vv push_constant(63)
  29063. //
  29064. //// push constant 49
  29065. //^^ push_constant(49)
  29066. // #11073
  29067. @49
  29068. // #11074
  29069. D=A
  29070. //^^ push_d_to_stack
  29071. // #11075
  29072. @SP
  29073. // #11076
  29074. A=M
  29075. // #11077
  29076. M=D
  29077. // #11078
  29078. @SP
  29079. // #11079
  29080. M=M+1
  29081. //vv push_d_to_stack
  29082. //vv push_constant(49)
  29083. //
  29084. //// push constant 48
  29085. //^^ push_constant(48)
  29086. // #11080
  29087. @48
  29088. // #11081
  29089. D=A
  29090. //^^ push_d_to_stack
  29091. // #11082
  29092. @SP
  29093. // #11083
  29094. A=M
  29095. // #11084
  29096. M=D
  29097. // #11085
  29098. @SP
  29099. // #11086
  29100. M=M+1
  29101. //vv push_d_to_stack
  29102. //vv push_constant(48)
  29103. //
  29104. //// push constant 48
  29105. //^^ push_constant(48)
  29106. // #11087
  29107. @48
  29108. // #11088
  29109. D=A
  29110. //^^ push_d_to_stack
  29111. // #11089
  29112. @SP
  29113. // #11090
  29114. A=M
  29115. // #11091
  29116. M=D
  29117. // #11092
  29118. @SP
  29119. // #11093
  29120. M=M+1
  29121. //vv push_d_to_stack
  29122. //vv push_constant(48)
  29123. //
  29124. //// push constant 24
  29125. //^^ push_constant(24)
  29126. // #11094
  29127. @24
  29128. // #11095
  29129. D=A
  29130. //^^ push_d_to_stack
  29131. // #11096
  29132. @SP
  29133. // #11097
  29134. A=M
  29135. // #11098
  29136. M=D
  29137. // #11099
  29138. @SP
  29139. // #11100
  29140. M=M+1
  29141. //vv push_d_to_stack
  29142. //vv push_constant(24)
  29143. //
  29144. //// push constant 12
  29145. //^^ push_constant(12)
  29146. // #11101
  29147. @12
  29148. // #11102
  29149. D=A
  29150. //^^ push_d_to_stack
  29151. // #11103
  29152. @SP
  29153. // #11104
  29154. A=M
  29155. // #11105
  29156. M=D
  29157. // #11106
  29158. @SP
  29159. // #11107
  29160. M=M+1
  29161. //vv push_d_to_stack
  29162. //vv push_constant(12)
  29163. //
  29164. //// push constant 12
  29165. //^^ push_constant(12)
  29166. // #11108
  29167. @12
  29168. // #11109
  29169. D=A
  29170. //^^ push_d_to_stack
  29171. // #11110
  29172. @SP
  29173. // #11111
  29174. A=M
  29175. // #11112
  29176. M=D
  29177. // #11113
  29178. @SP
  29179. // #11114
  29180. M=M+1
  29181. //vv push_d_to_stack
  29182. //vv push_constant(12)
  29183. //
  29184. //// push constant 12
  29185. //^^ push_constant(12)
  29186. // #11115
  29187. @12
  29188. // #11116
  29189. D=A
  29190. //^^ push_d_to_stack
  29191. // #11117
  29192. @SP
  29193. // #11118
  29194. A=M
  29195. // #11119
  29196. M=D
  29197. // #11120
  29198. @SP
  29199. // #11121
  29200. M=M+1
  29201. //vv push_d_to_stack
  29202. //vv push_constant(12)
  29203. //
  29204. //// push constant 12
  29205. //^^ push_constant(12)
  29206. // #11122
  29207. @12
  29208. // #11123
  29209. D=A
  29210. //^^ push_d_to_stack
  29211. // #11124
  29212. @SP
  29213. // #11125
  29214. A=M
  29215. // #11126
  29216. M=D
  29217. // #11127
  29218. @SP
  29219. // #11128
  29220. M=M+1
  29221. //vv push_d_to_stack
  29222. //vv push_constant(12)
  29223. //
  29224. //// push constant 0
  29225. //^^ push_constant(0)
  29226. // #11129
  29227. @0
  29228. // #11130
  29229. D=A
  29230. //^^ push_d_to_stack
  29231. // #11131
  29232. @SP
  29233. // #11132
  29234. A=M
  29235. // #11133
  29236. M=D
  29237. // #11134
  29238. @SP
  29239. // #11135
  29240. M=M+1
  29241. //vv push_d_to_stack
  29242. //vv push_constant(0)
  29243. //
  29244. //// push constant 0
  29245. //^^ push_constant(0)
  29246. // #11136
  29247. @0
  29248. // #11137
  29249. D=A
  29250. //^^ push_d_to_stack
  29251. // #11138
  29252. @SP
  29253. // #11139
  29254. A=M
  29255. // #11140
  29256. M=D
  29257. // #11141
  29258. @SP
  29259. // #11142
  29260. M=M+1
  29261. //vv push_d_to_stack
  29262. //vv push_constant(0)
  29263. //
  29264. //// call Output.create 12
  29265. //^^ push_constant(RET_ADDR_99)
  29266. // #11143
  29267. @RET_ADDR_99
  29268. // #11144
  29269. D=A
  29270. //^^ push_d_to_stack
  29271. // #11145
  29272. @SP
  29273. // #11146
  29274. A=M
  29275. // #11147
  29276. M=D
  29277. // #11148
  29278. @SP
  29279. // #11149
  29280. M=M+1
  29281. //vv push_d_to_stack
  29282. //vv push_constant(RET_ADDR_99)
  29283. //push return-address
  29284. // #11150
  29285. @LCL
  29286. // #11151
  29287. D=M
  29288. //^^ push_d_to_stack
  29289. // #11152
  29290. @SP
  29291. // #11153
  29292. A=M
  29293. // #11154
  29294. M=D
  29295. // #11155
  29296. @SP
  29297. // #11156
  29298. M=M+1
  29299. //vv push_d_to_stack
  29300. //push LCL
  29301. // #11157
  29302. @ARG
  29303. // #11158
  29304. D=M
  29305. //^^ push_d_to_stack
  29306. // #11159
  29307. @SP
  29308. // #11160
  29309. A=M
  29310. // #11161
  29311. M=D
  29312. // #11162
  29313. @SP
  29314. // #11163
  29315. M=M+1
  29316. //vv push_d_to_stack
  29317. //push ARG
  29318. // #11164
  29319. @THIS
  29320. // #11165
  29321. D=M
  29322. //^^ push_d_to_stack
  29323. // #11166
  29324. @SP
  29325. // #11167
  29326. A=M
  29327. // #11168
  29328. M=D
  29329. // #11169
  29330. @SP
  29331. // #11170
  29332. M=M+1
  29333. //vv push_d_to_stack
  29334. //push THIS
  29335. // #11171
  29336. @THAT
  29337. // #11172
  29338. D=M
  29339. //^^ push_d_to_stack
  29340. // #11173
  29341. @SP
  29342. // #11174
  29343. A=M
  29344. // #11175
  29345. M=D
  29346. // #11176
  29347. @SP
  29348. // #11177
  29349. M=M+1
  29350. //vv push_d_to_stack
  29351. //push THAT
  29352. // #11178
  29353. @SP
  29354. // #11179
  29355. D=M
  29356. // #11180
  29357. @ARG
  29358. // #11181
  29359. M=D
  29360. // #11182
  29361. @17
  29362. // #11183
  29363. D=A
  29364. // #11184
  29365. @ARG
  29366. // #11185
  29367. M=M-D // ARG = SP - args - 5
  29368. // #11186
  29369. @SP
  29370. // #11187
  29371. D=M
  29372. // #11188
  29373. @LCL
  29374. // #11189
  29375. M=D // LCL = SP
  29376. // #11190
  29377. @Output.create
  29378. // #11191
  29379. 0;JMP
  29380. (RET_ADDR_99)
  29381. //
  29382. //// pop temp 0
  29383. //^^ pop_to_loc{5)
  29384. //^^ pop_stack_to_d
  29385. // #11192
  29386. @SP
  29387. // #11193
  29388. M=M-1
  29389. // #11194
  29390. A=M
  29391. // #11195
  29392. D=M
  29393. //vv pop_stack_to_d
  29394. // #11196
  29395. @5
  29396. // #11197
  29397. M=D
  29398. //vv pop_to_loc{5)
  29399. //
  29400. //// push constant 56
  29401. //^^ push_constant(56)
  29402. // #11198
  29403. @56
  29404. // #11199
  29405. D=A
  29406. //^^ push_d_to_stack
  29407. // #11200
  29408. @SP
  29409. // #11201
  29410. A=M
  29411. // #11202
  29412. M=D
  29413. // #11203
  29414. @SP
  29415. // #11204
  29416. M=M+1
  29417. //vv push_d_to_stack
  29418. //vv push_constant(56)
  29419. //
  29420. //// push constant 30
  29421. //^^ push_constant(30)
  29422. // #11205
  29423. @30
  29424. // #11206
  29425. D=A
  29426. //^^ push_d_to_stack
  29427. // #11207
  29428. @SP
  29429. // #11208
  29430. A=M
  29431. // #11209
  29432. M=D
  29433. // #11210
  29434. @SP
  29435. // #11211
  29436. M=M+1
  29437. //vv push_d_to_stack
  29438. //vv push_constant(30)
  29439. //
  29440. //// push constant 51
  29441. //^^ push_constant(51)
  29442. // #11212
  29443. @51
  29444. // #11213
  29445. D=A
  29446. //^^ push_d_to_stack
  29447. // #11214
  29448. @SP
  29449. // #11215
  29450. A=M
  29451. // #11216
  29452. M=D
  29453. // #11217
  29454. @SP
  29455. // #11218
  29456. M=M+1
  29457. //vv push_d_to_stack
  29458. //vv push_constant(51)
  29459. //
  29460. //// push constant 51
  29461. //^^ push_constant(51)
  29462. // #11219
  29463. @51
  29464. // #11220
  29465. D=A
  29466. //^^ push_d_to_stack
  29467. // #11221
  29468. @SP
  29469. // #11222
  29470. A=M
  29471. // #11223
  29472. M=D
  29473. // #11224
  29474. @SP
  29475. // #11225
  29476. M=M+1
  29477. //vv push_d_to_stack
  29478. //vv push_constant(51)
  29479. //
  29480. //// push constant 51
  29481. //^^ push_constant(51)
  29482. // #11226
  29483. @51
  29484. // #11227
  29485. D=A
  29486. //^^ push_d_to_stack
  29487. // #11228
  29488. @SP
  29489. // #11229
  29490. A=M
  29491. // #11230
  29492. M=D
  29493. // #11231
  29494. @SP
  29495. // #11232
  29496. M=M+1
  29497. //vv push_d_to_stack
  29498. //vv push_constant(51)
  29499. //
  29500. //// push constant 30
  29501. //^^ push_constant(30)
  29502. // #11233
  29503. @30
  29504. // #11234
  29505. D=A
  29506. //^^ push_d_to_stack
  29507. // #11235
  29508. @SP
  29509. // #11236
  29510. A=M
  29511. // #11237
  29512. M=D
  29513. // #11238
  29514. @SP
  29515. // #11239
  29516. M=M+1
  29517. //vv push_d_to_stack
  29518. //vv push_constant(30)
  29519. //
  29520. //// push constant 51
  29521. //^^ push_constant(51)
  29522. // #11240
  29523. @51
  29524. // #11241
  29525. D=A
  29526. //^^ push_d_to_stack
  29527. // #11242
  29528. @SP
  29529. // #11243
  29530. A=M
  29531. // #11244
  29532. M=D
  29533. // #11245
  29534. @SP
  29535. // #11246
  29536. M=M+1
  29537. //vv push_d_to_stack
  29538. //vv push_constant(51)
  29539. //
  29540. //// push constant 51
  29541. //^^ push_constant(51)
  29542. // #11247
  29543. @51
  29544. // #11248
  29545. D=A
  29546. //^^ push_d_to_stack
  29547. // #11249
  29548. @SP
  29549. // #11250
  29550. A=M
  29551. // #11251
  29552. M=D
  29553. // #11252
  29554. @SP
  29555. // #11253
  29556. M=M+1
  29557. //vv push_d_to_stack
  29558. //vv push_constant(51)
  29559. //
  29560. //// push constant 51
  29561. //^^ push_constant(51)
  29562. // #11254
  29563. @51
  29564. // #11255
  29565. D=A
  29566. //^^ push_d_to_stack
  29567. // #11256
  29568. @SP
  29569. // #11257
  29570. A=M
  29571. // #11258
  29572. M=D
  29573. // #11259
  29574. @SP
  29575. // #11260
  29576. M=M+1
  29577. //vv push_d_to_stack
  29578. //vv push_constant(51)
  29579. //
  29580. //// push constant 30
  29581. //^^ push_constant(30)
  29582. // #11261
  29583. @30
  29584. // #11262
  29585. D=A
  29586. //^^ push_d_to_stack
  29587. // #11263
  29588. @SP
  29589. // #11264
  29590. A=M
  29591. // #11265
  29592. M=D
  29593. // #11266
  29594. @SP
  29595. // #11267
  29596. M=M+1
  29597. //vv push_d_to_stack
  29598. //vv push_constant(30)
  29599. //
  29600. //// push constant 0
  29601. //^^ push_constant(0)
  29602. // #11268
  29603. @0
  29604. // #11269
  29605. D=A
  29606. //^^ push_d_to_stack
  29607. // #11270
  29608. @SP
  29609. // #11271
  29610. A=M
  29611. // #11272
  29612. M=D
  29613. // #11273
  29614. @SP
  29615. // #11274
  29616. M=M+1
  29617. //vv push_d_to_stack
  29618. //vv push_constant(0)
  29619. //
  29620. //// push constant 0
  29621. //^^ push_constant(0)
  29622. // #11275
  29623. @0
  29624. // #11276
  29625. D=A
  29626. //^^ push_d_to_stack
  29627. // #11277
  29628. @SP
  29629. // #11278
  29630. A=M
  29631. // #11279
  29632. M=D
  29633. // #11280
  29634. @SP
  29635. // #11281
  29636. M=M+1
  29637. //vv push_d_to_stack
  29638. //vv push_constant(0)
  29639. //
  29640. //// call Output.create 12
  29641. //^^ push_constant(RET_ADDR_100)
  29642. // #11282
  29643. @RET_ADDR_100
  29644. // #11283
  29645. D=A
  29646. //^^ push_d_to_stack
  29647. // #11284
  29648. @SP
  29649. // #11285
  29650. A=M
  29651. // #11286
  29652. M=D
  29653. // #11287
  29654. @SP
  29655. // #11288
  29656. M=M+1
  29657. //vv push_d_to_stack
  29658. //vv push_constant(RET_ADDR_100)
  29659. //push return-address
  29660. // #11289
  29661. @LCL
  29662. // #11290
  29663. D=M
  29664. //^^ push_d_to_stack
  29665. // #11291
  29666. @SP
  29667. // #11292
  29668. A=M
  29669. // #11293
  29670. M=D
  29671. // #11294
  29672. @SP
  29673. // #11295
  29674. M=M+1
  29675. //vv push_d_to_stack
  29676. //push LCL
  29677. // #11296
  29678. @ARG
  29679. // #11297
  29680. D=M
  29681. //^^ push_d_to_stack
  29682. // #11298
  29683. @SP
  29684. // #11299
  29685. A=M
  29686. // #11300
  29687. M=D
  29688. // #11301
  29689. @SP
  29690. // #11302
  29691. M=M+1
  29692. //vv push_d_to_stack
  29693. //push ARG
  29694. // #11303
  29695. @THIS
  29696. // #11304
  29697. D=M
  29698. //^^ push_d_to_stack
  29699. // #11305
  29700. @SP
  29701. // #11306
  29702. A=M
  29703. // #11307
  29704. M=D
  29705. // #11308
  29706. @SP
  29707. // #11309
  29708. M=M+1
  29709. //vv push_d_to_stack
  29710. //push THIS
  29711. // #11310
  29712. @THAT
  29713. // #11311
  29714. D=M
  29715. //^^ push_d_to_stack
  29716. // #11312
  29717. @SP
  29718. // #11313
  29719. A=M
  29720. // #11314
  29721. M=D
  29722. // #11315
  29723. @SP
  29724. // #11316
  29725. M=M+1
  29726. //vv push_d_to_stack
  29727. //push THAT
  29728. // #11317
  29729. @SP
  29730. // #11318
  29731. D=M
  29732. // #11319
  29733. @ARG
  29734. // #11320
  29735. M=D
  29736. // #11321
  29737. @17
  29738. // #11322
  29739. D=A
  29740. // #11323
  29741. @ARG
  29742. // #11324
  29743. M=M-D // ARG = SP - args - 5
  29744. // #11325
  29745. @SP
  29746. // #11326
  29747. D=M
  29748. // #11327
  29749. @LCL
  29750. // #11328
  29751. M=D // LCL = SP
  29752. // #11329
  29753. @Output.create
  29754. // #11330
  29755. 0;JMP
  29756. (RET_ADDR_100)
  29757. //
  29758. //// pop temp 0
  29759. //^^ pop_to_loc{5)
  29760. //^^ pop_stack_to_d
  29761. // #11331
  29762. @SP
  29763. // #11332
  29764. M=M-1
  29765. // #11333
  29766. A=M
  29767. // #11334
  29768. D=M
  29769. //vv pop_stack_to_d
  29770. // #11335
  29771. @5
  29772. // #11336
  29773. M=D
  29774. //vv pop_to_loc{5)
  29775. //
  29776. //// push constant 57
  29777. //^^ push_constant(57)
  29778. // #11337
  29779. @57
  29780. // #11338
  29781. D=A
  29782. //^^ push_d_to_stack
  29783. // #11339
  29784. @SP
  29785. // #11340
  29786. A=M
  29787. // #11341
  29788. M=D
  29789. // #11342
  29790. @SP
  29791. // #11343
  29792. M=M+1
  29793. //vv push_d_to_stack
  29794. //vv push_constant(57)
  29795. //
  29796. //// push constant 30
  29797. //^^ push_constant(30)
  29798. // #11344
  29799. @30
  29800. // #11345
  29801. D=A
  29802. //^^ push_d_to_stack
  29803. // #11346
  29804. @SP
  29805. // #11347
  29806. A=M
  29807. // #11348
  29808. M=D
  29809. // #11349
  29810. @SP
  29811. // #11350
  29812. M=M+1
  29813. //vv push_d_to_stack
  29814. //vv push_constant(30)
  29815. //
  29816. //// push constant 51
  29817. //^^ push_constant(51)
  29818. // #11351
  29819. @51
  29820. // #11352
  29821. D=A
  29822. //^^ push_d_to_stack
  29823. // #11353
  29824. @SP
  29825. // #11354
  29826. A=M
  29827. // #11355
  29828. M=D
  29829. // #11356
  29830. @SP
  29831. // #11357
  29832. M=M+1
  29833. //vv push_d_to_stack
  29834. //vv push_constant(51)
  29835. //
  29836. //// push constant 51
  29837. //^^ push_constant(51)
  29838. // #11358
  29839. @51
  29840. // #11359
  29841. D=A
  29842. //^^ push_d_to_stack
  29843. // #11360
  29844. @SP
  29845. // #11361
  29846. A=M
  29847. // #11362
  29848. M=D
  29849. // #11363
  29850. @SP
  29851. // #11364
  29852. M=M+1
  29853. //vv push_d_to_stack
  29854. //vv push_constant(51)
  29855. //
  29856. //// push constant 51
  29857. //^^ push_constant(51)
  29858. // #11365
  29859. @51
  29860. // #11366
  29861. D=A
  29862. //^^ push_d_to_stack
  29863. // #11367
  29864. @SP
  29865. // #11368
  29866. A=M
  29867. // #11369
  29868. M=D
  29869. // #11370
  29870. @SP
  29871. // #11371
  29872. M=M+1
  29873. //vv push_d_to_stack
  29874. //vv push_constant(51)
  29875. //
  29876. //// push constant 62
  29877. //^^ push_constant(62)
  29878. // #11372
  29879. @62
  29880. // #11373
  29881. D=A
  29882. //^^ push_d_to_stack
  29883. // #11374
  29884. @SP
  29885. // #11375
  29886. A=M
  29887. // #11376
  29888. M=D
  29889. // #11377
  29890. @SP
  29891. // #11378
  29892. M=M+1
  29893. //vv push_d_to_stack
  29894. //vv push_constant(62)
  29895. //
  29896. //// push constant 48
  29897. //^^ push_constant(48)
  29898. // #11379
  29899. @48
  29900. // #11380
  29901. D=A
  29902. //^^ push_d_to_stack
  29903. // #11381
  29904. @SP
  29905. // #11382
  29906. A=M
  29907. // #11383
  29908. M=D
  29909. // #11384
  29910. @SP
  29911. // #11385
  29912. M=M+1
  29913. //vv push_d_to_stack
  29914. //vv push_constant(48)
  29915. //
  29916. //// push constant 48
  29917. //^^ push_constant(48)
  29918. // #11386
  29919. @48
  29920. // #11387
  29921. D=A
  29922. //^^ push_d_to_stack
  29923. // #11388
  29924. @SP
  29925. // #11389
  29926. A=M
  29927. // #11390
  29928. M=D
  29929. // #11391
  29930. @SP
  29931. // #11392
  29932. M=M+1
  29933. //vv push_d_to_stack
  29934. //vv push_constant(48)
  29935. //
  29936. //// push constant 24
  29937. //^^ push_constant(24)
  29938. // #11393
  29939. @24
  29940. // #11394
  29941. D=A
  29942. //^^ push_d_to_stack
  29943. // #11395
  29944. @SP
  29945. // #11396
  29946. A=M
  29947. // #11397
  29948. M=D
  29949. // #11398
  29950. @SP
  29951. // #11399
  29952. M=M+1
  29953. //vv push_d_to_stack
  29954. //vv push_constant(24)
  29955. //
  29956. //// push constant 14
  29957. //^^ push_constant(14)
  29958. // #11400
  29959. @14
  29960. // #11401
  29961. D=A
  29962. //^^ push_d_to_stack
  29963. // #11402
  29964. @SP
  29965. // #11403
  29966. A=M
  29967. // #11404
  29968. M=D
  29969. // #11405
  29970. @SP
  29971. // #11406
  29972. M=M+1
  29973. //vv push_d_to_stack
  29974. //vv push_constant(14)
  29975. //
  29976. //// push constant 0
  29977. //^^ push_constant(0)
  29978. // #11407
  29979. @0
  29980. // #11408
  29981. D=A
  29982. //^^ push_d_to_stack
  29983. // #11409
  29984. @SP
  29985. // #11410
  29986. A=M
  29987. // #11411
  29988. M=D
  29989. // #11412
  29990. @SP
  29991. // #11413
  29992. M=M+1
  29993. //vv push_d_to_stack
  29994. //vv push_constant(0)
  29995. //
  29996. //// push constant 0
  29997. //^^ push_constant(0)
  29998. // #11414
  29999. @0
  30000. // #11415
  30001. D=A
  30002. //^^ push_d_to_stack
  30003. // #11416
  30004. @SP
  30005. // #11417
  30006. A=M
  30007. // #11418
  30008. M=D
  30009. // #11419
  30010. @SP
  30011. // #11420
  30012. M=M+1
  30013. //vv push_d_to_stack
  30014. //vv push_constant(0)
  30015. //
  30016. //// call Output.create 12
  30017. //^^ push_constant(RET_ADDR_101)
  30018. // #11421
  30019. @RET_ADDR_101
  30020. // #11422
  30021. D=A
  30022. //^^ push_d_to_stack
  30023. // #11423
  30024. @SP
  30025. // #11424
  30026. A=M
  30027. // #11425
  30028. M=D
  30029. // #11426
  30030. @SP
  30031. // #11427
  30032. M=M+1
  30033. //vv push_d_to_stack
  30034. //vv push_constant(RET_ADDR_101)
  30035. //push return-address
  30036. // #11428
  30037. @LCL
  30038. // #11429
  30039. D=M
  30040. //^^ push_d_to_stack
  30041. // #11430
  30042. @SP
  30043. // #11431
  30044. A=M
  30045. // #11432
  30046. M=D
  30047. // #11433
  30048. @SP
  30049. // #11434
  30050. M=M+1
  30051. //vv push_d_to_stack
  30052. //push LCL
  30053. // #11435
  30054. @ARG
  30055. // #11436
  30056. D=M
  30057. //^^ push_d_to_stack
  30058. // #11437
  30059. @SP
  30060. // #11438
  30061. A=M
  30062. // #11439
  30063. M=D
  30064. // #11440
  30065. @SP
  30066. // #11441
  30067. M=M+1
  30068. //vv push_d_to_stack
  30069. //push ARG
  30070. // #11442
  30071. @THIS
  30072. // #11443
  30073. D=M
  30074. //^^ push_d_to_stack
  30075. // #11444
  30076. @SP
  30077. // #11445
  30078. A=M
  30079. // #11446
  30080. M=D
  30081. // #11447
  30082. @SP
  30083. // #11448
  30084. M=M+1
  30085. //vv push_d_to_stack
  30086. //push THIS
  30087. // #11449
  30088. @THAT
  30089. // #11450
  30090. D=M
  30091. //^^ push_d_to_stack
  30092. // #11451
  30093. @SP
  30094. // #11452
  30095. A=M
  30096. // #11453
  30097. M=D
  30098. // #11454
  30099. @SP
  30100. // #11455
  30101. M=M+1
  30102. //vv push_d_to_stack
  30103. //push THAT
  30104. // #11456
  30105. @SP
  30106. // #11457
  30107. D=M
  30108. // #11458
  30109. @ARG
  30110. // #11459
  30111. M=D
  30112. // #11460
  30113. @17
  30114. // #11461
  30115. D=A
  30116. // #11462
  30117. @ARG
  30118. // #11463
  30119. M=M-D // ARG = SP - args - 5
  30120. // #11464
  30121. @SP
  30122. // #11465
  30123. D=M
  30124. // #11466
  30125. @LCL
  30126. // #11467
  30127. M=D // LCL = SP
  30128. // #11468
  30129. @Output.create
  30130. // #11469
  30131. 0;JMP
  30132. (RET_ADDR_101)
  30133. //
  30134. //// pop temp 0
  30135. //^^ pop_to_loc{5)
  30136. //^^ pop_stack_to_d
  30137. // #11470
  30138. @SP
  30139. // #11471
  30140. M=M-1
  30141. // #11472
  30142. A=M
  30143. // #11473
  30144. D=M
  30145. //vv pop_stack_to_d
  30146. // #11474
  30147. @5
  30148. // #11475
  30149. M=D
  30150. //vv pop_to_loc{5)
  30151. //
  30152. //// push constant 58
  30153. //^^ push_constant(58)
  30154. // #11476
  30155. @58
  30156. // #11477
  30157. D=A
  30158. //^^ push_d_to_stack
  30159. // #11478
  30160. @SP
  30161. // #11479
  30162. A=M
  30163. // #11480
  30164. M=D
  30165. // #11481
  30166. @SP
  30167. // #11482
  30168. M=M+1
  30169. //vv push_d_to_stack
  30170. //vv push_constant(58)
  30171. //
  30172. //// push constant 0
  30173. //^^ push_constant(0)
  30174. // #11483
  30175. @0
  30176. // #11484
  30177. D=A
  30178. //^^ push_d_to_stack
  30179. // #11485
  30180. @SP
  30181. // #11486
  30182. A=M
  30183. // #11487
  30184. M=D
  30185. // #11488
  30186. @SP
  30187. // #11489
  30188. M=M+1
  30189. //vv push_d_to_stack
  30190. //vv push_constant(0)
  30191. //
  30192. //// push constant 0
  30193. //^^ push_constant(0)
  30194. // #11490
  30195. @0
  30196. // #11491
  30197. D=A
  30198. //^^ push_d_to_stack
  30199. // #11492
  30200. @SP
  30201. // #11493
  30202. A=M
  30203. // #11494
  30204. M=D
  30205. // #11495
  30206. @SP
  30207. // #11496
  30208. M=M+1
  30209. //vv push_d_to_stack
  30210. //vv push_constant(0)
  30211. //
  30212. //// push constant 12
  30213. //^^ push_constant(12)
  30214. // #11497
  30215. @12
  30216. // #11498
  30217. D=A
  30218. //^^ push_d_to_stack
  30219. // #11499
  30220. @SP
  30221. // #11500
  30222. A=M
  30223. // #11501
  30224. M=D
  30225. // #11502
  30226. @SP
  30227. // #11503
  30228. M=M+1
  30229. //vv push_d_to_stack
  30230. //vv push_constant(12)
  30231. //
  30232. //// push constant 12
  30233. //^^ push_constant(12)
  30234. // #11504
  30235. @12
  30236. // #11505
  30237. D=A
  30238. //^^ push_d_to_stack
  30239. // #11506
  30240. @SP
  30241. // #11507
  30242. A=M
  30243. // #11508
  30244. M=D
  30245. // #11509
  30246. @SP
  30247. // #11510
  30248. M=M+1
  30249. //vv push_d_to_stack
  30250. //vv push_constant(12)
  30251. //
  30252. //// push constant 0
  30253. //^^ push_constant(0)
  30254. // #11511
  30255. @0
  30256. // #11512
  30257. D=A
  30258. //^^ push_d_to_stack
  30259. // #11513
  30260. @SP
  30261. // #11514
  30262. A=M
  30263. // #11515
  30264. M=D
  30265. // #11516
  30266. @SP
  30267. // #11517
  30268. M=M+1
  30269. //vv push_d_to_stack
  30270. //vv push_constant(0)
  30271. //
  30272. //// push constant 0
  30273. //^^ push_constant(0)
  30274. // #11518
  30275. @0
  30276. // #11519
  30277. D=A
  30278. //^^ push_d_to_stack
  30279. // #11520
  30280. @SP
  30281. // #11521
  30282. A=M
  30283. // #11522
  30284. M=D
  30285. // #11523
  30286. @SP
  30287. // #11524
  30288. M=M+1
  30289. //vv push_d_to_stack
  30290. //vv push_constant(0)
  30291. //
  30292. //// push constant 12
  30293. //^^ push_constant(12)
  30294. // #11525
  30295. @12
  30296. // #11526
  30297. D=A
  30298. //^^ push_d_to_stack
  30299. // #11527
  30300. @SP
  30301. // #11528
  30302. A=M
  30303. // #11529
  30304. M=D
  30305. // #11530
  30306. @SP
  30307. // #11531
  30308. M=M+1
  30309. //vv push_d_to_stack
  30310. //vv push_constant(12)
  30311. //
  30312. //// push constant 12
  30313. //^^ push_constant(12)
  30314. // #11532
  30315. @12
  30316. // #11533
  30317. D=A
  30318. //^^ push_d_to_stack
  30319. // #11534
  30320. @SP
  30321. // #11535
  30322. A=M
  30323. // #11536
  30324. M=D
  30325. // #11537
  30326. @SP
  30327. // #11538
  30328. M=M+1
  30329. //vv push_d_to_stack
  30330. //vv push_constant(12)
  30331. //
  30332. //// push constant 0
  30333. //^^ push_constant(0)
  30334. // #11539
  30335. @0
  30336. // #11540
  30337. D=A
  30338. //^^ push_d_to_stack
  30339. // #11541
  30340. @SP
  30341. // #11542
  30342. A=M
  30343. // #11543
  30344. M=D
  30345. // #11544
  30346. @SP
  30347. // #11545
  30348. M=M+1
  30349. //vv push_d_to_stack
  30350. //vv push_constant(0)
  30351. //
  30352. //// push constant 0
  30353. //^^ push_constant(0)
  30354. // #11546
  30355. @0
  30356. // #11547
  30357. D=A
  30358. //^^ push_d_to_stack
  30359. // #11548
  30360. @SP
  30361. // #11549
  30362. A=M
  30363. // #11550
  30364. M=D
  30365. // #11551
  30366. @SP
  30367. // #11552
  30368. M=M+1
  30369. //vv push_d_to_stack
  30370. //vv push_constant(0)
  30371. //
  30372. //// push constant 0
  30373. //^^ push_constant(0)
  30374. // #11553
  30375. @0
  30376. // #11554
  30377. D=A
  30378. //^^ push_d_to_stack
  30379. // #11555
  30380. @SP
  30381. // #11556
  30382. A=M
  30383. // #11557
  30384. M=D
  30385. // #11558
  30386. @SP
  30387. // #11559
  30388. M=M+1
  30389. //vv push_d_to_stack
  30390. //vv push_constant(0)
  30391. //
  30392. //// call Output.create 12
  30393. //^^ push_constant(RET_ADDR_102)
  30394. // #11560
  30395. @RET_ADDR_102
  30396. // #11561
  30397. D=A
  30398. //^^ push_d_to_stack
  30399. // #11562
  30400. @SP
  30401. // #11563
  30402. A=M
  30403. // #11564
  30404. M=D
  30405. // #11565
  30406. @SP
  30407. // #11566
  30408. M=M+1
  30409. //vv push_d_to_stack
  30410. //vv push_constant(RET_ADDR_102)
  30411. //push return-address
  30412. // #11567
  30413. @LCL
  30414. // #11568
  30415. D=M
  30416. //^^ push_d_to_stack
  30417. // #11569
  30418. @SP
  30419. // #11570
  30420. A=M
  30421. // #11571
  30422. M=D
  30423. // #11572
  30424. @SP
  30425. // #11573
  30426. M=M+1
  30427. //vv push_d_to_stack
  30428. //push LCL
  30429. // #11574
  30430. @ARG
  30431. // #11575
  30432. D=M
  30433. //^^ push_d_to_stack
  30434. // #11576
  30435. @SP
  30436. // #11577
  30437. A=M
  30438. // #11578
  30439. M=D
  30440. // #11579
  30441. @SP
  30442. // #11580
  30443. M=M+1
  30444. //vv push_d_to_stack
  30445. //push ARG
  30446. // #11581
  30447. @THIS
  30448. // #11582
  30449. D=M
  30450. //^^ push_d_to_stack
  30451. // #11583
  30452. @SP
  30453. // #11584
  30454. A=M
  30455. // #11585
  30456. M=D
  30457. // #11586
  30458. @SP
  30459. // #11587
  30460. M=M+1
  30461. //vv push_d_to_stack
  30462. //push THIS
  30463. // #11588
  30464. @THAT
  30465. // #11589
  30466. D=M
  30467. //^^ push_d_to_stack
  30468. // #11590
  30469. @SP
  30470. // #11591
  30471. A=M
  30472. // #11592
  30473. M=D
  30474. // #11593
  30475. @SP
  30476. // #11594
  30477. M=M+1
  30478. //vv push_d_to_stack
  30479. //push THAT
  30480. // #11595
  30481. @SP
  30482. // #11596
  30483. D=M
  30484. // #11597
  30485. @ARG
  30486. // #11598
  30487. M=D
  30488. // #11599
  30489. @17
  30490. // #11600
  30491. D=A
  30492. // #11601
  30493. @ARG
  30494. // #11602
  30495. M=M-D // ARG = SP - args - 5
  30496. // #11603
  30497. @SP
  30498. // #11604
  30499. D=M
  30500. // #11605
  30501. @LCL
  30502. // #11606
  30503. M=D // LCL = SP
  30504. // #11607
  30505. @Output.create
  30506. // #11608
  30507. 0;JMP
  30508. (RET_ADDR_102)
  30509. //
  30510. //// pop temp 0
  30511. //^^ pop_to_loc{5)
  30512. //^^ pop_stack_to_d
  30513. // #11609
  30514. @SP
  30515. // #11610
  30516. M=M-1
  30517. // #11611
  30518. A=M
  30519. // #11612
  30520. D=M
  30521. //vv pop_stack_to_d
  30522. // #11613
  30523. @5
  30524. // #11614
  30525. M=D
  30526. //vv pop_to_loc{5)
  30527. //
  30528. //// push constant 59
  30529. //^^ push_constant(59)
  30530. // #11615
  30531. @59
  30532. // #11616
  30533. D=A
  30534. //^^ push_d_to_stack
  30535. // #11617
  30536. @SP
  30537. // #11618
  30538. A=M
  30539. // #11619
  30540. M=D
  30541. // #11620
  30542. @SP
  30543. // #11621
  30544. M=M+1
  30545. //vv push_d_to_stack
  30546. //vv push_constant(59)
  30547. //
  30548. //// push constant 0
  30549. //^^ push_constant(0)
  30550. // #11622
  30551. @0
  30552. // #11623
  30553. D=A
  30554. //^^ push_d_to_stack
  30555. // #11624
  30556. @SP
  30557. // #11625
  30558. A=M
  30559. // #11626
  30560. M=D
  30561. // #11627
  30562. @SP
  30563. // #11628
  30564. M=M+1
  30565. //vv push_d_to_stack
  30566. //vv push_constant(0)
  30567. //
  30568. //// push constant 0
  30569. //^^ push_constant(0)
  30570. // #11629
  30571. @0
  30572. // #11630
  30573. D=A
  30574. //^^ push_d_to_stack
  30575. // #11631
  30576. @SP
  30577. // #11632
  30578. A=M
  30579. // #11633
  30580. M=D
  30581. // #11634
  30582. @SP
  30583. // #11635
  30584. M=M+1
  30585. //vv push_d_to_stack
  30586. //vv push_constant(0)
  30587. //
  30588. //// push constant 12
  30589. //^^ push_constant(12)
  30590. // #11636
  30591. @12
  30592. // #11637
  30593. D=A
  30594. //^^ push_d_to_stack
  30595. // #11638
  30596. @SP
  30597. // #11639
  30598. A=M
  30599. // #11640
  30600. M=D
  30601. // #11641
  30602. @SP
  30603. // #11642
  30604. M=M+1
  30605. //vv push_d_to_stack
  30606. //vv push_constant(12)
  30607. //
  30608. //// push constant 12
  30609. //^^ push_constant(12)
  30610. // #11643
  30611. @12
  30612. // #11644
  30613. D=A
  30614. //^^ push_d_to_stack
  30615. // #11645
  30616. @SP
  30617. // #11646
  30618. A=M
  30619. // #11647
  30620. M=D
  30621. // #11648
  30622. @SP
  30623. // #11649
  30624. M=M+1
  30625. //vv push_d_to_stack
  30626. //vv push_constant(12)
  30627. //
  30628. //// push constant 0
  30629. //^^ push_constant(0)
  30630. // #11650
  30631. @0
  30632. // #11651
  30633. D=A
  30634. //^^ push_d_to_stack
  30635. // #11652
  30636. @SP
  30637. // #11653
  30638. A=M
  30639. // #11654
  30640. M=D
  30641. // #11655
  30642. @SP
  30643. // #11656
  30644. M=M+1
  30645. //vv push_d_to_stack
  30646. //vv push_constant(0)
  30647. //
  30648. //// push constant 0
  30649. //^^ push_constant(0)
  30650. // #11657
  30651. @0
  30652. // #11658
  30653. D=A
  30654. //^^ push_d_to_stack
  30655. // #11659
  30656. @SP
  30657. // #11660
  30658. A=M
  30659. // #11661
  30660. M=D
  30661. // #11662
  30662. @SP
  30663. // #11663
  30664. M=M+1
  30665. //vv push_d_to_stack
  30666. //vv push_constant(0)
  30667. //
  30668. //// push constant 12
  30669. //^^ push_constant(12)
  30670. // #11664
  30671. @12
  30672. // #11665
  30673. D=A
  30674. //^^ push_d_to_stack
  30675. // #11666
  30676. @SP
  30677. // #11667
  30678. A=M
  30679. // #11668
  30680. M=D
  30681. // #11669
  30682. @SP
  30683. // #11670
  30684. M=M+1
  30685. //vv push_d_to_stack
  30686. //vv push_constant(12)
  30687. //
  30688. //// push constant 12
  30689. //^^ push_constant(12)
  30690. // #11671
  30691. @12
  30692. // #11672
  30693. D=A
  30694. //^^ push_d_to_stack
  30695. // #11673
  30696. @SP
  30697. // #11674
  30698. A=M
  30699. // #11675
  30700. M=D
  30701. // #11676
  30702. @SP
  30703. // #11677
  30704. M=M+1
  30705. //vv push_d_to_stack
  30706. //vv push_constant(12)
  30707. //
  30708. //// push constant 6
  30709. //^^ push_constant(6)
  30710. // #11678
  30711. @6
  30712. // #11679
  30713. D=A
  30714. //^^ push_d_to_stack
  30715. // #11680
  30716. @SP
  30717. // #11681
  30718. A=M
  30719. // #11682
  30720. M=D
  30721. // #11683
  30722. @SP
  30723. // #11684
  30724. M=M+1
  30725. //vv push_d_to_stack
  30726. //vv push_constant(6)
  30727. //
  30728. //// push constant 0
  30729. //^^ push_constant(0)
  30730. // #11685
  30731. @0
  30732. // #11686
  30733. D=A
  30734. //^^ push_d_to_stack
  30735. // #11687
  30736. @SP
  30737. // #11688
  30738. A=M
  30739. // #11689
  30740. M=D
  30741. // #11690
  30742. @SP
  30743. // #11691
  30744. M=M+1
  30745. //vv push_d_to_stack
  30746. //vv push_constant(0)
  30747. //
  30748. //// push constant 0
  30749. //^^ push_constant(0)
  30750. // #11692
  30751. @0
  30752. // #11693
  30753. D=A
  30754. //^^ push_d_to_stack
  30755. // #11694
  30756. @SP
  30757. // #11695
  30758. A=M
  30759. // #11696
  30760. M=D
  30761. // #11697
  30762. @SP
  30763. // #11698
  30764. M=M+1
  30765. //vv push_d_to_stack
  30766. //vv push_constant(0)
  30767. //
  30768. //// call Output.create 12
  30769. //^^ push_constant(RET_ADDR_103)
  30770. // #11699
  30771. @RET_ADDR_103
  30772. // #11700
  30773. D=A
  30774. //^^ push_d_to_stack
  30775. // #11701
  30776. @SP
  30777. // #11702
  30778. A=M
  30779. // #11703
  30780. M=D
  30781. // #11704
  30782. @SP
  30783. // #11705
  30784. M=M+1
  30785. //vv push_d_to_stack
  30786. //vv push_constant(RET_ADDR_103)
  30787. //push return-address
  30788. // #11706
  30789. @LCL
  30790. // #11707
  30791. D=M
  30792. //^^ push_d_to_stack
  30793. // #11708
  30794. @SP
  30795. // #11709
  30796. A=M
  30797. // #11710
  30798. M=D
  30799. // #11711
  30800. @SP
  30801. // #11712
  30802. M=M+1
  30803. //vv push_d_to_stack
  30804. //push LCL
  30805. // #11713
  30806. @ARG
  30807. // #11714
  30808. D=M
  30809. //^^ push_d_to_stack
  30810. // #11715
  30811. @SP
  30812. // #11716
  30813. A=M
  30814. // #11717
  30815. M=D
  30816. // #11718
  30817. @SP
  30818. // #11719
  30819. M=M+1
  30820. //vv push_d_to_stack
  30821. //push ARG
  30822. // #11720
  30823. @THIS
  30824. // #11721
  30825. D=M
  30826. //^^ push_d_to_stack
  30827. // #11722
  30828. @SP
  30829. // #11723
  30830. A=M
  30831. // #11724
  30832. M=D
  30833. // #11725
  30834. @SP
  30835. // #11726
  30836. M=M+1
  30837. //vv push_d_to_stack
  30838. //push THIS
  30839. // #11727
  30840. @THAT
  30841. // #11728
  30842. D=M
  30843. //^^ push_d_to_stack
  30844. // #11729
  30845. @SP
  30846. // #11730
  30847. A=M
  30848. // #11731
  30849. M=D
  30850. // #11732
  30851. @SP
  30852. // #11733
  30853. M=M+1
  30854. //vv push_d_to_stack
  30855. //push THAT
  30856. // #11734
  30857. @SP
  30858. // #11735
  30859. D=M
  30860. // #11736
  30861. @ARG
  30862. // #11737
  30863. M=D
  30864. // #11738
  30865. @17
  30866. // #11739
  30867. D=A
  30868. // #11740
  30869. @ARG
  30870. // #11741
  30871. M=M-D // ARG = SP - args - 5
  30872. // #11742
  30873. @SP
  30874. // #11743
  30875. D=M
  30876. // #11744
  30877. @LCL
  30878. // #11745
  30879. M=D // LCL = SP
  30880. // #11746
  30881. @Output.create
  30882. // #11747
  30883. 0;JMP
  30884. (RET_ADDR_103)
  30885. //
  30886. //// pop temp 0
  30887. //^^ pop_to_loc{5)
  30888. //^^ pop_stack_to_d
  30889. // #11748
  30890. @SP
  30891. // #11749
  30892. M=M-1
  30893. // #11750
  30894. A=M
  30895. // #11751
  30896. D=M
  30897. //vv pop_stack_to_d
  30898. // #11752
  30899. @5
  30900. // #11753
  30901. M=D
  30902. //vv pop_to_loc{5)
  30903. //
  30904. //// push constant 60
  30905. //^^ push_constant(60)
  30906. // #11754
  30907. @60
  30908. // #11755
  30909. D=A
  30910. //^^ push_d_to_stack
  30911. // #11756
  30912. @SP
  30913. // #11757
  30914. A=M
  30915. // #11758
  30916. M=D
  30917. // #11759
  30918. @SP
  30919. // #11760
  30920. M=M+1
  30921. //vv push_d_to_stack
  30922. //vv push_constant(60)
  30923. //
  30924. //// push constant 0
  30925. //^^ push_constant(0)
  30926. // #11761
  30927. @0
  30928. // #11762
  30929. D=A
  30930. //^^ push_d_to_stack
  30931. // #11763
  30932. @SP
  30933. // #11764
  30934. A=M
  30935. // #11765
  30936. M=D
  30937. // #11766
  30938. @SP
  30939. // #11767
  30940. M=M+1
  30941. //vv push_d_to_stack
  30942. //vv push_constant(0)
  30943. //
  30944. //// push constant 0
  30945. //^^ push_constant(0)
  30946. // #11768
  30947. @0
  30948. // #11769
  30949. D=A
  30950. //^^ push_d_to_stack
  30951. // #11770
  30952. @SP
  30953. // #11771
  30954. A=M
  30955. // #11772
  30956. M=D
  30957. // #11773
  30958. @SP
  30959. // #11774
  30960. M=M+1
  30961. //vv push_d_to_stack
  30962. //vv push_constant(0)
  30963. //
  30964. //// push constant 24
  30965. //^^ push_constant(24)
  30966. // #11775
  30967. @24
  30968. // #11776
  30969. D=A
  30970. //^^ push_d_to_stack
  30971. // #11777
  30972. @SP
  30973. // #11778
  30974. A=M
  30975. // #11779
  30976. M=D
  30977. // #11780
  30978. @SP
  30979. // #11781
  30980. M=M+1
  30981. //vv push_d_to_stack
  30982. //vv push_constant(24)
  30983. //
  30984. //// push constant 12
  30985. //^^ push_constant(12)
  30986. // #11782
  30987. @12
  30988. // #11783
  30989. D=A
  30990. //^^ push_d_to_stack
  30991. // #11784
  30992. @SP
  30993. // #11785
  30994. A=M
  30995. // #11786
  30996. M=D
  30997. // #11787
  30998. @SP
  30999. // #11788
  31000. M=M+1
  31001. //vv push_d_to_stack
  31002. //vv push_constant(12)
  31003. //
  31004. //// push constant 6
  31005. //^^ push_constant(6)
  31006. // #11789
  31007. @6
  31008. // #11790
  31009. D=A
  31010. //^^ push_d_to_stack
  31011. // #11791
  31012. @SP
  31013. // #11792
  31014. A=M
  31015. // #11793
  31016. M=D
  31017. // #11794
  31018. @SP
  31019. // #11795
  31020. M=M+1
  31021. //vv push_d_to_stack
  31022. //vv push_constant(6)
  31023. //
  31024. //// push constant 3
  31025. //^^ push_constant(3)
  31026. // #11796
  31027. @3
  31028. // #11797
  31029. D=A
  31030. //^^ push_d_to_stack
  31031. // #11798
  31032. @SP
  31033. // #11799
  31034. A=M
  31035. // #11800
  31036. M=D
  31037. // #11801
  31038. @SP
  31039. // #11802
  31040. M=M+1
  31041. //vv push_d_to_stack
  31042. //vv push_constant(3)
  31043. //
  31044. //// push constant 6
  31045. //^^ push_constant(6)
  31046. // #11803
  31047. @6
  31048. // #11804
  31049. D=A
  31050. //^^ push_d_to_stack
  31051. // #11805
  31052. @SP
  31053. // #11806
  31054. A=M
  31055. // #11807
  31056. M=D
  31057. // #11808
  31058. @SP
  31059. // #11809
  31060. M=M+1
  31061. //vv push_d_to_stack
  31062. //vv push_constant(6)
  31063. //
  31064. //// push constant 12
  31065. //^^ push_constant(12)
  31066. // #11810
  31067. @12
  31068. // #11811
  31069. D=A
  31070. //^^ push_d_to_stack
  31071. // #11812
  31072. @SP
  31073. // #11813
  31074. A=M
  31075. // #11814
  31076. M=D
  31077. // #11815
  31078. @SP
  31079. // #11816
  31080. M=M+1
  31081. //vv push_d_to_stack
  31082. //vv push_constant(12)
  31083. //
  31084. //// push constant 24
  31085. //^^ push_constant(24)
  31086. // #11817
  31087. @24
  31088. // #11818
  31089. D=A
  31090. //^^ push_d_to_stack
  31091. // #11819
  31092. @SP
  31093. // #11820
  31094. A=M
  31095. // #11821
  31096. M=D
  31097. // #11822
  31098. @SP
  31099. // #11823
  31100. M=M+1
  31101. //vv push_d_to_stack
  31102. //vv push_constant(24)
  31103. //
  31104. //// push constant 0
  31105. //^^ push_constant(0)
  31106. // #11824
  31107. @0
  31108. // #11825
  31109. D=A
  31110. //^^ push_d_to_stack
  31111. // #11826
  31112. @SP
  31113. // #11827
  31114. A=M
  31115. // #11828
  31116. M=D
  31117. // #11829
  31118. @SP
  31119. // #11830
  31120. M=M+1
  31121. //vv push_d_to_stack
  31122. //vv push_constant(0)
  31123. //
  31124. //// push constant 0
  31125. //^^ push_constant(0)
  31126. // #11831
  31127. @0
  31128. // #11832
  31129. D=A
  31130. //^^ push_d_to_stack
  31131. // #11833
  31132. @SP
  31133. // #11834
  31134. A=M
  31135. // #11835
  31136. M=D
  31137. // #11836
  31138. @SP
  31139. // #11837
  31140. M=M+1
  31141. //vv push_d_to_stack
  31142. //vv push_constant(0)
  31143. //
  31144. //// call Output.create 12
  31145. //^^ push_constant(RET_ADDR_104)
  31146. // #11838
  31147. @RET_ADDR_104
  31148. // #11839
  31149. D=A
  31150. //^^ push_d_to_stack
  31151. // #11840
  31152. @SP
  31153. // #11841
  31154. A=M
  31155. // #11842
  31156. M=D
  31157. // #11843
  31158. @SP
  31159. // #11844
  31160. M=M+1
  31161. //vv push_d_to_stack
  31162. //vv push_constant(RET_ADDR_104)
  31163. //push return-address
  31164. // #11845
  31165. @LCL
  31166. // #11846
  31167. D=M
  31168. //^^ push_d_to_stack
  31169. // #11847
  31170. @SP
  31171. // #11848
  31172. A=M
  31173. // #11849
  31174. M=D
  31175. // #11850
  31176. @SP
  31177. // #11851
  31178. M=M+1
  31179. //vv push_d_to_stack
  31180. //push LCL
  31181. // #11852
  31182. @ARG
  31183. // #11853
  31184. D=M
  31185. //^^ push_d_to_stack
  31186. // #11854
  31187. @SP
  31188. // #11855
  31189. A=M
  31190. // #11856
  31191. M=D
  31192. // #11857
  31193. @SP
  31194. // #11858
  31195. M=M+1
  31196. //vv push_d_to_stack
  31197. //push ARG
  31198. // #11859
  31199. @THIS
  31200. // #11860
  31201. D=M
  31202. //^^ push_d_to_stack
  31203. // #11861
  31204. @SP
  31205. // #11862
  31206. A=M
  31207. // #11863
  31208. M=D
  31209. // #11864
  31210. @SP
  31211. // #11865
  31212. M=M+1
  31213. //vv push_d_to_stack
  31214. //push THIS
  31215. // #11866
  31216. @THAT
  31217. // #11867
  31218. D=M
  31219. //^^ push_d_to_stack
  31220. // #11868
  31221. @SP
  31222. // #11869
  31223. A=M
  31224. // #11870
  31225. M=D
  31226. // #11871
  31227. @SP
  31228. // #11872
  31229. M=M+1
  31230. //vv push_d_to_stack
  31231. //push THAT
  31232. // #11873
  31233. @SP
  31234. // #11874
  31235. D=M
  31236. // #11875
  31237. @ARG
  31238. // #11876
  31239. M=D
  31240. // #11877
  31241. @17
  31242. // #11878
  31243. D=A
  31244. // #11879
  31245. @ARG
  31246. // #11880
  31247. M=M-D // ARG = SP - args - 5
  31248. // #11881
  31249. @SP
  31250. // #11882
  31251. D=M
  31252. // #11883
  31253. @LCL
  31254. // #11884
  31255. M=D // LCL = SP
  31256. // #11885
  31257. @Output.create
  31258. // #11886
  31259. 0;JMP
  31260. (RET_ADDR_104)
  31261. //
  31262. //// pop temp 0
  31263. //^^ pop_to_loc{5)
  31264. //^^ pop_stack_to_d
  31265. // #11887
  31266. @SP
  31267. // #11888
  31268. M=M-1
  31269. // #11889
  31270. A=M
  31271. // #11890
  31272. D=M
  31273. //vv pop_stack_to_d
  31274. // #11891
  31275. @5
  31276. // #11892
  31277. M=D
  31278. //vv pop_to_loc{5)
  31279. //
  31280. //// push constant 61
  31281. //^^ push_constant(61)
  31282. // #11893
  31283. @61
  31284. // #11894
  31285. D=A
  31286. //^^ push_d_to_stack
  31287. // #11895
  31288. @SP
  31289. // #11896
  31290. A=M
  31291. // #11897
  31292. M=D
  31293. // #11898
  31294. @SP
  31295. // #11899
  31296. M=M+1
  31297. //vv push_d_to_stack
  31298. //vv push_constant(61)
  31299. //
  31300. //// push constant 0
  31301. //^^ push_constant(0)
  31302. // #11900
  31303. @0
  31304. // #11901
  31305. D=A
  31306. //^^ push_d_to_stack
  31307. // #11902
  31308. @SP
  31309. // #11903
  31310. A=M
  31311. // #11904
  31312. M=D
  31313. // #11905
  31314. @SP
  31315. // #11906
  31316. M=M+1
  31317. //vv push_d_to_stack
  31318. //vv push_constant(0)
  31319. //
  31320. //// push constant 0
  31321. //^^ push_constant(0)
  31322. // #11907
  31323. @0
  31324. // #11908
  31325. D=A
  31326. //^^ push_d_to_stack
  31327. // #11909
  31328. @SP
  31329. // #11910
  31330. A=M
  31331. // #11911
  31332. M=D
  31333. // #11912
  31334. @SP
  31335. // #11913
  31336. M=M+1
  31337. //vv push_d_to_stack
  31338. //vv push_constant(0)
  31339. //
  31340. //// push constant 0
  31341. //^^ push_constant(0)
  31342. // #11914
  31343. @0
  31344. // #11915
  31345. D=A
  31346. //^^ push_d_to_stack
  31347. // #11916
  31348. @SP
  31349. // #11917
  31350. A=M
  31351. // #11918
  31352. M=D
  31353. // #11919
  31354. @SP
  31355. // #11920
  31356. M=M+1
  31357. //vv push_d_to_stack
  31358. //vv push_constant(0)
  31359. //
  31360. //// push constant 63
  31361. //^^ push_constant(63)
  31362. // #11921
  31363. @63
  31364. // #11922
  31365. D=A
  31366. //^^ push_d_to_stack
  31367. // #11923
  31368. @SP
  31369. // #11924
  31370. A=M
  31371. // #11925
  31372. M=D
  31373. // #11926
  31374. @SP
  31375. // #11927
  31376. M=M+1
  31377. //vv push_d_to_stack
  31378. //vv push_constant(63)
  31379. //
  31380. //// push constant 0
  31381. //^^ push_constant(0)
  31382. // #11928
  31383. @0
  31384. // #11929
  31385. D=A
  31386. //^^ push_d_to_stack
  31387. // #11930
  31388. @SP
  31389. // #11931
  31390. A=M
  31391. // #11932
  31392. M=D
  31393. // #11933
  31394. @SP
  31395. // #11934
  31396. M=M+1
  31397. //vv push_d_to_stack
  31398. //vv push_constant(0)
  31399. //
  31400. //// push constant 0
  31401. //^^ push_constant(0)
  31402. // #11935
  31403. @0
  31404. // #11936
  31405. D=A
  31406. //^^ push_d_to_stack
  31407. // #11937
  31408. @SP
  31409. // #11938
  31410. A=M
  31411. // #11939
  31412. M=D
  31413. // #11940
  31414. @SP
  31415. // #11941
  31416. M=M+1
  31417. //vv push_d_to_stack
  31418. //vv push_constant(0)
  31419. //
  31420. //// push constant 63
  31421. //^^ push_constant(63)
  31422. // #11942
  31423. @63
  31424. // #11943
  31425. D=A
  31426. //^^ push_d_to_stack
  31427. // #11944
  31428. @SP
  31429. // #11945
  31430. A=M
  31431. // #11946
  31432. M=D
  31433. // #11947
  31434. @SP
  31435. // #11948
  31436. M=M+1
  31437. //vv push_d_to_stack
  31438. //vv push_constant(63)
  31439. //
  31440. //// push constant 0
  31441. //^^ push_constant(0)
  31442. // #11949
  31443. @0
  31444. // #11950
  31445. D=A
  31446. //^^ push_d_to_stack
  31447. // #11951
  31448. @SP
  31449. // #11952
  31450. A=M
  31451. // #11953
  31452. M=D
  31453. // #11954
  31454. @SP
  31455. // #11955
  31456. M=M+1
  31457. //vv push_d_to_stack
  31458. //vv push_constant(0)
  31459. //
  31460. //// push constant 0
  31461. //^^ push_constant(0)
  31462. // #11956
  31463. @0
  31464. // #11957
  31465. D=A
  31466. //^^ push_d_to_stack
  31467. // #11958
  31468. @SP
  31469. // #11959
  31470. A=M
  31471. // #11960
  31472. M=D
  31473. // #11961
  31474. @SP
  31475. // #11962
  31476. M=M+1
  31477. //vv push_d_to_stack
  31478. //vv push_constant(0)
  31479. //
  31480. //// push constant 0
  31481. //^^ push_constant(0)
  31482. // #11963
  31483. @0
  31484. // #11964
  31485. D=A
  31486. //^^ push_d_to_stack
  31487. // #11965
  31488. @SP
  31489. // #11966
  31490. A=M
  31491. // #11967
  31492. M=D
  31493. // #11968
  31494. @SP
  31495. // #11969
  31496. M=M+1
  31497. //vv push_d_to_stack
  31498. //vv push_constant(0)
  31499. //
  31500. //// push constant 0
  31501. //^^ push_constant(0)
  31502. // #11970
  31503. @0
  31504. // #11971
  31505. D=A
  31506. //^^ push_d_to_stack
  31507. // #11972
  31508. @SP
  31509. // #11973
  31510. A=M
  31511. // #11974
  31512. M=D
  31513. // #11975
  31514. @SP
  31515. // #11976
  31516. M=M+1
  31517. //vv push_d_to_stack
  31518. //vv push_constant(0)
  31519. //
  31520. //// call Output.create 12
  31521. //^^ push_constant(RET_ADDR_105)
  31522. // #11977
  31523. @RET_ADDR_105
  31524. // #11978
  31525. D=A
  31526. //^^ push_d_to_stack
  31527. // #11979
  31528. @SP
  31529. // #11980
  31530. A=M
  31531. // #11981
  31532. M=D
  31533. // #11982
  31534. @SP
  31535. // #11983
  31536. M=M+1
  31537. //vv push_d_to_stack
  31538. //vv push_constant(RET_ADDR_105)
  31539. //push return-address
  31540. // #11984
  31541. @LCL
  31542. // #11985
  31543. D=M
  31544. //^^ push_d_to_stack
  31545. // #11986
  31546. @SP
  31547. // #11987
  31548. A=M
  31549. // #11988
  31550. M=D
  31551. // #11989
  31552. @SP
  31553. // #11990
  31554. M=M+1
  31555. //vv push_d_to_stack
  31556. //push LCL
  31557. // #11991
  31558. @ARG
  31559. // #11992
  31560. D=M
  31561. //^^ push_d_to_stack
  31562. // #11993
  31563. @SP
  31564. // #11994
  31565. A=M
  31566. // #11995
  31567. M=D
  31568. // #11996
  31569. @SP
  31570. // #11997
  31571. M=M+1
  31572. //vv push_d_to_stack
  31573. //push ARG
  31574. // #11998
  31575. @THIS
  31576. // #11999
  31577. D=M
  31578. //^^ push_d_to_stack
  31579. // #12000
  31580. @SP
  31581. // #12001
  31582. A=M
  31583. // #12002
  31584. M=D
  31585. // #12003
  31586. @SP
  31587. // #12004
  31588. M=M+1
  31589. //vv push_d_to_stack
  31590. //push THIS
  31591. // #12005
  31592. @THAT
  31593. // #12006
  31594. D=M
  31595. //^^ push_d_to_stack
  31596. // #12007
  31597. @SP
  31598. // #12008
  31599. A=M
  31600. // #12009
  31601. M=D
  31602. // #12010
  31603. @SP
  31604. // #12011
  31605. M=M+1
  31606. //vv push_d_to_stack
  31607. //push THAT
  31608. // #12012
  31609. @SP
  31610. // #12013
  31611. D=M
  31612. // #12014
  31613. @ARG
  31614. // #12015
  31615. M=D
  31616. // #12016
  31617. @17
  31618. // #12017
  31619. D=A
  31620. // #12018
  31621. @ARG
  31622. // #12019
  31623. M=M-D // ARG = SP - args - 5
  31624. // #12020
  31625. @SP
  31626. // #12021
  31627. D=M
  31628. // #12022
  31629. @LCL
  31630. // #12023
  31631. M=D // LCL = SP
  31632. // #12024
  31633. @Output.create
  31634. // #12025
  31635. 0;JMP
  31636. (RET_ADDR_105)
  31637. //
  31638. //// pop temp 0
  31639. //^^ pop_to_loc{5)
  31640. //^^ pop_stack_to_d
  31641. // #12026
  31642. @SP
  31643. // #12027
  31644. M=M-1
  31645. // #12028
  31646. A=M
  31647. // #12029
  31648. D=M
  31649. //vv pop_stack_to_d
  31650. // #12030
  31651. @5
  31652. // #12031
  31653. M=D
  31654. //vv pop_to_loc{5)
  31655. //
  31656. //// push constant 62
  31657. //^^ push_constant(62)
  31658. // #12032
  31659. @62
  31660. // #12033
  31661. D=A
  31662. //^^ push_d_to_stack
  31663. // #12034
  31664. @SP
  31665. // #12035
  31666. A=M
  31667. // #12036
  31668. M=D
  31669. // #12037
  31670. @SP
  31671. // #12038
  31672. M=M+1
  31673. //vv push_d_to_stack
  31674. //vv push_constant(62)
  31675. //
  31676. //// push constant 0
  31677. //^^ push_constant(0)
  31678. // #12039
  31679. @0
  31680. // #12040
  31681. D=A
  31682. //^^ push_d_to_stack
  31683. // #12041
  31684. @SP
  31685. // #12042
  31686. A=M
  31687. // #12043
  31688. M=D
  31689. // #12044
  31690. @SP
  31691. // #12045
  31692. M=M+1
  31693. //vv push_d_to_stack
  31694. //vv push_constant(0)
  31695. //
  31696. //// push constant 0
  31697. //^^ push_constant(0)
  31698. // #12046
  31699. @0
  31700. // #12047
  31701. D=A
  31702. //^^ push_d_to_stack
  31703. // #12048
  31704. @SP
  31705. // #12049
  31706. A=M
  31707. // #12050
  31708. M=D
  31709. // #12051
  31710. @SP
  31711. // #12052
  31712. M=M+1
  31713. //vv push_d_to_stack
  31714. //vv push_constant(0)
  31715. //
  31716. //// push constant 3
  31717. //^^ push_constant(3)
  31718. // #12053
  31719. @3
  31720. // #12054
  31721. D=A
  31722. //^^ push_d_to_stack
  31723. // #12055
  31724. @SP
  31725. // #12056
  31726. A=M
  31727. // #12057
  31728. M=D
  31729. // #12058
  31730. @SP
  31731. // #12059
  31732. M=M+1
  31733. //vv push_d_to_stack
  31734. //vv push_constant(3)
  31735. //
  31736. //// push constant 6
  31737. //^^ push_constant(6)
  31738. // #12060
  31739. @6
  31740. // #12061
  31741. D=A
  31742. //^^ push_d_to_stack
  31743. // #12062
  31744. @SP
  31745. // #12063
  31746. A=M
  31747. // #12064
  31748. M=D
  31749. // #12065
  31750. @SP
  31751. // #12066
  31752. M=M+1
  31753. //vv push_d_to_stack
  31754. //vv push_constant(6)
  31755. //
  31756. //// push constant 12
  31757. //^^ push_constant(12)
  31758. // #12067
  31759. @12
  31760. // #12068
  31761. D=A
  31762. //^^ push_d_to_stack
  31763. // #12069
  31764. @SP
  31765. // #12070
  31766. A=M
  31767. // #12071
  31768. M=D
  31769. // #12072
  31770. @SP
  31771. // #12073
  31772. M=M+1
  31773. //vv push_d_to_stack
  31774. //vv push_constant(12)
  31775. //
  31776. //// push constant 24
  31777. //^^ push_constant(24)
  31778. // #12074
  31779. @24
  31780. // #12075
  31781. D=A
  31782. //^^ push_d_to_stack
  31783. // #12076
  31784. @SP
  31785. // #12077
  31786. A=M
  31787. // #12078
  31788. M=D
  31789. // #12079
  31790. @SP
  31791. // #12080
  31792. M=M+1
  31793. //vv push_d_to_stack
  31794. //vv push_constant(24)
  31795. //
  31796. //// push constant 12
  31797. //^^ push_constant(12)
  31798. // #12081
  31799. @12
  31800. // #12082
  31801. D=A
  31802. //^^ push_d_to_stack
  31803. // #12083
  31804. @SP
  31805. // #12084
  31806. A=M
  31807. // #12085
  31808. M=D
  31809. // #12086
  31810. @SP
  31811. // #12087
  31812. M=M+1
  31813. //vv push_d_to_stack
  31814. //vv push_constant(12)
  31815. //
  31816. //// push constant 6
  31817. //^^ push_constant(6)
  31818. // #12088
  31819. @6
  31820. // #12089
  31821. D=A
  31822. //^^ push_d_to_stack
  31823. // #12090
  31824. @SP
  31825. // #12091
  31826. A=M
  31827. // #12092
  31828. M=D
  31829. // #12093
  31830. @SP
  31831. // #12094
  31832. M=M+1
  31833. //vv push_d_to_stack
  31834. //vv push_constant(6)
  31835. //
  31836. //// push constant 3
  31837. //^^ push_constant(3)
  31838. // #12095
  31839. @3
  31840. // #12096
  31841. D=A
  31842. //^^ push_d_to_stack
  31843. // #12097
  31844. @SP
  31845. // #12098
  31846. A=M
  31847. // #12099
  31848. M=D
  31849. // #12100
  31850. @SP
  31851. // #12101
  31852. M=M+1
  31853. //vv push_d_to_stack
  31854. //vv push_constant(3)
  31855. //
  31856. //// push constant 0
  31857. //^^ push_constant(0)
  31858. // #12102
  31859. @0
  31860. // #12103
  31861. D=A
  31862. //^^ push_d_to_stack
  31863. // #12104
  31864. @SP
  31865. // #12105
  31866. A=M
  31867. // #12106
  31868. M=D
  31869. // #12107
  31870. @SP
  31871. // #12108
  31872. M=M+1
  31873. //vv push_d_to_stack
  31874. //vv push_constant(0)
  31875. //
  31876. //// push constant 0
  31877. //^^ push_constant(0)
  31878. // #12109
  31879. @0
  31880. // #12110
  31881. D=A
  31882. //^^ push_d_to_stack
  31883. // #12111
  31884. @SP
  31885. // #12112
  31886. A=M
  31887. // #12113
  31888. M=D
  31889. // #12114
  31890. @SP
  31891. // #12115
  31892. M=M+1
  31893. //vv push_d_to_stack
  31894. //vv push_constant(0)
  31895. //
  31896. //// call Output.create 12
  31897. //^^ push_constant(RET_ADDR_106)
  31898. // #12116
  31899. @RET_ADDR_106
  31900. // #12117
  31901. D=A
  31902. //^^ push_d_to_stack
  31903. // #12118
  31904. @SP
  31905. // #12119
  31906. A=M
  31907. // #12120
  31908. M=D
  31909. // #12121
  31910. @SP
  31911. // #12122
  31912. M=M+1
  31913. //vv push_d_to_stack
  31914. //vv push_constant(RET_ADDR_106)
  31915. //push return-address
  31916. // #12123
  31917. @LCL
  31918. // #12124
  31919. D=M
  31920. //^^ push_d_to_stack
  31921. // #12125
  31922. @SP
  31923. // #12126
  31924. A=M
  31925. // #12127
  31926. M=D
  31927. // #12128
  31928. @SP
  31929. // #12129
  31930. M=M+1
  31931. //vv push_d_to_stack
  31932. //push LCL
  31933. // #12130
  31934. @ARG
  31935. // #12131
  31936. D=M
  31937. //^^ push_d_to_stack
  31938. // #12132
  31939. @SP
  31940. // #12133
  31941. A=M
  31942. // #12134
  31943. M=D
  31944. // #12135
  31945. @SP
  31946. // #12136
  31947. M=M+1
  31948. //vv push_d_to_stack
  31949. //push ARG
  31950. // #12137
  31951. @THIS
  31952. // #12138
  31953. D=M
  31954. //^^ push_d_to_stack
  31955. // #12139
  31956. @SP
  31957. // #12140
  31958. A=M
  31959. // #12141
  31960. M=D
  31961. // #12142
  31962. @SP
  31963. // #12143
  31964. M=M+1
  31965. //vv push_d_to_stack
  31966. //push THIS
  31967. // #12144
  31968. @THAT
  31969. // #12145
  31970. D=M
  31971. //^^ push_d_to_stack
  31972. // #12146
  31973. @SP
  31974. // #12147
  31975. A=M
  31976. // #12148
  31977. M=D
  31978. // #12149
  31979. @SP
  31980. // #12150
  31981. M=M+1
  31982. //vv push_d_to_stack
  31983. //push THAT
  31984. // #12151
  31985. @SP
  31986. // #12152
  31987. D=M
  31988. // #12153
  31989. @ARG
  31990. // #12154
  31991. M=D
  31992. // #12155
  31993. @17
  31994. // #12156
  31995. D=A
  31996. // #12157
  31997. @ARG
  31998. // #12158
  31999. M=M-D // ARG = SP - args - 5
  32000. // #12159
  32001. @SP
  32002. // #12160
  32003. D=M
  32004. // #12161
  32005. @LCL
  32006. // #12162
  32007. M=D // LCL = SP
  32008. // #12163
  32009. @Output.create
  32010. // #12164
  32011. 0;JMP
  32012. (RET_ADDR_106)
  32013. //
  32014. //// pop temp 0
  32015. //^^ pop_to_loc{5)
  32016. //^^ pop_stack_to_d
  32017. // #12165
  32018. @SP
  32019. // #12166
  32020. M=M-1
  32021. // #12167
  32022. A=M
  32023. // #12168
  32024. D=M
  32025. //vv pop_stack_to_d
  32026. // #12169
  32027. @5
  32028. // #12170
  32029. M=D
  32030. //vv pop_to_loc{5)
  32031. //
  32032. //// push constant 64
  32033. //^^ push_constant(64)
  32034. // #12171
  32035. @64
  32036. // #12172
  32037. D=A
  32038. //^^ push_d_to_stack
  32039. // #12173
  32040. @SP
  32041. // #12174
  32042. A=M
  32043. // #12175
  32044. M=D
  32045. // #12176
  32046. @SP
  32047. // #12177
  32048. M=M+1
  32049. //vv push_d_to_stack
  32050. //vv push_constant(64)
  32051. //
  32052. //// push constant 30
  32053. //^^ push_constant(30)
  32054. // #12178
  32055. @30
  32056. // #12179
  32057. D=A
  32058. //^^ push_d_to_stack
  32059. // #12180
  32060. @SP
  32061. // #12181
  32062. A=M
  32063. // #12182
  32064. M=D
  32065. // #12183
  32066. @SP
  32067. // #12184
  32068. M=M+1
  32069. //vv push_d_to_stack
  32070. //vv push_constant(30)
  32071. //
  32072. //// push constant 51
  32073. //^^ push_constant(51)
  32074. // #12185
  32075. @51
  32076. // #12186
  32077. D=A
  32078. //^^ push_d_to_stack
  32079. // #12187
  32080. @SP
  32081. // #12188
  32082. A=M
  32083. // #12189
  32084. M=D
  32085. // #12190
  32086. @SP
  32087. // #12191
  32088. M=M+1
  32089. //vv push_d_to_stack
  32090. //vv push_constant(51)
  32091. //
  32092. //// push constant 51
  32093. //^^ push_constant(51)
  32094. // #12192
  32095. @51
  32096. // #12193
  32097. D=A
  32098. //^^ push_d_to_stack
  32099. // #12194
  32100. @SP
  32101. // #12195
  32102. A=M
  32103. // #12196
  32104. M=D
  32105. // #12197
  32106. @SP
  32107. // #12198
  32108. M=M+1
  32109. //vv push_d_to_stack
  32110. //vv push_constant(51)
  32111. //
  32112. //// push constant 59
  32113. //^^ push_constant(59)
  32114. // #12199
  32115. @59
  32116. // #12200
  32117. D=A
  32118. //^^ push_d_to_stack
  32119. // #12201
  32120. @SP
  32121. // #12202
  32122. A=M
  32123. // #12203
  32124. M=D
  32125. // #12204
  32126. @SP
  32127. // #12205
  32128. M=M+1
  32129. //vv push_d_to_stack
  32130. //vv push_constant(59)
  32131. //
  32132. //// push constant 59
  32133. //^^ push_constant(59)
  32134. // #12206
  32135. @59
  32136. // #12207
  32137. D=A
  32138. //^^ push_d_to_stack
  32139. // #12208
  32140. @SP
  32141. // #12209
  32142. A=M
  32143. // #12210
  32144. M=D
  32145. // #12211
  32146. @SP
  32147. // #12212
  32148. M=M+1
  32149. //vv push_d_to_stack
  32150. //vv push_constant(59)
  32151. //
  32152. //// push constant 59
  32153. //^^ push_constant(59)
  32154. // #12213
  32155. @59
  32156. // #12214
  32157. D=A
  32158. //^^ push_d_to_stack
  32159. // #12215
  32160. @SP
  32161. // #12216
  32162. A=M
  32163. // #12217
  32164. M=D
  32165. // #12218
  32166. @SP
  32167. // #12219
  32168. M=M+1
  32169. //vv push_d_to_stack
  32170. //vv push_constant(59)
  32171. //
  32172. //// push constant 27
  32173. //^^ push_constant(27)
  32174. // #12220
  32175. @27
  32176. // #12221
  32177. D=A
  32178. //^^ push_d_to_stack
  32179. // #12222
  32180. @SP
  32181. // #12223
  32182. A=M
  32183. // #12224
  32184. M=D
  32185. // #12225
  32186. @SP
  32187. // #12226
  32188. M=M+1
  32189. //vv push_d_to_stack
  32190. //vv push_constant(27)
  32191. //
  32192. //// push constant 3
  32193. //^^ push_constant(3)
  32194. // #12227
  32195. @3
  32196. // #12228
  32197. D=A
  32198. //^^ push_d_to_stack
  32199. // #12229
  32200. @SP
  32201. // #12230
  32202. A=M
  32203. // #12231
  32204. M=D
  32205. // #12232
  32206. @SP
  32207. // #12233
  32208. M=M+1
  32209. //vv push_d_to_stack
  32210. //vv push_constant(3)
  32211. //
  32212. //// push constant 30
  32213. //^^ push_constant(30)
  32214. // #12234
  32215. @30
  32216. // #12235
  32217. D=A
  32218. //^^ push_d_to_stack
  32219. // #12236
  32220. @SP
  32221. // #12237
  32222. A=M
  32223. // #12238
  32224. M=D
  32225. // #12239
  32226. @SP
  32227. // #12240
  32228. M=M+1
  32229. //vv push_d_to_stack
  32230. //vv push_constant(30)
  32231. //
  32232. //// push constant 0
  32233. //^^ push_constant(0)
  32234. // #12241
  32235. @0
  32236. // #12242
  32237. D=A
  32238. //^^ push_d_to_stack
  32239. // #12243
  32240. @SP
  32241. // #12244
  32242. A=M
  32243. // #12245
  32244. M=D
  32245. // #12246
  32246. @SP
  32247. // #12247
  32248. M=M+1
  32249. //vv push_d_to_stack
  32250. //vv push_constant(0)
  32251. //
  32252. //// push constant 0
  32253. //^^ push_constant(0)
  32254. // #12248
  32255. @0
  32256. // #12249
  32257. D=A
  32258. //^^ push_d_to_stack
  32259. // #12250
  32260. @SP
  32261. // #12251
  32262. A=M
  32263. // #12252
  32264. M=D
  32265. // #12253
  32266. @SP
  32267. // #12254
  32268. M=M+1
  32269. //vv push_d_to_stack
  32270. //vv push_constant(0)
  32271. //
  32272. //// call Output.create 12
  32273. //^^ push_constant(RET_ADDR_107)
  32274. // #12255
  32275. @RET_ADDR_107
  32276. // #12256
  32277. D=A
  32278. //^^ push_d_to_stack
  32279. // #12257
  32280. @SP
  32281. // #12258
  32282. A=M
  32283. // #12259
  32284. M=D
  32285. // #12260
  32286. @SP
  32287. // #12261
  32288. M=M+1
  32289. //vv push_d_to_stack
  32290. //vv push_constant(RET_ADDR_107)
  32291. //push return-address
  32292. // #12262
  32293. @LCL
  32294. // #12263
  32295. D=M
  32296. //^^ push_d_to_stack
  32297. // #12264
  32298. @SP
  32299. // #12265
  32300. A=M
  32301. // #12266
  32302. M=D
  32303. // #12267
  32304. @SP
  32305. // #12268
  32306. M=M+1
  32307. //vv push_d_to_stack
  32308. //push LCL
  32309. // #12269
  32310. @ARG
  32311. // #12270
  32312. D=M
  32313. //^^ push_d_to_stack
  32314. // #12271
  32315. @SP
  32316. // #12272
  32317. A=M
  32318. // #12273
  32319. M=D
  32320. // #12274
  32321. @SP
  32322. // #12275
  32323. M=M+1
  32324. //vv push_d_to_stack
  32325. //push ARG
  32326. // #12276
  32327. @THIS
  32328. // #12277
  32329. D=M
  32330. //^^ push_d_to_stack
  32331. // #12278
  32332. @SP
  32333. // #12279
  32334. A=M
  32335. // #12280
  32336. M=D
  32337. // #12281
  32338. @SP
  32339. // #12282
  32340. M=M+1
  32341. //vv push_d_to_stack
  32342. //push THIS
  32343. // #12283
  32344. @THAT
  32345. // #12284
  32346. D=M
  32347. //^^ push_d_to_stack
  32348. // #12285
  32349. @SP
  32350. // #12286
  32351. A=M
  32352. // #12287
  32353. M=D
  32354. // #12288
  32355. @SP
  32356. // #12289
  32357. M=M+1
  32358. //vv push_d_to_stack
  32359. //push THAT
  32360. // #12290
  32361. @SP
  32362. // #12291
  32363. D=M
  32364. // #12292
  32365. @ARG
  32366. // #12293
  32367. M=D
  32368. // #12294
  32369. @17
  32370. // #12295
  32371. D=A
  32372. // #12296
  32373. @ARG
  32374. // #12297
  32375. M=M-D // ARG = SP - args - 5
  32376. // #12298
  32377. @SP
  32378. // #12299
  32379. D=M
  32380. // #12300
  32381. @LCL
  32382. // #12301
  32383. M=D // LCL = SP
  32384. // #12302
  32385. @Output.create
  32386. // #12303
  32387. 0;JMP
  32388. (RET_ADDR_107)
  32389. //
  32390. //// pop temp 0
  32391. //^^ pop_to_loc{5)
  32392. //^^ pop_stack_to_d
  32393. // #12304
  32394. @SP
  32395. // #12305
  32396. M=M-1
  32397. // #12306
  32398. A=M
  32399. // #12307
  32400. D=M
  32401. //vv pop_stack_to_d
  32402. // #12308
  32403. @5
  32404. // #12309
  32405. M=D
  32406. //vv pop_to_loc{5)
  32407. //
  32408. //// push constant 63
  32409. //^^ push_constant(63)
  32410. // #12310
  32411. @63
  32412. // #12311
  32413. D=A
  32414. //^^ push_d_to_stack
  32415. // #12312
  32416. @SP
  32417. // #12313
  32418. A=M
  32419. // #12314
  32420. M=D
  32421. // #12315
  32422. @SP
  32423. // #12316
  32424. M=M+1
  32425. //vv push_d_to_stack
  32426. //vv push_constant(63)
  32427. //
  32428. //// push constant 30
  32429. //^^ push_constant(30)
  32430. // #12317
  32431. @30
  32432. // #12318
  32433. D=A
  32434. //^^ push_d_to_stack
  32435. // #12319
  32436. @SP
  32437. // #12320
  32438. A=M
  32439. // #12321
  32440. M=D
  32441. // #12322
  32442. @SP
  32443. // #12323
  32444. M=M+1
  32445. //vv push_d_to_stack
  32446. //vv push_constant(30)
  32447. //
  32448. //// push constant 51
  32449. //^^ push_constant(51)
  32450. // #12324
  32451. @51
  32452. // #12325
  32453. D=A
  32454. //^^ push_d_to_stack
  32455. // #12326
  32456. @SP
  32457. // #12327
  32458. A=M
  32459. // #12328
  32460. M=D
  32461. // #12329
  32462. @SP
  32463. // #12330
  32464. M=M+1
  32465. //vv push_d_to_stack
  32466. //vv push_constant(51)
  32467. //
  32468. //// push constant 51
  32469. //^^ push_constant(51)
  32470. // #12331
  32471. @51
  32472. // #12332
  32473. D=A
  32474. //^^ push_d_to_stack
  32475. // #12333
  32476. @SP
  32477. // #12334
  32478. A=M
  32479. // #12335
  32480. M=D
  32481. // #12336
  32482. @SP
  32483. // #12337
  32484. M=M+1
  32485. //vv push_d_to_stack
  32486. //vv push_constant(51)
  32487. //
  32488. //// push constant 24
  32489. //^^ push_constant(24)
  32490. // #12338
  32491. @24
  32492. // #12339
  32493. D=A
  32494. //^^ push_d_to_stack
  32495. // #12340
  32496. @SP
  32497. // #12341
  32498. A=M
  32499. // #12342
  32500. M=D
  32501. // #12343
  32502. @SP
  32503. // #12344
  32504. M=M+1
  32505. //vv push_d_to_stack
  32506. //vv push_constant(24)
  32507. //
  32508. //// push constant 12
  32509. //^^ push_constant(12)
  32510. // #12345
  32511. @12
  32512. // #12346
  32513. D=A
  32514. //^^ push_d_to_stack
  32515. // #12347
  32516. @SP
  32517. // #12348
  32518. A=M
  32519. // #12349
  32520. M=D
  32521. // #12350
  32522. @SP
  32523. // #12351
  32524. M=M+1
  32525. //vv push_d_to_stack
  32526. //vv push_constant(12)
  32527. //
  32528. //// push constant 12
  32529. //^^ push_constant(12)
  32530. // #12352
  32531. @12
  32532. // #12353
  32533. D=A
  32534. //^^ push_d_to_stack
  32535. // #12354
  32536. @SP
  32537. // #12355
  32538. A=M
  32539. // #12356
  32540. M=D
  32541. // #12357
  32542. @SP
  32543. // #12358
  32544. M=M+1
  32545. //vv push_d_to_stack
  32546. //vv push_constant(12)
  32547. //
  32548. //// push constant 0
  32549. //^^ push_constant(0)
  32550. // #12359
  32551. @0
  32552. // #12360
  32553. D=A
  32554. //^^ push_d_to_stack
  32555. // #12361
  32556. @SP
  32557. // #12362
  32558. A=M
  32559. // #12363
  32560. M=D
  32561. // #12364
  32562. @SP
  32563. // #12365
  32564. M=M+1
  32565. //vv push_d_to_stack
  32566. //vv push_constant(0)
  32567. //
  32568. //// push constant 12
  32569. //^^ push_constant(12)
  32570. // #12366
  32571. @12
  32572. // #12367
  32573. D=A
  32574. //^^ push_d_to_stack
  32575. // #12368
  32576. @SP
  32577. // #12369
  32578. A=M
  32579. // #12370
  32580. M=D
  32581. // #12371
  32582. @SP
  32583. // #12372
  32584. M=M+1
  32585. //vv push_d_to_stack
  32586. //vv push_constant(12)
  32587. //
  32588. //// push constant 12
  32589. //^^ push_constant(12)
  32590. // #12373
  32591. @12
  32592. // #12374
  32593. D=A
  32594. //^^ push_d_to_stack
  32595. // #12375
  32596. @SP
  32597. // #12376
  32598. A=M
  32599. // #12377
  32600. M=D
  32601. // #12378
  32602. @SP
  32603. // #12379
  32604. M=M+1
  32605. //vv push_d_to_stack
  32606. //vv push_constant(12)
  32607. //
  32608. //// push constant 0
  32609. //^^ push_constant(0)
  32610. // #12380
  32611. @0
  32612. // #12381
  32613. D=A
  32614. //^^ push_d_to_stack
  32615. // #12382
  32616. @SP
  32617. // #12383
  32618. A=M
  32619. // #12384
  32620. M=D
  32621. // #12385
  32622. @SP
  32623. // #12386
  32624. M=M+1
  32625. //vv push_d_to_stack
  32626. //vv push_constant(0)
  32627. //
  32628. //// push constant 0
  32629. //^^ push_constant(0)
  32630. // #12387
  32631. @0
  32632. // #12388
  32633. D=A
  32634. //^^ push_d_to_stack
  32635. // #12389
  32636. @SP
  32637. // #12390
  32638. A=M
  32639. // #12391
  32640. M=D
  32641. // #12392
  32642. @SP
  32643. // #12393
  32644. M=M+1
  32645. //vv push_d_to_stack
  32646. //vv push_constant(0)
  32647. //
  32648. //// call Output.create 12
  32649. //^^ push_constant(RET_ADDR_108)
  32650. // #12394
  32651. @RET_ADDR_108
  32652. // #12395
  32653. D=A
  32654. //^^ push_d_to_stack
  32655. // #12396
  32656. @SP
  32657. // #12397
  32658. A=M
  32659. // #12398
  32660. M=D
  32661. // #12399
  32662. @SP
  32663. // #12400
  32664. M=M+1
  32665. //vv push_d_to_stack
  32666. //vv push_constant(RET_ADDR_108)
  32667. //push return-address
  32668. // #12401
  32669. @LCL
  32670. // #12402
  32671. D=M
  32672. //^^ push_d_to_stack
  32673. // #12403
  32674. @SP
  32675. // #12404
  32676. A=M
  32677. // #12405
  32678. M=D
  32679. // #12406
  32680. @SP
  32681. // #12407
  32682. M=M+1
  32683. //vv push_d_to_stack
  32684. //push LCL
  32685. // #12408
  32686. @ARG
  32687. // #12409
  32688. D=M
  32689. //^^ push_d_to_stack
  32690. // #12410
  32691. @SP
  32692. // #12411
  32693. A=M
  32694. // #12412
  32695. M=D
  32696. // #12413
  32697. @SP
  32698. // #12414
  32699. M=M+1
  32700. //vv push_d_to_stack
  32701. //push ARG
  32702. // #12415
  32703. @THIS
  32704. // #12416
  32705. D=M
  32706. //^^ push_d_to_stack
  32707. // #12417
  32708. @SP
  32709. // #12418
  32710. A=M
  32711. // #12419
  32712. M=D
  32713. // #12420
  32714. @SP
  32715. // #12421
  32716. M=M+1
  32717. //vv push_d_to_stack
  32718. //push THIS
  32719. // #12422
  32720. @THAT
  32721. // #12423
  32722. D=M
  32723. //^^ push_d_to_stack
  32724. // #12424
  32725. @SP
  32726. // #12425
  32727. A=M
  32728. // #12426
  32729. M=D
  32730. // #12427
  32731. @SP
  32732. // #12428
  32733. M=M+1
  32734. //vv push_d_to_stack
  32735. //push THAT
  32736. // #12429
  32737. @SP
  32738. // #12430
  32739. D=M
  32740. // #12431
  32741. @ARG
  32742. // #12432
  32743. M=D
  32744. // #12433
  32745. @17
  32746. // #12434
  32747. D=A
  32748. // #12435
  32749. @ARG
  32750. // #12436
  32751. M=M-D // ARG = SP - args - 5
  32752. // #12437
  32753. @SP
  32754. // #12438
  32755. D=M
  32756. // #12439
  32757. @LCL
  32758. // #12440
  32759. M=D // LCL = SP
  32760. // #12441
  32761. @Output.create
  32762. // #12442
  32763. 0;JMP
  32764. (RET_ADDR_108)
  32765. //
  32766. //// pop temp 0
  32767. //^^ pop_to_loc{5)
  32768. //^^ pop_stack_to_d
  32769. // #12443
  32770. @SP
  32771. // #12444
  32772. M=M-1
  32773. // #12445
  32774. A=M
  32775. // #12446
  32776. D=M
  32777. //vv pop_stack_to_d
  32778. // #12447
  32779. @5
  32780. // #12448
  32781. M=D
  32782. //vv pop_to_loc{5)
  32783. //
  32784. //// push constant 65
  32785. //^^ push_constant(65)
  32786. // #12449
  32787. @65
  32788. // #12450
  32789. D=A
  32790. //^^ push_d_to_stack
  32791. // #12451
  32792. @SP
  32793. // #12452
  32794. A=M
  32795. // #12453
  32796. M=D
  32797. // #12454
  32798. @SP
  32799. // #12455
  32800. M=M+1
  32801. //vv push_d_to_stack
  32802. //vv push_constant(65)
  32803. //
  32804. //// push constant 12
  32805. //^^ push_constant(12)
  32806. // #12456
  32807. @12
  32808. // #12457
  32809. D=A
  32810. //^^ push_d_to_stack
  32811. // #12458
  32812. @SP
  32813. // #12459
  32814. A=M
  32815. // #12460
  32816. M=D
  32817. // #12461
  32818. @SP
  32819. // #12462
  32820. M=M+1
  32821. //vv push_d_to_stack
  32822. //vv push_constant(12)
  32823. //
  32824. //// push constant 30
  32825. //^^ push_constant(30)
  32826. // #12463
  32827. @30
  32828. // #12464
  32829. D=A
  32830. //^^ push_d_to_stack
  32831. // #12465
  32832. @SP
  32833. // #12466
  32834. A=M
  32835. // #12467
  32836. M=D
  32837. // #12468
  32838. @SP
  32839. // #12469
  32840. M=M+1
  32841. //vv push_d_to_stack
  32842. //vv push_constant(30)
  32843. //
  32844. //// push constant 51
  32845. //^^ push_constant(51)
  32846. // #12470
  32847. @51
  32848. // #12471
  32849. D=A
  32850. //^^ push_d_to_stack
  32851. // #12472
  32852. @SP
  32853. // #12473
  32854. A=M
  32855. // #12474
  32856. M=D
  32857. // #12475
  32858. @SP
  32859. // #12476
  32860. M=M+1
  32861. //vv push_d_to_stack
  32862. //vv push_constant(51)
  32863. //
  32864. //// push constant 51
  32865. //^^ push_constant(51)
  32866. // #12477
  32867. @51
  32868. // #12478
  32869. D=A
  32870. //^^ push_d_to_stack
  32871. // #12479
  32872. @SP
  32873. // #12480
  32874. A=M
  32875. // #12481
  32876. M=D
  32877. // #12482
  32878. @SP
  32879. // #12483
  32880. M=M+1
  32881. //vv push_d_to_stack
  32882. //vv push_constant(51)
  32883. //
  32884. //// push constant 63
  32885. //^^ push_constant(63)
  32886. // #12484
  32887. @63
  32888. // #12485
  32889. D=A
  32890. //^^ push_d_to_stack
  32891. // #12486
  32892. @SP
  32893. // #12487
  32894. A=M
  32895. // #12488
  32896. M=D
  32897. // #12489
  32898. @SP
  32899. // #12490
  32900. M=M+1
  32901. //vv push_d_to_stack
  32902. //vv push_constant(63)
  32903. //
  32904. //// push constant 51
  32905. //^^ push_constant(51)
  32906. // #12491
  32907. @51
  32908. // #12492
  32909. D=A
  32910. //^^ push_d_to_stack
  32911. // #12493
  32912. @SP
  32913. // #12494
  32914. A=M
  32915. // #12495
  32916. M=D
  32917. // #12496
  32918. @SP
  32919. // #12497
  32920. M=M+1
  32921. //vv push_d_to_stack
  32922. //vv push_constant(51)
  32923. //
  32924. //// push constant 51
  32925. //^^ push_constant(51)
  32926. // #12498
  32927. @51
  32928. // #12499
  32929. D=A
  32930. //^^ push_d_to_stack
  32931. // #12500
  32932. @SP
  32933. // #12501
  32934. A=M
  32935. // #12502
  32936. M=D
  32937. // #12503
  32938. @SP
  32939. // #12504
  32940. M=M+1
  32941. //vv push_d_to_stack
  32942. //vv push_constant(51)
  32943. //
  32944. //// push constant 51
  32945. //^^ push_constant(51)
  32946. // #12505
  32947. @51
  32948. // #12506
  32949. D=A
  32950. //^^ push_d_to_stack
  32951. // #12507
  32952. @SP
  32953. // #12508
  32954. A=M
  32955. // #12509
  32956. M=D
  32957. // #12510
  32958. @SP
  32959. // #12511
  32960. M=M+1
  32961. //vv push_d_to_stack
  32962. //vv push_constant(51)
  32963. //
  32964. //// push constant 51
  32965. //^^ push_constant(51)
  32966. // #12512
  32967. @51
  32968. // #12513
  32969. D=A
  32970. //^^ push_d_to_stack
  32971. // #12514
  32972. @SP
  32973. // #12515
  32974. A=M
  32975. // #12516
  32976. M=D
  32977. // #12517
  32978. @SP
  32979. // #12518
  32980. M=M+1
  32981. //vv push_d_to_stack
  32982. //vv push_constant(51)
  32983. //
  32984. //// push constant 0
  32985. //^^ push_constant(0)
  32986. // #12519
  32987. @0
  32988. // #12520
  32989. D=A
  32990. //^^ push_d_to_stack
  32991. // #12521
  32992. @SP
  32993. // #12522
  32994. A=M
  32995. // #12523
  32996. M=D
  32997. // #12524
  32998. @SP
  32999. // #12525
  33000. M=M+1
  33001. //vv push_d_to_stack
  33002. //vv push_constant(0)
  33003. //
  33004. //// push constant 0
  33005. //^^ push_constant(0)
  33006. // #12526
  33007. @0
  33008. // #12527
  33009. D=A
  33010. //^^ push_d_to_stack
  33011. // #12528
  33012. @SP
  33013. // #12529
  33014. A=M
  33015. // #12530
  33016. M=D
  33017. // #12531
  33018. @SP
  33019. // #12532
  33020. M=M+1
  33021. //vv push_d_to_stack
  33022. //vv push_constant(0)
  33023. //
  33024. //// call Output.create 12
  33025. //^^ push_constant(RET_ADDR_109)
  33026. // #12533
  33027. @RET_ADDR_109
  33028. // #12534
  33029. D=A
  33030. //^^ push_d_to_stack
  33031. // #12535
  33032. @SP
  33033. // #12536
  33034. A=M
  33035. // #12537
  33036. M=D
  33037. // #12538
  33038. @SP
  33039. // #12539
  33040. M=M+1
  33041. //vv push_d_to_stack
  33042. //vv push_constant(RET_ADDR_109)
  33043. //push return-address
  33044. // #12540
  33045. @LCL
  33046. // #12541
  33047. D=M
  33048. //^^ push_d_to_stack
  33049. // #12542
  33050. @SP
  33051. // #12543
  33052. A=M
  33053. // #12544
  33054. M=D
  33055. // #12545
  33056. @SP
  33057. // #12546
  33058. M=M+1
  33059. //vv push_d_to_stack
  33060. //push LCL
  33061. // #12547
  33062. @ARG
  33063. // #12548
  33064. D=M
  33065. //^^ push_d_to_stack
  33066. // #12549
  33067. @SP
  33068. // #12550
  33069. A=M
  33070. // #12551
  33071. M=D
  33072. // #12552
  33073. @SP
  33074. // #12553
  33075. M=M+1
  33076. //vv push_d_to_stack
  33077. //push ARG
  33078. // #12554
  33079. @THIS
  33080. // #12555
  33081. D=M
  33082. //^^ push_d_to_stack
  33083. // #12556
  33084. @SP
  33085. // #12557
  33086. A=M
  33087. // #12558
  33088. M=D
  33089. // #12559
  33090. @SP
  33091. // #12560
  33092. M=M+1
  33093. //vv push_d_to_stack
  33094. //push THIS
  33095. // #12561
  33096. @THAT
  33097. // #12562
  33098. D=M
  33099. //^^ push_d_to_stack
  33100. // #12563
  33101. @SP
  33102. // #12564
  33103. A=M
  33104. // #12565
  33105. M=D
  33106. // #12566
  33107. @SP
  33108. // #12567
  33109. M=M+1
  33110. //vv push_d_to_stack
  33111. //push THAT
  33112. // #12568
  33113. @SP
  33114. // #12569
  33115. D=M
  33116. // #12570
  33117. @ARG
  33118. // #12571
  33119. M=D
  33120. // #12572
  33121. @17
  33122. // #12573
  33123. D=A
  33124. // #12574
  33125. @ARG
  33126. // #12575
  33127. M=M-D // ARG = SP - args - 5
  33128. // #12576
  33129. @SP
  33130. // #12577
  33131. D=M
  33132. // #12578
  33133. @LCL
  33134. // #12579
  33135. M=D // LCL = SP
  33136. // #12580
  33137. @Output.create
  33138. // #12581
  33139. 0;JMP
  33140. (RET_ADDR_109)
  33141. //
  33142. //// pop temp 0
  33143. //^^ pop_to_loc{5)
  33144. //^^ pop_stack_to_d
  33145. // #12582
  33146. @SP
  33147. // #12583
  33148. M=M-1
  33149. // #12584
  33150. A=M
  33151. // #12585
  33152. D=M
  33153. //vv pop_stack_to_d
  33154. // #12586
  33155. @5
  33156. // #12587
  33157. M=D
  33158. //vv pop_to_loc{5)
  33159. //
  33160. //// push constant 66
  33161. //^^ push_constant(66)
  33162. // #12588
  33163. @66
  33164. // #12589
  33165. D=A
  33166. //^^ push_d_to_stack
  33167. // #12590
  33168. @SP
  33169. // #12591
  33170. A=M
  33171. // #12592
  33172. M=D
  33173. // #12593
  33174. @SP
  33175. // #12594
  33176. M=M+1
  33177. //vv push_d_to_stack
  33178. //vv push_constant(66)
  33179. //
  33180. //// push constant 31
  33181. //^^ push_constant(31)
  33182. // #12595
  33183. @31
  33184. // #12596
  33185. D=A
  33186. //^^ push_d_to_stack
  33187. // #12597
  33188. @SP
  33189. // #12598
  33190. A=M
  33191. // #12599
  33192. M=D
  33193. // #12600
  33194. @SP
  33195. // #12601
  33196. M=M+1
  33197. //vv push_d_to_stack
  33198. //vv push_constant(31)
  33199. //
  33200. //// push constant 51
  33201. //^^ push_constant(51)
  33202. // #12602
  33203. @51
  33204. // #12603
  33205. D=A
  33206. //^^ push_d_to_stack
  33207. // #12604
  33208. @SP
  33209. // #12605
  33210. A=M
  33211. // #12606
  33212. M=D
  33213. // #12607
  33214. @SP
  33215. // #12608
  33216. M=M+1
  33217. //vv push_d_to_stack
  33218. //vv push_constant(51)
  33219. //
  33220. //// push constant 51
  33221. //^^ push_constant(51)
  33222. // #12609
  33223. @51
  33224. // #12610
  33225. D=A
  33226. //^^ push_d_to_stack
  33227. // #12611
  33228. @SP
  33229. // #12612
  33230. A=M
  33231. // #12613
  33232. M=D
  33233. // #12614
  33234. @SP
  33235. // #12615
  33236. M=M+1
  33237. //vv push_d_to_stack
  33238. //vv push_constant(51)
  33239. //
  33240. //// push constant 51
  33241. //^^ push_constant(51)
  33242. // #12616
  33243. @51
  33244. // #12617
  33245. D=A
  33246. //^^ push_d_to_stack
  33247. // #12618
  33248. @SP
  33249. // #12619
  33250. A=M
  33251. // #12620
  33252. M=D
  33253. // #12621
  33254. @SP
  33255. // #12622
  33256. M=M+1
  33257. //vv push_d_to_stack
  33258. //vv push_constant(51)
  33259. //
  33260. //// push constant 31
  33261. //^^ push_constant(31)
  33262. // #12623
  33263. @31
  33264. // #12624
  33265. D=A
  33266. //^^ push_d_to_stack
  33267. // #12625
  33268. @SP
  33269. // #12626
  33270. A=M
  33271. // #12627
  33272. M=D
  33273. // #12628
  33274. @SP
  33275. // #12629
  33276. M=M+1
  33277. //vv push_d_to_stack
  33278. //vv push_constant(31)
  33279. //
  33280. //// push constant 51
  33281. //^^ push_constant(51)
  33282. // #12630
  33283. @51
  33284. // #12631
  33285. D=A
  33286. //^^ push_d_to_stack
  33287. // #12632
  33288. @SP
  33289. // #12633
  33290. A=M
  33291. // #12634
  33292. M=D
  33293. // #12635
  33294. @SP
  33295. // #12636
  33296. M=M+1
  33297. //vv push_d_to_stack
  33298. //vv push_constant(51)
  33299. //
  33300. //// push constant 51
  33301. //^^ push_constant(51)
  33302. // #12637
  33303. @51
  33304. // #12638
  33305. D=A
  33306. //^^ push_d_to_stack
  33307. // #12639
  33308. @SP
  33309. // #12640
  33310. A=M
  33311. // #12641
  33312. M=D
  33313. // #12642
  33314. @SP
  33315. // #12643
  33316. M=M+1
  33317. //vv push_d_to_stack
  33318. //vv push_constant(51)
  33319. //
  33320. //// push constant 51
  33321. //^^ push_constant(51)
  33322. // #12644
  33323. @51
  33324. // #12645
  33325. D=A
  33326. //^^ push_d_to_stack
  33327. // #12646
  33328. @SP
  33329. // #12647
  33330. A=M
  33331. // #12648
  33332. M=D
  33333. // #12649
  33334. @SP
  33335. // #12650
  33336. M=M+1
  33337. //vv push_d_to_stack
  33338. //vv push_constant(51)
  33339. //
  33340. //// push constant 31
  33341. //^^ push_constant(31)
  33342. // #12651
  33343. @31
  33344. // #12652
  33345. D=A
  33346. //^^ push_d_to_stack
  33347. // #12653
  33348. @SP
  33349. // #12654
  33350. A=M
  33351. // #12655
  33352. M=D
  33353. // #12656
  33354. @SP
  33355. // #12657
  33356. M=M+1
  33357. //vv push_d_to_stack
  33358. //vv push_constant(31)
  33359. //
  33360. //// push constant 0
  33361. //^^ push_constant(0)
  33362. // #12658
  33363. @0
  33364. // #12659
  33365. D=A
  33366. //^^ push_d_to_stack
  33367. // #12660
  33368. @SP
  33369. // #12661
  33370. A=M
  33371. // #12662
  33372. M=D
  33373. // #12663
  33374. @SP
  33375. // #12664
  33376. M=M+1
  33377. //vv push_d_to_stack
  33378. //vv push_constant(0)
  33379. //
  33380. //// push constant 0
  33381. //^^ push_constant(0)
  33382. // #12665
  33383. @0
  33384. // #12666
  33385. D=A
  33386. //^^ push_d_to_stack
  33387. // #12667
  33388. @SP
  33389. // #12668
  33390. A=M
  33391. // #12669
  33392. M=D
  33393. // #12670
  33394. @SP
  33395. // #12671
  33396. M=M+1
  33397. //vv push_d_to_stack
  33398. //vv push_constant(0)
  33399. //
  33400. //// call Output.create 12
  33401. //^^ push_constant(RET_ADDR_110)
  33402. // #12672
  33403. @RET_ADDR_110
  33404. // #12673
  33405. D=A
  33406. //^^ push_d_to_stack
  33407. // #12674
  33408. @SP
  33409. // #12675
  33410. A=M
  33411. // #12676
  33412. M=D
  33413. // #12677
  33414. @SP
  33415. // #12678
  33416. M=M+1
  33417. //vv push_d_to_stack
  33418. //vv push_constant(RET_ADDR_110)
  33419. //push return-address
  33420. // #12679
  33421. @LCL
  33422. // #12680
  33423. D=M
  33424. //^^ push_d_to_stack
  33425. // #12681
  33426. @SP
  33427. // #12682
  33428. A=M
  33429. // #12683
  33430. M=D
  33431. // #12684
  33432. @SP
  33433. // #12685
  33434. M=M+1
  33435. //vv push_d_to_stack
  33436. //push LCL
  33437. // #12686
  33438. @ARG
  33439. // #12687
  33440. D=M
  33441. //^^ push_d_to_stack
  33442. // #12688
  33443. @SP
  33444. // #12689
  33445. A=M
  33446. // #12690
  33447. M=D
  33448. // #12691
  33449. @SP
  33450. // #12692
  33451. M=M+1
  33452. //vv push_d_to_stack
  33453. //push ARG
  33454. // #12693
  33455. @THIS
  33456. // #12694
  33457. D=M
  33458. //^^ push_d_to_stack
  33459. // #12695
  33460. @SP
  33461. // #12696
  33462. A=M
  33463. // #12697
  33464. M=D
  33465. // #12698
  33466. @SP
  33467. // #12699
  33468. M=M+1
  33469. //vv push_d_to_stack
  33470. //push THIS
  33471. // #12700
  33472. @THAT
  33473. // #12701
  33474. D=M
  33475. //^^ push_d_to_stack
  33476. // #12702
  33477. @SP
  33478. // #12703
  33479. A=M
  33480. // #12704
  33481. M=D
  33482. // #12705
  33483. @SP
  33484. // #12706
  33485. M=M+1
  33486. //vv push_d_to_stack
  33487. //push THAT
  33488. // #12707
  33489. @SP
  33490. // #12708
  33491. D=M
  33492. // #12709
  33493. @ARG
  33494. // #12710
  33495. M=D
  33496. // #12711
  33497. @17
  33498. // #12712
  33499. D=A
  33500. // #12713
  33501. @ARG
  33502. // #12714
  33503. M=M-D // ARG = SP - args - 5
  33504. // #12715
  33505. @SP
  33506. // #12716
  33507. D=M
  33508. // #12717
  33509. @LCL
  33510. // #12718
  33511. M=D // LCL = SP
  33512. // #12719
  33513. @Output.create
  33514. // #12720
  33515. 0;JMP
  33516. (RET_ADDR_110)
  33517. //
  33518. //// pop temp 0
  33519. //^^ pop_to_loc{5)
  33520. //^^ pop_stack_to_d
  33521. // #12721
  33522. @SP
  33523. // #12722
  33524. M=M-1
  33525. // #12723
  33526. A=M
  33527. // #12724
  33528. D=M
  33529. //vv pop_stack_to_d
  33530. // #12725
  33531. @5
  33532. // #12726
  33533. M=D
  33534. //vv pop_to_loc{5)
  33535. //
  33536. //// push constant 67
  33537. //^^ push_constant(67)
  33538. // #12727
  33539. @67
  33540. // #12728
  33541. D=A
  33542. //^^ push_d_to_stack
  33543. // #12729
  33544. @SP
  33545. // #12730
  33546. A=M
  33547. // #12731
  33548. M=D
  33549. // #12732
  33550. @SP
  33551. // #12733
  33552. M=M+1
  33553. //vv push_d_to_stack
  33554. //vv push_constant(67)
  33555. //
  33556. //// push constant 28
  33557. //^^ push_constant(28)
  33558. // #12734
  33559. @28
  33560. // #12735
  33561. D=A
  33562. //^^ push_d_to_stack
  33563. // #12736
  33564. @SP
  33565. // #12737
  33566. A=M
  33567. // #12738
  33568. M=D
  33569. // #12739
  33570. @SP
  33571. // #12740
  33572. M=M+1
  33573. //vv push_d_to_stack
  33574. //vv push_constant(28)
  33575. //
  33576. //// push constant 54
  33577. //^^ push_constant(54)
  33578. // #12741
  33579. @54
  33580. // #12742
  33581. D=A
  33582. //^^ push_d_to_stack
  33583. // #12743
  33584. @SP
  33585. // #12744
  33586. A=M
  33587. // #12745
  33588. M=D
  33589. // #12746
  33590. @SP
  33591. // #12747
  33592. M=M+1
  33593. //vv push_d_to_stack
  33594. //vv push_constant(54)
  33595. //
  33596. //// push constant 35
  33597. //^^ push_constant(35)
  33598. // #12748
  33599. @35
  33600. // #12749
  33601. D=A
  33602. //^^ push_d_to_stack
  33603. // #12750
  33604. @SP
  33605. // #12751
  33606. A=M
  33607. // #12752
  33608. M=D
  33609. // #12753
  33610. @SP
  33611. // #12754
  33612. M=M+1
  33613. //vv push_d_to_stack
  33614. //vv push_constant(35)
  33615. //
  33616. //// push constant 3
  33617. //^^ push_constant(3)
  33618. // #12755
  33619. @3
  33620. // #12756
  33621. D=A
  33622. //^^ push_d_to_stack
  33623. // #12757
  33624. @SP
  33625. // #12758
  33626. A=M
  33627. // #12759
  33628. M=D
  33629. // #12760
  33630. @SP
  33631. // #12761
  33632. M=M+1
  33633. //vv push_d_to_stack
  33634. //vv push_constant(3)
  33635. //
  33636. //// push constant 3
  33637. //^^ push_constant(3)
  33638. // #12762
  33639. @3
  33640. // #12763
  33641. D=A
  33642. //^^ push_d_to_stack
  33643. // #12764
  33644. @SP
  33645. // #12765
  33646. A=M
  33647. // #12766
  33648. M=D
  33649. // #12767
  33650. @SP
  33651. // #12768
  33652. M=M+1
  33653. //vv push_d_to_stack
  33654. //vv push_constant(3)
  33655. //
  33656. //// push constant 3
  33657. //^^ push_constant(3)
  33658. // #12769
  33659. @3
  33660. // #12770
  33661. D=A
  33662. //^^ push_d_to_stack
  33663. // #12771
  33664. @SP
  33665. // #12772
  33666. A=M
  33667. // #12773
  33668. M=D
  33669. // #12774
  33670. @SP
  33671. // #12775
  33672. M=M+1
  33673. //vv push_d_to_stack
  33674. //vv push_constant(3)
  33675. //
  33676. //// push constant 35
  33677. //^^ push_constant(35)
  33678. // #12776
  33679. @35
  33680. // #12777
  33681. D=A
  33682. //^^ push_d_to_stack
  33683. // #12778
  33684. @SP
  33685. // #12779
  33686. A=M
  33687. // #12780
  33688. M=D
  33689. // #12781
  33690. @SP
  33691. // #12782
  33692. M=M+1
  33693. //vv push_d_to_stack
  33694. //vv push_constant(35)
  33695. //
  33696. //// push constant 54
  33697. //^^ push_constant(54)
  33698. // #12783
  33699. @54
  33700. // #12784
  33701. D=A
  33702. //^^ push_d_to_stack
  33703. // #12785
  33704. @SP
  33705. // #12786
  33706. A=M
  33707. // #12787
  33708. M=D
  33709. // #12788
  33710. @SP
  33711. // #12789
  33712. M=M+1
  33713. //vv push_d_to_stack
  33714. //vv push_constant(54)
  33715. //
  33716. //// push constant 28
  33717. //^^ push_constant(28)
  33718. // #12790
  33719. @28
  33720. // #12791
  33721. D=A
  33722. //^^ push_d_to_stack
  33723. // #12792
  33724. @SP
  33725. // #12793
  33726. A=M
  33727. // #12794
  33728. M=D
  33729. // #12795
  33730. @SP
  33731. // #12796
  33732. M=M+1
  33733. //vv push_d_to_stack
  33734. //vv push_constant(28)
  33735. //
  33736. //// push constant 0
  33737. //^^ push_constant(0)
  33738. // #12797
  33739. @0
  33740. // #12798
  33741. D=A
  33742. //^^ push_d_to_stack
  33743. // #12799
  33744. @SP
  33745. // #12800
  33746. A=M
  33747. // #12801
  33748. M=D
  33749. // #12802
  33750. @SP
  33751. // #12803
  33752. M=M+1
  33753. //vv push_d_to_stack
  33754. //vv push_constant(0)
  33755. //
  33756. //// push constant 0
  33757. //^^ push_constant(0)
  33758. // #12804
  33759. @0
  33760. // #12805
  33761. D=A
  33762. //^^ push_d_to_stack
  33763. // #12806
  33764. @SP
  33765. // #12807
  33766. A=M
  33767. // #12808
  33768. M=D
  33769. // #12809
  33770. @SP
  33771. // #12810
  33772. M=M+1
  33773. //vv push_d_to_stack
  33774. //vv push_constant(0)
  33775. //
  33776. //// call Output.create 12
  33777. //^^ push_constant(RET_ADDR_111)
  33778. // #12811
  33779. @RET_ADDR_111
  33780. // #12812
  33781. D=A
  33782. //^^ push_d_to_stack
  33783. // #12813
  33784. @SP
  33785. // #12814
  33786. A=M
  33787. // #12815
  33788. M=D
  33789. // #12816
  33790. @SP
  33791. // #12817
  33792. M=M+1
  33793. //vv push_d_to_stack
  33794. //vv push_constant(RET_ADDR_111)
  33795. //push return-address
  33796. // #12818
  33797. @LCL
  33798. // #12819
  33799. D=M
  33800. //^^ push_d_to_stack
  33801. // #12820
  33802. @SP
  33803. // #12821
  33804. A=M
  33805. // #12822
  33806. M=D
  33807. // #12823
  33808. @SP
  33809. // #12824
  33810. M=M+1
  33811. //vv push_d_to_stack
  33812. //push LCL
  33813. // #12825
  33814. @ARG
  33815. // #12826
  33816. D=M
  33817. //^^ push_d_to_stack
  33818. // #12827
  33819. @SP
  33820. // #12828
  33821. A=M
  33822. // #12829
  33823. M=D
  33824. // #12830
  33825. @SP
  33826. // #12831
  33827. M=M+1
  33828. //vv push_d_to_stack
  33829. //push ARG
  33830. // #12832
  33831. @THIS
  33832. // #12833
  33833. D=M
  33834. //^^ push_d_to_stack
  33835. // #12834
  33836. @SP
  33837. // #12835
  33838. A=M
  33839. // #12836
  33840. M=D
  33841. // #12837
  33842. @SP
  33843. // #12838
  33844. M=M+1
  33845. //vv push_d_to_stack
  33846. //push THIS
  33847. // #12839
  33848. @THAT
  33849. // #12840
  33850. D=M
  33851. //^^ push_d_to_stack
  33852. // #12841
  33853. @SP
  33854. // #12842
  33855. A=M
  33856. // #12843
  33857. M=D
  33858. // #12844
  33859. @SP
  33860. // #12845
  33861. M=M+1
  33862. //vv push_d_to_stack
  33863. //push THAT
  33864. // #12846
  33865. @SP
  33866. // #12847
  33867. D=M
  33868. // #12848
  33869. @ARG
  33870. // #12849
  33871. M=D
  33872. // #12850
  33873. @17
  33874. // #12851
  33875. D=A
  33876. // #12852
  33877. @ARG
  33878. // #12853
  33879. M=M-D // ARG = SP - args - 5
  33880. // #12854
  33881. @SP
  33882. // #12855
  33883. D=M
  33884. // #12856
  33885. @LCL
  33886. // #12857
  33887. M=D // LCL = SP
  33888. // #12858
  33889. @Output.create
  33890. // #12859
  33891. 0;JMP
  33892. (RET_ADDR_111)
  33893. //
  33894. //// pop temp 0
  33895. //^^ pop_to_loc{5)
  33896. //^^ pop_stack_to_d
  33897. // #12860
  33898. @SP
  33899. // #12861
  33900. M=M-1
  33901. // #12862
  33902. A=M
  33903. // #12863
  33904. D=M
  33905. //vv pop_stack_to_d
  33906. // #12864
  33907. @5
  33908. // #12865
  33909. M=D
  33910. //vv pop_to_loc{5)
  33911. //
  33912. //// push constant 68
  33913. //^^ push_constant(68)
  33914. // #12866
  33915. @68
  33916. // #12867
  33917. D=A
  33918. //^^ push_d_to_stack
  33919. // #12868
  33920. @SP
  33921. // #12869
  33922. A=M
  33923. // #12870
  33924. M=D
  33925. // #12871
  33926. @SP
  33927. // #12872
  33928. M=M+1
  33929. //vv push_d_to_stack
  33930. //vv push_constant(68)
  33931. //
  33932. //// push constant 15
  33933. //^^ push_constant(15)
  33934. // #12873
  33935. @15
  33936. // #12874
  33937. D=A
  33938. //^^ push_d_to_stack
  33939. // #12875
  33940. @SP
  33941. // #12876
  33942. A=M
  33943. // #12877
  33944. M=D
  33945. // #12878
  33946. @SP
  33947. // #12879
  33948. M=M+1
  33949. //vv push_d_to_stack
  33950. //vv push_constant(15)
  33951. //
  33952. //// push constant 27
  33953. //^^ push_constant(27)
  33954. // #12880
  33955. @27
  33956. // #12881
  33957. D=A
  33958. //^^ push_d_to_stack
  33959. // #12882
  33960. @SP
  33961. // #12883
  33962. A=M
  33963. // #12884
  33964. M=D
  33965. // #12885
  33966. @SP
  33967. // #12886
  33968. M=M+1
  33969. //vv push_d_to_stack
  33970. //vv push_constant(27)
  33971. //
  33972. //// push constant 51
  33973. //^^ push_constant(51)
  33974. // #12887
  33975. @51
  33976. // #12888
  33977. D=A
  33978. //^^ push_d_to_stack
  33979. // #12889
  33980. @SP
  33981. // #12890
  33982. A=M
  33983. // #12891
  33984. M=D
  33985. // #12892
  33986. @SP
  33987. // #12893
  33988. M=M+1
  33989. //vv push_d_to_stack
  33990. //vv push_constant(51)
  33991. //
  33992. //// push constant 51
  33993. //^^ push_constant(51)
  33994. // #12894
  33995. @51
  33996. // #12895
  33997. D=A
  33998. //^^ push_d_to_stack
  33999. // #12896
  34000. @SP
  34001. // #12897
  34002. A=M
  34003. // #12898
  34004. M=D
  34005. // #12899
  34006. @SP
  34007. // #12900
  34008. M=M+1
  34009. //vv push_d_to_stack
  34010. //vv push_constant(51)
  34011. //
  34012. //// push constant 51
  34013. //^^ push_constant(51)
  34014. // #12901
  34015. @51
  34016. // #12902
  34017. D=A
  34018. //^^ push_d_to_stack
  34019. // #12903
  34020. @SP
  34021. // #12904
  34022. A=M
  34023. // #12905
  34024. M=D
  34025. // #12906
  34026. @SP
  34027. // #12907
  34028. M=M+1
  34029. //vv push_d_to_stack
  34030. //vv push_constant(51)
  34031. //
  34032. //// push constant 51
  34033. //^^ push_constant(51)
  34034. // #12908
  34035. @51
  34036. // #12909
  34037. D=A
  34038. //^^ push_d_to_stack
  34039. // #12910
  34040. @SP
  34041. // #12911
  34042. A=M
  34043. // #12912
  34044. M=D
  34045. // #12913
  34046. @SP
  34047. // #12914
  34048. M=M+1
  34049. //vv push_d_to_stack
  34050. //vv push_constant(51)
  34051. //
  34052. //// push constant 51
  34053. //^^ push_constant(51)
  34054. // #12915
  34055. @51
  34056. // #12916
  34057. D=A
  34058. //^^ push_d_to_stack
  34059. // #12917
  34060. @SP
  34061. // #12918
  34062. A=M
  34063. // #12919
  34064. M=D
  34065. // #12920
  34066. @SP
  34067. // #12921
  34068. M=M+1
  34069. //vv push_d_to_stack
  34070. //vv push_constant(51)
  34071. //
  34072. //// push constant 27
  34073. //^^ push_constant(27)
  34074. // #12922
  34075. @27
  34076. // #12923
  34077. D=A
  34078. //^^ push_d_to_stack
  34079. // #12924
  34080. @SP
  34081. // #12925
  34082. A=M
  34083. // #12926
  34084. M=D
  34085. // #12927
  34086. @SP
  34087. // #12928
  34088. M=M+1
  34089. //vv push_d_to_stack
  34090. //vv push_constant(27)
  34091. //
  34092. //// push constant 15
  34093. //^^ push_constant(15)
  34094. // #12929
  34095. @15
  34096. // #12930
  34097. D=A
  34098. //^^ push_d_to_stack
  34099. // #12931
  34100. @SP
  34101. // #12932
  34102. A=M
  34103. // #12933
  34104. M=D
  34105. // #12934
  34106. @SP
  34107. // #12935
  34108. M=M+1
  34109. //vv push_d_to_stack
  34110. //vv push_constant(15)
  34111. //
  34112. //// push constant 0
  34113. //^^ push_constant(0)
  34114. // #12936
  34115. @0
  34116. // #12937
  34117. D=A
  34118. //^^ push_d_to_stack
  34119. // #12938
  34120. @SP
  34121. // #12939
  34122. A=M
  34123. // #12940
  34124. M=D
  34125. // #12941
  34126. @SP
  34127. // #12942
  34128. M=M+1
  34129. //vv push_d_to_stack
  34130. //vv push_constant(0)
  34131. //
  34132. //// push constant 0
  34133. //^^ push_constant(0)
  34134. // #12943
  34135. @0
  34136. // #12944
  34137. D=A
  34138. //^^ push_d_to_stack
  34139. // #12945
  34140. @SP
  34141. // #12946
  34142. A=M
  34143. // #12947
  34144. M=D
  34145. // #12948
  34146. @SP
  34147. // #12949
  34148. M=M+1
  34149. //vv push_d_to_stack
  34150. //vv push_constant(0)
  34151. //
  34152. //// call Output.create 12
  34153. //^^ push_constant(RET_ADDR_112)
  34154. // #12950
  34155. @RET_ADDR_112
  34156. // #12951
  34157. D=A
  34158. //^^ push_d_to_stack
  34159. // #12952
  34160. @SP
  34161. // #12953
  34162. A=M
  34163. // #12954
  34164. M=D
  34165. // #12955
  34166. @SP
  34167. // #12956
  34168. M=M+1
  34169. //vv push_d_to_stack
  34170. //vv push_constant(RET_ADDR_112)
  34171. //push return-address
  34172. // #12957
  34173. @LCL
  34174. // #12958
  34175. D=M
  34176. //^^ push_d_to_stack
  34177. // #12959
  34178. @SP
  34179. // #12960
  34180. A=M
  34181. // #12961
  34182. M=D
  34183. // #12962
  34184. @SP
  34185. // #12963
  34186. M=M+1
  34187. //vv push_d_to_stack
  34188. //push LCL
  34189. // #12964
  34190. @ARG
  34191. // #12965
  34192. D=M
  34193. //^^ push_d_to_stack
  34194. // #12966
  34195. @SP
  34196. // #12967
  34197. A=M
  34198. // #12968
  34199. M=D
  34200. // #12969
  34201. @SP
  34202. // #12970
  34203. M=M+1
  34204. //vv push_d_to_stack
  34205. //push ARG
  34206. // #12971
  34207. @THIS
  34208. // #12972
  34209. D=M
  34210. //^^ push_d_to_stack
  34211. // #12973
  34212. @SP
  34213. // #12974
  34214. A=M
  34215. // #12975
  34216. M=D
  34217. // #12976
  34218. @SP
  34219. // #12977
  34220. M=M+1
  34221. //vv push_d_to_stack
  34222. //push THIS
  34223. // #12978
  34224. @THAT
  34225. // #12979
  34226. D=M
  34227. //^^ push_d_to_stack
  34228. // #12980
  34229. @SP
  34230. // #12981
  34231. A=M
  34232. // #12982
  34233. M=D
  34234. // #12983
  34235. @SP
  34236. // #12984
  34237. M=M+1
  34238. //vv push_d_to_stack
  34239. //push THAT
  34240. // #12985
  34241. @SP
  34242. // #12986
  34243. D=M
  34244. // #12987
  34245. @ARG
  34246. // #12988
  34247. M=D
  34248. // #12989
  34249. @17
  34250. // #12990
  34251. D=A
  34252. // #12991
  34253. @ARG
  34254. // #12992
  34255. M=M-D // ARG = SP - args - 5
  34256. // #12993
  34257. @SP
  34258. // #12994
  34259. D=M
  34260. // #12995
  34261. @LCL
  34262. // #12996
  34263. M=D // LCL = SP
  34264. // #12997
  34265. @Output.create
  34266. // #12998
  34267. 0;JMP
  34268. (RET_ADDR_112)
  34269. //
  34270. //// pop temp 0
  34271. //^^ pop_to_loc{5)
  34272. //^^ pop_stack_to_d
  34273. // #12999
  34274. @SP
  34275. // #13000
  34276. M=M-1
  34277. // #13001
  34278. A=M
  34279. // #13002
  34280. D=M
  34281. //vv pop_stack_to_d
  34282. // #13003
  34283. @5
  34284. // #13004
  34285. M=D
  34286. //vv pop_to_loc{5)
  34287. //
  34288. //// push constant 69
  34289. //^^ push_constant(69)
  34290. // #13005
  34291. @69
  34292. // #13006
  34293. D=A
  34294. //^^ push_d_to_stack
  34295. // #13007
  34296. @SP
  34297. // #13008
  34298. A=M
  34299. // #13009
  34300. M=D
  34301. // #13010
  34302. @SP
  34303. // #13011
  34304. M=M+1
  34305. //vv push_d_to_stack
  34306. //vv push_constant(69)
  34307. //
  34308. //// push constant 63
  34309. //^^ push_constant(63)
  34310. // #13012
  34311. @63
  34312. // #13013
  34313. D=A
  34314. //^^ push_d_to_stack
  34315. // #13014
  34316. @SP
  34317. // #13015
  34318. A=M
  34319. // #13016
  34320. M=D
  34321. // #13017
  34322. @SP
  34323. // #13018
  34324. M=M+1
  34325. //vv push_d_to_stack
  34326. //vv push_constant(63)
  34327. //
  34328. //// push constant 51
  34329. //^^ push_constant(51)
  34330. // #13019
  34331. @51
  34332. // #13020
  34333. D=A
  34334. //^^ push_d_to_stack
  34335. // #13021
  34336. @SP
  34337. // #13022
  34338. A=M
  34339. // #13023
  34340. M=D
  34341. // #13024
  34342. @SP
  34343. // #13025
  34344. M=M+1
  34345. //vv push_d_to_stack
  34346. //vv push_constant(51)
  34347. //
  34348. //// push constant 35
  34349. //^^ push_constant(35)
  34350. // #13026
  34351. @35
  34352. // #13027
  34353. D=A
  34354. //^^ push_d_to_stack
  34355. // #13028
  34356. @SP
  34357. // #13029
  34358. A=M
  34359. // #13030
  34360. M=D
  34361. // #13031
  34362. @SP
  34363. // #13032
  34364. M=M+1
  34365. //vv push_d_to_stack
  34366. //vv push_constant(35)
  34367. //
  34368. //// push constant 11
  34369. //^^ push_constant(11)
  34370. // #13033
  34371. @11
  34372. // #13034
  34373. D=A
  34374. //^^ push_d_to_stack
  34375. // #13035
  34376. @SP
  34377. // #13036
  34378. A=M
  34379. // #13037
  34380. M=D
  34381. // #13038
  34382. @SP
  34383. // #13039
  34384. M=M+1
  34385. //vv push_d_to_stack
  34386. //vv push_constant(11)
  34387. //
  34388. //// push constant 15
  34389. //^^ push_constant(15)
  34390. // #13040
  34391. @15
  34392. // #13041
  34393. D=A
  34394. //^^ push_d_to_stack
  34395. // #13042
  34396. @SP
  34397. // #13043
  34398. A=M
  34399. // #13044
  34400. M=D
  34401. // #13045
  34402. @SP
  34403. // #13046
  34404. M=M+1
  34405. //vv push_d_to_stack
  34406. //vv push_constant(15)
  34407. //
  34408. //// push constant 11
  34409. //^^ push_constant(11)
  34410. // #13047
  34411. @11
  34412. // #13048
  34413. D=A
  34414. //^^ push_d_to_stack
  34415. // #13049
  34416. @SP
  34417. // #13050
  34418. A=M
  34419. // #13051
  34420. M=D
  34421. // #13052
  34422. @SP
  34423. // #13053
  34424. M=M+1
  34425. //vv push_d_to_stack
  34426. //vv push_constant(11)
  34427. //
  34428. //// push constant 35
  34429. //^^ push_constant(35)
  34430. // #13054
  34431. @35
  34432. // #13055
  34433. D=A
  34434. //^^ push_d_to_stack
  34435. // #13056
  34436. @SP
  34437. // #13057
  34438. A=M
  34439. // #13058
  34440. M=D
  34441. // #13059
  34442. @SP
  34443. // #13060
  34444. M=M+1
  34445. //vv push_d_to_stack
  34446. //vv push_constant(35)
  34447. //
  34448. //// push constant 51
  34449. //^^ push_constant(51)
  34450. // #13061
  34451. @51
  34452. // #13062
  34453. D=A
  34454. //^^ push_d_to_stack
  34455. // #13063
  34456. @SP
  34457. // #13064
  34458. A=M
  34459. // #13065
  34460. M=D
  34461. // #13066
  34462. @SP
  34463. // #13067
  34464. M=M+1
  34465. //vv push_d_to_stack
  34466. //vv push_constant(51)
  34467. //
  34468. //// push constant 63
  34469. //^^ push_constant(63)
  34470. // #13068
  34471. @63
  34472. // #13069
  34473. D=A
  34474. //^^ push_d_to_stack
  34475. // #13070
  34476. @SP
  34477. // #13071
  34478. A=M
  34479. // #13072
  34480. M=D
  34481. // #13073
  34482. @SP
  34483. // #13074
  34484. M=M+1
  34485. //vv push_d_to_stack
  34486. //vv push_constant(63)
  34487. //
  34488. //// push constant 0
  34489. //^^ push_constant(0)
  34490. // #13075
  34491. @0
  34492. // #13076
  34493. D=A
  34494. //^^ push_d_to_stack
  34495. // #13077
  34496. @SP
  34497. // #13078
  34498. A=M
  34499. // #13079
  34500. M=D
  34501. // #13080
  34502. @SP
  34503. // #13081
  34504. M=M+1
  34505. //vv push_d_to_stack
  34506. //vv push_constant(0)
  34507. //
  34508. //// push constant 0
  34509. //^^ push_constant(0)
  34510. // #13082
  34511. @0
  34512. // #13083
  34513. D=A
  34514. //^^ push_d_to_stack
  34515. // #13084
  34516. @SP
  34517. // #13085
  34518. A=M
  34519. // #13086
  34520. M=D
  34521. // #13087
  34522. @SP
  34523. // #13088
  34524. M=M+1
  34525. //vv push_d_to_stack
  34526. //vv push_constant(0)
  34527. //
  34528. //// call Output.create 12
  34529. //^^ push_constant(RET_ADDR_113)
  34530. // #13089
  34531. @RET_ADDR_113
  34532. // #13090
  34533. D=A
  34534. //^^ push_d_to_stack
  34535. // #13091
  34536. @SP
  34537. // #13092
  34538. A=M
  34539. // #13093
  34540. M=D
  34541. // #13094
  34542. @SP
  34543. // #13095
  34544. M=M+1
  34545. //vv push_d_to_stack
  34546. //vv push_constant(RET_ADDR_113)
  34547. //push return-address
  34548. // #13096
  34549. @LCL
  34550. // #13097
  34551. D=M
  34552. //^^ push_d_to_stack
  34553. // #13098
  34554. @SP
  34555. // #13099
  34556. A=M
  34557. // #13100
  34558. M=D
  34559. // #13101
  34560. @SP
  34561. // #13102
  34562. M=M+1
  34563. //vv push_d_to_stack
  34564. //push LCL
  34565. // #13103
  34566. @ARG
  34567. // #13104
  34568. D=M
  34569. //^^ push_d_to_stack
  34570. // #13105
  34571. @SP
  34572. // #13106
  34573. A=M
  34574. // #13107
  34575. M=D
  34576. // #13108
  34577. @SP
  34578. // #13109
  34579. M=M+1
  34580. //vv push_d_to_stack
  34581. //push ARG
  34582. // #13110
  34583. @THIS
  34584. // #13111
  34585. D=M
  34586. //^^ push_d_to_stack
  34587. // #13112
  34588. @SP
  34589. // #13113
  34590. A=M
  34591. // #13114
  34592. M=D
  34593. // #13115
  34594. @SP
  34595. // #13116
  34596. M=M+1
  34597. //vv push_d_to_stack
  34598. //push THIS
  34599. // #13117
  34600. @THAT
  34601. // #13118
  34602. D=M
  34603. //^^ push_d_to_stack
  34604. // #13119
  34605. @SP
  34606. // #13120
  34607. A=M
  34608. // #13121
  34609. M=D
  34610. // #13122
  34611. @SP
  34612. // #13123
  34613. M=M+1
  34614. //vv push_d_to_stack
  34615. //push THAT
  34616. // #13124
  34617. @SP
  34618. // #13125
  34619. D=M
  34620. // #13126
  34621. @ARG
  34622. // #13127
  34623. M=D
  34624. // #13128
  34625. @17
  34626. // #13129
  34627. D=A
  34628. // #13130
  34629. @ARG
  34630. // #13131
  34631. M=M-D // ARG = SP - args - 5
  34632. // #13132
  34633. @SP
  34634. // #13133
  34635. D=M
  34636. // #13134
  34637. @LCL
  34638. // #13135
  34639. M=D // LCL = SP
  34640. // #13136
  34641. @Output.create
  34642. // #13137
  34643. 0;JMP
  34644. (RET_ADDR_113)
  34645. //
  34646. //// pop temp 0
  34647. //^^ pop_to_loc{5)
  34648. //^^ pop_stack_to_d
  34649. // #13138
  34650. @SP
  34651. // #13139
  34652. M=M-1
  34653. // #13140
  34654. A=M
  34655. // #13141
  34656. D=M
  34657. //vv pop_stack_to_d
  34658. // #13142
  34659. @5
  34660. // #13143
  34661. M=D
  34662. //vv pop_to_loc{5)
  34663. //
  34664. //// push constant 70
  34665. //^^ push_constant(70)
  34666. // #13144
  34667. @70
  34668. // #13145
  34669. D=A
  34670. //^^ push_d_to_stack
  34671. // #13146
  34672. @SP
  34673. // #13147
  34674. A=M
  34675. // #13148
  34676. M=D
  34677. // #13149
  34678. @SP
  34679. // #13150
  34680. M=M+1
  34681. //vv push_d_to_stack
  34682. //vv push_constant(70)
  34683. //
  34684. //// push constant 63
  34685. //^^ push_constant(63)
  34686. // #13151
  34687. @63
  34688. // #13152
  34689. D=A
  34690. //^^ push_d_to_stack
  34691. // #13153
  34692. @SP
  34693. // #13154
  34694. A=M
  34695. // #13155
  34696. M=D
  34697. // #13156
  34698. @SP
  34699. // #13157
  34700. M=M+1
  34701. //vv push_d_to_stack
  34702. //vv push_constant(63)
  34703. //
  34704. //// push constant 51
  34705. //^^ push_constant(51)
  34706. // #13158
  34707. @51
  34708. // #13159
  34709. D=A
  34710. //^^ push_d_to_stack
  34711. // #13160
  34712. @SP
  34713. // #13161
  34714. A=M
  34715. // #13162
  34716. M=D
  34717. // #13163
  34718. @SP
  34719. // #13164
  34720. M=M+1
  34721. //vv push_d_to_stack
  34722. //vv push_constant(51)
  34723. //
  34724. //// push constant 35
  34725. //^^ push_constant(35)
  34726. // #13165
  34727. @35
  34728. // #13166
  34729. D=A
  34730. //^^ push_d_to_stack
  34731. // #13167
  34732. @SP
  34733. // #13168
  34734. A=M
  34735. // #13169
  34736. M=D
  34737. // #13170
  34738. @SP
  34739. // #13171
  34740. M=M+1
  34741. //vv push_d_to_stack
  34742. //vv push_constant(35)
  34743. //
  34744. //// push constant 11
  34745. //^^ push_constant(11)
  34746. // #13172
  34747. @11
  34748. // #13173
  34749. D=A
  34750. //^^ push_d_to_stack
  34751. // #13174
  34752. @SP
  34753. // #13175
  34754. A=M
  34755. // #13176
  34756. M=D
  34757. // #13177
  34758. @SP
  34759. // #13178
  34760. M=M+1
  34761. //vv push_d_to_stack
  34762. //vv push_constant(11)
  34763. //
  34764. //// push constant 15
  34765. //^^ push_constant(15)
  34766. // #13179
  34767. @15
  34768. // #13180
  34769. D=A
  34770. //^^ push_d_to_stack
  34771. // #13181
  34772. @SP
  34773. // #13182
  34774. A=M
  34775. // #13183
  34776. M=D
  34777. // #13184
  34778. @SP
  34779. // #13185
  34780. M=M+1
  34781. //vv push_d_to_stack
  34782. //vv push_constant(15)
  34783. //
  34784. //// push constant 11
  34785. //^^ push_constant(11)
  34786. // #13186
  34787. @11
  34788. // #13187
  34789. D=A
  34790. //^^ push_d_to_stack
  34791. // #13188
  34792. @SP
  34793. // #13189
  34794. A=M
  34795. // #13190
  34796. M=D
  34797. // #13191
  34798. @SP
  34799. // #13192
  34800. M=M+1
  34801. //vv push_d_to_stack
  34802. //vv push_constant(11)
  34803. //
  34804. //// push constant 3
  34805. //^^ push_constant(3)
  34806. // #13193
  34807. @3
  34808. // #13194
  34809. D=A
  34810. //^^ push_d_to_stack
  34811. // #13195
  34812. @SP
  34813. // #13196
  34814. A=M
  34815. // #13197
  34816. M=D
  34817. // #13198
  34818. @SP
  34819. // #13199
  34820. M=M+1
  34821. //vv push_d_to_stack
  34822. //vv push_constant(3)
  34823. //
  34824. //// push constant 3
  34825. //^^ push_constant(3)
  34826. // #13200
  34827. @3
  34828. // #13201
  34829. D=A
  34830. //^^ push_d_to_stack
  34831. // #13202
  34832. @SP
  34833. // #13203
  34834. A=M
  34835. // #13204
  34836. M=D
  34837. // #13205
  34838. @SP
  34839. // #13206
  34840. M=M+1
  34841. //vv push_d_to_stack
  34842. //vv push_constant(3)
  34843. //
  34844. //// push constant 3
  34845. //^^ push_constant(3)
  34846. // #13207
  34847. @3
  34848. // #13208
  34849. D=A
  34850. //^^ push_d_to_stack
  34851. // #13209
  34852. @SP
  34853. // #13210
  34854. A=M
  34855. // #13211
  34856. M=D
  34857. // #13212
  34858. @SP
  34859. // #13213
  34860. M=M+1
  34861. //vv push_d_to_stack
  34862. //vv push_constant(3)
  34863. //
  34864. //// push constant 0
  34865. //^^ push_constant(0)
  34866. // #13214
  34867. @0
  34868. // #13215
  34869. D=A
  34870. //^^ push_d_to_stack
  34871. // #13216
  34872. @SP
  34873. // #13217
  34874. A=M
  34875. // #13218
  34876. M=D
  34877. // #13219
  34878. @SP
  34879. // #13220
  34880. M=M+1
  34881. //vv push_d_to_stack
  34882. //vv push_constant(0)
  34883. //
  34884. //// push constant 0
  34885. //^^ push_constant(0)
  34886. // #13221
  34887. @0
  34888. // #13222
  34889. D=A
  34890. //^^ push_d_to_stack
  34891. // #13223
  34892. @SP
  34893. // #13224
  34894. A=M
  34895. // #13225
  34896. M=D
  34897. // #13226
  34898. @SP
  34899. // #13227
  34900. M=M+1
  34901. //vv push_d_to_stack
  34902. //vv push_constant(0)
  34903. //
  34904. //// call Output.create 12
  34905. //^^ push_constant(RET_ADDR_114)
  34906. // #13228
  34907. @RET_ADDR_114
  34908. // #13229
  34909. D=A
  34910. //^^ push_d_to_stack
  34911. // #13230
  34912. @SP
  34913. // #13231
  34914. A=M
  34915. // #13232
  34916. M=D
  34917. // #13233
  34918. @SP
  34919. // #13234
  34920. M=M+1
  34921. //vv push_d_to_stack
  34922. //vv push_constant(RET_ADDR_114)
  34923. //push return-address
  34924. // #13235
  34925. @LCL
  34926. // #13236
  34927. D=M
  34928. //^^ push_d_to_stack
  34929. // #13237
  34930. @SP
  34931. // #13238
  34932. A=M
  34933. // #13239
  34934. M=D
  34935. // #13240
  34936. @SP
  34937. // #13241
  34938. M=M+1
  34939. //vv push_d_to_stack
  34940. //push LCL
  34941. // #13242
  34942. @ARG
  34943. // #13243
  34944. D=M
  34945. //^^ push_d_to_stack
  34946. // #13244
  34947. @SP
  34948. // #13245
  34949. A=M
  34950. // #13246
  34951. M=D
  34952. // #13247
  34953. @SP
  34954. // #13248
  34955. M=M+1
  34956. //vv push_d_to_stack
  34957. //push ARG
  34958. // #13249
  34959. @THIS
  34960. // #13250
  34961. D=M
  34962. //^^ push_d_to_stack
  34963. // #13251
  34964. @SP
  34965. // #13252
  34966. A=M
  34967. // #13253
  34968. M=D
  34969. // #13254
  34970. @SP
  34971. // #13255
  34972. M=M+1
  34973. //vv push_d_to_stack
  34974. //push THIS
  34975. // #13256
  34976. @THAT
  34977. // #13257
  34978. D=M
  34979. //^^ push_d_to_stack
  34980. // #13258
  34981. @SP
  34982. // #13259
  34983. A=M
  34984. // #13260
  34985. M=D
  34986. // #13261
  34987. @SP
  34988. // #13262
  34989. M=M+1
  34990. //vv push_d_to_stack
  34991. //push THAT
  34992. // #13263
  34993. @SP
  34994. // #13264
  34995. D=M
  34996. // #13265
  34997. @ARG
  34998. // #13266
  34999. M=D
  35000. // #13267
  35001. @17
  35002. // #13268
  35003. D=A
  35004. // #13269
  35005. @ARG
  35006. // #13270
  35007. M=M-D // ARG = SP - args - 5
  35008. // #13271
  35009. @SP
  35010. // #13272
  35011. D=M
  35012. // #13273
  35013. @LCL
  35014. // #13274
  35015. M=D // LCL = SP
  35016. // #13275
  35017. @Output.create
  35018. // #13276
  35019. 0;JMP
  35020. (RET_ADDR_114)
  35021. //
  35022. //// pop temp 0
  35023. //^^ pop_to_loc{5)
  35024. //^^ pop_stack_to_d
  35025. // #13277
  35026. @SP
  35027. // #13278
  35028. M=M-1
  35029. // #13279
  35030. A=M
  35031. // #13280
  35032. D=M
  35033. //vv pop_stack_to_d
  35034. // #13281
  35035. @5
  35036. // #13282
  35037. M=D
  35038. //vv pop_to_loc{5)
  35039. //
  35040. //// push constant 71
  35041. //^^ push_constant(71)
  35042. // #13283
  35043. @71
  35044. // #13284
  35045. D=A
  35046. //^^ push_d_to_stack
  35047. // #13285
  35048. @SP
  35049. // #13286
  35050. A=M
  35051. // #13287
  35052. M=D
  35053. // #13288
  35054. @SP
  35055. // #13289
  35056. M=M+1
  35057. //vv push_d_to_stack
  35058. //vv push_constant(71)
  35059. //
  35060. //// push constant 28
  35061. //^^ push_constant(28)
  35062. // #13290
  35063. @28
  35064. // #13291
  35065. D=A
  35066. //^^ push_d_to_stack
  35067. // #13292
  35068. @SP
  35069. // #13293
  35070. A=M
  35071. // #13294
  35072. M=D
  35073. // #13295
  35074. @SP
  35075. // #13296
  35076. M=M+1
  35077. //vv push_d_to_stack
  35078. //vv push_constant(28)
  35079. //
  35080. //// push constant 54
  35081. //^^ push_constant(54)
  35082. // #13297
  35083. @54
  35084. // #13298
  35085. D=A
  35086. //^^ push_d_to_stack
  35087. // #13299
  35088. @SP
  35089. // #13300
  35090. A=M
  35091. // #13301
  35092. M=D
  35093. // #13302
  35094. @SP
  35095. // #13303
  35096. M=M+1
  35097. //vv push_d_to_stack
  35098. //vv push_constant(54)
  35099. //
  35100. //// push constant 35
  35101. //^^ push_constant(35)
  35102. // #13304
  35103. @35
  35104. // #13305
  35105. D=A
  35106. //^^ push_d_to_stack
  35107. // #13306
  35108. @SP
  35109. // #13307
  35110. A=M
  35111. // #13308
  35112. M=D
  35113. // #13309
  35114. @SP
  35115. // #13310
  35116. M=M+1
  35117. //vv push_d_to_stack
  35118. //vv push_constant(35)
  35119. //
  35120. //// push constant 3
  35121. //^^ push_constant(3)
  35122. // #13311
  35123. @3
  35124. // #13312
  35125. D=A
  35126. //^^ push_d_to_stack
  35127. // #13313
  35128. @SP
  35129. // #13314
  35130. A=M
  35131. // #13315
  35132. M=D
  35133. // #13316
  35134. @SP
  35135. // #13317
  35136. M=M+1
  35137. //vv push_d_to_stack
  35138. //vv push_constant(3)
  35139. //
  35140. //// push constant 59
  35141. //^^ push_constant(59)
  35142. // #13318
  35143. @59
  35144. // #13319
  35145. D=A
  35146. //^^ push_d_to_stack
  35147. // #13320
  35148. @SP
  35149. // #13321
  35150. A=M
  35151. // #13322
  35152. M=D
  35153. // #13323
  35154. @SP
  35155. // #13324
  35156. M=M+1
  35157. //vv push_d_to_stack
  35158. //vv push_constant(59)
  35159. //
  35160. //// push constant 51
  35161. //^^ push_constant(51)
  35162. // #13325
  35163. @51
  35164. // #13326
  35165. D=A
  35166. //^^ push_d_to_stack
  35167. // #13327
  35168. @SP
  35169. // #13328
  35170. A=M
  35171. // #13329
  35172. M=D
  35173. // #13330
  35174. @SP
  35175. // #13331
  35176. M=M+1
  35177. //vv push_d_to_stack
  35178. //vv push_constant(51)
  35179. //
  35180. //// push constant 51
  35181. //^^ push_constant(51)
  35182. // #13332
  35183. @51
  35184. // #13333
  35185. D=A
  35186. //^^ push_d_to_stack
  35187. // #13334
  35188. @SP
  35189. // #13335
  35190. A=M
  35191. // #13336
  35192. M=D
  35193. // #13337
  35194. @SP
  35195. // #13338
  35196. M=M+1
  35197. //vv push_d_to_stack
  35198. //vv push_constant(51)
  35199. //
  35200. //// push constant 54
  35201. //^^ push_constant(54)
  35202. // #13339
  35203. @54
  35204. // #13340
  35205. D=A
  35206. //^^ push_d_to_stack
  35207. // #13341
  35208. @SP
  35209. // #13342
  35210. A=M
  35211. // #13343
  35212. M=D
  35213. // #13344
  35214. @SP
  35215. // #13345
  35216. M=M+1
  35217. //vv push_d_to_stack
  35218. //vv push_constant(54)
  35219. //
  35220. //// push constant 44
  35221. //^^ push_constant(44)
  35222. // #13346
  35223. @44
  35224. // #13347
  35225. D=A
  35226. //^^ push_d_to_stack
  35227. // #13348
  35228. @SP
  35229. // #13349
  35230. A=M
  35231. // #13350
  35232. M=D
  35233. // #13351
  35234. @SP
  35235. // #13352
  35236. M=M+1
  35237. //vv push_d_to_stack
  35238. //vv push_constant(44)
  35239. //
  35240. //// push constant 0
  35241. //^^ push_constant(0)
  35242. // #13353
  35243. @0
  35244. // #13354
  35245. D=A
  35246. //^^ push_d_to_stack
  35247. // #13355
  35248. @SP
  35249. // #13356
  35250. A=M
  35251. // #13357
  35252. M=D
  35253. // #13358
  35254. @SP
  35255. // #13359
  35256. M=M+1
  35257. //vv push_d_to_stack
  35258. //vv push_constant(0)
  35259. //
  35260. //// push constant 0
  35261. //^^ push_constant(0)
  35262. // #13360
  35263. @0
  35264. // #13361
  35265. D=A
  35266. //^^ push_d_to_stack
  35267. // #13362
  35268. @SP
  35269. // #13363
  35270. A=M
  35271. // #13364
  35272. M=D
  35273. // #13365
  35274. @SP
  35275. // #13366
  35276. M=M+1
  35277. //vv push_d_to_stack
  35278. //vv push_constant(0)
  35279. //
  35280. //// call Output.create 12
  35281. //^^ push_constant(RET_ADDR_115)
  35282. // #13367
  35283. @RET_ADDR_115
  35284. // #13368
  35285. D=A
  35286. //^^ push_d_to_stack
  35287. // #13369
  35288. @SP
  35289. // #13370
  35290. A=M
  35291. // #13371
  35292. M=D
  35293. // #13372
  35294. @SP
  35295. // #13373
  35296. M=M+1
  35297. //vv push_d_to_stack
  35298. //vv push_constant(RET_ADDR_115)
  35299. //push return-address
  35300. // #13374
  35301. @LCL
  35302. // #13375
  35303. D=M
  35304. //^^ push_d_to_stack
  35305. // #13376
  35306. @SP
  35307. // #13377
  35308. A=M
  35309. // #13378
  35310. M=D
  35311. // #13379
  35312. @SP
  35313. // #13380
  35314. M=M+1
  35315. //vv push_d_to_stack
  35316. //push LCL
  35317. // #13381
  35318. @ARG
  35319. // #13382
  35320. D=M
  35321. //^^ push_d_to_stack
  35322. // #13383
  35323. @SP
  35324. // #13384
  35325. A=M
  35326. // #13385
  35327. M=D
  35328. // #13386
  35329. @SP
  35330. // #13387
  35331. M=M+1
  35332. //vv push_d_to_stack
  35333. //push ARG
  35334. // #13388
  35335. @THIS
  35336. // #13389
  35337. D=M
  35338. //^^ push_d_to_stack
  35339. // #13390
  35340. @SP
  35341. // #13391
  35342. A=M
  35343. // #13392
  35344. M=D
  35345. // #13393
  35346. @SP
  35347. // #13394
  35348. M=M+1
  35349. //vv push_d_to_stack
  35350. //push THIS
  35351. // #13395
  35352. @THAT
  35353. // #13396
  35354. D=M
  35355. //^^ push_d_to_stack
  35356. // #13397
  35357. @SP
  35358. // #13398
  35359. A=M
  35360. // #13399
  35361. M=D
  35362. // #13400
  35363. @SP
  35364. // #13401
  35365. M=M+1
  35366. //vv push_d_to_stack
  35367. //push THAT
  35368. // #13402
  35369. @SP
  35370. // #13403
  35371. D=M
  35372. // #13404
  35373. @ARG
  35374. // #13405
  35375. M=D
  35376. // #13406
  35377. @17
  35378. // #13407
  35379. D=A
  35380. // #13408
  35381. @ARG
  35382. // #13409
  35383. M=M-D // ARG = SP - args - 5
  35384. // #13410
  35385. @SP
  35386. // #13411
  35387. D=M
  35388. // #13412
  35389. @LCL
  35390. // #13413
  35391. M=D // LCL = SP
  35392. // #13414
  35393. @Output.create
  35394. // #13415
  35395. 0;JMP
  35396. (RET_ADDR_115)
  35397. //
  35398. //// pop temp 0
  35399. //^^ pop_to_loc{5)
  35400. //^^ pop_stack_to_d
  35401. // #13416
  35402. @SP
  35403. // #13417
  35404. M=M-1
  35405. // #13418
  35406. A=M
  35407. // #13419
  35408. D=M
  35409. //vv pop_stack_to_d
  35410. // #13420
  35411. @5
  35412. // #13421
  35413. M=D
  35414. //vv pop_to_loc{5)
  35415. //
  35416. //// push constant 72
  35417. //^^ push_constant(72)
  35418. // #13422
  35419. @72
  35420. // #13423
  35421. D=A
  35422. //^^ push_d_to_stack
  35423. // #13424
  35424. @SP
  35425. // #13425
  35426. A=M
  35427. // #13426
  35428. M=D
  35429. // #13427
  35430. @SP
  35431. // #13428
  35432. M=M+1
  35433. //vv push_d_to_stack
  35434. //vv push_constant(72)
  35435. //
  35436. //// push constant 51
  35437. //^^ push_constant(51)
  35438. // #13429
  35439. @51
  35440. // #13430
  35441. D=A
  35442. //^^ push_d_to_stack
  35443. // #13431
  35444. @SP
  35445. // #13432
  35446. A=M
  35447. // #13433
  35448. M=D
  35449. // #13434
  35450. @SP
  35451. // #13435
  35452. M=M+1
  35453. //vv push_d_to_stack
  35454. //vv push_constant(51)
  35455. //
  35456. //// push constant 51
  35457. //^^ push_constant(51)
  35458. // #13436
  35459. @51
  35460. // #13437
  35461. D=A
  35462. //^^ push_d_to_stack
  35463. // #13438
  35464. @SP
  35465. // #13439
  35466. A=M
  35467. // #13440
  35468. M=D
  35469. // #13441
  35470. @SP
  35471. // #13442
  35472. M=M+1
  35473. //vv push_d_to_stack
  35474. //vv push_constant(51)
  35475. //
  35476. //// push constant 51
  35477. //^^ push_constant(51)
  35478. // #13443
  35479. @51
  35480. // #13444
  35481. D=A
  35482. //^^ push_d_to_stack
  35483. // #13445
  35484. @SP
  35485. // #13446
  35486. A=M
  35487. // #13447
  35488. M=D
  35489. // #13448
  35490. @SP
  35491. // #13449
  35492. M=M+1
  35493. //vv push_d_to_stack
  35494. //vv push_constant(51)
  35495. //
  35496. //// push constant 51
  35497. //^^ push_constant(51)
  35498. // #13450
  35499. @51
  35500. // #13451
  35501. D=A
  35502. //^^ push_d_to_stack
  35503. // #13452
  35504. @SP
  35505. // #13453
  35506. A=M
  35507. // #13454
  35508. M=D
  35509. // #13455
  35510. @SP
  35511. // #13456
  35512. M=M+1
  35513. //vv push_d_to_stack
  35514. //vv push_constant(51)
  35515. //
  35516. //// push constant 63
  35517. //^^ push_constant(63)
  35518. // #13457
  35519. @63
  35520. // #13458
  35521. D=A
  35522. //^^ push_d_to_stack
  35523. // #13459
  35524. @SP
  35525. // #13460
  35526. A=M
  35527. // #13461
  35528. M=D
  35529. // #13462
  35530. @SP
  35531. // #13463
  35532. M=M+1
  35533. //vv push_d_to_stack
  35534. //vv push_constant(63)
  35535. //
  35536. //// push constant 51
  35537. //^^ push_constant(51)
  35538. // #13464
  35539. @51
  35540. // #13465
  35541. D=A
  35542. //^^ push_d_to_stack
  35543. // #13466
  35544. @SP
  35545. // #13467
  35546. A=M
  35547. // #13468
  35548. M=D
  35549. // #13469
  35550. @SP
  35551. // #13470
  35552. M=M+1
  35553. //vv push_d_to_stack
  35554. //vv push_constant(51)
  35555. //
  35556. //// push constant 51
  35557. //^^ push_constant(51)
  35558. // #13471
  35559. @51
  35560. // #13472
  35561. D=A
  35562. //^^ push_d_to_stack
  35563. // #13473
  35564. @SP
  35565. // #13474
  35566. A=M
  35567. // #13475
  35568. M=D
  35569. // #13476
  35570. @SP
  35571. // #13477
  35572. M=M+1
  35573. //vv push_d_to_stack
  35574. //vv push_constant(51)
  35575. //
  35576. //// push constant 51
  35577. //^^ push_constant(51)
  35578. // #13478
  35579. @51
  35580. // #13479
  35581. D=A
  35582. //^^ push_d_to_stack
  35583. // #13480
  35584. @SP
  35585. // #13481
  35586. A=M
  35587. // #13482
  35588. M=D
  35589. // #13483
  35590. @SP
  35591. // #13484
  35592. M=M+1
  35593. //vv push_d_to_stack
  35594. //vv push_constant(51)
  35595. //
  35596. //// push constant 51
  35597. //^^ push_constant(51)
  35598. // #13485
  35599. @51
  35600. // #13486
  35601. D=A
  35602. //^^ push_d_to_stack
  35603. // #13487
  35604. @SP
  35605. // #13488
  35606. A=M
  35607. // #13489
  35608. M=D
  35609. // #13490
  35610. @SP
  35611. // #13491
  35612. M=M+1
  35613. //vv push_d_to_stack
  35614. //vv push_constant(51)
  35615. //
  35616. //// push constant 0
  35617. //^^ push_constant(0)
  35618. // #13492
  35619. @0
  35620. // #13493
  35621. D=A
  35622. //^^ push_d_to_stack
  35623. // #13494
  35624. @SP
  35625. // #13495
  35626. A=M
  35627. // #13496
  35628. M=D
  35629. // #13497
  35630. @SP
  35631. // #13498
  35632. M=M+1
  35633. //vv push_d_to_stack
  35634. //vv push_constant(0)
  35635. //
  35636. //// push constant 0
  35637. //^^ push_constant(0)
  35638. // #13499
  35639. @0
  35640. // #13500
  35641. D=A
  35642. //^^ push_d_to_stack
  35643. // #13501
  35644. @SP
  35645. // #13502
  35646. A=M
  35647. // #13503
  35648. M=D
  35649. // #13504
  35650. @SP
  35651. // #13505
  35652. M=M+1
  35653. //vv push_d_to_stack
  35654. //vv push_constant(0)
  35655. //
  35656. //// call Output.create 12
  35657. //^^ push_constant(RET_ADDR_116)
  35658. // #13506
  35659. @RET_ADDR_116
  35660. // #13507
  35661. D=A
  35662. //^^ push_d_to_stack
  35663. // #13508
  35664. @SP
  35665. // #13509
  35666. A=M
  35667. // #13510
  35668. M=D
  35669. // #13511
  35670. @SP
  35671. // #13512
  35672. M=M+1
  35673. //vv push_d_to_stack
  35674. //vv push_constant(RET_ADDR_116)
  35675. //push return-address
  35676. // #13513
  35677. @LCL
  35678. // #13514
  35679. D=M
  35680. //^^ push_d_to_stack
  35681. // #13515
  35682. @SP
  35683. // #13516
  35684. A=M
  35685. // #13517
  35686. M=D
  35687. // #13518
  35688. @SP
  35689. // #13519
  35690. M=M+1
  35691. //vv push_d_to_stack
  35692. //push LCL
  35693. // #13520
  35694. @ARG
  35695. // #13521
  35696. D=M
  35697. //^^ push_d_to_stack
  35698. // #13522
  35699. @SP
  35700. // #13523
  35701. A=M
  35702. // #13524
  35703. M=D
  35704. // #13525
  35705. @SP
  35706. // #13526
  35707. M=M+1
  35708. //vv push_d_to_stack
  35709. //push ARG
  35710. // #13527
  35711. @THIS
  35712. // #13528
  35713. D=M
  35714. //^^ push_d_to_stack
  35715. // #13529
  35716. @SP
  35717. // #13530
  35718. A=M
  35719. // #13531
  35720. M=D
  35721. // #13532
  35722. @SP
  35723. // #13533
  35724. M=M+1
  35725. //vv push_d_to_stack
  35726. //push THIS
  35727. // #13534
  35728. @THAT
  35729. // #13535
  35730. D=M
  35731. //^^ push_d_to_stack
  35732. // #13536
  35733. @SP
  35734. // #13537
  35735. A=M
  35736. // #13538
  35737. M=D
  35738. // #13539
  35739. @SP
  35740. // #13540
  35741. M=M+1
  35742. //vv push_d_to_stack
  35743. //push THAT
  35744. // #13541
  35745. @SP
  35746. // #13542
  35747. D=M
  35748. // #13543
  35749. @ARG
  35750. // #13544
  35751. M=D
  35752. // #13545
  35753. @17
  35754. // #13546
  35755. D=A
  35756. // #13547
  35757. @ARG
  35758. // #13548
  35759. M=M-D // ARG = SP - args - 5
  35760. // #13549
  35761. @SP
  35762. // #13550
  35763. D=M
  35764. // #13551
  35765. @LCL
  35766. // #13552
  35767. M=D // LCL = SP
  35768. // #13553
  35769. @Output.create
  35770. // #13554
  35771. 0;JMP
  35772. (RET_ADDR_116)
  35773. //
  35774. //// pop temp 0
  35775. //^^ pop_to_loc{5)
  35776. //^^ pop_stack_to_d
  35777. // #13555
  35778. @SP
  35779. // #13556
  35780. M=M-1
  35781. // #13557
  35782. A=M
  35783. // #13558
  35784. D=M
  35785. //vv pop_stack_to_d
  35786. // #13559
  35787. @5
  35788. // #13560
  35789. M=D
  35790. //vv pop_to_loc{5)
  35791. //
  35792. //// push constant 73
  35793. //^^ push_constant(73)
  35794. // #13561
  35795. @73
  35796. // #13562
  35797. D=A
  35798. //^^ push_d_to_stack
  35799. // #13563
  35800. @SP
  35801. // #13564
  35802. A=M
  35803. // #13565
  35804. M=D
  35805. // #13566
  35806. @SP
  35807. // #13567
  35808. M=M+1
  35809. //vv push_d_to_stack
  35810. //vv push_constant(73)
  35811. //
  35812. //// push constant 30
  35813. //^^ push_constant(30)
  35814. // #13568
  35815. @30
  35816. // #13569
  35817. D=A
  35818. //^^ push_d_to_stack
  35819. // #13570
  35820. @SP
  35821. // #13571
  35822. A=M
  35823. // #13572
  35824. M=D
  35825. // #13573
  35826. @SP
  35827. // #13574
  35828. M=M+1
  35829. //vv push_d_to_stack
  35830. //vv push_constant(30)
  35831. //
  35832. //// push constant 12
  35833. //^^ push_constant(12)
  35834. // #13575
  35835. @12
  35836. // #13576
  35837. D=A
  35838. //^^ push_d_to_stack
  35839. // #13577
  35840. @SP
  35841. // #13578
  35842. A=M
  35843. // #13579
  35844. M=D
  35845. // #13580
  35846. @SP
  35847. // #13581
  35848. M=M+1
  35849. //vv push_d_to_stack
  35850. //vv push_constant(12)
  35851. //
  35852. //// push constant 12
  35853. //^^ push_constant(12)
  35854. // #13582
  35855. @12
  35856. // #13583
  35857. D=A
  35858. //^^ push_d_to_stack
  35859. // #13584
  35860. @SP
  35861. // #13585
  35862. A=M
  35863. // #13586
  35864. M=D
  35865. // #13587
  35866. @SP
  35867. // #13588
  35868. M=M+1
  35869. //vv push_d_to_stack
  35870. //vv push_constant(12)
  35871. //
  35872. //// push constant 12
  35873. //^^ push_constant(12)
  35874. // #13589
  35875. @12
  35876. // #13590
  35877. D=A
  35878. //^^ push_d_to_stack
  35879. // #13591
  35880. @SP
  35881. // #13592
  35882. A=M
  35883. // #13593
  35884. M=D
  35885. // #13594
  35886. @SP
  35887. // #13595
  35888. M=M+1
  35889. //vv push_d_to_stack
  35890. //vv push_constant(12)
  35891. //
  35892. //// push constant 12
  35893. //^^ push_constant(12)
  35894. // #13596
  35895. @12
  35896. // #13597
  35897. D=A
  35898. //^^ push_d_to_stack
  35899. // #13598
  35900. @SP
  35901. // #13599
  35902. A=M
  35903. // #13600
  35904. M=D
  35905. // #13601
  35906. @SP
  35907. // #13602
  35908. M=M+1
  35909. //vv push_d_to_stack
  35910. //vv push_constant(12)
  35911. //
  35912. //// push constant 12
  35913. //^^ push_constant(12)
  35914. // #13603
  35915. @12
  35916. // #13604
  35917. D=A
  35918. //^^ push_d_to_stack
  35919. // #13605
  35920. @SP
  35921. // #13606
  35922. A=M
  35923. // #13607
  35924. M=D
  35925. // #13608
  35926. @SP
  35927. // #13609
  35928. M=M+1
  35929. //vv push_d_to_stack
  35930. //vv push_constant(12)
  35931. //
  35932. //// push constant 12
  35933. //^^ push_constant(12)
  35934. // #13610
  35935. @12
  35936. // #13611
  35937. D=A
  35938. //^^ push_d_to_stack
  35939. // #13612
  35940. @SP
  35941. // #13613
  35942. A=M
  35943. // #13614
  35944. M=D
  35945. // #13615
  35946. @SP
  35947. // #13616
  35948. M=M+1
  35949. //vv push_d_to_stack
  35950. //vv push_constant(12)
  35951. //
  35952. //// push constant 12
  35953. //^^ push_constant(12)
  35954. // #13617
  35955. @12
  35956. // #13618
  35957. D=A
  35958. //^^ push_d_to_stack
  35959. // #13619
  35960. @SP
  35961. // #13620
  35962. A=M
  35963. // #13621
  35964. M=D
  35965. // #13622
  35966. @SP
  35967. // #13623
  35968. M=M+1
  35969. //vv push_d_to_stack
  35970. //vv push_constant(12)
  35971. //
  35972. //// push constant 30
  35973. //^^ push_constant(30)
  35974. // #13624
  35975. @30
  35976. // #13625
  35977. D=A
  35978. //^^ push_d_to_stack
  35979. // #13626
  35980. @SP
  35981. // #13627
  35982. A=M
  35983. // #13628
  35984. M=D
  35985. // #13629
  35986. @SP
  35987. // #13630
  35988. M=M+1
  35989. //vv push_d_to_stack
  35990. //vv push_constant(30)
  35991. //
  35992. //// push constant 0
  35993. //^^ push_constant(0)
  35994. // #13631
  35995. @0
  35996. // #13632
  35997. D=A
  35998. //^^ push_d_to_stack
  35999. // #13633
  36000. @SP
  36001. // #13634
  36002. A=M
  36003. // #13635
  36004. M=D
  36005. // #13636
  36006. @SP
  36007. // #13637
  36008. M=M+1
  36009. //vv push_d_to_stack
  36010. //vv push_constant(0)
  36011. //
  36012. //// push constant 0
  36013. //^^ push_constant(0)
  36014. // #13638
  36015. @0
  36016. // #13639
  36017. D=A
  36018. //^^ push_d_to_stack
  36019. // #13640
  36020. @SP
  36021. // #13641
  36022. A=M
  36023. // #13642
  36024. M=D
  36025. // #13643
  36026. @SP
  36027. // #13644
  36028. M=M+1
  36029. //vv push_d_to_stack
  36030. //vv push_constant(0)
  36031. //
  36032. //// call Output.create 12
  36033. //^^ push_constant(RET_ADDR_117)
  36034. // #13645
  36035. @RET_ADDR_117
  36036. // #13646
  36037. D=A
  36038. //^^ push_d_to_stack
  36039. // #13647
  36040. @SP
  36041. // #13648
  36042. A=M
  36043. // #13649
  36044. M=D
  36045. // #13650
  36046. @SP
  36047. // #13651
  36048. M=M+1
  36049. //vv push_d_to_stack
  36050. //vv push_constant(RET_ADDR_117)
  36051. //push return-address
  36052. // #13652
  36053. @LCL
  36054. // #13653
  36055. D=M
  36056. //^^ push_d_to_stack
  36057. // #13654
  36058. @SP
  36059. // #13655
  36060. A=M
  36061. // #13656
  36062. M=D
  36063. // #13657
  36064. @SP
  36065. // #13658
  36066. M=M+1
  36067. //vv push_d_to_stack
  36068. //push LCL
  36069. // #13659
  36070. @ARG
  36071. // #13660
  36072. D=M
  36073. //^^ push_d_to_stack
  36074. // #13661
  36075. @SP
  36076. // #13662
  36077. A=M
  36078. // #13663
  36079. M=D
  36080. // #13664
  36081. @SP
  36082. // #13665
  36083. M=M+1
  36084. //vv push_d_to_stack
  36085. //push ARG
  36086. // #13666
  36087. @THIS
  36088. // #13667
  36089. D=M
  36090. //^^ push_d_to_stack
  36091. // #13668
  36092. @SP
  36093. // #13669
  36094. A=M
  36095. // #13670
  36096. M=D
  36097. // #13671
  36098. @SP
  36099. // #13672
  36100. M=M+1
  36101. //vv push_d_to_stack
  36102. //push THIS
  36103. // #13673
  36104. @THAT
  36105. // #13674
  36106. D=M
  36107. //^^ push_d_to_stack
  36108. // #13675
  36109. @SP
  36110. // #13676
  36111. A=M
  36112. // #13677
  36113. M=D
  36114. // #13678
  36115. @SP
  36116. // #13679
  36117. M=M+1
  36118. //vv push_d_to_stack
  36119. //push THAT
  36120. // #13680
  36121. @SP
  36122. // #13681
  36123. D=M
  36124. // #13682
  36125. @ARG
  36126. // #13683
  36127. M=D
  36128. // #13684
  36129. @17
  36130. // #13685
  36131. D=A
  36132. // #13686
  36133. @ARG
  36134. // #13687
  36135. M=M-D // ARG = SP - args - 5
  36136. // #13688
  36137. @SP
  36138. // #13689
  36139. D=M
  36140. // #13690
  36141. @LCL
  36142. // #13691
  36143. M=D // LCL = SP
  36144. // #13692
  36145. @Output.create
  36146. // #13693
  36147. 0;JMP
  36148. (RET_ADDR_117)
  36149. //
  36150. //// pop temp 0
  36151. //^^ pop_to_loc{5)
  36152. //^^ pop_stack_to_d
  36153. // #13694
  36154. @SP
  36155. // #13695
  36156. M=M-1
  36157. // #13696
  36158. A=M
  36159. // #13697
  36160. D=M
  36161. //vv pop_stack_to_d
  36162. // #13698
  36163. @5
  36164. // #13699
  36165. M=D
  36166. //vv pop_to_loc{5)
  36167. //
  36168. //// push constant 74
  36169. //^^ push_constant(74)
  36170. // #13700
  36171. @74
  36172. // #13701
  36173. D=A
  36174. //^^ push_d_to_stack
  36175. // #13702
  36176. @SP
  36177. // #13703
  36178. A=M
  36179. // #13704
  36180. M=D
  36181. // #13705
  36182. @SP
  36183. // #13706
  36184. M=M+1
  36185. //vv push_d_to_stack
  36186. //vv push_constant(74)
  36187. //
  36188. //// push constant 60
  36189. //^^ push_constant(60)
  36190. // #13707
  36191. @60
  36192. // #13708
  36193. D=A
  36194. //^^ push_d_to_stack
  36195. // #13709
  36196. @SP
  36197. // #13710
  36198. A=M
  36199. // #13711
  36200. M=D
  36201. // #13712
  36202. @SP
  36203. // #13713
  36204. M=M+1
  36205. //vv push_d_to_stack
  36206. //vv push_constant(60)
  36207. //
  36208. //// push constant 24
  36209. //^^ push_constant(24)
  36210. // #13714
  36211. @24
  36212. // #13715
  36213. D=A
  36214. //^^ push_d_to_stack
  36215. // #13716
  36216. @SP
  36217. // #13717
  36218. A=M
  36219. // #13718
  36220. M=D
  36221. // #13719
  36222. @SP
  36223. // #13720
  36224. M=M+1
  36225. //vv push_d_to_stack
  36226. //vv push_constant(24)
  36227. //
  36228. //// push constant 24
  36229. //^^ push_constant(24)
  36230. // #13721
  36231. @24
  36232. // #13722
  36233. D=A
  36234. //^^ push_d_to_stack
  36235. // #13723
  36236. @SP
  36237. // #13724
  36238. A=M
  36239. // #13725
  36240. M=D
  36241. // #13726
  36242. @SP
  36243. // #13727
  36244. M=M+1
  36245. //vv push_d_to_stack
  36246. //vv push_constant(24)
  36247. //
  36248. //// push constant 24
  36249. //^^ push_constant(24)
  36250. // #13728
  36251. @24
  36252. // #13729
  36253. D=A
  36254. //^^ push_d_to_stack
  36255. // #13730
  36256. @SP
  36257. // #13731
  36258. A=M
  36259. // #13732
  36260. M=D
  36261. // #13733
  36262. @SP
  36263. // #13734
  36264. M=M+1
  36265. //vv push_d_to_stack
  36266. //vv push_constant(24)
  36267. //
  36268. //// push constant 24
  36269. //^^ push_constant(24)
  36270. // #13735
  36271. @24
  36272. // #13736
  36273. D=A
  36274. //^^ push_d_to_stack
  36275. // #13737
  36276. @SP
  36277. // #13738
  36278. A=M
  36279. // #13739
  36280. M=D
  36281. // #13740
  36282. @SP
  36283. // #13741
  36284. M=M+1
  36285. //vv push_d_to_stack
  36286. //vv push_constant(24)
  36287. //
  36288. //// push constant 24
  36289. //^^ push_constant(24)
  36290. // #13742
  36291. @24
  36292. // #13743
  36293. D=A
  36294. //^^ push_d_to_stack
  36295. // #13744
  36296. @SP
  36297. // #13745
  36298. A=M
  36299. // #13746
  36300. M=D
  36301. // #13747
  36302. @SP
  36303. // #13748
  36304. M=M+1
  36305. //vv push_d_to_stack
  36306. //vv push_constant(24)
  36307. //
  36308. //// push constant 27
  36309. //^^ push_constant(27)
  36310. // #13749
  36311. @27
  36312. // #13750
  36313. D=A
  36314. //^^ push_d_to_stack
  36315. // #13751
  36316. @SP
  36317. // #13752
  36318. A=M
  36319. // #13753
  36320. M=D
  36321. // #13754
  36322. @SP
  36323. // #13755
  36324. M=M+1
  36325. //vv push_d_to_stack
  36326. //vv push_constant(27)
  36327. //
  36328. //// push constant 27
  36329. //^^ push_constant(27)
  36330. // #13756
  36331. @27
  36332. // #13757
  36333. D=A
  36334. //^^ push_d_to_stack
  36335. // #13758
  36336. @SP
  36337. // #13759
  36338. A=M
  36339. // #13760
  36340. M=D
  36341. // #13761
  36342. @SP
  36343. // #13762
  36344. M=M+1
  36345. //vv push_d_to_stack
  36346. //vv push_constant(27)
  36347. //
  36348. //// push constant 14
  36349. //^^ push_constant(14)
  36350. // #13763
  36351. @14
  36352. // #13764
  36353. D=A
  36354. //^^ push_d_to_stack
  36355. // #13765
  36356. @SP
  36357. // #13766
  36358. A=M
  36359. // #13767
  36360. M=D
  36361. // #13768
  36362. @SP
  36363. // #13769
  36364. M=M+1
  36365. //vv push_d_to_stack
  36366. //vv push_constant(14)
  36367. //
  36368. //// push constant 0
  36369. //^^ push_constant(0)
  36370. // #13770
  36371. @0
  36372. // #13771
  36373. D=A
  36374. //^^ push_d_to_stack
  36375. // #13772
  36376. @SP
  36377. // #13773
  36378. A=M
  36379. // #13774
  36380. M=D
  36381. // #13775
  36382. @SP
  36383. // #13776
  36384. M=M+1
  36385. //vv push_d_to_stack
  36386. //vv push_constant(0)
  36387. //
  36388. //// push constant 0
  36389. //^^ push_constant(0)
  36390. // #13777
  36391. @0
  36392. // #13778
  36393. D=A
  36394. //^^ push_d_to_stack
  36395. // #13779
  36396. @SP
  36397. // #13780
  36398. A=M
  36399. // #13781
  36400. M=D
  36401. // #13782
  36402. @SP
  36403. // #13783
  36404. M=M+1
  36405. //vv push_d_to_stack
  36406. //vv push_constant(0)
  36407. //
  36408. //// call Output.create 12
  36409. //^^ push_constant(RET_ADDR_118)
  36410. // #13784
  36411. @RET_ADDR_118
  36412. // #13785
  36413. D=A
  36414. //^^ push_d_to_stack
  36415. // #13786
  36416. @SP
  36417. // #13787
  36418. A=M
  36419. // #13788
  36420. M=D
  36421. // #13789
  36422. @SP
  36423. // #13790
  36424. M=M+1
  36425. //vv push_d_to_stack
  36426. //vv push_constant(RET_ADDR_118)
  36427. //push return-address
  36428. // #13791
  36429. @LCL
  36430. // #13792
  36431. D=M
  36432. //^^ push_d_to_stack
  36433. // #13793
  36434. @SP
  36435. // #13794
  36436. A=M
  36437. // #13795
  36438. M=D
  36439. // #13796
  36440. @SP
  36441. // #13797
  36442. M=M+1
  36443. //vv push_d_to_stack
  36444. //push LCL
  36445. // #13798
  36446. @ARG
  36447. // #13799
  36448. D=M
  36449. //^^ push_d_to_stack
  36450. // #13800
  36451. @SP
  36452. // #13801
  36453. A=M
  36454. // #13802
  36455. M=D
  36456. // #13803
  36457. @SP
  36458. // #13804
  36459. M=M+1
  36460. //vv push_d_to_stack
  36461. //push ARG
  36462. // #13805
  36463. @THIS
  36464. // #13806
  36465. D=M
  36466. //^^ push_d_to_stack
  36467. // #13807
  36468. @SP
  36469. // #13808
  36470. A=M
  36471. // #13809
  36472. M=D
  36473. // #13810
  36474. @SP
  36475. // #13811
  36476. M=M+1
  36477. //vv push_d_to_stack
  36478. //push THIS
  36479. // #13812
  36480. @THAT
  36481. // #13813
  36482. D=M
  36483. //^^ push_d_to_stack
  36484. // #13814
  36485. @SP
  36486. // #13815
  36487. A=M
  36488. // #13816
  36489. M=D
  36490. // #13817
  36491. @SP
  36492. // #13818
  36493. M=M+1
  36494. //vv push_d_to_stack
  36495. //push THAT
  36496. // #13819
  36497. @SP
  36498. // #13820
  36499. D=M
  36500. // #13821
  36501. @ARG
  36502. // #13822
  36503. M=D
  36504. // #13823
  36505. @17
  36506. // #13824
  36507. D=A
  36508. // #13825
  36509. @ARG
  36510. // #13826
  36511. M=M-D // ARG = SP - args - 5
  36512. // #13827
  36513. @SP
  36514. // #13828
  36515. D=M
  36516. // #13829
  36517. @LCL
  36518. // #13830
  36519. M=D // LCL = SP
  36520. // #13831
  36521. @Output.create
  36522. // #13832
  36523. 0;JMP
  36524. (RET_ADDR_118)
  36525. //
  36526. //// pop temp 0
  36527. //^^ pop_to_loc{5)
  36528. //^^ pop_stack_to_d
  36529. // #13833
  36530. @SP
  36531. // #13834
  36532. M=M-1
  36533. // #13835
  36534. A=M
  36535. // #13836
  36536. D=M
  36537. //vv pop_stack_to_d
  36538. // #13837
  36539. @5
  36540. // #13838
  36541. M=D
  36542. //vv pop_to_loc{5)
  36543. //
  36544. //// push constant 75
  36545. //^^ push_constant(75)
  36546. // #13839
  36547. @75
  36548. // #13840
  36549. D=A
  36550. //^^ push_d_to_stack
  36551. // #13841
  36552. @SP
  36553. // #13842
  36554. A=M
  36555. // #13843
  36556. M=D
  36557. // #13844
  36558. @SP
  36559. // #13845
  36560. M=M+1
  36561. //vv push_d_to_stack
  36562. //vv push_constant(75)
  36563. //
  36564. //// push constant 51
  36565. //^^ push_constant(51)
  36566. // #13846
  36567. @51
  36568. // #13847
  36569. D=A
  36570. //^^ push_d_to_stack
  36571. // #13848
  36572. @SP
  36573. // #13849
  36574. A=M
  36575. // #13850
  36576. M=D
  36577. // #13851
  36578. @SP
  36579. // #13852
  36580. M=M+1
  36581. //vv push_d_to_stack
  36582. //vv push_constant(51)
  36583. //
  36584. //// push constant 51
  36585. //^^ push_constant(51)
  36586. // #13853
  36587. @51
  36588. // #13854
  36589. D=A
  36590. //^^ push_d_to_stack
  36591. // #13855
  36592. @SP
  36593. // #13856
  36594. A=M
  36595. // #13857
  36596. M=D
  36597. // #13858
  36598. @SP
  36599. // #13859
  36600. M=M+1
  36601. //vv push_d_to_stack
  36602. //vv push_constant(51)
  36603. //
  36604. //// push constant 51
  36605. //^^ push_constant(51)
  36606. // #13860
  36607. @51
  36608. // #13861
  36609. D=A
  36610. //^^ push_d_to_stack
  36611. // #13862
  36612. @SP
  36613. // #13863
  36614. A=M
  36615. // #13864
  36616. M=D
  36617. // #13865
  36618. @SP
  36619. // #13866
  36620. M=M+1
  36621. //vv push_d_to_stack
  36622. //vv push_constant(51)
  36623. //
  36624. //// push constant 27
  36625. //^^ push_constant(27)
  36626. // #13867
  36627. @27
  36628. // #13868
  36629. D=A
  36630. //^^ push_d_to_stack
  36631. // #13869
  36632. @SP
  36633. // #13870
  36634. A=M
  36635. // #13871
  36636. M=D
  36637. // #13872
  36638. @SP
  36639. // #13873
  36640. M=M+1
  36641. //vv push_d_to_stack
  36642. //vv push_constant(27)
  36643. //
  36644. //// push constant 15
  36645. //^^ push_constant(15)
  36646. // #13874
  36647. @15
  36648. // #13875
  36649. D=A
  36650. //^^ push_d_to_stack
  36651. // #13876
  36652. @SP
  36653. // #13877
  36654. A=M
  36655. // #13878
  36656. M=D
  36657. // #13879
  36658. @SP
  36659. // #13880
  36660. M=M+1
  36661. //vv push_d_to_stack
  36662. //vv push_constant(15)
  36663. //
  36664. //// push constant 27
  36665. //^^ push_constant(27)
  36666. // #13881
  36667. @27
  36668. // #13882
  36669. D=A
  36670. //^^ push_d_to_stack
  36671. // #13883
  36672. @SP
  36673. // #13884
  36674. A=M
  36675. // #13885
  36676. M=D
  36677. // #13886
  36678. @SP
  36679. // #13887
  36680. M=M+1
  36681. //vv push_d_to_stack
  36682. //vv push_constant(27)
  36683. //
  36684. //// push constant 51
  36685. //^^ push_constant(51)
  36686. // #13888
  36687. @51
  36688. // #13889
  36689. D=A
  36690. //^^ push_d_to_stack
  36691. // #13890
  36692. @SP
  36693. // #13891
  36694. A=M
  36695. // #13892
  36696. M=D
  36697. // #13893
  36698. @SP
  36699. // #13894
  36700. M=M+1
  36701. //vv push_d_to_stack
  36702. //vv push_constant(51)
  36703. //
  36704. //// push constant 51
  36705. //^^ push_constant(51)
  36706. // #13895
  36707. @51
  36708. // #13896
  36709. D=A
  36710. //^^ push_d_to_stack
  36711. // #13897
  36712. @SP
  36713. // #13898
  36714. A=M
  36715. // #13899
  36716. M=D
  36717. // #13900
  36718. @SP
  36719. // #13901
  36720. M=M+1
  36721. //vv push_d_to_stack
  36722. //vv push_constant(51)
  36723. //
  36724. //// push constant 51
  36725. //^^ push_constant(51)
  36726. // #13902
  36727. @51
  36728. // #13903
  36729. D=A
  36730. //^^ push_d_to_stack
  36731. // #13904
  36732. @SP
  36733. // #13905
  36734. A=M
  36735. // #13906
  36736. M=D
  36737. // #13907
  36738. @SP
  36739. // #13908
  36740. M=M+1
  36741. //vv push_d_to_stack
  36742. //vv push_constant(51)
  36743. //
  36744. //// push constant 0
  36745. //^^ push_constant(0)
  36746. // #13909
  36747. @0
  36748. // #13910
  36749. D=A
  36750. //^^ push_d_to_stack
  36751. // #13911
  36752. @SP
  36753. // #13912
  36754. A=M
  36755. // #13913
  36756. M=D
  36757. // #13914
  36758. @SP
  36759. // #13915
  36760. M=M+1
  36761. //vv push_d_to_stack
  36762. //vv push_constant(0)
  36763. //
  36764. //// push constant 0
  36765. //^^ push_constant(0)
  36766. // #13916
  36767. @0
  36768. // #13917
  36769. D=A
  36770. //^^ push_d_to_stack
  36771. // #13918
  36772. @SP
  36773. // #13919
  36774. A=M
  36775. // #13920
  36776. M=D
  36777. // #13921
  36778. @SP
  36779. // #13922
  36780. M=M+1
  36781. //vv push_d_to_stack
  36782. //vv push_constant(0)
  36783. //
  36784. //// call Output.create 12
  36785. //^^ push_constant(RET_ADDR_119)
  36786. // #13923
  36787. @RET_ADDR_119
  36788. // #13924
  36789. D=A
  36790. //^^ push_d_to_stack
  36791. // #13925
  36792. @SP
  36793. // #13926
  36794. A=M
  36795. // #13927
  36796. M=D
  36797. // #13928
  36798. @SP
  36799. // #13929
  36800. M=M+1
  36801. //vv push_d_to_stack
  36802. //vv push_constant(RET_ADDR_119)
  36803. //push return-address
  36804. // #13930
  36805. @LCL
  36806. // #13931
  36807. D=M
  36808. //^^ push_d_to_stack
  36809. // #13932
  36810. @SP
  36811. // #13933
  36812. A=M
  36813. // #13934
  36814. M=D
  36815. // #13935
  36816. @SP
  36817. // #13936
  36818. M=M+1
  36819. //vv push_d_to_stack
  36820. //push LCL
  36821. // #13937
  36822. @ARG
  36823. // #13938
  36824. D=M
  36825. //^^ push_d_to_stack
  36826. // #13939
  36827. @SP
  36828. // #13940
  36829. A=M
  36830. // #13941
  36831. M=D
  36832. // #13942
  36833. @SP
  36834. // #13943
  36835. M=M+1
  36836. //vv push_d_to_stack
  36837. //push ARG
  36838. // #13944
  36839. @THIS
  36840. // #13945
  36841. D=M
  36842. //^^ push_d_to_stack
  36843. // #13946
  36844. @SP
  36845. // #13947
  36846. A=M
  36847. // #13948
  36848. M=D
  36849. // #13949
  36850. @SP
  36851. // #13950
  36852. M=M+1
  36853. //vv push_d_to_stack
  36854. //push THIS
  36855. // #13951
  36856. @THAT
  36857. // #13952
  36858. D=M
  36859. //^^ push_d_to_stack
  36860. // #13953
  36861. @SP
  36862. // #13954
  36863. A=M
  36864. // #13955
  36865. M=D
  36866. // #13956
  36867. @SP
  36868. // #13957
  36869. M=M+1
  36870. //vv push_d_to_stack
  36871. //push THAT
  36872. // #13958
  36873. @SP
  36874. // #13959
  36875. D=M
  36876. // #13960
  36877. @ARG
  36878. // #13961
  36879. M=D
  36880. // #13962
  36881. @17
  36882. // #13963
  36883. D=A
  36884. // #13964
  36885. @ARG
  36886. // #13965
  36887. M=M-D // ARG = SP - args - 5
  36888. // #13966
  36889. @SP
  36890. // #13967
  36891. D=M
  36892. // #13968
  36893. @LCL
  36894. // #13969
  36895. M=D // LCL = SP
  36896. // #13970
  36897. @Output.create
  36898. // #13971
  36899. 0;JMP
  36900. (RET_ADDR_119)
  36901. //
  36902. //// pop temp 0
  36903. //^^ pop_to_loc{5)
  36904. //^^ pop_stack_to_d
  36905. // #13972
  36906. @SP
  36907. // #13973
  36908. M=M-1
  36909. // #13974
  36910. A=M
  36911. // #13975
  36912. D=M
  36913. //vv pop_stack_to_d
  36914. // #13976
  36915. @5
  36916. // #13977
  36917. M=D
  36918. //vv pop_to_loc{5)
  36919. //
  36920. //// push constant 76
  36921. //^^ push_constant(76)
  36922. // #13978
  36923. @76
  36924. // #13979
  36925. D=A
  36926. //^^ push_d_to_stack
  36927. // #13980
  36928. @SP
  36929. // #13981
  36930. A=M
  36931. // #13982
  36932. M=D
  36933. // #13983
  36934. @SP
  36935. // #13984
  36936. M=M+1
  36937. //vv push_d_to_stack
  36938. //vv push_constant(76)
  36939. //
  36940. //// push constant 3
  36941. //^^ push_constant(3)
  36942. // #13985
  36943. @3
  36944. // #13986
  36945. D=A
  36946. //^^ push_d_to_stack
  36947. // #13987
  36948. @SP
  36949. // #13988
  36950. A=M
  36951. // #13989
  36952. M=D
  36953. // #13990
  36954. @SP
  36955. // #13991
  36956. M=M+1
  36957. //vv push_d_to_stack
  36958. //vv push_constant(3)
  36959. //
  36960. //// push constant 3
  36961. //^^ push_constant(3)
  36962. // #13992
  36963. @3
  36964. // #13993
  36965. D=A
  36966. //^^ push_d_to_stack
  36967. // #13994
  36968. @SP
  36969. // #13995
  36970. A=M
  36971. // #13996
  36972. M=D
  36973. // #13997
  36974. @SP
  36975. // #13998
  36976. M=M+1
  36977. //vv push_d_to_stack
  36978. //vv push_constant(3)
  36979. //
  36980. //// push constant 3
  36981. //^^ push_constant(3)
  36982. // #13999
  36983. @3
  36984. // #14000
  36985. D=A
  36986. //^^ push_d_to_stack
  36987. // #14001
  36988. @SP
  36989. // #14002
  36990. A=M
  36991. // #14003
  36992. M=D
  36993. // #14004
  36994. @SP
  36995. // #14005
  36996. M=M+1
  36997. //vv push_d_to_stack
  36998. //vv push_constant(3)
  36999. //
  37000. //// push constant 3
  37001. //^^ push_constant(3)
  37002. // #14006
  37003. @3
  37004. // #14007
  37005. D=A
  37006. //^^ push_d_to_stack
  37007. // #14008
  37008. @SP
  37009. // #14009
  37010. A=M
  37011. // #14010
  37012. M=D
  37013. // #14011
  37014. @SP
  37015. // #14012
  37016. M=M+1
  37017. //vv push_d_to_stack
  37018. //vv push_constant(3)
  37019. //
  37020. //// push constant 3
  37021. //^^ push_constant(3)
  37022. // #14013
  37023. @3
  37024. // #14014
  37025. D=A
  37026. //^^ push_d_to_stack
  37027. // #14015
  37028. @SP
  37029. // #14016
  37030. A=M
  37031. // #14017
  37032. M=D
  37033. // #14018
  37034. @SP
  37035. // #14019
  37036. M=M+1
  37037. //vv push_d_to_stack
  37038. //vv push_constant(3)
  37039. //
  37040. //// push constant 3
  37041. //^^ push_constant(3)
  37042. // #14020
  37043. @3
  37044. // #14021
  37045. D=A
  37046. //^^ push_d_to_stack
  37047. // #14022
  37048. @SP
  37049. // #14023
  37050. A=M
  37051. // #14024
  37052. M=D
  37053. // #14025
  37054. @SP
  37055. // #14026
  37056. M=M+1
  37057. //vv push_d_to_stack
  37058. //vv push_constant(3)
  37059. //
  37060. //// push constant 35
  37061. //^^ push_constant(35)
  37062. // #14027
  37063. @35
  37064. // #14028
  37065. D=A
  37066. //^^ push_d_to_stack
  37067. // #14029
  37068. @SP
  37069. // #14030
  37070. A=M
  37071. // #14031
  37072. M=D
  37073. // #14032
  37074. @SP
  37075. // #14033
  37076. M=M+1
  37077. //vv push_d_to_stack
  37078. //vv push_constant(35)
  37079. //
  37080. //// push constant 51
  37081. //^^ push_constant(51)
  37082. // #14034
  37083. @51
  37084. // #14035
  37085. D=A
  37086. //^^ push_d_to_stack
  37087. // #14036
  37088. @SP
  37089. // #14037
  37090. A=M
  37091. // #14038
  37092. M=D
  37093. // #14039
  37094. @SP
  37095. // #14040
  37096. M=M+1
  37097. //vv push_d_to_stack
  37098. //vv push_constant(51)
  37099. //
  37100. //// push constant 63
  37101. //^^ push_constant(63)
  37102. // #14041
  37103. @63
  37104. // #14042
  37105. D=A
  37106. //^^ push_d_to_stack
  37107. // #14043
  37108. @SP
  37109. // #14044
  37110. A=M
  37111. // #14045
  37112. M=D
  37113. // #14046
  37114. @SP
  37115. // #14047
  37116. M=M+1
  37117. //vv push_d_to_stack
  37118. //vv push_constant(63)
  37119. //
  37120. //// push constant 0
  37121. //^^ push_constant(0)
  37122. // #14048
  37123. @0
  37124. // #14049
  37125. D=A
  37126. //^^ push_d_to_stack
  37127. // #14050
  37128. @SP
  37129. // #14051
  37130. A=M
  37131. // #14052
  37132. M=D
  37133. // #14053
  37134. @SP
  37135. // #14054
  37136. M=M+1
  37137. //vv push_d_to_stack
  37138. //vv push_constant(0)
  37139. //
  37140. //// push constant 0
  37141. //^^ push_constant(0)
  37142. // #14055
  37143. @0
  37144. // #14056
  37145. D=A
  37146. //^^ push_d_to_stack
  37147. // #14057
  37148. @SP
  37149. // #14058
  37150. A=M
  37151. // #14059
  37152. M=D
  37153. // #14060
  37154. @SP
  37155. // #14061
  37156. M=M+1
  37157. //vv push_d_to_stack
  37158. //vv push_constant(0)
  37159. //
  37160. //// call Output.create 12
  37161. //^^ push_constant(RET_ADDR_120)
  37162. // #14062
  37163. @RET_ADDR_120
  37164. // #14063
  37165. D=A
  37166. //^^ push_d_to_stack
  37167. // #14064
  37168. @SP
  37169. // #14065
  37170. A=M
  37171. // #14066
  37172. M=D
  37173. // #14067
  37174. @SP
  37175. // #14068
  37176. M=M+1
  37177. //vv push_d_to_stack
  37178. //vv push_constant(RET_ADDR_120)
  37179. //push return-address
  37180. // #14069
  37181. @LCL
  37182. // #14070
  37183. D=M
  37184. //^^ push_d_to_stack
  37185. // #14071
  37186. @SP
  37187. // #14072
  37188. A=M
  37189. // #14073
  37190. M=D
  37191. // #14074
  37192. @SP
  37193. // #14075
  37194. M=M+1
  37195. //vv push_d_to_stack
  37196. //push LCL
  37197. // #14076
  37198. @ARG
  37199. // #14077
  37200. D=M
  37201. //^^ push_d_to_stack
  37202. // #14078
  37203. @SP
  37204. // #14079
  37205. A=M
  37206. // #14080
  37207. M=D
  37208. // #14081
  37209. @SP
  37210. // #14082
  37211. M=M+1
  37212. //vv push_d_to_stack
  37213. //push ARG
  37214. // #14083
  37215. @THIS
  37216. // #14084
  37217. D=M
  37218. //^^ push_d_to_stack
  37219. // #14085
  37220. @SP
  37221. // #14086
  37222. A=M
  37223. // #14087
  37224. M=D
  37225. // #14088
  37226. @SP
  37227. // #14089
  37228. M=M+1
  37229. //vv push_d_to_stack
  37230. //push THIS
  37231. // #14090
  37232. @THAT
  37233. // #14091
  37234. D=M
  37235. //^^ push_d_to_stack
  37236. // #14092
  37237. @SP
  37238. // #14093
  37239. A=M
  37240. // #14094
  37241. M=D
  37242. // #14095
  37243. @SP
  37244. // #14096
  37245. M=M+1
  37246. //vv push_d_to_stack
  37247. //push THAT
  37248. // #14097
  37249. @SP
  37250. // #14098
  37251. D=M
  37252. // #14099
  37253. @ARG
  37254. // #14100
  37255. M=D
  37256. // #14101
  37257. @17
  37258. // #14102
  37259. D=A
  37260. // #14103
  37261. @ARG
  37262. // #14104
  37263. M=M-D // ARG = SP - args - 5
  37264. // #14105
  37265. @SP
  37266. // #14106
  37267. D=M
  37268. // #14107
  37269. @LCL
  37270. // #14108
  37271. M=D // LCL = SP
  37272. // #14109
  37273. @Output.create
  37274. // #14110
  37275. 0;JMP
  37276. (RET_ADDR_120)
  37277. //
  37278. //// pop temp 0
  37279. //^^ pop_to_loc{5)
  37280. //^^ pop_stack_to_d
  37281. // #14111
  37282. @SP
  37283. // #14112
  37284. M=M-1
  37285. // #14113
  37286. A=M
  37287. // #14114
  37288. D=M
  37289. //vv pop_stack_to_d
  37290. // #14115
  37291. @5
  37292. // #14116
  37293. M=D
  37294. //vv pop_to_loc{5)
  37295. //
  37296. //// push constant 77
  37297. //^^ push_constant(77)
  37298. // #14117
  37299. @77
  37300. // #14118
  37301. D=A
  37302. //^^ push_d_to_stack
  37303. // #14119
  37304. @SP
  37305. // #14120
  37306. A=M
  37307. // #14121
  37308. M=D
  37309. // #14122
  37310. @SP
  37311. // #14123
  37312. M=M+1
  37313. //vv push_d_to_stack
  37314. //vv push_constant(77)
  37315. //
  37316. //// push constant 33
  37317. //^^ push_constant(33)
  37318. // #14124
  37319. @33
  37320. // #14125
  37321. D=A
  37322. //^^ push_d_to_stack
  37323. // #14126
  37324. @SP
  37325. // #14127
  37326. A=M
  37327. // #14128
  37328. M=D
  37329. // #14129
  37330. @SP
  37331. // #14130
  37332. M=M+1
  37333. //vv push_d_to_stack
  37334. //vv push_constant(33)
  37335. //
  37336. //// push constant 51
  37337. //^^ push_constant(51)
  37338. // #14131
  37339. @51
  37340. // #14132
  37341. D=A
  37342. //^^ push_d_to_stack
  37343. // #14133
  37344. @SP
  37345. // #14134
  37346. A=M
  37347. // #14135
  37348. M=D
  37349. // #14136
  37350. @SP
  37351. // #14137
  37352. M=M+1
  37353. //vv push_d_to_stack
  37354. //vv push_constant(51)
  37355. //
  37356. //// push constant 63
  37357. //^^ push_constant(63)
  37358. // #14138
  37359. @63
  37360. // #14139
  37361. D=A
  37362. //^^ push_d_to_stack
  37363. // #14140
  37364. @SP
  37365. // #14141
  37366. A=M
  37367. // #14142
  37368. M=D
  37369. // #14143
  37370. @SP
  37371. // #14144
  37372. M=M+1
  37373. //vv push_d_to_stack
  37374. //vv push_constant(63)
  37375. //
  37376. //// push constant 63
  37377. //^^ push_constant(63)
  37378. // #14145
  37379. @63
  37380. // #14146
  37381. D=A
  37382. //^^ push_d_to_stack
  37383. // #14147
  37384. @SP
  37385. // #14148
  37386. A=M
  37387. // #14149
  37388. M=D
  37389. // #14150
  37390. @SP
  37391. // #14151
  37392. M=M+1
  37393. //vv push_d_to_stack
  37394. //vv push_constant(63)
  37395. //
  37396. //// push constant 51
  37397. //^^ push_constant(51)
  37398. // #14152
  37399. @51
  37400. // #14153
  37401. D=A
  37402. //^^ push_d_to_stack
  37403. // #14154
  37404. @SP
  37405. // #14155
  37406. A=M
  37407. // #14156
  37408. M=D
  37409. // #14157
  37410. @SP
  37411. // #14158
  37412. M=M+1
  37413. //vv push_d_to_stack
  37414. //vv push_constant(51)
  37415. //
  37416. //// push constant 51
  37417. //^^ push_constant(51)
  37418. // #14159
  37419. @51
  37420. // #14160
  37421. D=A
  37422. //^^ push_d_to_stack
  37423. // #14161
  37424. @SP
  37425. // #14162
  37426. A=M
  37427. // #14163
  37428. M=D
  37429. // #14164
  37430. @SP
  37431. // #14165
  37432. M=M+1
  37433. //vv push_d_to_stack
  37434. //vv push_constant(51)
  37435. //
  37436. //// push constant 51
  37437. //^^ push_constant(51)
  37438. // #14166
  37439. @51
  37440. // #14167
  37441. D=A
  37442. //^^ push_d_to_stack
  37443. // #14168
  37444. @SP
  37445. // #14169
  37446. A=M
  37447. // #14170
  37448. M=D
  37449. // #14171
  37450. @SP
  37451. // #14172
  37452. M=M+1
  37453. //vv push_d_to_stack
  37454. //vv push_constant(51)
  37455. //
  37456. //// push constant 51
  37457. //^^ push_constant(51)
  37458. // #14173
  37459. @51
  37460. // #14174
  37461. D=A
  37462. //^^ push_d_to_stack
  37463. // #14175
  37464. @SP
  37465. // #14176
  37466. A=M
  37467. // #14177
  37468. M=D
  37469. // #14178
  37470. @SP
  37471. // #14179
  37472. M=M+1
  37473. //vv push_d_to_stack
  37474. //vv push_constant(51)
  37475. //
  37476. //// push constant 51
  37477. //^^ push_constant(51)
  37478. // #14180
  37479. @51
  37480. // #14181
  37481. D=A
  37482. //^^ push_d_to_stack
  37483. // #14182
  37484. @SP
  37485. // #14183
  37486. A=M
  37487. // #14184
  37488. M=D
  37489. // #14185
  37490. @SP
  37491. // #14186
  37492. M=M+1
  37493. //vv push_d_to_stack
  37494. //vv push_constant(51)
  37495. //
  37496. //// push constant 0
  37497. //^^ push_constant(0)
  37498. // #14187
  37499. @0
  37500. // #14188
  37501. D=A
  37502. //^^ push_d_to_stack
  37503. // #14189
  37504. @SP
  37505. // #14190
  37506. A=M
  37507. // #14191
  37508. M=D
  37509. // #14192
  37510. @SP
  37511. // #14193
  37512. M=M+1
  37513. //vv push_d_to_stack
  37514. //vv push_constant(0)
  37515. //
  37516. //// push constant 0
  37517. //^^ push_constant(0)
  37518. // #14194
  37519. @0
  37520. // #14195
  37521. D=A
  37522. //^^ push_d_to_stack
  37523. // #14196
  37524. @SP
  37525. // #14197
  37526. A=M
  37527. // #14198
  37528. M=D
  37529. // #14199
  37530. @SP
  37531. // #14200
  37532. M=M+1
  37533. //vv push_d_to_stack
  37534. //vv push_constant(0)
  37535. //
  37536. //// call Output.create 12
  37537. //^^ push_constant(RET_ADDR_121)
  37538. // #14201
  37539. @RET_ADDR_121
  37540. // #14202
  37541. D=A
  37542. //^^ push_d_to_stack
  37543. // #14203
  37544. @SP
  37545. // #14204
  37546. A=M
  37547. // #14205
  37548. M=D
  37549. // #14206
  37550. @SP
  37551. // #14207
  37552. M=M+1
  37553. //vv push_d_to_stack
  37554. //vv push_constant(RET_ADDR_121)
  37555. //push return-address
  37556. // #14208
  37557. @LCL
  37558. // #14209
  37559. D=M
  37560. //^^ push_d_to_stack
  37561. // #14210
  37562. @SP
  37563. // #14211
  37564. A=M
  37565. // #14212
  37566. M=D
  37567. // #14213
  37568. @SP
  37569. // #14214
  37570. M=M+1
  37571. //vv push_d_to_stack
  37572. //push LCL
  37573. // #14215
  37574. @ARG
  37575. // #14216
  37576. D=M
  37577. //^^ push_d_to_stack
  37578. // #14217
  37579. @SP
  37580. // #14218
  37581. A=M
  37582. // #14219
  37583. M=D
  37584. // #14220
  37585. @SP
  37586. // #14221
  37587. M=M+1
  37588. //vv push_d_to_stack
  37589. //push ARG
  37590. // #14222
  37591. @THIS
  37592. // #14223
  37593. D=M
  37594. //^^ push_d_to_stack
  37595. // #14224
  37596. @SP
  37597. // #14225
  37598. A=M
  37599. // #14226
  37600. M=D
  37601. // #14227
  37602. @SP
  37603. // #14228
  37604. M=M+1
  37605. //vv push_d_to_stack
  37606. //push THIS
  37607. // #14229
  37608. @THAT
  37609. // #14230
  37610. D=M
  37611. //^^ push_d_to_stack
  37612. // #14231
  37613. @SP
  37614. // #14232
  37615. A=M
  37616. // #14233
  37617. M=D
  37618. // #14234
  37619. @SP
  37620. // #14235
  37621. M=M+1
  37622. //vv push_d_to_stack
  37623. //push THAT
  37624. // #14236
  37625. @SP
  37626. // #14237
  37627. D=M
  37628. // #14238
  37629. @ARG
  37630. // #14239
  37631. M=D
  37632. // #14240
  37633. @17
  37634. // #14241
  37635. D=A
  37636. // #14242
  37637. @ARG
  37638. // #14243
  37639. M=M-D // ARG = SP - args - 5
  37640. // #14244
  37641. @SP
  37642. // #14245
  37643. D=M
  37644. // #14246
  37645. @LCL
  37646. // #14247
  37647. M=D // LCL = SP
  37648. // #14248
  37649. @Output.create
  37650. // #14249
  37651. 0;JMP
  37652. (RET_ADDR_121)
  37653. //
  37654. //// pop temp 0
  37655. //^^ pop_to_loc{5)
  37656. //^^ pop_stack_to_d
  37657. // #14250
  37658. @SP
  37659. // #14251
  37660. M=M-1
  37661. // #14252
  37662. A=M
  37663. // #14253
  37664. D=M
  37665. //vv pop_stack_to_d
  37666. // #14254
  37667. @5
  37668. // #14255
  37669. M=D
  37670. //vv pop_to_loc{5)
  37671. //
  37672. //// push constant 78
  37673. //^^ push_constant(78)
  37674. // #14256
  37675. @78
  37676. // #14257
  37677. D=A
  37678. //^^ push_d_to_stack
  37679. // #14258
  37680. @SP
  37681. // #14259
  37682. A=M
  37683. // #14260
  37684. M=D
  37685. // #14261
  37686. @SP
  37687. // #14262
  37688. M=M+1
  37689. //vv push_d_to_stack
  37690. //vv push_constant(78)
  37691. //
  37692. //// push constant 51
  37693. //^^ push_constant(51)
  37694. // #14263
  37695. @51
  37696. // #14264
  37697. D=A
  37698. //^^ push_d_to_stack
  37699. // #14265
  37700. @SP
  37701. // #14266
  37702. A=M
  37703. // #14267
  37704. M=D
  37705. // #14268
  37706. @SP
  37707. // #14269
  37708. M=M+1
  37709. //vv push_d_to_stack
  37710. //vv push_constant(51)
  37711. //
  37712. //// push constant 51
  37713. //^^ push_constant(51)
  37714. // #14270
  37715. @51
  37716. // #14271
  37717. D=A
  37718. //^^ push_d_to_stack
  37719. // #14272
  37720. @SP
  37721. // #14273
  37722. A=M
  37723. // #14274
  37724. M=D
  37725. // #14275
  37726. @SP
  37727. // #14276
  37728. M=M+1
  37729. //vv push_d_to_stack
  37730. //vv push_constant(51)
  37731. //
  37732. //// push constant 55
  37733. //^^ push_constant(55)
  37734. // #14277
  37735. @55
  37736. // #14278
  37737. D=A
  37738. //^^ push_d_to_stack
  37739. // #14279
  37740. @SP
  37741. // #14280
  37742. A=M
  37743. // #14281
  37744. M=D
  37745. // #14282
  37746. @SP
  37747. // #14283
  37748. M=M+1
  37749. //vv push_d_to_stack
  37750. //vv push_constant(55)
  37751. //
  37752. //// push constant 55
  37753. //^^ push_constant(55)
  37754. // #14284
  37755. @55
  37756. // #14285
  37757. D=A
  37758. //^^ push_d_to_stack
  37759. // #14286
  37760. @SP
  37761. // #14287
  37762. A=M
  37763. // #14288
  37764. M=D
  37765. // #14289
  37766. @SP
  37767. // #14290
  37768. M=M+1
  37769. //vv push_d_to_stack
  37770. //vv push_constant(55)
  37771. //
  37772. //// push constant 63
  37773. //^^ push_constant(63)
  37774. // #14291
  37775. @63
  37776. // #14292
  37777. D=A
  37778. //^^ push_d_to_stack
  37779. // #14293
  37780. @SP
  37781. // #14294
  37782. A=M
  37783. // #14295
  37784. M=D
  37785. // #14296
  37786. @SP
  37787. // #14297
  37788. M=M+1
  37789. //vv push_d_to_stack
  37790. //vv push_constant(63)
  37791. //
  37792. //// push constant 59
  37793. //^^ push_constant(59)
  37794. // #14298
  37795. @59
  37796. // #14299
  37797. D=A
  37798. //^^ push_d_to_stack
  37799. // #14300
  37800. @SP
  37801. // #14301
  37802. A=M
  37803. // #14302
  37804. M=D
  37805. // #14303
  37806. @SP
  37807. // #14304
  37808. M=M+1
  37809. //vv push_d_to_stack
  37810. //vv push_constant(59)
  37811. //
  37812. //// push constant 59
  37813. //^^ push_constant(59)
  37814. // #14305
  37815. @59
  37816. // #14306
  37817. D=A
  37818. //^^ push_d_to_stack
  37819. // #14307
  37820. @SP
  37821. // #14308
  37822. A=M
  37823. // #14309
  37824. M=D
  37825. // #14310
  37826. @SP
  37827. // #14311
  37828. M=M+1
  37829. //vv push_d_to_stack
  37830. //vv push_constant(59)
  37831. //
  37832. //// push constant 51
  37833. //^^ push_constant(51)
  37834. // #14312
  37835. @51
  37836. // #14313
  37837. D=A
  37838. //^^ push_d_to_stack
  37839. // #14314
  37840. @SP
  37841. // #14315
  37842. A=M
  37843. // #14316
  37844. M=D
  37845. // #14317
  37846. @SP
  37847. // #14318
  37848. M=M+1
  37849. //vv push_d_to_stack
  37850. //vv push_constant(51)
  37851. //
  37852. //// push constant 51
  37853. //^^ push_constant(51)
  37854. // #14319
  37855. @51
  37856. // #14320
  37857. D=A
  37858. //^^ push_d_to_stack
  37859. // #14321
  37860. @SP
  37861. // #14322
  37862. A=M
  37863. // #14323
  37864. M=D
  37865. // #14324
  37866. @SP
  37867. // #14325
  37868. M=M+1
  37869. //vv push_d_to_stack
  37870. //vv push_constant(51)
  37871. //
  37872. //// push constant 0
  37873. //^^ push_constant(0)
  37874. // #14326
  37875. @0
  37876. // #14327
  37877. D=A
  37878. //^^ push_d_to_stack
  37879. // #14328
  37880. @SP
  37881. // #14329
  37882. A=M
  37883. // #14330
  37884. M=D
  37885. // #14331
  37886. @SP
  37887. // #14332
  37888. M=M+1
  37889. //vv push_d_to_stack
  37890. //vv push_constant(0)
  37891. //
  37892. //// push constant 0
  37893. //^^ push_constant(0)
  37894. // #14333
  37895. @0
  37896. // #14334
  37897. D=A
  37898. //^^ push_d_to_stack
  37899. // #14335
  37900. @SP
  37901. // #14336
  37902. A=M
  37903. // #14337
  37904. M=D
  37905. // #14338
  37906. @SP
  37907. // #14339
  37908. M=M+1
  37909. //vv push_d_to_stack
  37910. //vv push_constant(0)
  37911. //
  37912. //// call Output.create 12
  37913. //^^ push_constant(RET_ADDR_122)
  37914. // #14340
  37915. @RET_ADDR_122
  37916. // #14341
  37917. D=A
  37918. //^^ push_d_to_stack
  37919. // #14342
  37920. @SP
  37921. // #14343
  37922. A=M
  37923. // #14344
  37924. M=D
  37925. // #14345
  37926. @SP
  37927. // #14346
  37928. M=M+1
  37929. //vv push_d_to_stack
  37930. //vv push_constant(RET_ADDR_122)
  37931. //push return-address
  37932. // #14347
  37933. @LCL
  37934. // #14348
  37935. D=M
  37936. //^^ push_d_to_stack
  37937. // #14349
  37938. @SP
  37939. // #14350
  37940. A=M
  37941. // #14351
  37942. M=D
  37943. // #14352
  37944. @SP
  37945. // #14353
  37946. M=M+1
  37947. //vv push_d_to_stack
  37948. //push LCL
  37949. // #14354
  37950. @ARG
  37951. // #14355
  37952. D=M
  37953. //^^ push_d_to_stack
  37954. // #14356
  37955. @SP
  37956. // #14357
  37957. A=M
  37958. // #14358
  37959. M=D
  37960. // #14359
  37961. @SP
  37962. // #14360
  37963. M=M+1
  37964. //vv push_d_to_stack
  37965. //push ARG
  37966. // #14361
  37967. @THIS
  37968. // #14362
  37969. D=M
  37970. //^^ push_d_to_stack
  37971. // #14363
  37972. @SP
  37973. // #14364
  37974. A=M
  37975. // #14365
  37976. M=D
  37977. // #14366
  37978. @SP
  37979. // #14367
  37980. M=M+1
  37981. //vv push_d_to_stack
  37982. //push THIS
  37983. // #14368
  37984. @THAT
  37985. // #14369
  37986. D=M
  37987. //^^ push_d_to_stack
  37988. // #14370
  37989. @SP
  37990. // #14371
  37991. A=M
  37992. // #14372
  37993. M=D
  37994. // #14373
  37995. @SP
  37996. // #14374
  37997. M=M+1
  37998. //vv push_d_to_stack
  37999. //push THAT
  38000. // #14375
  38001. @SP
  38002. // #14376
  38003. D=M
  38004. // #14377
  38005. @ARG
  38006. // #14378
  38007. M=D
  38008. // #14379
  38009. @17
  38010. // #14380
  38011. D=A
  38012. // #14381
  38013. @ARG
  38014. // #14382
  38015. M=M-D // ARG = SP - args - 5
  38016. // #14383
  38017. @SP
  38018. // #14384
  38019. D=M
  38020. // #14385
  38021. @LCL
  38022. // #14386
  38023. M=D // LCL = SP
  38024. // #14387
  38025. @Output.create
  38026. // #14388
  38027. 0;JMP
  38028. (RET_ADDR_122)
  38029. //
  38030. //// pop temp 0
  38031. //^^ pop_to_loc{5)
  38032. //^^ pop_stack_to_d
  38033. // #14389
  38034. @SP
  38035. // #14390
  38036. M=M-1
  38037. // #14391
  38038. A=M
  38039. // #14392
  38040. D=M
  38041. //vv pop_stack_to_d
  38042. // #14393
  38043. @5
  38044. // #14394
  38045. M=D
  38046. //vv pop_to_loc{5)
  38047. //
  38048. //// push constant 79
  38049. //^^ push_constant(79)
  38050. // #14395
  38051. @79
  38052. // #14396
  38053. D=A
  38054. //^^ push_d_to_stack
  38055. // #14397
  38056. @SP
  38057. // #14398
  38058. A=M
  38059. // #14399
  38060. M=D
  38061. // #14400
  38062. @SP
  38063. // #14401
  38064. M=M+1
  38065. //vv push_d_to_stack
  38066. //vv push_constant(79)
  38067. //
  38068. //// push constant 30
  38069. //^^ push_constant(30)
  38070. // #14402
  38071. @30
  38072. // #14403
  38073. D=A
  38074. //^^ push_d_to_stack
  38075. // #14404
  38076. @SP
  38077. // #14405
  38078. A=M
  38079. // #14406
  38080. M=D
  38081. // #14407
  38082. @SP
  38083. // #14408
  38084. M=M+1
  38085. //vv push_d_to_stack
  38086. //vv push_constant(30)
  38087. //
  38088. //// push constant 51
  38089. //^^ push_constant(51)
  38090. // #14409
  38091. @51
  38092. // #14410
  38093. D=A
  38094. //^^ push_d_to_stack
  38095. // #14411
  38096. @SP
  38097. // #14412
  38098. A=M
  38099. // #14413
  38100. M=D
  38101. // #14414
  38102. @SP
  38103. // #14415
  38104. M=M+1
  38105. //vv push_d_to_stack
  38106. //vv push_constant(51)
  38107. //
  38108. //// push constant 51
  38109. //^^ push_constant(51)
  38110. // #14416
  38111. @51
  38112. // #14417
  38113. D=A
  38114. //^^ push_d_to_stack
  38115. // #14418
  38116. @SP
  38117. // #14419
  38118. A=M
  38119. // #14420
  38120. M=D
  38121. // #14421
  38122. @SP
  38123. // #14422
  38124. M=M+1
  38125. //vv push_d_to_stack
  38126. //vv push_constant(51)
  38127. //
  38128. //// push constant 51
  38129. //^^ push_constant(51)
  38130. // #14423
  38131. @51
  38132. // #14424
  38133. D=A
  38134. //^^ push_d_to_stack
  38135. // #14425
  38136. @SP
  38137. // #14426
  38138. A=M
  38139. // #14427
  38140. M=D
  38141. // #14428
  38142. @SP
  38143. // #14429
  38144. M=M+1
  38145. //vv push_d_to_stack
  38146. //vv push_constant(51)
  38147. //
  38148. //// push constant 51
  38149. //^^ push_constant(51)
  38150. // #14430
  38151. @51
  38152. // #14431
  38153. D=A
  38154. //^^ push_d_to_stack
  38155. // #14432
  38156. @SP
  38157. // #14433
  38158. A=M
  38159. // #14434
  38160. M=D
  38161. // #14435
  38162. @SP
  38163. // #14436
  38164. M=M+1
  38165. //vv push_d_to_stack
  38166. //vv push_constant(51)
  38167. //
  38168. //// push constant 51
  38169. //^^ push_constant(51)
  38170. // #14437
  38171. @51
  38172. // #14438
  38173. D=A
  38174. //^^ push_d_to_stack
  38175. // #14439
  38176. @SP
  38177. // #14440
  38178. A=M
  38179. // #14441
  38180. M=D
  38181. // #14442
  38182. @SP
  38183. // #14443
  38184. M=M+1
  38185. //vv push_d_to_stack
  38186. //vv push_constant(51)
  38187. //
  38188. //// push constant 51
  38189. //^^ push_constant(51)
  38190. // #14444
  38191. @51
  38192. // #14445
  38193. D=A
  38194. //^^ push_d_to_stack
  38195. // #14446
  38196. @SP
  38197. // #14447
  38198. A=M
  38199. // #14448
  38200. M=D
  38201. // #14449
  38202. @SP
  38203. // #14450
  38204. M=M+1
  38205. //vv push_d_to_stack
  38206. //vv push_constant(51)
  38207. //
  38208. //// push constant 51
  38209. //^^ push_constant(51)
  38210. // #14451
  38211. @51
  38212. // #14452
  38213. D=A
  38214. //^^ push_d_to_stack
  38215. // #14453
  38216. @SP
  38217. // #14454
  38218. A=M
  38219. // #14455
  38220. M=D
  38221. // #14456
  38222. @SP
  38223. // #14457
  38224. M=M+1
  38225. //vv push_d_to_stack
  38226. //vv push_constant(51)
  38227. //
  38228. //// push constant 30
  38229. //^^ push_constant(30)
  38230. // #14458
  38231. @30
  38232. // #14459
  38233. D=A
  38234. //^^ push_d_to_stack
  38235. // #14460
  38236. @SP
  38237. // #14461
  38238. A=M
  38239. // #14462
  38240. M=D
  38241. // #14463
  38242. @SP
  38243. // #14464
  38244. M=M+1
  38245. //vv push_d_to_stack
  38246. //vv push_constant(30)
  38247. //
  38248. //// push constant 0
  38249. //^^ push_constant(0)
  38250. // #14465
  38251. @0
  38252. // #14466
  38253. D=A
  38254. //^^ push_d_to_stack
  38255. // #14467
  38256. @SP
  38257. // #14468
  38258. A=M
  38259. // #14469
  38260. M=D
  38261. // #14470
  38262. @SP
  38263. // #14471
  38264. M=M+1
  38265. //vv push_d_to_stack
  38266. //vv push_constant(0)
  38267. //
  38268. //// push constant 0
  38269. //^^ push_constant(0)
  38270. // #14472
  38271. @0
  38272. // #14473
  38273. D=A
  38274. //^^ push_d_to_stack
  38275. // #14474
  38276. @SP
  38277. // #14475
  38278. A=M
  38279. // #14476
  38280. M=D
  38281. // #14477
  38282. @SP
  38283. // #14478
  38284. M=M+1
  38285. //vv push_d_to_stack
  38286. //vv push_constant(0)
  38287. //
  38288. //// call Output.create 12
  38289. //^^ push_constant(RET_ADDR_123)
  38290. // #14479
  38291. @RET_ADDR_123
  38292. // #14480
  38293. D=A
  38294. //^^ push_d_to_stack
  38295. // #14481
  38296. @SP
  38297. // #14482
  38298. A=M
  38299. // #14483
  38300. M=D
  38301. // #14484
  38302. @SP
  38303. // #14485
  38304. M=M+1
  38305. //vv push_d_to_stack
  38306. //vv push_constant(RET_ADDR_123)
  38307. //push return-address
  38308. // #14486
  38309. @LCL
  38310. // #14487
  38311. D=M
  38312. //^^ push_d_to_stack
  38313. // #14488
  38314. @SP
  38315. // #14489
  38316. A=M
  38317. // #14490
  38318. M=D
  38319. // #14491
  38320. @SP
  38321. // #14492
  38322. M=M+1
  38323. //vv push_d_to_stack
  38324. //push LCL
  38325. // #14493
  38326. @ARG
  38327. // #14494
  38328. D=M
  38329. //^^ push_d_to_stack
  38330. // #14495
  38331. @SP
  38332. // #14496
  38333. A=M
  38334. // #14497
  38335. M=D
  38336. // #14498
  38337. @SP
  38338. // #14499
  38339. M=M+1
  38340. //vv push_d_to_stack
  38341. //push ARG
  38342. // #14500
  38343. @THIS
  38344. // #14501
  38345. D=M
  38346. //^^ push_d_to_stack
  38347. // #14502
  38348. @SP
  38349. // #14503
  38350. A=M
  38351. // #14504
  38352. M=D
  38353. // #14505
  38354. @SP
  38355. // #14506
  38356. M=M+1
  38357. //vv push_d_to_stack
  38358. //push THIS
  38359. // #14507
  38360. @THAT
  38361. // #14508
  38362. D=M
  38363. //^^ push_d_to_stack
  38364. // #14509
  38365. @SP
  38366. // #14510
  38367. A=M
  38368. // #14511
  38369. M=D
  38370. // #14512
  38371. @SP
  38372. // #14513
  38373. M=M+1
  38374. //vv push_d_to_stack
  38375. //push THAT
  38376. // #14514
  38377. @SP
  38378. // #14515
  38379. D=M
  38380. // #14516
  38381. @ARG
  38382. // #14517
  38383. M=D
  38384. // #14518
  38385. @17
  38386. // #14519
  38387. D=A
  38388. // #14520
  38389. @ARG
  38390. // #14521
  38391. M=M-D // ARG = SP - args - 5
  38392. // #14522
  38393. @SP
  38394. // #14523
  38395. D=M
  38396. // #14524
  38397. @LCL
  38398. // #14525
  38399. M=D // LCL = SP
  38400. // #14526
  38401. @Output.create
  38402. // #14527
  38403. 0;JMP
  38404. (RET_ADDR_123)
  38405. //
  38406. //// pop temp 0
  38407. //^^ pop_to_loc{5)
  38408. //^^ pop_stack_to_d
  38409. // #14528
  38410. @SP
  38411. // #14529
  38412. M=M-1
  38413. // #14530
  38414. A=M
  38415. // #14531
  38416. D=M
  38417. //vv pop_stack_to_d
  38418. // #14532
  38419. @5
  38420. // #14533
  38421. M=D
  38422. //vv pop_to_loc{5)
  38423. //
  38424. //// push constant 80
  38425. //^^ push_constant(80)
  38426. // #14534
  38427. @80
  38428. // #14535
  38429. D=A
  38430. //^^ push_d_to_stack
  38431. // #14536
  38432. @SP
  38433. // #14537
  38434. A=M
  38435. // #14538
  38436. M=D
  38437. // #14539
  38438. @SP
  38439. // #14540
  38440. M=M+1
  38441. //vv push_d_to_stack
  38442. //vv push_constant(80)
  38443. //
  38444. //// push constant 31
  38445. //^^ push_constant(31)
  38446. // #14541
  38447. @31
  38448. // #14542
  38449. D=A
  38450. //^^ push_d_to_stack
  38451. // #14543
  38452. @SP
  38453. // #14544
  38454. A=M
  38455. // #14545
  38456. M=D
  38457. // #14546
  38458. @SP
  38459. // #14547
  38460. M=M+1
  38461. //vv push_d_to_stack
  38462. //vv push_constant(31)
  38463. //
  38464. //// push constant 51
  38465. //^^ push_constant(51)
  38466. // #14548
  38467. @51
  38468. // #14549
  38469. D=A
  38470. //^^ push_d_to_stack
  38471. // #14550
  38472. @SP
  38473. // #14551
  38474. A=M
  38475. // #14552
  38476. M=D
  38477. // #14553
  38478. @SP
  38479. // #14554
  38480. M=M+1
  38481. //vv push_d_to_stack
  38482. //vv push_constant(51)
  38483. //
  38484. //// push constant 51
  38485. //^^ push_constant(51)
  38486. // #14555
  38487. @51
  38488. // #14556
  38489. D=A
  38490. //^^ push_d_to_stack
  38491. // #14557
  38492. @SP
  38493. // #14558
  38494. A=M
  38495. // #14559
  38496. M=D
  38497. // #14560
  38498. @SP
  38499. // #14561
  38500. M=M+1
  38501. //vv push_d_to_stack
  38502. //vv push_constant(51)
  38503. //
  38504. //// push constant 51
  38505. //^^ push_constant(51)
  38506. // #14562
  38507. @51
  38508. // #14563
  38509. D=A
  38510. //^^ push_d_to_stack
  38511. // #14564
  38512. @SP
  38513. // #14565
  38514. A=M
  38515. // #14566
  38516. M=D
  38517. // #14567
  38518. @SP
  38519. // #14568
  38520. M=M+1
  38521. //vv push_d_to_stack
  38522. //vv push_constant(51)
  38523. //
  38524. //// push constant 31
  38525. //^^ push_constant(31)
  38526. // #14569
  38527. @31
  38528. // #14570
  38529. D=A
  38530. //^^ push_d_to_stack
  38531. // #14571
  38532. @SP
  38533. // #14572
  38534. A=M
  38535. // #14573
  38536. M=D
  38537. // #14574
  38538. @SP
  38539. // #14575
  38540. M=M+1
  38541. //vv push_d_to_stack
  38542. //vv push_constant(31)
  38543. //
  38544. //// push constant 3
  38545. //^^ push_constant(3)
  38546. // #14576
  38547. @3
  38548. // #14577
  38549. D=A
  38550. //^^ push_d_to_stack
  38551. // #14578
  38552. @SP
  38553. // #14579
  38554. A=M
  38555. // #14580
  38556. M=D
  38557. // #14581
  38558. @SP
  38559. // #14582
  38560. M=M+1
  38561. //vv push_d_to_stack
  38562. //vv push_constant(3)
  38563. //
  38564. //// push constant 3
  38565. //^^ push_constant(3)
  38566. // #14583
  38567. @3
  38568. // #14584
  38569. D=A
  38570. //^^ push_d_to_stack
  38571. // #14585
  38572. @SP
  38573. // #14586
  38574. A=M
  38575. // #14587
  38576. M=D
  38577. // #14588
  38578. @SP
  38579. // #14589
  38580. M=M+1
  38581. //vv push_d_to_stack
  38582. //vv push_constant(3)
  38583. //
  38584. //// push constant 3
  38585. //^^ push_constant(3)
  38586. // #14590
  38587. @3
  38588. // #14591
  38589. D=A
  38590. //^^ push_d_to_stack
  38591. // #14592
  38592. @SP
  38593. // #14593
  38594. A=M
  38595. // #14594
  38596. M=D
  38597. // #14595
  38598. @SP
  38599. // #14596
  38600. M=M+1
  38601. //vv push_d_to_stack
  38602. //vv push_constant(3)
  38603. //
  38604. //// push constant 3
  38605. //^^ push_constant(3)
  38606. // #14597
  38607. @3
  38608. // #14598
  38609. D=A
  38610. //^^ push_d_to_stack
  38611. // #14599
  38612. @SP
  38613. // #14600
  38614. A=M
  38615. // #14601
  38616. M=D
  38617. // #14602
  38618. @SP
  38619. // #14603
  38620. M=M+1
  38621. //vv push_d_to_stack
  38622. //vv push_constant(3)
  38623. //
  38624. //// push constant 0
  38625. //^^ push_constant(0)
  38626. // #14604
  38627. @0
  38628. // #14605
  38629. D=A
  38630. //^^ push_d_to_stack
  38631. // #14606
  38632. @SP
  38633. // #14607
  38634. A=M
  38635. // #14608
  38636. M=D
  38637. // #14609
  38638. @SP
  38639. // #14610
  38640. M=M+1
  38641. //vv push_d_to_stack
  38642. //vv push_constant(0)
  38643. //
  38644. //// push constant 0
  38645. //^^ push_constant(0)
  38646. // #14611
  38647. @0
  38648. // #14612
  38649. D=A
  38650. //^^ push_d_to_stack
  38651. // #14613
  38652. @SP
  38653. // #14614
  38654. A=M
  38655. // #14615
  38656. M=D
  38657. // #14616
  38658. @SP
  38659. // #14617
  38660. M=M+1
  38661. //vv push_d_to_stack
  38662. //vv push_constant(0)
  38663. //
  38664. //// call Output.create 12
  38665. //^^ push_constant(RET_ADDR_124)
  38666. // #14618
  38667. @RET_ADDR_124
  38668. // #14619
  38669. D=A
  38670. //^^ push_d_to_stack
  38671. // #14620
  38672. @SP
  38673. // #14621
  38674. A=M
  38675. // #14622
  38676. M=D
  38677. // #14623
  38678. @SP
  38679. // #14624
  38680. M=M+1
  38681. //vv push_d_to_stack
  38682. //vv push_constant(RET_ADDR_124)
  38683. //push return-address
  38684. // #14625
  38685. @LCL
  38686. // #14626
  38687. D=M
  38688. //^^ push_d_to_stack
  38689. // #14627
  38690. @SP
  38691. // #14628
  38692. A=M
  38693. // #14629
  38694. M=D
  38695. // #14630
  38696. @SP
  38697. // #14631
  38698. M=M+1
  38699. //vv push_d_to_stack
  38700. //push LCL
  38701. // #14632
  38702. @ARG
  38703. // #14633
  38704. D=M
  38705. //^^ push_d_to_stack
  38706. // #14634
  38707. @SP
  38708. // #14635
  38709. A=M
  38710. // #14636
  38711. M=D
  38712. // #14637
  38713. @SP
  38714. // #14638
  38715. M=M+1
  38716. //vv push_d_to_stack
  38717. //push ARG
  38718. // #14639
  38719. @THIS
  38720. // #14640
  38721. D=M
  38722. //^^ push_d_to_stack
  38723. // #14641
  38724. @SP
  38725. // #14642
  38726. A=M
  38727. // #14643
  38728. M=D
  38729. // #14644
  38730. @SP
  38731. // #14645
  38732. M=M+1
  38733. //vv push_d_to_stack
  38734. //push THIS
  38735. // #14646
  38736. @THAT
  38737. // #14647
  38738. D=M
  38739. //^^ push_d_to_stack
  38740. // #14648
  38741. @SP
  38742. // #14649
  38743. A=M
  38744. // #14650
  38745. M=D
  38746. // #14651
  38747. @SP
  38748. // #14652
  38749. M=M+1
  38750. //vv push_d_to_stack
  38751. //push THAT
  38752. // #14653
  38753. @SP
  38754. // #14654
  38755. D=M
  38756. // #14655
  38757. @ARG
  38758. // #14656
  38759. M=D
  38760. // #14657
  38761. @17
  38762. // #14658
  38763. D=A
  38764. // #14659
  38765. @ARG
  38766. // #14660
  38767. M=M-D // ARG = SP - args - 5
  38768. // #14661
  38769. @SP
  38770. // #14662
  38771. D=M
  38772. // #14663
  38773. @LCL
  38774. // #14664
  38775. M=D // LCL = SP
  38776. // #14665
  38777. @Output.create
  38778. // #14666
  38779. 0;JMP
  38780. (RET_ADDR_124)
  38781. //
  38782. //// pop temp 0
  38783. //^^ pop_to_loc{5)
  38784. //^^ pop_stack_to_d
  38785. // #14667
  38786. @SP
  38787. // #14668
  38788. M=M-1
  38789. // #14669
  38790. A=M
  38791. // #14670
  38792. D=M
  38793. //vv pop_stack_to_d
  38794. // #14671
  38795. @5
  38796. // #14672
  38797. M=D
  38798. //vv pop_to_loc{5)
  38799. //
  38800. //// push constant 81
  38801. //^^ push_constant(81)
  38802. // #14673
  38803. @81
  38804. // #14674
  38805. D=A
  38806. //^^ push_d_to_stack
  38807. // #14675
  38808. @SP
  38809. // #14676
  38810. A=M
  38811. // #14677
  38812. M=D
  38813. // #14678
  38814. @SP
  38815. // #14679
  38816. M=M+1
  38817. //vv push_d_to_stack
  38818. //vv push_constant(81)
  38819. //
  38820. //// push constant 30
  38821. //^^ push_constant(30)
  38822. // #14680
  38823. @30
  38824. // #14681
  38825. D=A
  38826. //^^ push_d_to_stack
  38827. // #14682
  38828. @SP
  38829. // #14683
  38830. A=M
  38831. // #14684
  38832. M=D
  38833. // #14685
  38834. @SP
  38835. // #14686
  38836. M=M+1
  38837. //vv push_d_to_stack
  38838. //vv push_constant(30)
  38839. //
  38840. //// push constant 51
  38841. //^^ push_constant(51)
  38842. // #14687
  38843. @51
  38844. // #14688
  38845. D=A
  38846. //^^ push_d_to_stack
  38847. // #14689
  38848. @SP
  38849. // #14690
  38850. A=M
  38851. // #14691
  38852. M=D
  38853. // #14692
  38854. @SP
  38855. // #14693
  38856. M=M+1
  38857. //vv push_d_to_stack
  38858. //vv push_constant(51)
  38859. //
  38860. //// push constant 51
  38861. //^^ push_constant(51)
  38862. // #14694
  38863. @51
  38864. // #14695
  38865. D=A
  38866. //^^ push_d_to_stack
  38867. // #14696
  38868. @SP
  38869. // #14697
  38870. A=M
  38871. // #14698
  38872. M=D
  38873. // #14699
  38874. @SP
  38875. // #14700
  38876. M=M+1
  38877. //vv push_d_to_stack
  38878. //vv push_constant(51)
  38879. //
  38880. //// push constant 51
  38881. //^^ push_constant(51)
  38882. // #14701
  38883. @51
  38884. // #14702
  38885. D=A
  38886. //^^ push_d_to_stack
  38887. // #14703
  38888. @SP
  38889. // #14704
  38890. A=M
  38891. // #14705
  38892. M=D
  38893. // #14706
  38894. @SP
  38895. // #14707
  38896. M=M+1
  38897. //vv push_d_to_stack
  38898. //vv push_constant(51)
  38899. //
  38900. //// push constant 51
  38901. //^^ push_constant(51)
  38902. // #14708
  38903. @51
  38904. // #14709
  38905. D=A
  38906. //^^ push_d_to_stack
  38907. // #14710
  38908. @SP
  38909. // #14711
  38910. A=M
  38911. // #14712
  38912. M=D
  38913. // #14713
  38914. @SP
  38915. // #14714
  38916. M=M+1
  38917. //vv push_d_to_stack
  38918. //vv push_constant(51)
  38919. //
  38920. //// push constant 51
  38921. //^^ push_constant(51)
  38922. // #14715
  38923. @51
  38924. // #14716
  38925. D=A
  38926. //^^ push_d_to_stack
  38927. // #14717
  38928. @SP
  38929. // #14718
  38930. A=M
  38931. // #14719
  38932. M=D
  38933. // #14720
  38934. @SP
  38935. // #14721
  38936. M=M+1
  38937. //vv push_d_to_stack
  38938. //vv push_constant(51)
  38939. //
  38940. //// push constant 63
  38941. //^^ push_constant(63)
  38942. // #14722
  38943. @63
  38944. // #14723
  38945. D=A
  38946. //^^ push_d_to_stack
  38947. // #14724
  38948. @SP
  38949. // #14725
  38950. A=M
  38951. // #14726
  38952. M=D
  38953. // #14727
  38954. @SP
  38955. // #14728
  38956. M=M+1
  38957. //vv push_d_to_stack
  38958. //vv push_constant(63)
  38959. //
  38960. //// push constant 59
  38961. //^^ push_constant(59)
  38962. // #14729
  38963. @59
  38964. // #14730
  38965. D=A
  38966. //^^ push_d_to_stack
  38967. // #14731
  38968. @SP
  38969. // #14732
  38970. A=M
  38971. // #14733
  38972. M=D
  38973. // #14734
  38974. @SP
  38975. // #14735
  38976. M=M+1
  38977. //vv push_d_to_stack
  38978. //vv push_constant(59)
  38979. //
  38980. //// push constant 30
  38981. //^^ push_constant(30)
  38982. // #14736
  38983. @30
  38984. // #14737
  38985. D=A
  38986. //^^ push_d_to_stack
  38987. // #14738
  38988. @SP
  38989. // #14739
  38990. A=M
  38991. // #14740
  38992. M=D
  38993. // #14741
  38994. @SP
  38995. // #14742
  38996. M=M+1
  38997. //vv push_d_to_stack
  38998. //vv push_constant(30)
  38999. //
  39000. //// push constant 48
  39001. //^^ push_constant(48)
  39002. // #14743
  39003. @48
  39004. // #14744
  39005. D=A
  39006. //^^ push_d_to_stack
  39007. // #14745
  39008. @SP
  39009. // #14746
  39010. A=M
  39011. // #14747
  39012. M=D
  39013. // #14748
  39014. @SP
  39015. // #14749
  39016. M=M+1
  39017. //vv push_d_to_stack
  39018. //vv push_constant(48)
  39019. //
  39020. //// push constant 0
  39021. //^^ push_constant(0)
  39022. // #14750
  39023. @0
  39024. // #14751
  39025. D=A
  39026. //^^ push_d_to_stack
  39027. // #14752
  39028. @SP
  39029. // #14753
  39030. A=M
  39031. // #14754
  39032. M=D
  39033. // #14755
  39034. @SP
  39035. // #14756
  39036. M=M+1
  39037. //vv push_d_to_stack
  39038. //vv push_constant(0)
  39039. //
  39040. //// call Output.create 12
  39041. //^^ push_constant(RET_ADDR_125)
  39042. // #14757
  39043. @RET_ADDR_125
  39044. // #14758
  39045. D=A
  39046. //^^ push_d_to_stack
  39047. // #14759
  39048. @SP
  39049. // #14760
  39050. A=M
  39051. // #14761
  39052. M=D
  39053. // #14762
  39054. @SP
  39055. // #14763
  39056. M=M+1
  39057. //vv push_d_to_stack
  39058. //vv push_constant(RET_ADDR_125)
  39059. //push return-address
  39060. // #14764
  39061. @LCL
  39062. // #14765
  39063. D=M
  39064. //^^ push_d_to_stack
  39065. // #14766
  39066. @SP
  39067. // #14767
  39068. A=M
  39069. // #14768
  39070. M=D
  39071. // #14769
  39072. @SP
  39073. // #14770
  39074. M=M+1
  39075. //vv push_d_to_stack
  39076. //push LCL
  39077. // #14771
  39078. @ARG
  39079. // #14772
  39080. D=M
  39081. //^^ push_d_to_stack
  39082. // #14773
  39083. @SP
  39084. // #14774
  39085. A=M
  39086. // #14775
  39087. M=D
  39088. // #14776
  39089. @SP
  39090. // #14777
  39091. M=M+1
  39092. //vv push_d_to_stack
  39093. //push ARG
  39094. // #14778
  39095. @THIS
  39096. // #14779
  39097. D=M
  39098. //^^ push_d_to_stack
  39099. // #14780
  39100. @SP
  39101. // #14781
  39102. A=M
  39103. // #14782
  39104. M=D
  39105. // #14783
  39106. @SP
  39107. // #14784
  39108. M=M+1
  39109. //vv push_d_to_stack
  39110. //push THIS
  39111. // #14785
  39112. @THAT
  39113. // #14786
  39114. D=M
  39115. //^^ push_d_to_stack
  39116. // #14787
  39117. @SP
  39118. // #14788
  39119. A=M
  39120. // #14789
  39121. M=D
  39122. // #14790
  39123. @SP
  39124. // #14791
  39125. M=M+1
  39126. //vv push_d_to_stack
  39127. //push THAT
  39128. // #14792
  39129. @SP
  39130. // #14793
  39131. D=M
  39132. // #14794
  39133. @ARG
  39134. // #14795
  39135. M=D
  39136. // #14796
  39137. @17
  39138. // #14797
  39139. D=A
  39140. // #14798
  39141. @ARG
  39142. // #14799
  39143. M=M-D // ARG = SP - args - 5
  39144. // #14800
  39145. @SP
  39146. // #14801
  39147. D=M
  39148. // #14802
  39149. @LCL
  39150. // #14803
  39151. M=D // LCL = SP
  39152. // #14804
  39153. @Output.create
  39154. // #14805
  39155. 0;JMP
  39156. (RET_ADDR_125)
  39157. //
  39158. //// pop temp 0
  39159. //^^ pop_to_loc{5)
  39160. //^^ pop_stack_to_d
  39161. // #14806
  39162. @SP
  39163. // #14807
  39164. M=M-1
  39165. // #14808
  39166. A=M
  39167. // #14809
  39168. D=M
  39169. //vv pop_stack_to_d
  39170. // #14810
  39171. @5
  39172. // #14811
  39173. M=D
  39174. //vv pop_to_loc{5)
  39175. //
  39176. //// push constant 82
  39177. //^^ push_constant(82)
  39178. // #14812
  39179. @82
  39180. // #14813
  39181. D=A
  39182. //^^ push_d_to_stack
  39183. // #14814
  39184. @SP
  39185. // #14815
  39186. A=M
  39187. // #14816
  39188. M=D
  39189. // #14817
  39190. @SP
  39191. // #14818
  39192. M=M+1
  39193. //vv push_d_to_stack
  39194. //vv push_constant(82)
  39195. //
  39196. //// push constant 31
  39197. //^^ push_constant(31)
  39198. // #14819
  39199. @31
  39200. // #14820
  39201. D=A
  39202. //^^ push_d_to_stack
  39203. // #14821
  39204. @SP
  39205. // #14822
  39206. A=M
  39207. // #14823
  39208. M=D
  39209. // #14824
  39210. @SP
  39211. // #14825
  39212. M=M+1
  39213. //vv push_d_to_stack
  39214. //vv push_constant(31)
  39215. //
  39216. //// push constant 51
  39217. //^^ push_constant(51)
  39218. // #14826
  39219. @51
  39220. // #14827
  39221. D=A
  39222. //^^ push_d_to_stack
  39223. // #14828
  39224. @SP
  39225. // #14829
  39226. A=M
  39227. // #14830
  39228. M=D
  39229. // #14831
  39230. @SP
  39231. // #14832
  39232. M=M+1
  39233. //vv push_d_to_stack
  39234. //vv push_constant(51)
  39235. //
  39236. //// push constant 51
  39237. //^^ push_constant(51)
  39238. // #14833
  39239. @51
  39240. // #14834
  39241. D=A
  39242. //^^ push_d_to_stack
  39243. // #14835
  39244. @SP
  39245. // #14836
  39246. A=M
  39247. // #14837
  39248. M=D
  39249. // #14838
  39250. @SP
  39251. // #14839
  39252. M=M+1
  39253. //vv push_d_to_stack
  39254. //vv push_constant(51)
  39255. //
  39256. //// push constant 51
  39257. //^^ push_constant(51)
  39258. // #14840
  39259. @51
  39260. // #14841
  39261. D=A
  39262. //^^ push_d_to_stack
  39263. // #14842
  39264. @SP
  39265. // #14843
  39266. A=M
  39267. // #14844
  39268. M=D
  39269. // #14845
  39270. @SP
  39271. // #14846
  39272. M=M+1
  39273. //vv push_d_to_stack
  39274. //vv push_constant(51)
  39275. //
  39276. //// push constant 31
  39277. //^^ push_constant(31)
  39278. // #14847
  39279. @31
  39280. // #14848
  39281. D=A
  39282. //^^ push_d_to_stack
  39283. // #14849
  39284. @SP
  39285. // #14850
  39286. A=M
  39287. // #14851
  39288. M=D
  39289. // #14852
  39290. @SP
  39291. // #14853
  39292. M=M+1
  39293. //vv push_d_to_stack
  39294. //vv push_constant(31)
  39295. //
  39296. //// push constant 27
  39297. //^^ push_constant(27)
  39298. // #14854
  39299. @27
  39300. // #14855
  39301. D=A
  39302. //^^ push_d_to_stack
  39303. // #14856
  39304. @SP
  39305. // #14857
  39306. A=M
  39307. // #14858
  39308. M=D
  39309. // #14859
  39310. @SP
  39311. // #14860
  39312. M=M+1
  39313. //vv push_d_to_stack
  39314. //vv push_constant(27)
  39315. //
  39316. //// push constant 51
  39317. //^^ push_constant(51)
  39318. // #14861
  39319. @51
  39320. // #14862
  39321. D=A
  39322. //^^ push_d_to_stack
  39323. // #14863
  39324. @SP
  39325. // #14864
  39326. A=M
  39327. // #14865
  39328. M=D
  39329. // #14866
  39330. @SP
  39331. // #14867
  39332. M=M+1
  39333. //vv push_d_to_stack
  39334. //vv push_constant(51)
  39335. //
  39336. //// push constant 51
  39337. //^^ push_constant(51)
  39338. // #14868
  39339. @51
  39340. // #14869
  39341. D=A
  39342. //^^ push_d_to_stack
  39343. // #14870
  39344. @SP
  39345. // #14871
  39346. A=M
  39347. // #14872
  39348. M=D
  39349. // #14873
  39350. @SP
  39351. // #14874
  39352. M=M+1
  39353. //vv push_d_to_stack
  39354. //vv push_constant(51)
  39355. //
  39356. //// push constant 51
  39357. //^^ push_constant(51)
  39358. // #14875
  39359. @51
  39360. // #14876
  39361. D=A
  39362. //^^ push_d_to_stack
  39363. // #14877
  39364. @SP
  39365. // #14878
  39366. A=M
  39367. // #14879
  39368. M=D
  39369. // #14880
  39370. @SP
  39371. // #14881
  39372. M=M+1
  39373. //vv push_d_to_stack
  39374. //vv push_constant(51)
  39375. //
  39376. //// push constant 0
  39377. //^^ push_constant(0)
  39378. // #14882
  39379. @0
  39380. // #14883
  39381. D=A
  39382. //^^ push_d_to_stack
  39383. // #14884
  39384. @SP
  39385. // #14885
  39386. A=M
  39387. // #14886
  39388. M=D
  39389. // #14887
  39390. @SP
  39391. // #14888
  39392. M=M+1
  39393. //vv push_d_to_stack
  39394. //vv push_constant(0)
  39395. //
  39396. //// push constant 0
  39397. //^^ push_constant(0)
  39398. // #14889
  39399. @0
  39400. // #14890
  39401. D=A
  39402. //^^ push_d_to_stack
  39403. // #14891
  39404. @SP
  39405. // #14892
  39406. A=M
  39407. // #14893
  39408. M=D
  39409. // #14894
  39410. @SP
  39411. // #14895
  39412. M=M+1
  39413. //vv push_d_to_stack
  39414. //vv push_constant(0)
  39415. //
  39416. //// call Output.create 12
  39417. //^^ push_constant(RET_ADDR_126)
  39418. // #14896
  39419. @RET_ADDR_126
  39420. // #14897
  39421. D=A
  39422. //^^ push_d_to_stack
  39423. // #14898
  39424. @SP
  39425. // #14899
  39426. A=M
  39427. // #14900
  39428. M=D
  39429. // #14901
  39430. @SP
  39431. // #14902
  39432. M=M+1
  39433. //vv push_d_to_stack
  39434. //vv push_constant(RET_ADDR_126)
  39435. //push return-address
  39436. // #14903
  39437. @LCL
  39438. // #14904
  39439. D=M
  39440. //^^ push_d_to_stack
  39441. // #14905
  39442. @SP
  39443. // #14906
  39444. A=M
  39445. // #14907
  39446. M=D
  39447. // #14908
  39448. @SP
  39449. // #14909
  39450. M=M+1
  39451. //vv push_d_to_stack
  39452. //push LCL
  39453. // #14910
  39454. @ARG
  39455. // #14911
  39456. D=M
  39457. //^^ push_d_to_stack
  39458. // #14912
  39459. @SP
  39460. // #14913
  39461. A=M
  39462. // #14914
  39463. M=D
  39464. // #14915
  39465. @SP
  39466. // #14916
  39467. M=M+1
  39468. //vv push_d_to_stack
  39469. //push ARG
  39470. // #14917
  39471. @THIS
  39472. // #14918
  39473. D=M
  39474. //^^ push_d_to_stack
  39475. // #14919
  39476. @SP
  39477. // #14920
  39478. A=M
  39479. // #14921
  39480. M=D
  39481. // #14922
  39482. @SP
  39483. // #14923
  39484. M=M+1
  39485. //vv push_d_to_stack
  39486. //push THIS
  39487. // #14924
  39488. @THAT
  39489. // #14925
  39490. D=M
  39491. //^^ push_d_to_stack
  39492. // #14926
  39493. @SP
  39494. // #14927
  39495. A=M
  39496. // #14928
  39497. M=D
  39498. // #14929
  39499. @SP
  39500. // #14930
  39501. M=M+1
  39502. //vv push_d_to_stack
  39503. //push THAT
  39504. // #14931
  39505. @SP
  39506. // #14932
  39507. D=M
  39508. // #14933
  39509. @ARG
  39510. // #14934
  39511. M=D
  39512. // #14935
  39513. @17
  39514. // #14936
  39515. D=A
  39516. // #14937
  39517. @ARG
  39518. // #14938
  39519. M=M-D // ARG = SP - args - 5
  39520. // #14939
  39521. @SP
  39522. // #14940
  39523. D=M
  39524. // #14941
  39525. @LCL
  39526. // #14942
  39527. M=D // LCL = SP
  39528. // #14943
  39529. @Output.create
  39530. // #14944
  39531. 0;JMP
  39532. (RET_ADDR_126)
  39533. //
  39534. //// pop temp 0
  39535. //^^ pop_to_loc{5)
  39536. //^^ pop_stack_to_d
  39537. // #14945
  39538. @SP
  39539. // #14946
  39540. M=M-1
  39541. // #14947
  39542. A=M
  39543. // #14948
  39544. D=M
  39545. //vv pop_stack_to_d
  39546. // #14949
  39547. @5
  39548. // #14950
  39549. M=D
  39550. //vv pop_to_loc{5)
  39551. //
  39552. //// push constant 83
  39553. //^^ push_constant(83)
  39554. // #14951
  39555. @83
  39556. // #14952
  39557. D=A
  39558. //^^ push_d_to_stack
  39559. // #14953
  39560. @SP
  39561. // #14954
  39562. A=M
  39563. // #14955
  39564. M=D
  39565. // #14956
  39566. @SP
  39567. // #14957
  39568. M=M+1
  39569. //vv push_d_to_stack
  39570. //vv push_constant(83)
  39571. //
  39572. //// push constant 30
  39573. //^^ push_constant(30)
  39574. // #14958
  39575. @30
  39576. // #14959
  39577. D=A
  39578. //^^ push_d_to_stack
  39579. // #14960
  39580. @SP
  39581. // #14961
  39582. A=M
  39583. // #14962
  39584. M=D
  39585. // #14963
  39586. @SP
  39587. // #14964
  39588. M=M+1
  39589. //vv push_d_to_stack
  39590. //vv push_constant(30)
  39591. //
  39592. //// push constant 51
  39593. //^^ push_constant(51)
  39594. // #14965
  39595. @51
  39596. // #14966
  39597. D=A
  39598. //^^ push_d_to_stack
  39599. // #14967
  39600. @SP
  39601. // #14968
  39602. A=M
  39603. // #14969
  39604. M=D
  39605. // #14970
  39606. @SP
  39607. // #14971
  39608. M=M+1
  39609. //vv push_d_to_stack
  39610. //vv push_constant(51)
  39611. //
  39612. //// push constant 51
  39613. //^^ push_constant(51)
  39614. // #14972
  39615. @51
  39616. // #14973
  39617. D=A
  39618. //^^ push_d_to_stack
  39619. // #14974
  39620. @SP
  39621. // #14975
  39622. A=M
  39623. // #14976
  39624. M=D
  39625. // #14977
  39626. @SP
  39627. // #14978
  39628. M=M+1
  39629. //vv push_d_to_stack
  39630. //vv push_constant(51)
  39631. //
  39632. //// push constant 6
  39633. //^^ push_constant(6)
  39634. // #14979
  39635. @6
  39636. // #14980
  39637. D=A
  39638. //^^ push_d_to_stack
  39639. // #14981
  39640. @SP
  39641. // #14982
  39642. A=M
  39643. // #14983
  39644. M=D
  39645. // #14984
  39646. @SP
  39647. // #14985
  39648. M=M+1
  39649. //vv push_d_to_stack
  39650. //vv push_constant(6)
  39651. //
  39652. //// push constant 28
  39653. //^^ push_constant(28)
  39654. // #14986
  39655. @28
  39656. // #14987
  39657. D=A
  39658. //^^ push_d_to_stack
  39659. // #14988
  39660. @SP
  39661. // #14989
  39662. A=M
  39663. // #14990
  39664. M=D
  39665. // #14991
  39666. @SP
  39667. // #14992
  39668. M=M+1
  39669. //vv push_d_to_stack
  39670. //vv push_constant(28)
  39671. //
  39672. //// push constant 48
  39673. //^^ push_constant(48)
  39674. // #14993
  39675. @48
  39676. // #14994
  39677. D=A
  39678. //^^ push_d_to_stack
  39679. // #14995
  39680. @SP
  39681. // #14996
  39682. A=M
  39683. // #14997
  39684. M=D
  39685. // #14998
  39686. @SP
  39687. // #14999
  39688. M=M+1
  39689. //vv push_d_to_stack
  39690. //vv push_constant(48)
  39691. //
  39692. //// push constant 51
  39693. //^^ push_constant(51)
  39694. // #15000
  39695. @51
  39696. // #15001
  39697. D=A
  39698. //^^ push_d_to_stack
  39699. // #15002
  39700. @SP
  39701. // #15003
  39702. A=M
  39703. // #15004
  39704. M=D
  39705. // #15005
  39706. @SP
  39707. // #15006
  39708. M=M+1
  39709. //vv push_d_to_stack
  39710. //vv push_constant(51)
  39711. //
  39712. //// push constant 51
  39713. //^^ push_constant(51)
  39714. // #15007
  39715. @51
  39716. // #15008
  39717. D=A
  39718. //^^ push_d_to_stack
  39719. // #15009
  39720. @SP
  39721. // #15010
  39722. A=M
  39723. // #15011
  39724. M=D
  39725. // #15012
  39726. @SP
  39727. // #15013
  39728. M=M+1
  39729. //vv push_d_to_stack
  39730. //vv push_constant(51)
  39731. //
  39732. //// push constant 30
  39733. //^^ push_constant(30)
  39734. // #15014
  39735. @30
  39736. // #15015
  39737. D=A
  39738. //^^ push_d_to_stack
  39739. // #15016
  39740. @SP
  39741. // #15017
  39742. A=M
  39743. // #15018
  39744. M=D
  39745. // #15019
  39746. @SP
  39747. // #15020
  39748. M=M+1
  39749. //vv push_d_to_stack
  39750. //vv push_constant(30)
  39751. //
  39752. //// push constant 0
  39753. //^^ push_constant(0)
  39754. // #15021
  39755. @0
  39756. // #15022
  39757. D=A
  39758. //^^ push_d_to_stack
  39759. // #15023
  39760. @SP
  39761. // #15024
  39762. A=M
  39763. // #15025
  39764. M=D
  39765. // #15026
  39766. @SP
  39767. // #15027
  39768. M=M+1
  39769. //vv push_d_to_stack
  39770. //vv push_constant(0)
  39771. //
  39772. //// push constant 0
  39773. //^^ push_constant(0)
  39774. // #15028
  39775. @0
  39776. // #15029
  39777. D=A
  39778. //^^ push_d_to_stack
  39779. // #15030
  39780. @SP
  39781. // #15031
  39782. A=M
  39783. // #15032
  39784. M=D
  39785. // #15033
  39786. @SP
  39787. // #15034
  39788. M=M+1
  39789. //vv push_d_to_stack
  39790. //vv push_constant(0)
  39791. //
  39792. //// call Output.create 12
  39793. //^^ push_constant(RET_ADDR_127)
  39794. // #15035
  39795. @RET_ADDR_127
  39796. // #15036
  39797. D=A
  39798. //^^ push_d_to_stack
  39799. // #15037
  39800. @SP
  39801. // #15038
  39802. A=M
  39803. // #15039
  39804. M=D
  39805. // #15040
  39806. @SP
  39807. // #15041
  39808. M=M+1
  39809. //vv push_d_to_stack
  39810. //vv push_constant(RET_ADDR_127)
  39811. //push return-address
  39812. // #15042
  39813. @LCL
  39814. // #15043
  39815. D=M
  39816. //^^ push_d_to_stack
  39817. // #15044
  39818. @SP
  39819. // #15045
  39820. A=M
  39821. // #15046
  39822. M=D
  39823. // #15047
  39824. @SP
  39825. // #15048
  39826. M=M+1
  39827. //vv push_d_to_stack
  39828. //push LCL
  39829. // #15049
  39830. @ARG
  39831. // #15050
  39832. D=M
  39833. //^^ push_d_to_stack
  39834. // #15051
  39835. @SP
  39836. // #15052
  39837. A=M
  39838. // #15053
  39839. M=D
  39840. // #15054
  39841. @SP
  39842. // #15055
  39843. M=M+1
  39844. //vv push_d_to_stack
  39845. //push ARG
  39846. // #15056
  39847. @THIS
  39848. // #15057
  39849. D=M
  39850. //^^ push_d_to_stack
  39851. // #15058
  39852. @SP
  39853. // #15059
  39854. A=M
  39855. // #15060
  39856. M=D
  39857. // #15061
  39858. @SP
  39859. // #15062
  39860. M=M+1
  39861. //vv push_d_to_stack
  39862. //push THIS
  39863. // #15063
  39864. @THAT
  39865. // #15064
  39866. D=M
  39867. //^^ push_d_to_stack
  39868. // #15065
  39869. @SP
  39870. // #15066
  39871. A=M
  39872. // #15067
  39873. M=D
  39874. // #15068
  39875. @SP
  39876. // #15069
  39877. M=M+1
  39878. //vv push_d_to_stack
  39879. //push THAT
  39880. // #15070
  39881. @SP
  39882. // #15071
  39883. D=M
  39884. // #15072
  39885. @ARG
  39886. // #15073
  39887. M=D
  39888. // #15074
  39889. @17
  39890. // #15075
  39891. D=A
  39892. // #15076
  39893. @ARG
  39894. // #15077
  39895. M=M-D // ARG = SP - args - 5
  39896. // #15078
  39897. @SP
  39898. // #15079
  39899. D=M
  39900. // #15080
  39901. @LCL
  39902. // #15081
  39903. M=D // LCL = SP
  39904. // #15082
  39905. @Output.create
  39906. // #15083
  39907. 0;JMP
  39908. (RET_ADDR_127)
  39909. //
  39910. //// pop temp 0
  39911. //^^ pop_to_loc{5)
  39912. //^^ pop_stack_to_d
  39913. // #15084
  39914. @SP
  39915. // #15085
  39916. M=M-1
  39917. // #15086
  39918. A=M
  39919. // #15087
  39920. D=M
  39921. //vv pop_stack_to_d
  39922. // #15088
  39923. @5
  39924. // #15089
  39925. M=D
  39926. //vv pop_to_loc{5)
  39927. //
  39928. //// push constant 84
  39929. //^^ push_constant(84)
  39930. // #15090
  39931. @84
  39932. // #15091
  39933. D=A
  39934. //^^ push_d_to_stack
  39935. // #15092
  39936. @SP
  39937. // #15093
  39938. A=M
  39939. // #15094
  39940. M=D
  39941. // #15095
  39942. @SP
  39943. // #15096
  39944. M=M+1
  39945. //vv push_d_to_stack
  39946. //vv push_constant(84)
  39947. //
  39948. //// push constant 63
  39949. //^^ push_constant(63)
  39950. // #15097
  39951. @63
  39952. // #15098
  39953. D=A
  39954. //^^ push_d_to_stack
  39955. // #15099
  39956. @SP
  39957. // #15100
  39958. A=M
  39959. // #15101
  39960. M=D
  39961. // #15102
  39962. @SP
  39963. // #15103
  39964. M=M+1
  39965. //vv push_d_to_stack
  39966. //vv push_constant(63)
  39967. //
  39968. //// push constant 63
  39969. //^^ push_constant(63)
  39970. // #15104
  39971. @63
  39972. // #15105
  39973. D=A
  39974. //^^ push_d_to_stack
  39975. // #15106
  39976. @SP
  39977. // #15107
  39978. A=M
  39979. // #15108
  39980. M=D
  39981. // #15109
  39982. @SP
  39983. // #15110
  39984. M=M+1
  39985. //vv push_d_to_stack
  39986. //vv push_constant(63)
  39987. //
  39988. //// push constant 45
  39989. //^^ push_constant(45)
  39990. // #15111
  39991. @45
  39992. // #15112
  39993. D=A
  39994. //^^ push_d_to_stack
  39995. // #15113
  39996. @SP
  39997. // #15114
  39998. A=M
  39999. // #15115
  40000. M=D
  40001. // #15116
  40002. @SP
  40003. // #15117
  40004. M=M+1
  40005. //vv push_d_to_stack
  40006. //vv push_constant(45)
  40007. //
  40008. //// push constant 12
  40009. //^^ push_constant(12)
  40010. // #15118
  40011. @12
  40012. // #15119
  40013. D=A
  40014. //^^ push_d_to_stack
  40015. // #15120
  40016. @SP
  40017. // #15121
  40018. A=M
  40019. // #15122
  40020. M=D
  40021. // #15123
  40022. @SP
  40023. // #15124
  40024. M=M+1
  40025. //vv push_d_to_stack
  40026. //vv push_constant(12)
  40027. //
  40028. //// push constant 12
  40029. //^^ push_constant(12)
  40030. // #15125
  40031. @12
  40032. // #15126
  40033. D=A
  40034. //^^ push_d_to_stack
  40035. // #15127
  40036. @SP
  40037. // #15128
  40038. A=M
  40039. // #15129
  40040. M=D
  40041. // #15130
  40042. @SP
  40043. // #15131
  40044. M=M+1
  40045. //vv push_d_to_stack
  40046. //vv push_constant(12)
  40047. //
  40048. //// push constant 12
  40049. //^^ push_constant(12)
  40050. // #15132
  40051. @12
  40052. // #15133
  40053. D=A
  40054. //^^ push_d_to_stack
  40055. // #15134
  40056. @SP
  40057. // #15135
  40058. A=M
  40059. // #15136
  40060. M=D
  40061. // #15137
  40062. @SP
  40063. // #15138
  40064. M=M+1
  40065. //vv push_d_to_stack
  40066. //vv push_constant(12)
  40067. //
  40068. //// push constant 12
  40069. //^^ push_constant(12)
  40070. // #15139
  40071. @12
  40072. // #15140
  40073. D=A
  40074. //^^ push_d_to_stack
  40075. // #15141
  40076. @SP
  40077. // #15142
  40078. A=M
  40079. // #15143
  40080. M=D
  40081. // #15144
  40082. @SP
  40083. // #15145
  40084. M=M+1
  40085. //vv push_d_to_stack
  40086. //vv push_constant(12)
  40087. //
  40088. //// push constant 12
  40089. //^^ push_constant(12)
  40090. // #15146
  40091. @12
  40092. // #15147
  40093. D=A
  40094. //^^ push_d_to_stack
  40095. // #15148
  40096. @SP
  40097. // #15149
  40098. A=M
  40099. // #15150
  40100. M=D
  40101. // #15151
  40102. @SP
  40103. // #15152
  40104. M=M+1
  40105. //vv push_d_to_stack
  40106. //vv push_constant(12)
  40107. //
  40108. //// push constant 30
  40109. //^^ push_constant(30)
  40110. // #15153
  40111. @30
  40112. // #15154
  40113. D=A
  40114. //^^ push_d_to_stack
  40115. // #15155
  40116. @SP
  40117. // #15156
  40118. A=M
  40119. // #15157
  40120. M=D
  40121. // #15158
  40122. @SP
  40123. // #15159
  40124. M=M+1
  40125. //vv push_d_to_stack
  40126. //vv push_constant(30)
  40127. //
  40128. //// push constant 0
  40129. //^^ push_constant(0)
  40130. // #15160
  40131. @0
  40132. // #15161
  40133. D=A
  40134. //^^ push_d_to_stack
  40135. // #15162
  40136. @SP
  40137. // #15163
  40138. A=M
  40139. // #15164
  40140. M=D
  40141. // #15165
  40142. @SP
  40143. // #15166
  40144. M=M+1
  40145. //vv push_d_to_stack
  40146. //vv push_constant(0)
  40147. //
  40148. //// push constant 0
  40149. //^^ push_constant(0)
  40150. // #15167
  40151. @0
  40152. // #15168
  40153. D=A
  40154. //^^ push_d_to_stack
  40155. // #15169
  40156. @SP
  40157. // #15170
  40158. A=M
  40159. // #15171
  40160. M=D
  40161. // #15172
  40162. @SP
  40163. // #15173
  40164. M=M+1
  40165. //vv push_d_to_stack
  40166. //vv push_constant(0)
  40167. //
  40168. //// call Output.create 12
  40169. //^^ push_constant(RET_ADDR_128)
  40170. // #15174
  40171. @RET_ADDR_128
  40172. // #15175
  40173. D=A
  40174. //^^ push_d_to_stack
  40175. // #15176
  40176. @SP
  40177. // #15177
  40178. A=M
  40179. // #15178
  40180. M=D
  40181. // #15179
  40182. @SP
  40183. // #15180
  40184. M=M+1
  40185. //vv push_d_to_stack
  40186. //vv push_constant(RET_ADDR_128)
  40187. //push return-address
  40188. // #15181
  40189. @LCL
  40190. // #15182
  40191. D=M
  40192. //^^ push_d_to_stack
  40193. // #15183
  40194. @SP
  40195. // #15184
  40196. A=M
  40197. // #15185
  40198. M=D
  40199. // #15186
  40200. @SP
  40201. // #15187
  40202. M=M+1
  40203. //vv push_d_to_stack
  40204. //push LCL
  40205. // #15188
  40206. @ARG
  40207. // #15189
  40208. D=M
  40209. //^^ push_d_to_stack
  40210. // #15190
  40211. @SP
  40212. // #15191
  40213. A=M
  40214. // #15192
  40215. M=D
  40216. // #15193
  40217. @SP
  40218. // #15194
  40219. M=M+1
  40220. //vv push_d_to_stack
  40221. //push ARG
  40222. // #15195
  40223. @THIS
  40224. // #15196
  40225. D=M
  40226. //^^ push_d_to_stack
  40227. // #15197
  40228. @SP
  40229. // #15198
  40230. A=M
  40231. // #15199
  40232. M=D
  40233. // #15200
  40234. @SP
  40235. // #15201
  40236. M=M+1
  40237. //vv push_d_to_stack
  40238. //push THIS
  40239. // #15202
  40240. @THAT
  40241. // #15203
  40242. D=M
  40243. //^^ push_d_to_stack
  40244. // #15204
  40245. @SP
  40246. // #15205
  40247. A=M
  40248. // #15206
  40249. M=D
  40250. // #15207
  40251. @SP
  40252. // #15208
  40253. M=M+1
  40254. //vv push_d_to_stack
  40255. //push THAT
  40256. // #15209
  40257. @SP
  40258. // #15210
  40259. D=M
  40260. // #15211
  40261. @ARG
  40262. // #15212
  40263. M=D
  40264. // #15213
  40265. @17
  40266. // #15214
  40267. D=A
  40268. // #15215
  40269. @ARG
  40270. // #15216
  40271. M=M-D // ARG = SP - args - 5
  40272. // #15217
  40273. @SP
  40274. // #15218
  40275. D=M
  40276. // #15219
  40277. @LCL
  40278. // #15220
  40279. M=D // LCL = SP
  40280. // #15221
  40281. @Output.create
  40282. // #15222
  40283. 0;JMP
  40284. (RET_ADDR_128)
  40285. //
  40286. //// pop temp 0
  40287. //^^ pop_to_loc{5)
  40288. //^^ pop_stack_to_d
  40289. // #15223
  40290. @SP
  40291. // #15224
  40292. M=M-1
  40293. // #15225
  40294. A=M
  40295. // #15226
  40296. D=M
  40297. //vv pop_stack_to_d
  40298. // #15227
  40299. @5
  40300. // #15228
  40301. M=D
  40302. //vv pop_to_loc{5)
  40303. //
  40304. //// push constant 85
  40305. //^^ push_constant(85)
  40306. // #15229
  40307. @85
  40308. // #15230
  40309. D=A
  40310. //^^ push_d_to_stack
  40311. // #15231
  40312. @SP
  40313. // #15232
  40314. A=M
  40315. // #15233
  40316. M=D
  40317. // #15234
  40318. @SP
  40319. // #15235
  40320. M=M+1
  40321. //vv push_d_to_stack
  40322. //vv push_constant(85)
  40323. //
  40324. //// push constant 51
  40325. //^^ push_constant(51)
  40326. // #15236
  40327. @51
  40328. // #15237
  40329. D=A
  40330. //^^ push_d_to_stack
  40331. // #15238
  40332. @SP
  40333. // #15239
  40334. A=M
  40335. // #15240
  40336. M=D
  40337. // #15241
  40338. @SP
  40339. // #15242
  40340. M=M+1
  40341. //vv push_d_to_stack
  40342. //vv push_constant(51)
  40343. //
  40344. //// push constant 51
  40345. //^^ push_constant(51)
  40346. // #15243
  40347. @51
  40348. // #15244
  40349. D=A
  40350. //^^ push_d_to_stack
  40351. // #15245
  40352. @SP
  40353. // #15246
  40354. A=M
  40355. // #15247
  40356. M=D
  40357. // #15248
  40358. @SP
  40359. // #15249
  40360. M=M+1
  40361. //vv push_d_to_stack
  40362. //vv push_constant(51)
  40363. //
  40364. //// push constant 51
  40365. //^^ push_constant(51)
  40366. // #15250
  40367. @51
  40368. // #15251
  40369. D=A
  40370. //^^ push_d_to_stack
  40371. // #15252
  40372. @SP
  40373. // #15253
  40374. A=M
  40375. // #15254
  40376. M=D
  40377. // #15255
  40378. @SP
  40379. // #15256
  40380. M=M+1
  40381. //vv push_d_to_stack
  40382. //vv push_constant(51)
  40383. //
  40384. //// push constant 51
  40385. //^^ push_constant(51)
  40386. // #15257
  40387. @51
  40388. // #15258
  40389. D=A
  40390. //^^ push_d_to_stack
  40391. // #15259
  40392. @SP
  40393. // #15260
  40394. A=M
  40395. // #15261
  40396. M=D
  40397. // #15262
  40398. @SP
  40399. // #15263
  40400. M=M+1
  40401. //vv push_d_to_stack
  40402. //vv push_constant(51)
  40403. //
  40404. //// push constant 51
  40405. //^^ push_constant(51)
  40406. // #15264
  40407. @51
  40408. // #15265
  40409. D=A
  40410. //^^ push_d_to_stack
  40411. // #15266
  40412. @SP
  40413. // #15267
  40414. A=M
  40415. // #15268
  40416. M=D
  40417. // #15269
  40418. @SP
  40419. // #15270
  40420. M=M+1
  40421. //vv push_d_to_stack
  40422. //vv push_constant(51)
  40423. //
  40424. //// push constant 51
  40425. //^^ push_constant(51)
  40426. // #15271
  40427. @51
  40428. // #15272
  40429. D=A
  40430. //^^ push_d_to_stack
  40431. // #15273
  40432. @SP
  40433. // #15274
  40434. A=M
  40435. // #15275
  40436. M=D
  40437. // #15276
  40438. @SP
  40439. // #15277
  40440. M=M+1
  40441. //vv push_d_to_stack
  40442. //vv push_constant(51)
  40443. //
  40444. //// push constant 51
  40445. //^^ push_constant(51)
  40446. // #15278
  40447. @51
  40448. // #15279
  40449. D=A
  40450. //^^ push_d_to_stack
  40451. // #15280
  40452. @SP
  40453. // #15281
  40454. A=M
  40455. // #15282
  40456. M=D
  40457. // #15283
  40458. @SP
  40459. // #15284
  40460. M=M+1
  40461. //vv push_d_to_stack
  40462. //vv push_constant(51)
  40463. //
  40464. //// push constant 51
  40465. //^^ push_constant(51)
  40466. // #15285
  40467. @51
  40468. // #15286
  40469. D=A
  40470. //^^ push_d_to_stack
  40471. // #15287
  40472. @SP
  40473. // #15288
  40474. A=M
  40475. // #15289
  40476. M=D
  40477. // #15290
  40478. @SP
  40479. // #15291
  40480. M=M+1
  40481. //vv push_d_to_stack
  40482. //vv push_constant(51)
  40483. //
  40484. //// push constant 30
  40485. //^^ push_constant(30)
  40486. // #15292
  40487. @30
  40488. // #15293
  40489. D=A
  40490. //^^ push_d_to_stack
  40491. // #15294
  40492. @SP
  40493. // #15295
  40494. A=M
  40495. // #15296
  40496. M=D
  40497. // #15297
  40498. @SP
  40499. // #15298
  40500. M=M+1
  40501. //vv push_d_to_stack
  40502. //vv push_constant(30)
  40503. //
  40504. //// push constant 0
  40505. //^^ push_constant(0)
  40506. // #15299
  40507. @0
  40508. // #15300
  40509. D=A
  40510. //^^ push_d_to_stack
  40511. // #15301
  40512. @SP
  40513. // #15302
  40514. A=M
  40515. // #15303
  40516. M=D
  40517. // #15304
  40518. @SP
  40519. // #15305
  40520. M=M+1
  40521. //vv push_d_to_stack
  40522. //vv push_constant(0)
  40523. //
  40524. //// push constant 0
  40525. //^^ push_constant(0)
  40526. // #15306
  40527. @0
  40528. // #15307
  40529. D=A
  40530. //^^ push_d_to_stack
  40531. // #15308
  40532. @SP
  40533. // #15309
  40534. A=M
  40535. // #15310
  40536. M=D
  40537. // #15311
  40538. @SP
  40539. // #15312
  40540. M=M+1
  40541. //vv push_d_to_stack
  40542. //vv push_constant(0)
  40543. //
  40544. //// call Output.create 12
  40545. //^^ push_constant(RET_ADDR_129)
  40546. // #15313
  40547. @RET_ADDR_129
  40548. // #15314
  40549. D=A
  40550. //^^ push_d_to_stack
  40551. // #15315
  40552. @SP
  40553. // #15316
  40554. A=M
  40555. // #15317
  40556. M=D
  40557. // #15318
  40558. @SP
  40559. // #15319
  40560. M=M+1
  40561. //vv push_d_to_stack
  40562. //vv push_constant(RET_ADDR_129)
  40563. //push return-address
  40564. // #15320
  40565. @LCL
  40566. // #15321
  40567. D=M
  40568. //^^ push_d_to_stack
  40569. // #15322
  40570. @SP
  40571. // #15323
  40572. A=M
  40573. // #15324
  40574. M=D
  40575. // #15325
  40576. @SP
  40577. // #15326
  40578. M=M+1
  40579. //vv push_d_to_stack
  40580. //push LCL
  40581. // #15327
  40582. @ARG
  40583. // #15328
  40584. D=M
  40585. //^^ push_d_to_stack
  40586. // #15329
  40587. @SP
  40588. // #15330
  40589. A=M
  40590. // #15331
  40591. M=D
  40592. // #15332
  40593. @SP
  40594. // #15333
  40595. M=M+1
  40596. //vv push_d_to_stack
  40597. //push ARG
  40598. // #15334
  40599. @THIS
  40600. // #15335
  40601. D=M
  40602. //^^ push_d_to_stack
  40603. // #15336
  40604. @SP
  40605. // #15337
  40606. A=M
  40607. // #15338
  40608. M=D
  40609. // #15339
  40610. @SP
  40611. // #15340
  40612. M=M+1
  40613. //vv push_d_to_stack
  40614. //push THIS
  40615. // #15341
  40616. @THAT
  40617. // #15342
  40618. D=M
  40619. //^^ push_d_to_stack
  40620. // #15343
  40621. @SP
  40622. // #15344
  40623. A=M
  40624. // #15345
  40625. M=D
  40626. // #15346
  40627. @SP
  40628. // #15347
  40629. M=M+1
  40630. //vv push_d_to_stack
  40631. //push THAT
  40632. // #15348
  40633. @SP
  40634. // #15349
  40635. D=M
  40636. // #15350
  40637. @ARG
  40638. // #15351
  40639. M=D
  40640. // #15352
  40641. @17
  40642. // #15353
  40643. D=A
  40644. // #15354
  40645. @ARG
  40646. // #15355
  40647. M=M-D // ARG = SP - args - 5
  40648. // #15356
  40649. @SP
  40650. // #15357
  40651. D=M
  40652. // #15358
  40653. @LCL
  40654. // #15359
  40655. M=D // LCL = SP
  40656. // #15360
  40657. @Output.create
  40658. // #15361
  40659. 0;JMP
  40660. (RET_ADDR_129)
  40661. //
  40662. //// pop temp 0
  40663. //^^ pop_to_loc{5)
  40664. //^^ pop_stack_to_d
  40665. // #15362
  40666. @SP
  40667. // #15363
  40668. M=M-1
  40669. // #15364
  40670. A=M
  40671. // #15365
  40672. D=M
  40673. //vv pop_stack_to_d
  40674. // #15366
  40675. @5
  40676. // #15367
  40677. M=D
  40678. //vv pop_to_loc{5)
  40679. //
  40680. //// push constant 86
  40681. //^^ push_constant(86)
  40682. // #15368
  40683. @86
  40684. // #15369
  40685. D=A
  40686. //^^ push_d_to_stack
  40687. // #15370
  40688. @SP
  40689. // #15371
  40690. A=M
  40691. // #15372
  40692. M=D
  40693. // #15373
  40694. @SP
  40695. // #15374
  40696. M=M+1
  40697. //vv push_d_to_stack
  40698. //vv push_constant(86)
  40699. //
  40700. //// push constant 51
  40701. //^^ push_constant(51)
  40702. // #15375
  40703. @51
  40704. // #15376
  40705. D=A
  40706. //^^ push_d_to_stack
  40707. // #15377
  40708. @SP
  40709. // #15378
  40710. A=M
  40711. // #15379
  40712. M=D
  40713. // #15380
  40714. @SP
  40715. // #15381
  40716. M=M+1
  40717. //vv push_d_to_stack
  40718. //vv push_constant(51)
  40719. //
  40720. //// push constant 51
  40721. //^^ push_constant(51)
  40722. // #15382
  40723. @51
  40724. // #15383
  40725. D=A
  40726. //^^ push_d_to_stack
  40727. // #15384
  40728. @SP
  40729. // #15385
  40730. A=M
  40731. // #15386
  40732. M=D
  40733. // #15387
  40734. @SP
  40735. // #15388
  40736. M=M+1
  40737. //vv push_d_to_stack
  40738. //vv push_constant(51)
  40739. //
  40740. //// push constant 51
  40741. //^^ push_constant(51)
  40742. // #15389
  40743. @51
  40744. // #15390
  40745. D=A
  40746. //^^ push_d_to_stack
  40747. // #15391
  40748. @SP
  40749. // #15392
  40750. A=M
  40751. // #15393
  40752. M=D
  40753. // #15394
  40754. @SP
  40755. // #15395
  40756. M=M+1
  40757. //vv push_d_to_stack
  40758. //vv push_constant(51)
  40759. //
  40760. //// push constant 51
  40761. //^^ push_constant(51)
  40762. // #15396
  40763. @51
  40764. // #15397
  40765. D=A
  40766. //^^ push_d_to_stack
  40767. // #15398
  40768. @SP
  40769. // #15399
  40770. A=M
  40771. // #15400
  40772. M=D
  40773. // #15401
  40774. @SP
  40775. // #15402
  40776. M=M+1
  40777. //vv push_d_to_stack
  40778. //vv push_constant(51)
  40779. //
  40780. //// push constant 51
  40781. //^^ push_constant(51)
  40782. // #15403
  40783. @51
  40784. // #15404
  40785. D=A
  40786. //^^ push_d_to_stack
  40787. // #15405
  40788. @SP
  40789. // #15406
  40790. A=M
  40791. // #15407
  40792. M=D
  40793. // #15408
  40794. @SP
  40795. // #15409
  40796. M=M+1
  40797. //vv push_d_to_stack
  40798. //vv push_constant(51)
  40799. //
  40800. //// push constant 30
  40801. //^^ push_constant(30)
  40802. // #15410
  40803. @30
  40804. // #15411
  40805. D=A
  40806. //^^ push_d_to_stack
  40807. // #15412
  40808. @SP
  40809. // #15413
  40810. A=M
  40811. // #15414
  40812. M=D
  40813. // #15415
  40814. @SP
  40815. // #15416
  40816. M=M+1
  40817. //vv push_d_to_stack
  40818. //vv push_constant(30)
  40819. //
  40820. //// push constant 30
  40821. //^^ push_constant(30)
  40822. // #15417
  40823. @30
  40824. // #15418
  40825. D=A
  40826. //^^ push_d_to_stack
  40827. // #15419
  40828. @SP
  40829. // #15420
  40830. A=M
  40831. // #15421
  40832. M=D
  40833. // #15422
  40834. @SP
  40835. // #15423
  40836. M=M+1
  40837. //vv push_d_to_stack
  40838. //vv push_constant(30)
  40839. //
  40840. //// push constant 12
  40841. //^^ push_constant(12)
  40842. // #15424
  40843. @12
  40844. // #15425
  40845. D=A
  40846. //^^ push_d_to_stack
  40847. // #15426
  40848. @SP
  40849. // #15427
  40850. A=M
  40851. // #15428
  40852. M=D
  40853. // #15429
  40854. @SP
  40855. // #15430
  40856. M=M+1
  40857. //vv push_d_to_stack
  40858. //vv push_constant(12)
  40859. //
  40860. //// push constant 12
  40861. //^^ push_constant(12)
  40862. // #15431
  40863. @12
  40864. // #15432
  40865. D=A
  40866. //^^ push_d_to_stack
  40867. // #15433
  40868. @SP
  40869. // #15434
  40870. A=M
  40871. // #15435
  40872. M=D
  40873. // #15436
  40874. @SP
  40875. // #15437
  40876. M=M+1
  40877. //vv push_d_to_stack
  40878. //vv push_constant(12)
  40879. //
  40880. //// push constant 0
  40881. //^^ push_constant(0)
  40882. // #15438
  40883. @0
  40884. // #15439
  40885. D=A
  40886. //^^ push_d_to_stack
  40887. // #15440
  40888. @SP
  40889. // #15441
  40890. A=M
  40891. // #15442
  40892. M=D
  40893. // #15443
  40894. @SP
  40895. // #15444
  40896. M=M+1
  40897. //vv push_d_to_stack
  40898. //vv push_constant(0)
  40899. //
  40900. //// push constant 0
  40901. //^^ push_constant(0)
  40902. // #15445
  40903. @0
  40904. // #15446
  40905. D=A
  40906. //^^ push_d_to_stack
  40907. // #15447
  40908. @SP
  40909. // #15448
  40910. A=M
  40911. // #15449
  40912. M=D
  40913. // #15450
  40914. @SP
  40915. // #15451
  40916. M=M+1
  40917. //vv push_d_to_stack
  40918. //vv push_constant(0)
  40919. //
  40920. //// call Output.create 12
  40921. //^^ push_constant(RET_ADDR_130)
  40922. // #15452
  40923. @RET_ADDR_130
  40924. // #15453
  40925. D=A
  40926. //^^ push_d_to_stack
  40927. // #15454
  40928. @SP
  40929. // #15455
  40930. A=M
  40931. // #15456
  40932. M=D
  40933. // #15457
  40934. @SP
  40935. // #15458
  40936. M=M+1
  40937. //vv push_d_to_stack
  40938. //vv push_constant(RET_ADDR_130)
  40939. //push return-address
  40940. // #15459
  40941. @LCL
  40942. // #15460
  40943. D=M
  40944. //^^ push_d_to_stack
  40945. // #15461
  40946. @SP
  40947. // #15462
  40948. A=M
  40949. // #15463
  40950. M=D
  40951. // #15464
  40952. @SP
  40953. // #15465
  40954. M=M+1
  40955. //vv push_d_to_stack
  40956. //push LCL
  40957. // #15466
  40958. @ARG
  40959. // #15467
  40960. D=M
  40961. //^^ push_d_to_stack
  40962. // #15468
  40963. @SP
  40964. // #15469
  40965. A=M
  40966. // #15470
  40967. M=D
  40968. // #15471
  40969. @SP
  40970. // #15472
  40971. M=M+1
  40972. //vv push_d_to_stack
  40973. //push ARG
  40974. // #15473
  40975. @THIS
  40976. // #15474
  40977. D=M
  40978. //^^ push_d_to_stack
  40979. // #15475
  40980. @SP
  40981. // #15476
  40982. A=M
  40983. // #15477
  40984. M=D
  40985. // #15478
  40986. @SP
  40987. // #15479
  40988. M=M+1
  40989. //vv push_d_to_stack
  40990. //push THIS
  40991. // #15480
  40992. @THAT
  40993. // #15481
  40994. D=M
  40995. //^^ push_d_to_stack
  40996. // #15482
  40997. @SP
  40998. // #15483
  40999. A=M
  41000. // #15484
  41001. M=D
  41002. // #15485
  41003. @SP
  41004. // #15486
  41005. M=M+1
  41006. //vv push_d_to_stack
  41007. //push THAT
  41008. // #15487
  41009. @SP
  41010. // #15488
  41011. D=M
  41012. // #15489
  41013. @ARG
  41014. // #15490
  41015. M=D
  41016. // #15491
  41017. @17
  41018. // #15492
  41019. D=A
  41020. // #15493
  41021. @ARG
  41022. // #15494
  41023. M=M-D // ARG = SP - args - 5
  41024. // #15495
  41025. @SP
  41026. // #15496
  41027. D=M
  41028. // #15497
  41029. @LCL
  41030. // #15498
  41031. M=D // LCL = SP
  41032. // #15499
  41033. @Output.create
  41034. // #15500
  41035. 0;JMP
  41036. (RET_ADDR_130)
  41037. //
  41038. //// pop temp 0
  41039. //^^ pop_to_loc{5)
  41040. //^^ pop_stack_to_d
  41041. // #15501
  41042. @SP
  41043. // #15502
  41044. M=M-1
  41045. // #15503
  41046. A=M
  41047. // #15504
  41048. D=M
  41049. //vv pop_stack_to_d
  41050. // #15505
  41051. @5
  41052. // #15506
  41053. M=D
  41054. //vv pop_to_loc{5)
  41055. //
  41056. //// push constant 87
  41057. //^^ push_constant(87)
  41058. // #15507
  41059. @87
  41060. // #15508
  41061. D=A
  41062. //^^ push_d_to_stack
  41063. // #15509
  41064. @SP
  41065. // #15510
  41066. A=M
  41067. // #15511
  41068. M=D
  41069. // #15512
  41070. @SP
  41071. // #15513
  41072. M=M+1
  41073. //vv push_d_to_stack
  41074. //vv push_constant(87)
  41075. //
  41076. //// push constant 51
  41077. //^^ push_constant(51)
  41078. // #15514
  41079. @51
  41080. // #15515
  41081. D=A
  41082. //^^ push_d_to_stack
  41083. // #15516
  41084. @SP
  41085. // #15517
  41086. A=M
  41087. // #15518
  41088. M=D
  41089. // #15519
  41090. @SP
  41091. // #15520
  41092. M=M+1
  41093. //vv push_d_to_stack
  41094. //vv push_constant(51)
  41095. //
  41096. //// push constant 51
  41097. //^^ push_constant(51)
  41098. // #15521
  41099. @51
  41100. // #15522
  41101. D=A
  41102. //^^ push_d_to_stack
  41103. // #15523
  41104. @SP
  41105. // #15524
  41106. A=M
  41107. // #15525
  41108. M=D
  41109. // #15526
  41110. @SP
  41111. // #15527
  41112. M=M+1
  41113. //vv push_d_to_stack
  41114. //vv push_constant(51)
  41115. //
  41116. //// push constant 51
  41117. //^^ push_constant(51)
  41118. // #15528
  41119. @51
  41120. // #15529
  41121. D=A
  41122. //^^ push_d_to_stack
  41123. // #15530
  41124. @SP
  41125. // #15531
  41126. A=M
  41127. // #15532
  41128. M=D
  41129. // #15533
  41130. @SP
  41131. // #15534
  41132. M=M+1
  41133. //vv push_d_to_stack
  41134. //vv push_constant(51)
  41135. //
  41136. //// push constant 51
  41137. //^^ push_constant(51)
  41138. // #15535
  41139. @51
  41140. // #15536
  41141. D=A
  41142. //^^ push_d_to_stack
  41143. // #15537
  41144. @SP
  41145. // #15538
  41146. A=M
  41147. // #15539
  41148. M=D
  41149. // #15540
  41150. @SP
  41151. // #15541
  41152. M=M+1
  41153. //vv push_d_to_stack
  41154. //vv push_constant(51)
  41155. //
  41156. //// push constant 51
  41157. //^^ push_constant(51)
  41158. // #15542
  41159. @51
  41160. // #15543
  41161. D=A
  41162. //^^ push_d_to_stack
  41163. // #15544
  41164. @SP
  41165. // #15545
  41166. A=M
  41167. // #15546
  41168. M=D
  41169. // #15547
  41170. @SP
  41171. // #15548
  41172. M=M+1
  41173. //vv push_d_to_stack
  41174. //vv push_constant(51)
  41175. //
  41176. //// push constant 63
  41177. //^^ push_constant(63)
  41178. // #15549
  41179. @63
  41180. // #15550
  41181. D=A
  41182. //^^ push_d_to_stack
  41183. // #15551
  41184. @SP
  41185. // #15552
  41186. A=M
  41187. // #15553
  41188. M=D
  41189. // #15554
  41190. @SP
  41191. // #15555
  41192. M=M+1
  41193. //vv push_d_to_stack
  41194. //vv push_constant(63)
  41195. //
  41196. //// push constant 63
  41197. //^^ push_constant(63)
  41198. // #15556
  41199. @63
  41200. // #15557
  41201. D=A
  41202. //^^ push_d_to_stack
  41203. // #15558
  41204. @SP
  41205. // #15559
  41206. A=M
  41207. // #15560
  41208. M=D
  41209. // #15561
  41210. @SP
  41211. // #15562
  41212. M=M+1
  41213. //vv push_d_to_stack
  41214. //vv push_constant(63)
  41215. //
  41216. //// push constant 63
  41217. //^^ push_constant(63)
  41218. // #15563
  41219. @63
  41220. // #15564
  41221. D=A
  41222. //^^ push_d_to_stack
  41223. // #15565
  41224. @SP
  41225. // #15566
  41226. A=M
  41227. // #15567
  41228. M=D
  41229. // #15568
  41230. @SP
  41231. // #15569
  41232. M=M+1
  41233. //vv push_d_to_stack
  41234. //vv push_constant(63)
  41235. //
  41236. //// push constant 18
  41237. //^^ push_constant(18)
  41238. // #15570
  41239. @18
  41240. // #15571
  41241. D=A
  41242. //^^ push_d_to_stack
  41243. // #15572
  41244. @SP
  41245. // #15573
  41246. A=M
  41247. // #15574
  41248. M=D
  41249. // #15575
  41250. @SP
  41251. // #15576
  41252. M=M+1
  41253. //vv push_d_to_stack
  41254. //vv push_constant(18)
  41255. //
  41256. //// push constant 0
  41257. //^^ push_constant(0)
  41258. // #15577
  41259. @0
  41260. // #15578
  41261. D=A
  41262. //^^ push_d_to_stack
  41263. // #15579
  41264. @SP
  41265. // #15580
  41266. A=M
  41267. // #15581
  41268. M=D
  41269. // #15582
  41270. @SP
  41271. // #15583
  41272. M=M+1
  41273. //vv push_d_to_stack
  41274. //vv push_constant(0)
  41275. //
  41276. //// push constant 0
  41277. //^^ push_constant(0)
  41278. // #15584
  41279. @0
  41280. // #15585
  41281. D=A
  41282. //^^ push_d_to_stack
  41283. // #15586
  41284. @SP
  41285. // #15587
  41286. A=M
  41287. // #15588
  41288. M=D
  41289. // #15589
  41290. @SP
  41291. // #15590
  41292. M=M+1
  41293. //vv push_d_to_stack
  41294. //vv push_constant(0)
  41295. //
  41296. //// call Output.create 12
  41297. //^^ push_constant(RET_ADDR_131)
  41298. // #15591
  41299. @RET_ADDR_131
  41300. // #15592
  41301. D=A
  41302. //^^ push_d_to_stack
  41303. // #15593
  41304. @SP
  41305. // #15594
  41306. A=M
  41307. // #15595
  41308. M=D
  41309. // #15596
  41310. @SP
  41311. // #15597
  41312. M=M+1
  41313. //vv push_d_to_stack
  41314. //vv push_constant(RET_ADDR_131)
  41315. //push return-address
  41316. // #15598
  41317. @LCL
  41318. // #15599
  41319. D=M
  41320. //^^ push_d_to_stack
  41321. // #15600
  41322. @SP
  41323. // #15601
  41324. A=M
  41325. // #15602
  41326. M=D
  41327. // #15603
  41328. @SP
  41329. // #15604
  41330. M=M+1
  41331. //vv push_d_to_stack
  41332. //push LCL
  41333. // #15605
  41334. @ARG
  41335. // #15606
  41336. D=M
  41337. //^^ push_d_to_stack
  41338. // #15607
  41339. @SP
  41340. // #15608
  41341. A=M
  41342. // #15609
  41343. M=D
  41344. // #15610
  41345. @SP
  41346. // #15611
  41347. M=M+1
  41348. //vv push_d_to_stack
  41349. //push ARG
  41350. // #15612
  41351. @THIS
  41352. // #15613
  41353. D=M
  41354. //^^ push_d_to_stack
  41355. // #15614
  41356. @SP
  41357. // #15615
  41358. A=M
  41359. // #15616
  41360. M=D
  41361. // #15617
  41362. @SP
  41363. // #15618
  41364. M=M+1
  41365. //vv push_d_to_stack
  41366. //push THIS
  41367. // #15619
  41368. @THAT
  41369. // #15620
  41370. D=M
  41371. //^^ push_d_to_stack
  41372. // #15621
  41373. @SP
  41374. // #15622
  41375. A=M
  41376. // #15623
  41377. M=D
  41378. // #15624
  41379. @SP
  41380. // #15625
  41381. M=M+1
  41382. //vv push_d_to_stack
  41383. //push THAT
  41384. // #15626
  41385. @SP
  41386. // #15627
  41387. D=M
  41388. // #15628
  41389. @ARG
  41390. // #15629
  41391. M=D
  41392. // #15630
  41393. @17
  41394. // #15631
  41395. D=A
  41396. // #15632
  41397. @ARG
  41398. // #15633
  41399. M=M-D // ARG = SP - args - 5
  41400. // #15634
  41401. @SP
  41402. // #15635
  41403. D=M
  41404. // #15636
  41405. @LCL
  41406. // #15637
  41407. M=D // LCL = SP
  41408. // #15638
  41409. @Output.create
  41410. // #15639
  41411. 0;JMP
  41412. (RET_ADDR_131)
  41413. //
  41414. //// pop temp 0
  41415. //^^ pop_to_loc{5)
  41416. //^^ pop_stack_to_d
  41417. // #15640
  41418. @SP
  41419. // #15641
  41420. M=M-1
  41421. // #15642
  41422. A=M
  41423. // #15643
  41424. D=M
  41425. //vv pop_stack_to_d
  41426. // #15644
  41427. @5
  41428. // #15645
  41429. M=D
  41430. //vv pop_to_loc{5)
  41431. //
  41432. //// push constant 88
  41433. //^^ push_constant(88)
  41434. // #15646
  41435. @88
  41436. // #15647
  41437. D=A
  41438. //^^ push_d_to_stack
  41439. // #15648
  41440. @SP
  41441. // #15649
  41442. A=M
  41443. // #15650
  41444. M=D
  41445. // #15651
  41446. @SP
  41447. // #15652
  41448. M=M+1
  41449. //vv push_d_to_stack
  41450. //vv push_constant(88)
  41451. //
  41452. //// push constant 51
  41453. //^^ push_constant(51)
  41454. // #15653
  41455. @51
  41456. // #15654
  41457. D=A
  41458. //^^ push_d_to_stack
  41459. // #15655
  41460. @SP
  41461. // #15656
  41462. A=M
  41463. // #15657
  41464. M=D
  41465. // #15658
  41466. @SP
  41467. // #15659
  41468. M=M+1
  41469. //vv push_d_to_stack
  41470. //vv push_constant(51)
  41471. //
  41472. //// push constant 51
  41473. //^^ push_constant(51)
  41474. // #15660
  41475. @51
  41476. // #15661
  41477. D=A
  41478. //^^ push_d_to_stack
  41479. // #15662
  41480. @SP
  41481. // #15663
  41482. A=M
  41483. // #15664
  41484. M=D
  41485. // #15665
  41486. @SP
  41487. // #15666
  41488. M=M+1
  41489. //vv push_d_to_stack
  41490. //vv push_constant(51)
  41491. //
  41492. //// push constant 30
  41493. //^^ push_constant(30)
  41494. // #15667
  41495. @30
  41496. // #15668
  41497. D=A
  41498. //^^ push_d_to_stack
  41499. // #15669
  41500. @SP
  41501. // #15670
  41502. A=M
  41503. // #15671
  41504. M=D
  41505. // #15672
  41506. @SP
  41507. // #15673
  41508. M=M+1
  41509. //vv push_d_to_stack
  41510. //vv push_constant(30)
  41511. //
  41512. //// push constant 30
  41513. //^^ push_constant(30)
  41514. // #15674
  41515. @30
  41516. // #15675
  41517. D=A
  41518. //^^ push_d_to_stack
  41519. // #15676
  41520. @SP
  41521. // #15677
  41522. A=M
  41523. // #15678
  41524. M=D
  41525. // #15679
  41526. @SP
  41527. // #15680
  41528. M=M+1
  41529. //vv push_d_to_stack
  41530. //vv push_constant(30)
  41531. //
  41532. //// push constant 12
  41533. //^^ push_constant(12)
  41534. // #15681
  41535. @12
  41536. // #15682
  41537. D=A
  41538. //^^ push_d_to_stack
  41539. // #15683
  41540. @SP
  41541. // #15684
  41542. A=M
  41543. // #15685
  41544. M=D
  41545. // #15686
  41546. @SP
  41547. // #15687
  41548. M=M+1
  41549. //vv push_d_to_stack
  41550. //vv push_constant(12)
  41551. //
  41552. //// push constant 30
  41553. //^^ push_constant(30)
  41554. // #15688
  41555. @30
  41556. // #15689
  41557. D=A
  41558. //^^ push_d_to_stack
  41559. // #15690
  41560. @SP
  41561. // #15691
  41562. A=M
  41563. // #15692
  41564. M=D
  41565. // #15693
  41566. @SP
  41567. // #15694
  41568. M=M+1
  41569. //vv push_d_to_stack
  41570. //vv push_constant(30)
  41571. //
  41572. //// push constant 30
  41573. //^^ push_constant(30)
  41574. // #15695
  41575. @30
  41576. // #15696
  41577. D=A
  41578. //^^ push_d_to_stack
  41579. // #15697
  41580. @SP
  41581. // #15698
  41582. A=M
  41583. // #15699
  41584. M=D
  41585. // #15700
  41586. @SP
  41587. // #15701
  41588. M=M+1
  41589. //vv push_d_to_stack
  41590. //vv push_constant(30)
  41591. //
  41592. //// push constant 51
  41593. //^^ push_constant(51)
  41594. // #15702
  41595. @51
  41596. // #15703
  41597. D=A
  41598. //^^ push_d_to_stack
  41599. // #15704
  41600. @SP
  41601. // #15705
  41602. A=M
  41603. // #15706
  41604. M=D
  41605. // #15707
  41606. @SP
  41607. // #15708
  41608. M=M+1
  41609. //vv push_d_to_stack
  41610. //vv push_constant(51)
  41611. //
  41612. //// push constant 51
  41613. //^^ push_constant(51)
  41614. // #15709
  41615. @51
  41616. // #15710
  41617. D=A
  41618. //^^ push_d_to_stack
  41619. // #15711
  41620. @SP
  41621. // #15712
  41622. A=M
  41623. // #15713
  41624. M=D
  41625. // #15714
  41626. @SP
  41627. // #15715
  41628. M=M+1
  41629. //vv push_d_to_stack
  41630. //vv push_constant(51)
  41631. //
  41632. //// push constant 0
  41633. //^^ push_constant(0)
  41634. // #15716
  41635. @0
  41636. // #15717
  41637. D=A
  41638. //^^ push_d_to_stack
  41639. // #15718
  41640. @SP
  41641. // #15719
  41642. A=M
  41643. // #15720
  41644. M=D
  41645. // #15721
  41646. @SP
  41647. // #15722
  41648. M=M+1
  41649. //vv push_d_to_stack
  41650. //vv push_constant(0)
  41651. //
  41652. //// push constant 0
  41653. //^^ push_constant(0)
  41654. // #15723
  41655. @0
  41656. // #15724
  41657. D=A
  41658. //^^ push_d_to_stack
  41659. // #15725
  41660. @SP
  41661. // #15726
  41662. A=M
  41663. // #15727
  41664. M=D
  41665. // #15728
  41666. @SP
  41667. // #15729
  41668. M=M+1
  41669. //vv push_d_to_stack
  41670. //vv push_constant(0)
  41671. //
  41672. //// call Output.create 12
  41673. //^^ push_constant(RET_ADDR_132)
  41674. // #15730
  41675. @RET_ADDR_132
  41676. // #15731
  41677. D=A
  41678. //^^ push_d_to_stack
  41679. // #15732
  41680. @SP
  41681. // #15733
  41682. A=M
  41683. // #15734
  41684. M=D
  41685. // #15735
  41686. @SP
  41687. // #15736
  41688. M=M+1
  41689. //vv push_d_to_stack
  41690. //vv push_constant(RET_ADDR_132)
  41691. //push return-address
  41692. // #15737
  41693. @LCL
  41694. // #15738
  41695. D=M
  41696. //^^ push_d_to_stack
  41697. // #15739
  41698. @SP
  41699. // #15740
  41700. A=M
  41701. // #15741
  41702. M=D
  41703. // #15742
  41704. @SP
  41705. // #15743
  41706. M=M+1
  41707. //vv push_d_to_stack
  41708. //push LCL
  41709. // #15744
  41710. @ARG
  41711. // #15745
  41712. D=M
  41713. //^^ push_d_to_stack
  41714. // #15746
  41715. @SP
  41716. // #15747
  41717. A=M
  41718. // #15748
  41719. M=D
  41720. // #15749
  41721. @SP
  41722. // #15750
  41723. M=M+1
  41724. //vv push_d_to_stack
  41725. //push ARG
  41726. // #15751
  41727. @THIS
  41728. // #15752
  41729. D=M
  41730. //^^ push_d_to_stack
  41731. // #15753
  41732. @SP
  41733. // #15754
  41734. A=M
  41735. // #15755
  41736. M=D
  41737. // #15756
  41738. @SP
  41739. // #15757
  41740. M=M+1
  41741. //vv push_d_to_stack
  41742. //push THIS
  41743. // #15758
  41744. @THAT
  41745. // #15759
  41746. D=M
  41747. //^^ push_d_to_stack
  41748. // #15760
  41749. @SP
  41750. // #15761
  41751. A=M
  41752. // #15762
  41753. M=D
  41754. // #15763
  41755. @SP
  41756. // #15764
  41757. M=M+1
  41758. //vv push_d_to_stack
  41759. //push THAT
  41760. // #15765
  41761. @SP
  41762. // #15766
  41763. D=M
  41764. // #15767
  41765. @ARG
  41766. // #15768
  41767. M=D
  41768. // #15769
  41769. @17
  41770. // #15770
  41771. D=A
  41772. // #15771
  41773. @ARG
  41774. // #15772
  41775. M=M-D // ARG = SP - args - 5
  41776. // #15773
  41777. @SP
  41778. // #15774
  41779. D=M
  41780. // #15775
  41781. @LCL
  41782. // #15776
  41783. M=D // LCL = SP
  41784. // #15777
  41785. @Output.create
  41786. // #15778
  41787. 0;JMP
  41788. (RET_ADDR_132)
  41789. //
  41790. //// pop temp 0
  41791. //^^ pop_to_loc{5)
  41792. //^^ pop_stack_to_d
  41793. // #15779
  41794. @SP
  41795. // #15780
  41796. M=M-1
  41797. // #15781
  41798. A=M
  41799. // #15782
  41800. D=M
  41801. //vv pop_stack_to_d
  41802. // #15783
  41803. @5
  41804. // #15784
  41805. M=D
  41806. //vv pop_to_loc{5)
  41807. //
  41808. //// push constant 89
  41809. //^^ push_constant(89)
  41810. // #15785
  41811. @89
  41812. // #15786
  41813. D=A
  41814. //^^ push_d_to_stack
  41815. // #15787
  41816. @SP
  41817. // #15788
  41818. A=M
  41819. // #15789
  41820. M=D
  41821. // #15790
  41822. @SP
  41823. // #15791
  41824. M=M+1
  41825. //vv push_d_to_stack
  41826. //vv push_constant(89)
  41827. //
  41828. //// push constant 51
  41829. //^^ push_constant(51)
  41830. // #15792
  41831. @51
  41832. // #15793
  41833. D=A
  41834. //^^ push_d_to_stack
  41835. // #15794
  41836. @SP
  41837. // #15795
  41838. A=M
  41839. // #15796
  41840. M=D
  41841. // #15797
  41842. @SP
  41843. // #15798
  41844. M=M+1
  41845. //vv push_d_to_stack
  41846. //vv push_constant(51)
  41847. //
  41848. //// push constant 51
  41849. //^^ push_constant(51)
  41850. // #15799
  41851. @51
  41852. // #15800
  41853. D=A
  41854. //^^ push_d_to_stack
  41855. // #15801
  41856. @SP
  41857. // #15802
  41858. A=M
  41859. // #15803
  41860. M=D
  41861. // #15804
  41862. @SP
  41863. // #15805
  41864. M=M+1
  41865. //vv push_d_to_stack
  41866. //vv push_constant(51)
  41867. //
  41868. //// push constant 51
  41869. //^^ push_constant(51)
  41870. // #15806
  41871. @51
  41872. // #15807
  41873. D=A
  41874. //^^ push_d_to_stack
  41875. // #15808
  41876. @SP
  41877. // #15809
  41878. A=M
  41879. // #15810
  41880. M=D
  41881. // #15811
  41882. @SP
  41883. // #15812
  41884. M=M+1
  41885. //vv push_d_to_stack
  41886. //vv push_constant(51)
  41887. //
  41888. //// push constant 51
  41889. //^^ push_constant(51)
  41890. // #15813
  41891. @51
  41892. // #15814
  41893. D=A
  41894. //^^ push_d_to_stack
  41895. // #15815
  41896. @SP
  41897. // #15816
  41898. A=M
  41899. // #15817
  41900. M=D
  41901. // #15818
  41902. @SP
  41903. // #15819
  41904. M=M+1
  41905. //vv push_d_to_stack
  41906. //vv push_constant(51)
  41907. //
  41908. //// push constant 30
  41909. //^^ push_constant(30)
  41910. // #15820
  41911. @30
  41912. // #15821
  41913. D=A
  41914. //^^ push_d_to_stack
  41915. // #15822
  41916. @SP
  41917. // #15823
  41918. A=M
  41919. // #15824
  41920. M=D
  41921. // #15825
  41922. @SP
  41923. // #15826
  41924. M=M+1
  41925. //vv push_d_to_stack
  41926. //vv push_constant(30)
  41927. //
  41928. //// push constant 12
  41929. //^^ push_constant(12)
  41930. // #15827
  41931. @12
  41932. // #15828
  41933. D=A
  41934. //^^ push_d_to_stack
  41935. // #15829
  41936. @SP
  41937. // #15830
  41938. A=M
  41939. // #15831
  41940. M=D
  41941. // #15832
  41942. @SP
  41943. // #15833
  41944. M=M+1
  41945. //vv push_d_to_stack
  41946. //vv push_constant(12)
  41947. //
  41948. //// push constant 12
  41949. //^^ push_constant(12)
  41950. // #15834
  41951. @12
  41952. // #15835
  41953. D=A
  41954. //^^ push_d_to_stack
  41955. // #15836
  41956. @SP
  41957. // #15837
  41958. A=M
  41959. // #15838
  41960. M=D
  41961. // #15839
  41962. @SP
  41963. // #15840
  41964. M=M+1
  41965. //vv push_d_to_stack
  41966. //vv push_constant(12)
  41967. //
  41968. //// push constant 12
  41969. //^^ push_constant(12)
  41970. // #15841
  41971. @12
  41972. // #15842
  41973. D=A
  41974. //^^ push_d_to_stack
  41975. // #15843
  41976. @SP
  41977. // #15844
  41978. A=M
  41979. // #15845
  41980. M=D
  41981. // #15846
  41982. @SP
  41983. // #15847
  41984. M=M+1
  41985. //vv push_d_to_stack
  41986. //vv push_constant(12)
  41987. //
  41988. //// push constant 30
  41989. //^^ push_constant(30)
  41990. // #15848
  41991. @30
  41992. // #15849
  41993. D=A
  41994. //^^ push_d_to_stack
  41995. // #15850
  41996. @SP
  41997. // #15851
  41998. A=M
  41999. // #15852
  42000. M=D
  42001. // #15853
  42002. @SP
  42003. // #15854
  42004. M=M+1
  42005. //vv push_d_to_stack
  42006. //vv push_constant(30)
  42007. //
  42008. //// push constant 0
  42009. //^^ push_constant(0)
  42010. // #15855
  42011. @0
  42012. // #15856
  42013. D=A
  42014. //^^ push_d_to_stack
  42015. // #15857
  42016. @SP
  42017. // #15858
  42018. A=M
  42019. // #15859
  42020. M=D
  42021. // #15860
  42022. @SP
  42023. // #15861
  42024. M=M+1
  42025. //vv push_d_to_stack
  42026. //vv push_constant(0)
  42027. //
  42028. //// push constant 0
  42029. //^^ push_constant(0)
  42030. // #15862
  42031. @0
  42032. // #15863
  42033. D=A
  42034. //^^ push_d_to_stack
  42035. // #15864
  42036. @SP
  42037. // #15865
  42038. A=M
  42039. // #15866
  42040. M=D
  42041. // #15867
  42042. @SP
  42043. // #15868
  42044. M=M+1
  42045. //vv push_d_to_stack
  42046. //vv push_constant(0)
  42047. //
  42048. //// call Output.create 12
  42049. //^^ push_constant(RET_ADDR_133)
  42050. // #15869
  42051. @RET_ADDR_133
  42052. // #15870
  42053. D=A
  42054. //^^ push_d_to_stack
  42055. // #15871
  42056. @SP
  42057. // #15872
  42058. A=M
  42059. // #15873
  42060. M=D
  42061. // #15874
  42062. @SP
  42063. // #15875
  42064. M=M+1
  42065. //vv push_d_to_stack
  42066. //vv push_constant(RET_ADDR_133)
  42067. //push return-address
  42068. // #15876
  42069. @LCL
  42070. // #15877
  42071. D=M
  42072. //^^ push_d_to_stack
  42073. // #15878
  42074. @SP
  42075. // #15879
  42076. A=M
  42077. // #15880
  42078. M=D
  42079. // #15881
  42080. @SP
  42081. // #15882
  42082. M=M+1
  42083. //vv push_d_to_stack
  42084. //push LCL
  42085. // #15883
  42086. @ARG
  42087. // #15884
  42088. D=M
  42089. //^^ push_d_to_stack
  42090. // #15885
  42091. @SP
  42092. // #15886
  42093. A=M
  42094. // #15887
  42095. M=D
  42096. // #15888
  42097. @SP
  42098. // #15889
  42099. M=M+1
  42100. //vv push_d_to_stack
  42101. //push ARG
  42102. // #15890
  42103. @THIS
  42104. // #15891
  42105. D=M
  42106. //^^ push_d_to_stack
  42107. // #15892
  42108. @SP
  42109. // #15893
  42110. A=M
  42111. // #15894
  42112. M=D
  42113. // #15895
  42114. @SP
  42115. // #15896
  42116. M=M+1
  42117. //vv push_d_to_stack
  42118. //push THIS
  42119. // #15897
  42120. @THAT
  42121. // #15898
  42122. D=M
  42123. //^^ push_d_to_stack
  42124. // #15899
  42125. @SP
  42126. // #15900
  42127. A=M
  42128. // #15901
  42129. M=D
  42130. // #15902
  42131. @SP
  42132. // #15903
  42133. M=M+1
  42134. //vv push_d_to_stack
  42135. //push THAT
  42136. // #15904
  42137. @SP
  42138. // #15905
  42139. D=M
  42140. // #15906
  42141. @ARG
  42142. // #15907
  42143. M=D
  42144. // #15908
  42145. @17
  42146. // #15909
  42147. D=A
  42148. // #15910
  42149. @ARG
  42150. // #15911
  42151. M=M-D // ARG = SP - args - 5
  42152. // #15912
  42153. @SP
  42154. // #15913
  42155. D=M
  42156. // #15914
  42157. @LCL
  42158. // #15915
  42159. M=D // LCL = SP
  42160. // #15916
  42161. @Output.create
  42162. // #15917
  42163. 0;JMP
  42164. (RET_ADDR_133)
  42165. //
  42166. //// pop temp 0
  42167. //^^ pop_to_loc{5)
  42168. //^^ pop_stack_to_d
  42169. // #15918
  42170. @SP
  42171. // #15919
  42172. M=M-1
  42173. // #15920
  42174. A=M
  42175. // #15921
  42176. D=M
  42177. //vv pop_stack_to_d
  42178. // #15922
  42179. @5
  42180. // #15923
  42181. M=D
  42182. //vv pop_to_loc{5)
  42183. //
  42184. //// push constant 90
  42185. //^^ push_constant(90)
  42186. // #15924
  42187. @90
  42188. // #15925
  42189. D=A
  42190. //^^ push_d_to_stack
  42191. // #15926
  42192. @SP
  42193. // #15927
  42194. A=M
  42195. // #15928
  42196. M=D
  42197. // #15929
  42198. @SP
  42199. // #15930
  42200. M=M+1
  42201. //vv push_d_to_stack
  42202. //vv push_constant(90)
  42203. //
  42204. //// push constant 63
  42205. //^^ push_constant(63)
  42206. // #15931
  42207. @63
  42208. // #15932
  42209. D=A
  42210. //^^ push_d_to_stack
  42211. // #15933
  42212. @SP
  42213. // #15934
  42214. A=M
  42215. // #15935
  42216. M=D
  42217. // #15936
  42218. @SP
  42219. // #15937
  42220. M=M+1
  42221. //vv push_d_to_stack
  42222. //vv push_constant(63)
  42223. //
  42224. //// push constant 51
  42225. //^^ push_constant(51)
  42226. // #15938
  42227. @51
  42228. // #15939
  42229. D=A
  42230. //^^ push_d_to_stack
  42231. // #15940
  42232. @SP
  42233. // #15941
  42234. A=M
  42235. // #15942
  42236. M=D
  42237. // #15943
  42238. @SP
  42239. // #15944
  42240. M=M+1
  42241. //vv push_d_to_stack
  42242. //vv push_constant(51)
  42243. //
  42244. //// push constant 49
  42245. //^^ push_constant(49)
  42246. // #15945
  42247. @49
  42248. // #15946
  42249. D=A
  42250. //^^ push_d_to_stack
  42251. // #15947
  42252. @SP
  42253. // #15948
  42254. A=M
  42255. // #15949
  42256. M=D
  42257. // #15950
  42258. @SP
  42259. // #15951
  42260. M=M+1
  42261. //vv push_d_to_stack
  42262. //vv push_constant(49)
  42263. //
  42264. //// push constant 24
  42265. //^^ push_constant(24)
  42266. // #15952
  42267. @24
  42268. // #15953
  42269. D=A
  42270. //^^ push_d_to_stack
  42271. // #15954
  42272. @SP
  42273. // #15955
  42274. A=M
  42275. // #15956
  42276. M=D
  42277. // #15957
  42278. @SP
  42279. // #15958
  42280. M=M+1
  42281. //vv push_d_to_stack
  42282. //vv push_constant(24)
  42283. //
  42284. //// push constant 12
  42285. //^^ push_constant(12)
  42286. // #15959
  42287. @12
  42288. // #15960
  42289. D=A
  42290. //^^ push_d_to_stack
  42291. // #15961
  42292. @SP
  42293. // #15962
  42294. A=M
  42295. // #15963
  42296. M=D
  42297. // #15964
  42298. @SP
  42299. // #15965
  42300. M=M+1
  42301. //vv push_d_to_stack
  42302. //vv push_constant(12)
  42303. //
  42304. //// push constant 6
  42305. //^^ push_constant(6)
  42306. // #15966
  42307. @6
  42308. // #15967
  42309. D=A
  42310. //^^ push_d_to_stack
  42311. // #15968
  42312. @SP
  42313. // #15969
  42314. A=M
  42315. // #15970
  42316. M=D
  42317. // #15971
  42318. @SP
  42319. // #15972
  42320. M=M+1
  42321. //vv push_d_to_stack
  42322. //vv push_constant(6)
  42323. //
  42324. //// push constant 35
  42325. //^^ push_constant(35)
  42326. // #15973
  42327. @35
  42328. // #15974
  42329. D=A
  42330. //^^ push_d_to_stack
  42331. // #15975
  42332. @SP
  42333. // #15976
  42334. A=M
  42335. // #15977
  42336. M=D
  42337. // #15978
  42338. @SP
  42339. // #15979
  42340. M=M+1
  42341. //vv push_d_to_stack
  42342. //vv push_constant(35)
  42343. //
  42344. //// push constant 51
  42345. //^^ push_constant(51)
  42346. // #15980
  42347. @51
  42348. // #15981
  42349. D=A
  42350. //^^ push_d_to_stack
  42351. // #15982
  42352. @SP
  42353. // #15983
  42354. A=M
  42355. // #15984
  42356. M=D
  42357. // #15985
  42358. @SP
  42359. // #15986
  42360. M=M+1
  42361. //vv push_d_to_stack
  42362. //vv push_constant(51)
  42363. //
  42364. //// push constant 63
  42365. //^^ push_constant(63)
  42366. // #15987
  42367. @63
  42368. // #15988
  42369. D=A
  42370. //^^ push_d_to_stack
  42371. // #15989
  42372. @SP
  42373. // #15990
  42374. A=M
  42375. // #15991
  42376. M=D
  42377. // #15992
  42378. @SP
  42379. // #15993
  42380. M=M+1
  42381. //vv push_d_to_stack
  42382. //vv push_constant(63)
  42383. //
  42384. //// push constant 0
  42385. //^^ push_constant(0)
  42386. // #15994
  42387. @0
  42388. // #15995
  42389. D=A
  42390. //^^ push_d_to_stack
  42391. // #15996
  42392. @SP
  42393. // #15997
  42394. A=M
  42395. // #15998
  42396. M=D
  42397. // #15999
  42398. @SP
  42399. // #16000
  42400. M=M+1
  42401. //vv push_d_to_stack
  42402. //vv push_constant(0)
  42403. //
  42404. //// push constant 0
  42405. //^^ push_constant(0)
  42406. // #16001
  42407. @0
  42408. // #16002
  42409. D=A
  42410. //^^ push_d_to_stack
  42411. // #16003
  42412. @SP
  42413. // #16004
  42414. A=M
  42415. // #16005
  42416. M=D
  42417. // #16006
  42418. @SP
  42419. // #16007
  42420. M=M+1
  42421. //vv push_d_to_stack
  42422. //vv push_constant(0)
  42423. //
  42424. //// call Output.create 12
  42425. //^^ push_constant(RET_ADDR_134)
  42426. // #16008
  42427. @RET_ADDR_134
  42428. // #16009
  42429. D=A
  42430. //^^ push_d_to_stack
  42431. // #16010
  42432. @SP
  42433. // #16011
  42434. A=M
  42435. // #16012
  42436. M=D
  42437. // #16013
  42438. @SP
  42439. // #16014
  42440. M=M+1
  42441. //vv push_d_to_stack
  42442. //vv push_constant(RET_ADDR_134)
  42443. //push return-address
  42444. // #16015
  42445. @LCL
  42446. // #16016
  42447. D=M
  42448. //^^ push_d_to_stack
  42449. // #16017
  42450. @SP
  42451. // #16018
  42452. A=M
  42453. // #16019
  42454. M=D
  42455. // #16020
  42456. @SP
  42457. // #16021
  42458. M=M+1
  42459. //vv push_d_to_stack
  42460. //push LCL
  42461. // #16022
  42462. @ARG
  42463. // #16023
  42464. D=M
  42465. //^^ push_d_to_stack
  42466. // #16024
  42467. @SP
  42468. // #16025
  42469. A=M
  42470. // #16026
  42471. M=D
  42472. // #16027
  42473. @SP
  42474. // #16028
  42475. M=M+1
  42476. //vv push_d_to_stack
  42477. //push ARG
  42478. // #16029
  42479. @THIS
  42480. // #16030
  42481. D=M
  42482. //^^ push_d_to_stack
  42483. // #16031
  42484. @SP
  42485. // #16032
  42486. A=M
  42487. // #16033
  42488. M=D
  42489. // #16034
  42490. @SP
  42491. // #16035
  42492. M=M+1
  42493. //vv push_d_to_stack
  42494. //push THIS
  42495. // #16036
  42496. @THAT
  42497. // #16037
  42498. D=M
  42499. //^^ push_d_to_stack
  42500. // #16038
  42501. @SP
  42502. // #16039
  42503. A=M
  42504. // #16040
  42505. M=D
  42506. // #16041
  42507. @SP
  42508. // #16042
  42509. M=M+1
  42510. //vv push_d_to_stack
  42511. //push THAT
  42512. // #16043
  42513. @SP
  42514. // #16044
  42515. D=M
  42516. // #16045
  42517. @ARG
  42518. // #16046
  42519. M=D
  42520. // #16047
  42521. @17
  42522. // #16048
  42523. D=A
  42524. // #16049
  42525. @ARG
  42526. // #16050
  42527. M=M-D // ARG = SP - args - 5
  42528. // #16051
  42529. @SP
  42530. // #16052
  42531. D=M
  42532. // #16053
  42533. @LCL
  42534. // #16054
  42535. M=D // LCL = SP
  42536. // #16055
  42537. @Output.create
  42538. // #16056
  42539. 0;JMP
  42540. (RET_ADDR_134)
  42541. //
  42542. //// pop temp 0
  42543. //^^ pop_to_loc{5)
  42544. //^^ pop_stack_to_d
  42545. // #16057
  42546. @SP
  42547. // #16058
  42548. M=M-1
  42549. // #16059
  42550. A=M
  42551. // #16060
  42552. D=M
  42553. //vv pop_stack_to_d
  42554. // #16061
  42555. @5
  42556. // #16062
  42557. M=D
  42558. //vv pop_to_loc{5)
  42559. //
  42560. //// push constant 91
  42561. //^^ push_constant(91)
  42562. // #16063
  42563. @91
  42564. // #16064
  42565. D=A
  42566. //^^ push_d_to_stack
  42567. // #16065
  42568. @SP
  42569. // #16066
  42570. A=M
  42571. // #16067
  42572. M=D
  42573. // #16068
  42574. @SP
  42575. // #16069
  42576. M=M+1
  42577. //vv push_d_to_stack
  42578. //vv push_constant(91)
  42579. //
  42580. //// push constant 30
  42581. //^^ push_constant(30)
  42582. // #16070
  42583. @30
  42584. // #16071
  42585. D=A
  42586. //^^ push_d_to_stack
  42587. // #16072
  42588. @SP
  42589. // #16073
  42590. A=M
  42591. // #16074
  42592. M=D
  42593. // #16075
  42594. @SP
  42595. // #16076
  42596. M=M+1
  42597. //vv push_d_to_stack
  42598. //vv push_constant(30)
  42599. //
  42600. //// push constant 6
  42601. //^^ push_constant(6)
  42602. // #16077
  42603. @6
  42604. // #16078
  42605. D=A
  42606. //^^ push_d_to_stack
  42607. // #16079
  42608. @SP
  42609. // #16080
  42610. A=M
  42611. // #16081
  42612. M=D
  42613. // #16082
  42614. @SP
  42615. // #16083
  42616. M=M+1
  42617. //vv push_d_to_stack
  42618. //vv push_constant(6)
  42619. //
  42620. //// push constant 6
  42621. //^^ push_constant(6)
  42622. // #16084
  42623. @6
  42624. // #16085
  42625. D=A
  42626. //^^ push_d_to_stack
  42627. // #16086
  42628. @SP
  42629. // #16087
  42630. A=M
  42631. // #16088
  42632. M=D
  42633. // #16089
  42634. @SP
  42635. // #16090
  42636. M=M+1
  42637. //vv push_d_to_stack
  42638. //vv push_constant(6)
  42639. //
  42640. //// push constant 6
  42641. //^^ push_constant(6)
  42642. // #16091
  42643. @6
  42644. // #16092
  42645. D=A
  42646. //^^ push_d_to_stack
  42647. // #16093
  42648. @SP
  42649. // #16094
  42650. A=M
  42651. // #16095
  42652. M=D
  42653. // #16096
  42654. @SP
  42655. // #16097
  42656. M=M+1
  42657. //vv push_d_to_stack
  42658. //vv push_constant(6)
  42659. //
  42660. //// push constant 6
  42661. //^^ push_constant(6)
  42662. // #16098
  42663. @6
  42664. // #16099
  42665. D=A
  42666. //^^ push_d_to_stack
  42667. // #16100
  42668. @SP
  42669. // #16101
  42670. A=M
  42671. // #16102
  42672. M=D
  42673. // #16103
  42674. @SP
  42675. // #16104
  42676. M=M+1
  42677. //vv push_d_to_stack
  42678. //vv push_constant(6)
  42679. //
  42680. //// push constant 6
  42681. //^^ push_constant(6)
  42682. // #16105
  42683. @6
  42684. // #16106
  42685. D=A
  42686. //^^ push_d_to_stack
  42687. // #16107
  42688. @SP
  42689. // #16108
  42690. A=M
  42691. // #16109
  42692. M=D
  42693. // #16110
  42694. @SP
  42695. // #16111
  42696. M=M+1
  42697. //vv push_d_to_stack
  42698. //vv push_constant(6)
  42699. //
  42700. //// push constant 6
  42701. //^^ push_constant(6)
  42702. // #16112
  42703. @6
  42704. // #16113
  42705. D=A
  42706. //^^ push_d_to_stack
  42707. // #16114
  42708. @SP
  42709. // #16115
  42710. A=M
  42711. // #16116
  42712. M=D
  42713. // #16117
  42714. @SP
  42715. // #16118
  42716. M=M+1
  42717. //vv push_d_to_stack
  42718. //vv push_constant(6)
  42719. //
  42720. //// push constant 6
  42721. //^^ push_constant(6)
  42722. // #16119
  42723. @6
  42724. // #16120
  42725. D=A
  42726. //^^ push_d_to_stack
  42727. // #16121
  42728. @SP
  42729. // #16122
  42730. A=M
  42731. // #16123
  42732. M=D
  42733. // #16124
  42734. @SP
  42735. // #16125
  42736. M=M+1
  42737. //vv push_d_to_stack
  42738. //vv push_constant(6)
  42739. //
  42740. //// push constant 30
  42741. //^^ push_constant(30)
  42742. // #16126
  42743. @30
  42744. // #16127
  42745. D=A
  42746. //^^ push_d_to_stack
  42747. // #16128
  42748. @SP
  42749. // #16129
  42750. A=M
  42751. // #16130
  42752. M=D
  42753. // #16131
  42754. @SP
  42755. // #16132
  42756. M=M+1
  42757. //vv push_d_to_stack
  42758. //vv push_constant(30)
  42759. //
  42760. //// push constant 0
  42761. //^^ push_constant(0)
  42762. // #16133
  42763. @0
  42764. // #16134
  42765. D=A
  42766. //^^ push_d_to_stack
  42767. // #16135
  42768. @SP
  42769. // #16136
  42770. A=M
  42771. // #16137
  42772. M=D
  42773. // #16138
  42774. @SP
  42775. // #16139
  42776. M=M+1
  42777. //vv push_d_to_stack
  42778. //vv push_constant(0)
  42779. //
  42780. //// push constant 0
  42781. //^^ push_constant(0)
  42782. // #16140
  42783. @0
  42784. // #16141
  42785. D=A
  42786. //^^ push_d_to_stack
  42787. // #16142
  42788. @SP
  42789. // #16143
  42790. A=M
  42791. // #16144
  42792. M=D
  42793. // #16145
  42794. @SP
  42795. // #16146
  42796. M=M+1
  42797. //vv push_d_to_stack
  42798. //vv push_constant(0)
  42799. //
  42800. //// call Output.create 12
  42801. //^^ push_constant(RET_ADDR_135)
  42802. // #16147
  42803. @RET_ADDR_135
  42804. // #16148
  42805. D=A
  42806. //^^ push_d_to_stack
  42807. // #16149
  42808. @SP
  42809. // #16150
  42810. A=M
  42811. // #16151
  42812. M=D
  42813. // #16152
  42814. @SP
  42815. // #16153
  42816. M=M+1
  42817. //vv push_d_to_stack
  42818. //vv push_constant(RET_ADDR_135)
  42819. //push return-address
  42820. // #16154
  42821. @LCL
  42822. // #16155
  42823. D=M
  42824. //^^ push_d_to_stack
  42825. // #16156
  42826. @SP
  42827. // #16157
  42828. A=M
  42829. // #16158
  42830. M=D
  42831. // #16159
  42832. @SP
  42833. // #16160
  42834. M=M+1
  42835. //vv push_d_to_stack
  42836. //push LCL
  42837. // #16161
  42838. @ARG
  42839. // #16162
  42840. D=M
  42841. //^^ push_d_to_stack
  42842. // #16163
  42843. @SP
  42844. // #16164
  42845. A=M
  42846. // #16165
  42847. M=D
  42848. // #16166
  42849. @SP
  42850. // #16167
  42851. M=M+1
  42852. //vv push_d_to_stack
  42853. //push ARG
  42854. // #16168
  42855. @THIS
  42856. // #16169
  42857. D=M
  42858. //^^ push_d_to_stack
  42859. // #16170
  42860. @SP
  42861. // #16171
  42862. A=M
  42863. // #16172
  42864. M=D
  42865. // #16173
  42866. @SP
  42867. // #16174
  42868. M=M+1
  42869. //vv push_d_to_stack
  42870. //push THIS
  42871. // #16175
  42872. @THAT
  42873. // #16176
  42874. D=M
  42875. //^^ push_d_to_stack
  42876. // #16177
  42877. @SP
  42878. // #16178
  42879. A=M
  42880. // #16179
  42881. M=D
  42882. // #16180
  42883. @SP
  42884. // #16181
  42885. M=M+1
  42886. //vv push_d_to_stack
  42887. //push THAT
  42888. // #16182
  42889. @SP
  42890. // #16183
  42891. D=M
  42892. // #16184
  42893. @ARG
  42894. // #16185
  42895. M=D
  42896. // #16186
  42897. @17
  42898. // #16187
  42899. D=A
  42900. // #16188
  42901. @ARG
  42902. // #16189
  42903. M=M-D // ARG = SP - args - 5
  42904. // #16190
  42905. @SP
  42906. // #16191
  42907. D=M
  42908. // #16192
  42909. @LCL
  42910. // #16193
  42911. M=D // LCL = SP
  42912. // #16194
  42913. @Output.create
  42914. // #16195
  42915. 0;JMP
  42916. (RET_ADDR_135)
  42917. //
  42918. //// pop temp 0
  42919. //^^ pop_to_loc{5)
  42920. //^^ pop_stack_to_d
  42921. // #16196
  42922. @SP
  42923. // #16197
  42924. M=M-1
  42925. // #16198
  42926. A=M
  42927. // #16199
  42928. D=M
  42929. //vv pop_stack_to_d
  42930. // #16200
  42931. @5
  42932. // #16201
  42933. M=D
  42934. //vv pop_to_loc{5)
  42935. //
  42936. //// push constant 92
  42937. //^^ push_constant(92)
  42938. // #16202
  42939. @92
  42940. // #16203
  42941. D=A
  42942. //^^ push_d_to_stack
  42943. // #16204
  42944. @SP
  42945. // #16205
  42946. A=M
  42947. // #16206
  42948. M=D
  42949. // #16207
  42950. @SP
  42951. // #16208
  42952. M=M+1
  42953. //vv push_d_to_stack
  42954. //vv push_constant(92)
  42955. //
  42956. //// push constant 0
  42957. //^^ push_constant(0)
  42958. // #16209
  42959. @0
  42960. // #16210
  42961. D=A
  42962. //^^ push_d_to_stack
  42963. // #16211
  42964. @SP
  42965. // #16212
  42966. A=M
  42967. // #16213
  42968. M=D
  42969. // #16214
  42970. @SP
  42971. // #16215
  42972. M=M+1
  42973. //vv push_d_to_stack
  42974. //vv push_constant(0)
  42975. //
  42976. //// push constant 0
  42977. //^^ push_constant(0)
  42978. // #16216
  42979. @0
  42980. // #16217
  42981. D=A
  42982. //^^ push_d_to_stack
  42983. // #16218
  42984. @SP
  42985. // #16219
  42986. A=M
  42987. // #16220
  42988. M=D
  42989. // #16221
  42990. @SP
  42991. // #16222
  42992. M=M+1
  42993. //vv push_d_to_stack
  42994. //vv push_constant(0)
  42995. //
  42996. //// push constant 1
  42997. //^^ push_constant(1)
  42998. // #16223
  42999. @1
  43000. // #16224
  43001. D=A
  43002. //^^ push_d_to_stack
  43003. // #16225
  43004. @SP
  43005. // #16226
  43006. A=M
  43007. // #16227
  43008. M=D
  43009. // #16228
  43010. @SP
  43011. // #16229
  43012. M=M+1
  43013. //vv push_d_to_stack
  43014. //vv push_constant(1)
  43015. //
  43016. //// push constant 3
  43017. //^^ push_constant(3)
  43018. // #16230
  43019. @3
  43020. // #16231
  43021. D=A
  43022. //^^ push_d_to_stack
  43023. // #16232
  43024. @SP
  43025. // #16233
  43026. A=M
  43027. // #16234
  43028. M=D
  43029. // #16235
  43030. @SP
  43031. // #16236
  43032. M=M+1
  43033. //vv push_d_to_stack
  43034. //vv push_constant(3)
  43035. //
  43036. //// push constant 6
  43037. //^^ push_constant(6)
  43038. // #16237
  43039. @6
  43040. // #16238
  43041. D=A
  43042. //^^ push_d_to_stack
  43043. // #16239
  43044. @SP
  43045. // #16240
  43046. A=M
  43047. // #16241
  43048. M=D
  43049. // #16242
  43050. @SP
  43051. // #16243
  43052. M=M+1
  43053. //vv push_d_to_stack
  43054. //vv push_constant(6)
  43055. //
  43056. //// push constant 12
  43057. //^^ push_constant(12)
  43058. // #16244
  43059. @12
  43060. // #16245
  43061. D=A
  43062. //^^ push_d_to_stack
  43063. // #16246
  43064. @SP
  43065. // #16247
  43066. A=M
  43067. // #16248
  43068. M=D
  43069. // #16249
  43070. @SP
  43071. // #16250
  43072. M=M+1
  43073. //vv push_d_to_stack
  43074. //vv push_constant(12)
  43075. //
  43076. //// push constant 24
  43077. //^^ push_constant(24)
  43078. // #16251
  43079. @24
  43080. // #16252
  43081. D=A
  43082. //^^ push_d_to_stack
  43083. // #16253
  43084. @SP
  43085. // #16254
  43086. A=M
  43087. // #16255
  43088. M=D
  43089. // #16256
  43090. @SP
  43091. // #16257
  43092. M=M+1
  43093. //vv push_d_to_stack
  43094. //vv push_constant(24)
  43095. //
  43096. //// push constant 48
  43097. //^^ push_constant(48)
  43098. // #16258
  43099. @48
  43100. // #16259
  43101. D=A
  43102. //^^ push_d_to_stack
  43103. // #16260
  43104. @SP
  43105. // #16261
  43106. A=M
  43107. // #16262
  43108. M=D
  43109. // #16263
  43110. @SP
  43111. // #16264
  43112. M=M+1
  43113. //vv push_d_to_stack
  43114. //vv push_constant(48)
  43115. //
  43116. //// push constant 32
  43117. //^^ push_constant(32)
  43118. // #16265
  43119. @32
  43120. // #16266
  43121. D=A
  43122. //^^ push_d_to_stack
  43123. // #16267
  43124. @SP
  43125. // #16268
  43126. A=M
  43127. // #16269
  43128. M=D
  43129. // #16270
  43130. @SP
  43131. // #16271
  43132. M=M+1
  43133. //vv push_d_to_stack
  43134. //vv push_constant(32)
  43135. //
  43136. //// push constant 0
  43137. //^^ push_constant(0)
  43138. // #16272
  43139. @0
  43140. // #16273
  43141. D=A
  43142. //^^ push_d_to_stack
  43143. // #16274
  43144. @SP
  43145. // #16275
  43146. A=M
  43147. // #16276
  43148. M=D
  43149. // #16277
  43150. @SP
  43151. // #16278
  43152. M=M+1
  43153. //vv push_d_to_stack
  43154. //vv push_constant(0)
  43155. //
  43156. //// push constant 0
  43157. //^^ push_constant(0)
  43158. // #16279
  43159. @0
  43160. // #16280
  43161. D=A
  43162. //^^ push_d_to_stack
  43163. // #16281
  43164. @SP
  43165. // #16282
  43166. A=M
  43167. // #16283
  43168. M=D
  43169. // #16284
  43170. @SP
  43171. // #16285
  43172. M=M+1
  43173. //vv push_d_to_stack
  43174. //vv push_constant(0)
  43175. //
  43176. //// call Output.create 12
  43177. //^^ push_constant(RET_ADDR_136)
  43178. // #16286
  43179. @RET_ADDR_136
  43180. // #16287
  43181. D=A
  43182. //^^ push_d_to_stack
  43183. // #16288
  43184. @SP
  43185. // #16289
  43186. A=M
  43187. // #16290
  43188. M=D
  43189. // #16291
  43190. @SP
  43191. // #16292
  43192. M=M+1
  43193. //vv push_d_to_stack
  43194. //vv push_constant(RET_ADDR_136)
  43195. //push return-address
  43196. // #16293
  43197. @LCL
  43198. // #16294
  43199. D=M
  43200. //^^ push_d_to_stack
  43201. // #16295
  43202. @SP
  43203. // #16296
  43204. A=M
  43205. // #16297
  43206. M=D
  43207. // #16298
  43208. @SP
  43209. // #16299
  43210. M=M+1
  43211. //vv push_d_to_stack
  43212. //push LCL
  43213. // #16300
  43214. @ARG
  43215. // #16301
  43216. D=M
  43217. //^^ push_d_to_stack
  43218. // #16302
  43219. @SP
  43220. // #16303
  43221. A=M
  43222. // #16304
  43223. M=D
  43224. // #16305
  43225. @SP
  43226. // #16306
  43227. M=M+1
  43228. //vv push_d_to_stack
  43229. //push ARG
  43230. // #16307
  43231. @THIS
  43232. // #16308
  43233. D=M
  43234. //^^ push_d_to_stack
  43235. // #16309
  43236. @SP
  43237. // #16310
  43238. A=M
  43239. // #16311
  43240. M=D
  43241. // #16312
  43242. @SP
  43243. // #16313
  43244. M=M+1
  43245. //vv push_d_to_stack
  43246. //push THIS
  43247. // #16314
  43248. @THAT
  43249. // #16315
  43250. D=M
  43251. //^^ push_d_to_stack
  43252. // #16316
  43253. @SP
  43254. // #16317
  43255. A=M
  43256. // #16318
  43257. M=D
  43258. // #16319
  43259. @SP
  43260. // #16320
  43261. M=M+1
  43262. //vv push_d_to_stack
  43263. //push THAT
  43264. // #16321
  43265. @SP
  43266. // #16322
  43267. D=M
  43268. // #16323
  43269. @ARG
  43270. // #16324
  43271. M=D
  43272. // #16325
  43273. @17
  43274. // #16326
  43275. D=A
  43276. // #16327
  43277. @ARG
  43278. // #16328
  43279. M=M-D // ARG = SP - args - 5
  43280. // #16329
  43281. @SP
  43282. // #16330
  43283. D=M
  43284. // #16331
  43285. @LCL
  43286. // #16332
  43287. M=D // LCL = SP
  43288. // #16333
  43289. @Output.create
  43290. // #16334
  43291. 0;JMP
  43292. (RET_ADDR_136)
  43293. //
  43294. //// pop temp 0
  43295. //^^ pop_to_loc{5)
  43296. //^^ pop_stack_to_d
  43297. // #16335
  43298. @SP
  43299. // #16336
  43300. M=M-1
  43301. // #16337
  43302. A=M
  43303. // #16338
  43304. D=M
  43305. //vv pop_stack_to_d
  43306. // #16339
  43307. @5
  43308. // #16340
  43309. M=D
  43310. //vv pop_to_loc{5)
  43311. //
  43312. //// push constant 93
  43313. //^^ push_constant(93)
  43314. // #16341
  43315. @93
  43316. // #16342
  43317. D=A
  43318. //^^ push_d_to_stack
  43319. // #16343
  43320. @SP
  43321. // #16344
  43322. A=M
  43323. // #16345
  43324. M=D
  43325. // #16346
  43326. @SP
  43327. // #16347
  43328. M=M+1
  43329. //vv push_d_to_stack
  43330. //vv push_constant(93)
  43331. //
  43332. //// push constant 30
  43333. //^^ push_constant(30)
  43334. // #16348
  43335. @30
  43336. // #16349
  43337. D=A
  43338. //^^ push_d_to_stack
  43339. // #16350
  43340. @SP
  43341. // #16351
  43342. A=M
  43343. // #16352
  43344. M=D
  43345. // #16353
  43346. @SP
  43347. // #16354
  43348. M=M+1
  43349. //vv push_d_to_stack
  43350. //vv push_constant(30)
  43351. //
  43352. //// push constant 24
  43353. //^^ push_constant(24)
  43354. // #16355
  43355. @24
  43356. // #16356
  43357. D=A
  43358. //^^ push_d_to_stack
  43359. // #16357
  43360. @SP
  43361. // #16358
  43362. A=M
  43363. // #16359
  43364. M=D
  43365. // #16360
  43366. @SP
  43367. // #16361
  43368. M=M+1
  43369. //vv push_d_to_stack
  43370. //vv push_constant(24)
  43371. //
  43372. //// push constant 24
  43373. //^^ push_constant(24)
  43374. // #16362
  43375. @24
  43376. // #16363
  43377. D=A
  43378. //^^ push_d_to_stack
  43379. // #16364
  43380. @SP
  43381. // #16365
  43382. A=M
  43383. // #16366
  43384. M=D
  43385. // #16367
  43386. @SP
  43387. // #16368
  43388. M=M+1
  43389. //vv push_d_to_stack
  43390. //vv push_constant(24)
  43391. //
  43392. //// push constant 24
  43393. //^^ push_constant(24)
  43394. // #16369
  43395. @24
  43396. // #16370
  43397. D=A
  43398. //^^ push_d_to_stack
  43399. // #16371
  43400. @SP
  43401. // #16372
  43402. A=M
  43403. // #16373
  43404. M=D
  43405. // #16374
  43406. @SP
  43407. // #16375
  43408. M=M+1
  43409. //vv push_d_to_stack
  43410. //vv push_constant(24)
  43411. //
  43412. //// push constant 24
  43413. //^^ push_constant(24)
  43414. // #16376
  43415. @24
  43416. // #16377
  43417. D=A
  43418. //^^ push_d_to_stack
  43419. // #16378
  43420. @SP
  43421. // #16379
  43422. A=M
  43423. // #16380
  43424. M=D
  43425. // #16381
  43426. @SP
  43427. // #16382
  43428. M=M+1
  43429. //vv push_d_to_stack
  43430. //vv push_constant(24)
  43431. //
  43432. //// push constant 24
  43433. //^^ push_constant(24)
  43434. // #16383
  43435. @24
  43436. // #16384
  43437. D=A
  43438. //^^ push_d_to_stack
  43439. // #16385
  43440. @SP
  43441. // #16386
  43442. A=M
  43443. // #16387
  43444. M=D
  43445. // #16388
  43446. @SP
  43447. // #16389
  43448. M=M+1
  43449. //vv push_d_to_stack
  43450. //vv push_constant(24)
  43451. //
  43452. //// push constant 24
  43453. //^^ push_constant(24)
  43454. // #16390
  43455. @24
  43456. // #16391
  43457. D=A
  43458. //^^ push_d_to_stack
  43459. // #16392
  43460. @SP
  43461. // #16393
  43462. A=M
  43463. // #16394
  43464. M=D
  43465. // #16395
  43466. @SP
  43467. // #16396
  43468. M=M+1
  43469. //vv push_d_to_stack
  43470. //vv push_constant(24)
  43471. //
  43472. //// push constant 24
  43473. //^^ push_constant(24)
  43474. // #16397
  43475. @24
  43476. // #16398
  43477. D=A
  43478. //^^ push_d_to_stack
  43479. // #16399
  43480. @SP
  43481. // #16400
  43482. A=M
  43483. // #16401
  43484. M=D
  43485. // #16402
  43486. @SP
  43487. // #16403
  43488. M=M+1
  43489. //vv push_d_to_stack
  43490. //vv push_constant(24)
  43491. //
  43492. //// push constant 30
  43493. //^^ push_constant(30)
  43494. // #16404
  43495. @30
  43496. // #16405
  43497. D=A
  43498. //^^ push_d_to_stack
  43499. // #16406
  43500. @SP
  43501. // #16407
  43502. A=M
  43503. // #16408
  43504. M=D
  43505. // #16409
  43506. @SP
  43507. // #16410
  43508. M=M+1
  43509. //vv push_d_to_stack
  43510. //vv push_constant(30)
  43511. //
  43512. //// push constant 0
  43513. //^^ push_constant(0)
  43514. // #16411
  43515. @0
  43516. // #16412
  43517. D=A
  43518. //^^ push_d_to_stack
  43519. // #16413
  43520. @SP
  43521. // #16414
  43522. A=M
  43523. // #16415
  43524. M=D
  43525. // #16416
  43526. @SP
  43527. // #16417
  43528. M=M+1
  43529. //vv push_d_to_stack
  43530. //vv push_constant(0)
  43531. //
  43532. //// push constant 0
  43533. //^^ push_constant(0)
  43534. // #16418
  43535. @0
  43536. // #16419
  43537. D=A
  43538. //^^ push_d_to_stack
  43539. // #16420
  43540. @SP
  43541. // #16421
  43542. A=M
  43543. // #16422
  43544. M=D
  43545. // #16423
  43546. @SP
  43547. // #16424
  43548. M=M+1
  43549. //vv push_d_to_stack
  43550. //vv push_constant(0)
  43551. //
  43552. //// call Output.create 12
  43553. //^^ push_constant(RET_ADDR_137)
  43554. // #16425
  43555. @RET_ADDR_137
  43556. // #16426
  43557. D=A
  43558. //^^ push_d_to_stack
  43559. // #16427
  43560. @SP
  43561. // #16428
  43562. A=M
  43563. // #16429
  43564. M=D
  43565. // #16430
  43566. @SP
  43567. // #16431
  43568. M=M+1
  43569. //vv push_d_to_stack
  43570. //vv push_constant(RET_ADDR_137)
  43571. //push return-address
  43572. // #16432
  43573. @LCL
  43574. // #16433
  43575. D=M
  43576. //^^ push_d_to_stack
  43577. // #16434
  43578. @SP
  43579. // #16435
  43580. A=M
  43581. // #16436
  43582. M=D
  43583. // #16437
  43584. @SP
  43585. // #16438
  43586. M=M+1
  43587. //vv push_d_to_stack
  43588. //push LCL
  43589. // #16439
  43590. @ARG
  43591. // #16440
  43592. D=M
  43593. //^^ push_d_to_stack
  43594. // #16441
  43595. @SP
  43596. // #16442
  43597. A=M
  43598. // #16443
  43599. M=D
  43600. // #16444
  43601. @SP
  43602. // #16445
  43603. M=M+1
  43604. //vv push_d_to_stack
  43605. //push ARG
  43606. // #16446
  43607. @THIS
  43608. // #16447
  43609. D=M
  43610. //^^ push_d_to_stack
  43611. // #16448
  43612. @SP
  43613. // #16449
  43614. A=M
  43615. // #16450
  43616. M=D
  43617. // #16451
  43618. @SP
  43619. // #16452
  43620. M=M+1
  43621. //vv push_d_to_stack
  43622. //push THIS
  43623. // #16453
  43624. @THAT
  43625. // #16454
  43626. D=M
  43627. //^^ push_d_to_stack
  43628. // #16455
  43629. @SP
  43630. // #16456
  43631. A=M
  43632. // #16457
  43633. M=D
  43634. // #16458
  43635. @SP
  43636. // #16459
  43637. M=M+1
  43638. //vv push_d_to_stack
  43639. //push THAT
  43640. // #16460
  43641. @SP
  43642. // #16461
  43643. D=M
  43644. // #16462
  43645. @ARG
  43646. // #16463
  43647. M=D
  43648. // #16464
  43649. @17
  43650. // #16465
  43651. D=A
  43652. // #16466
  43653. @ARG
  43654. // #16467
  43655. M=M-D // ARG = SP - args - 5
  43656. // #16468
  43657. @SP
  43658. // #16469
  43659. D=M
  43660. // #16470
  43661. @LCL
  43662. // #16471
  43663. M=D // LCL = SP
  43664. // #16472
  43665. @Output.create
  43666. // #16473
  43667. 0;JMP
  43668. (RET_ADDR_137)
  43669. //
  43670. //// pop temp 0
  43671. //^^ pop_to_loc{5)
  43672. //^^ pop_stack_to_d
  43673. // #16474
  43674. @SP
  43675. // #16475
  43676. M=M-1
  43677. // #16476
  43678. A=M
  43679. // #16477
  43680. D=M
  43681. //vv pop_stack_to_d
  43682. // #16478
  43683. @5
  43684. // #16479
  43685. M=D
  43686. //vv pop_to_loc{5)
  43687. //
  43688. //// push constant 94
  43689. //^^ push_constant(94)
  43690. // #16480
  43691. @94
  43692. // #16481
  43693. D=A
  43694. //^^ push_d_to_stack
  43695. // #16482
  43696. @SP
  43697. // #16483
  43698. A=M
  43699. // #16484
  43700. M=D
  43701. // #16485
  43702. @SP
  43703. // #16486
  43704. M=M+1
  43705. //vv push_d_to_stack
  43706. //vv push_constant(94)
  43707. //
  43708. //// push constant 8
  43709. //^^ push_constant(8)
  43710. // #16487
  43711. @8
  43712. // #16488
  43713. D=A
  43714. //^^ push_d_to_stack
  43715. // #16489
  43716. @SP
  43717. // #16490
  43718. A=M
  43719. // #16491
  43720. M=D
  43721. // #16492
  43722. @SP
  43723. // #16493
  43724. M=M+1
  43725. //vv push_d_to_stack
  43726. //vv push_constant(8)
  43727. //
  43728. //// push constant 28
  43729. //^^ push_constant(28)
  43730. // #16494
  43731. @28
  43732. // #16495
  43733. D=A
  43734. //^^ push_d_to_stack
  43735. // #16496
  43736. @SP
  43737. // #16497
  43738. A=M
  43739. // #16498
  43740. M=D
  43741. // #16499
  43742. @SP
  43743. // #16500
  43744. M=M+1
  43745. //vv push_d_to_stack
  43746. //vv push_constant(28)
  43747. //
  43748. //// push constant 54
  43749. //^^ push_constant(54)
  43750. // #16501
  43751. @54
  43752. // #16502
  43753. D=A
  43754. //^^ push_d_to_stack
  43755. // #16503
  43756. @SP
  43757. // #16504
  43758. A=M
  43759. // #16505
  43760. M=D
  43761. // #16506
  43762. @SP
  43763. // #16507
  43764. M=M+1
  43765. //vv push_d_to_stack
  43766. //vv push_constant(54)
  43767. //
  43768. //// push constant 0
  43769. //^^ push_constant(0)
  43770. // #16508
  43771. @0
  43772. // #16509
  43773. D=A
  43774. //^^ push_d_to_stack
  43775. // #16510
  43776. @SP
  43777. // #16511
  43778. A=M
  43779. // #16512
  43780. M=D
  43781. // #16513
  43782. @SP
  43783. // #16514
  43784. M=M+1
  43785. //vv push_d_to_stack
  43786. //vv push_constant(0)
  43787. //
  43788. //// push constant 0
  43789. //^^ push_constant(0)
  43790. // #16515
  43791. @0
  43792. // #16516
  43793. D=A
  43794. //^^ push_d_to_stack
  43795. // #16517
  43796. @SP
  43797. // #16518
  43798. A=M
  43799. // #16519
  43800. M=D
  43801. // #16520
  43802. @SP
  43803. // #16521
  43804. M=M+1
  43805. //vv push_d_to_stack
  43806. //vv push_constant(0)
  43807. //
  43808. //// push constant 0
  43809. //^^ push_constant(0)
  43810. // #16522
  43811. @0
  43812. // #16523
  43813. D=A
  43814. //^^ push_d_to_stack
  43815. // #16524
  43816. @SP
  43817. // #16525
  43818. A=M
  43819. // #16526
  43820. M=D
  43821. // #16527
  43822. @SP
  43823. // #16528
  43824. M=M+1
  43825. //vv push_d_to_stack
  43826. //vv push_constant(0)
  43827. //
  43828. //// push constant 0
  43829. //^^ push_constant(0)
  43830. // #16529
  43831. @0
  43832. // #16530
  43833. D=A
  43834. //^^ push_d_to_stack
  43835. // #16531
  43836. @SP
  43837. // #16532
  43838. A=M
  43839. // #16533
  43840. M=D
  43841. // #16534
  43842. @SP
  43843. // #16535
  43844. M=M+1
  43845. //vv push_d_to_stack
  43846. //vv push_constant(0)
  43847. //
  43848. //// push constant 0
  43849. //^^ push_constant(0)
  43850. // #16536
  43851. @0
  43852. // #16537
  43853. D=A
  43854. //^^ push_d_to_stack
  43855. // #16538
  43856. @SP
  43857. // #16539
  43858. A=M
  43859. // #16540
  43860. M=D
  43861. // #16541
  43862. @SP
  43863. // #16542
  43864. M=M+1
  43865. //vv push_d_to_stack
  43866. //vv push_constant(0)
  43867. //
  43868. //// push constant 0
  43869. //^^ push_constant(0)
  43870. // #16543
  43871. @0
  43872. // #16544
  43873. D=A
  43874. //^^ push_d_to_stack
  43875. // #16545
  43876. @SP
  43877. // #16546
  43878. A=M
  43879. // #16547
  43880. M=D
  43881. // #16548
  43882. @SP
  43883. // #16549
  43884. M=M+1
  43885. //vv push_d_to_stack
  43886. //vv push_constant(0)
  43887. //
  43888. //// push constant 0
  43889. //^^ push_constant(0)
  43890. // #16550
  43891. @0
  43892. // #16551
  43893. D=A
  43894. //^^ push_d_to_stack
  43895. // #16552
  43896. @SP
  43897. // #16553
  43898. A=M
  43899. // #16554
  43900. M=D
  43901. // #16555
  43902. @SP
  43903. // #16556
  43904. M=M+1
  43905. //vv push_d_to_stack
  43906. //vv push_constant(0)
  43907. //
  43908. //// push constant 0
  43909. //^^ push_constant(0)
  43910. // #16557
  43911. @0
  43912. // #16558
  43913. D=A
  43914. //^^ push_d_to_stack
  43915. // #16559
  43916. @SP
  43917. // #16560
  43918. A=M
  43919. // #16561
  43920. M=D
  43921. // #16562
  43922. @SP
  43923. // #16563
  43924. M=M+1
  43925. //vv push_d_to_stack
  43926. //vv push_constant(0)
  43927. //
  43928. //// call Output.create 12
  43929. //^^ push_constant(RET_ADDR_138)
  43930. // #16564
  43931. @RET_ADDR_138
  43932. // #16565
  43933. D=A
  43934. //^^ push_d_to_stack
  43935. // #16566
  43936. @SP
  43937. // #16567
  43938. A=M
  43939. // #16568
  43940. M=D
  43941. // #16569
  43942. @SP
  43943. // #16570
  43944. M=M+1
  43945. //vv push_d_to_stack
  43946. //vv push_constant(RET_ADDR_138)
  43947. //push return-address
  43948. // #16571
  43949. @LCL
  43950. // #16572
  43951. D=M
  43952. //^^ push_d_to_stack
  43953. // #16573
  43954. @SP
  43955. // #16574
  43956. A=M
  43957. // #16575
  43958. M=D
  43959. // #16576
  43960. @SP
  43961. // #16577
  43962. M=M+1
  43963. //vv push_d_to_stack
  43964. //push LCL
  43965. // #16578
  43966. @ARG
  43967. // #16579
  43968. D=M
  43969. //^^ push_d_to_stack
  43970. // #16580
  43971. @SP
  43972. // #16581
  43973. A=M
  43974. // #16582
  43975. M=D
  43976. // #16583
  43977. @SP
  43978. // #16584
  43979. M=M+1
  43980. //vv push_d_to_stack
  43981. //push ARG
  43982. // #16585
  43983. @THIS
  43984. // #16586
  43985. D=M
  43986. //^^ push_d_to_stack
  43987. // #16587
  43988. @SP
  43989. // #16588
  43990. A=M
  43991. // #16589
  43992. M=D
  43993. // #16590
  43994. @SP
  43995. // #16591
  43996. M=M+1
  43997. //vv push_d_to_stack
  43998. //push THIS
  43999. // #16592
  44000. @THAT
  44001. // #16593
  44002. D=M
  44003. //^^ push_d_to_stack
  44004. // #16594
  44005. @SP
  44006. // #16595
  44007. A=M
  44008. // #16596
  44009. M=D
  44010. // #16597
  44011. @SP
  44012. // #16598
  44013. M=M+1
  44014. //vv push_d_to_stack
  44015. //push THAT
  44016. // #16599
  44017. @SP
  44018. // #16600
  44019. D=M
  44020. // #16601
  44021. @ARG
  44022. // #16602
  44023. M=D
  44024. // #16603
  44025. @17
  44026. // #16604
  44027. D=A
  44028. // #16605
  44029. @ARG
  44030. // #16606
  44031. M=M-D // ARG = SP - args - 5
  44032. // #16607
  44033. @SP
  44034. // #16608
  44035. D=M
  44036. // #16609
  44037. @LCL
  44038. // #16610
  44039. M=D // LCL = SP
  44040. // #16611
  44041. @Output.create
  44042. // #16612
  44043. 0;JMP
  44044. (RET_ADDR_138)
  44045. //
  44046. //// pop temp 0
  44047. //^^ pop_to_loc{5)
  44048. //^^ pop_stack_to_d
  44049. // #16613
  44050. @SP
  44051. // #16614
  44052. M=M-1
  44053. // #16615
  44054. A=M
  44055. // #16616
  44056. D=M
  44057. //vv pop_stack_to_d
  44058. // #16617
  44059. @5
  44060. // #16618
  44061. M=D
  44062. //vv pop_to_loc{5)
  44063. //
  44064. //// push constant 95
  44065. //^^ push_constant(95)
  44066. // #16619
  44067. @95
  44068. // #16620
  44069. D=A
  44070. //^^ push_d_to_stack
  44071. // #16621
  44072. @SP
  44073. // #16622
  44074. A=M
  44075. // #16623
  44076. M=D
  44077. // #16624
  44078. @SP
  44079. // #16625
  44080. M=M+1
  44081. //vv push_d_to_stack
  44082. //vv push_constant(95)
  44083. //
  44084. //// push constant 0
  44085. //^^ push_constant(0)
  44086. // #16626
  44087. @0
  44088. // #16627
  44089. D=A
  44090. //^^ push_d_to_stack
  44091. // #16628
  44092. @SP
  44093. // #16629
  44094. A=M
  44095. // #16630
  44096. M=D
  44097. // #16631
  44098. @SP
  44099. // #16632
  44100. M=M+1
  44101. //vv push_d_to_stack
  44102. //vv push_constant(0)
  44103. //
  44104. //// push constant 0
  44105. //^^ push_constant(0)
  44106. // #16633
  44107. @0
  44108. // #16634
  44109. D=A
  44110. //^^ push_d_to_stack
  44111. // #16635
  44112. @SP
  44113. // #16636
  44114. A=M
  44115. // #16637
  44116. M=D
  44117. // #16638
  44118. @SP
  44119. // #16639
  44120. M=M+1
  44121. //vv push_d_to_stack
  44122. //vv push_constant(0)
  44123. //
  44124. //// push constant 0
  44125. //^^ push_constant(0)
  44126. // #16640
  44127. @0
  44128. // #16641
  44129. D=A
  44130. //^^ push_d_to_stack
  44131. // #16642
  44132. @SP
  44133. // #16643
  44134. A=M
  44135. // #16644
  44136. M=D
  44137. // #16645
  44138. @SP
  44139. // #16646
  44140. M=M+1
  44141. //vv push_d_to_stack
  44142. //vv push_constant(0)
  44143. //
  44144. //// push constant 0
  44145. //^^ push_constant(0)
  44146. // #16647
  44147. @0
  44148. // #16648
  44149. D=A
  44150. //^^ push_d_to_stack
  44151. // #16649
  44152. @SP
  44153. // #16650
  44154. A=M
  44155. // #16651
  44156. M=D
  44157. // #16652
  44158. @SP
  44159. // #16653
  44160. M=M+1
  44161. //vv push_d_to_stack
  44162. //vv push_constant(0)
  44163. //
  44164. //// push constant 0
  44165. //^^ push_constant(0)
  44166. // #16654
  44167. @0
  44168. // #16655
  44169. D=A
  44170. //^^ push_d_to_stack
  44171. // #16656
  44172. @SP
  44173. // #16657
  44174. A=M
  44175. // #16658
  44176. M=D
  44177. // #16659
  44178. @SP
  44179. // #16660
  44180. M=M+1
  44181. //vv push_d_to_stack
  44182. //vv push_constant(0)
  44183. //
  44184. //// push constant 0
  44185. //^^ push_constant(0)
  44186. // #16661
  44187. @0
  44188. // #16662
  44189. D=A
  44190. //^^ push_d_to_stack
  44191. // #16663
  44192. @SP
  44193. // #16664
  44194. A=M
  44195. // #16665
  44196. M=D
  44197. // #16666
  44198. @SP
  44199. // #16667
  44200. M=M+1
  44201. //vv push_d_to_stack
  44202. //vv push_constant(0)
  44203. //
  44204. //// push constant 0
  44205. //^^ push_constant(0)
  44206. // #16668
  44207. @0
  44208. // #16669
  44209. D=A
  44210. //^^ push_d_to_stack
  44211. // #16670
  44212. @SP
  44213. // #16671
  44214. A=M
  44215. // #16672
  44216. M=D
  44217. // #16673
  44218. @SP
  44219. // #16674
  44220. M=M+1
  44221. //vv push_d_to_stack
  44222. //vv push_constant(0)
  44223. //
  44224. //// push constant 0
  44225. //^^ push_constant(0)
  44226. // #16675
  44227. @0
  44228. // #16676
  44229. D=A
  44230. //^^ push_d_to_stack
  44231. // #16677
  44232. @SP
  44233. // #16678
  44234. A=M
  44235. // #16679
  44236. M=D
  44237. // #16680
  44238. @SP
  44239. // #16681
  44240. M=M+1
  44241. //vv push_d_to_stack
  44242. //vv push_constant(0)
  44243. //
  44244. //// push constant 0
  44245. //^^ push_constant(0)
  44246. // #16682
  44247. @0
  44248. // #16683
  44249. D=A
  44250. //^^ push_d_to_stack
  44251. // #16684
  44252. @SP
  44253. // #16685
  44254. A=M
  44255. // #16686
  44256. M=D
  44257. // #16687
  44258. @SP
  44259. // #16688
  44260. M=M+1
  44261. //vv push_d_to_stack
  44262. //vv push_constant(0)
  44263. //
  44264. //// push constant 63
  44265. //^^ push_constant(63)
  44266. // #16689
  44267. @63
  44268. // #16690
  44269. D=A
  44270. //^^ push_d_to_stack
  44271. // #16691
  44272. @SP
  44273. // #16692
  44274. A=M
  44275. // #16693
  44276. M=D
  44277. // #16694
  44278. @SP
  44279. // #16695
  44280. M=M+1
  44281. //vv push_d_to_stack
  44282. //vv push_constant(63)
  44283. //
  44284. //// push constant 0
  44285. //^^ push_constant(0)
  44286. // #16696
  44287. @0
  44288. // #16697
  44289. D=A
  44290. //^^ push_d_to_stack
  44291. // #16698
  44292. @SP
  44293. // #16699
  44294. A=M
  44295. // #16700
  44296. M=D
  44297. // #16701
  44298. @SP
  44299. // #16702
  44300. M=M+1
  44301. //vv push_d_to_stack
  44302. //vv push_constant(0)
  44303. //
  44304. //// call Output.create 12
  44305. //^^ push_constant(RET_ADDR_139)
  44306. // #16703
  44307. @RET_ADDR_139
  44308. // #16704
  44309. D=A
  44310. //^^ push_d_to_stack
  44311. // #16705
  44312. @SP
  44313. // #16706
  44314. A=M
  44315. // #16707
  44316. M=D
  44317. // #16708
  44318. @SP
  44319. // #16709
  44320. M=M+1
  44321. //vv push_d_to_stack
  44322. //vv push_constant(RET_ADDR_139)
  44323. //push return-address
  44324. // #16710
  44325. @LCL
  44326. // #16711
  44327. D=M
  44328. //^^ push_d_to_stack
  44329. // #16712
  44330. @SP
  44331. // #16713
  44332. A=M
  44333. // #16714
  44334. M=D
  44335. // #16715
  44336. @SP
  44337. // #16716
  44338. M=M+1
  44339. //vv push_d_to_stack
  44340. //push LCL
  44341. // #16717
  44342. @ARG
  44343. // #16718
  44344. D=M
  44345. //^^ push_d_to_stack
  44346. // #16719
  44347. @SP
  44348. // #16720
  44349. A=M
  44350. // #16721
  44351. M=D
  44352. // #16722
  44353. @SP
  44354. // #16723
  44355. M=M+1
  44356. //vv push_d_to_stack
  44357. //push ARG
  44358. // #16724
  44359. @THIS
  44360. // #16725
  44361. D=M
  44362. //^^ push_d_to_stack
  44363. // #16726
  44364. @SP
  44365. // #16727
  44366. A=M
  44367. // #16728
  44368. M=D
  44369. // #16729
  44370. @SP
  44371. // #16730
  44372. M=M+1
  44373. //vv push_d_to_stack
  44374. //push THIS
  44375. // #16731
  44376. @THAT
  44377. // #16732
  44378. D=M
  44379. //^^ push_d_to_stack
  44380. // #16733
  44381. @SP
  44382. // #16734
  44383. A=M
  44384. // #16735
  44385. M=D
  44386. // #16736
  44387. @SP
  44388. // #16737
  44389. M=M+1
  44390. //vv push_d_to_stack
  44391. //push THAT
  44392. // #16738
  44393. @SP
  44394. // #16739
  44395. D=M
  44396. // #16740
  44397. @ARG
  44398. // #16741
  44399. M=D
  44400. // #16742
  44401. @17
  44402. // #16743
  44403. D=A
  44404. // #16744
  44405. @ARG
  44406. // #16745
  44407. M=M-D // ARG = SP - args - 5
  44408. // #16746
  44409. @SP
  44410. // #16747
  44411. D=M
  44412. // #16748
  44413. @LCL
  44414. // #16749
  44415. M=D // LCL = SP
  44416. // #16750
  44417. @Output.create
  44418. // #16751
  44419. 0;JMP
  44420. (RET_ADDR_139)
  44421. //
  44422. //// pop temp 0
  44423. //^^ pop_to_loc{5)
  44424. //^^ pop_stack_to_d
  44425. // #16752
  44426. @SP
  44427. // #16753
  44428. M=M-1
  44429. // #16754
  44430. A=M
  44431. // #16755
  44432. D=M
  44433. //vv pop_stack_to_d
  44434. // #16756
  44435. @5
  44436. // #16757
  44437. M=D
  44438. //vv pop_to_loc{5)
  44439. //
  44440. //// push constant 96
  44441. //^^ push_constant(96)
  44442. // #16758
  44443. @96
  44444. // #16759
  44445. D=A
  44446. //^^ push_d_to_stack
  44447. // #16760
  44448. @SP
  44449. // #16761
  44450. A=M
  44451. // #16762
  44452. M=D
  44453. // #16763
  44454. @SP
  44455. // #16764
  44456. M=M+1
  44457. //vv push_d_to_stack
  44458. //vv push_constant(96)
  44459. //
  44460. //// push constant 6
  44461. //^^ push_constant(6)
  44462. // #16765
  44463. @6
  44464. // #16766
  44465. D=A
  44466. //^^ push_d_to_stack
  44467. // #16767
  44468. @SP
  44469. // #16768
  44470. A=M
  44471. // #16769
  44472. M=D
  44473. // #16770
  44474. @SP
  44475. // #16771
  44476. M=M+1
  44477. //vv push_d_to_stack
  44478. //vv push_constant(6)
  44479. //
  44480. //// push constant 12
  44481. //^^ push_constant(12)
  44482. // #16772
  44483. @12
  44484. // #16773
  44485. D=A
  44486. //^^ push_d_to_stack
  44487. // #16774
  44488. @SP
  44489. // #16775
  44490. A=M
  44491. // #16776
  44492. M=D
  44493. // #16777
  44494. @SP
  44495. // #16778
  44496. M=M+1
  44497. //vv push_d_to_stack
  44498. //vv push_constant(12)
  44499. //
  44500. //// push constant 24
  44501. //^^ push_constant(24)
  44502. // #16779
  44503. @24
  44504. // #16780
  44505. D=A
  44506. //^^ push_d_to_stack
  44507. // #16781
  44508. @SP
  44509. // #16782
  44510. A=M
  44511. // #16783
  44512. M=D
  44513. // #16784
  44514. @SP
  44515. // #16785
  44516. M=M+1
  44517. //vv push_d_to_stack
  44518. //vv push_constant(24)
  44519. //
  44520. //// push constant 0
  44521. //^^ push_constant(0)
  44522. // #16786
  44523. @0
  44524. // #16787
  44525. D=A
  44526. //^^ push_d_to_stack
  44527. // #16788
  44528. @SP
  44529. // #16789
  44530. A=M
  44531. // #16790
  44532. M=D
  44533. // #16791
  44534. @SP
  44535. // #16792
  44536. M=M+1
  44537. //vv push_d_to_stack
  44538. //vv push_constant(0)
  44539. //
  44540. //// push constant 0
  44541. //^^ push_constant(0)
  44542. // #16793
  44543. @0
  44544. // #16794
  44545. D=A
  44546. //^^ push_d_to_stack
  44547. // #16795
  44548. @SP
  44549. // #16796
  44550. A=M
  44551. // #16797
  44552. M=D
  44553. // #16798
  44554. @SP
  44555. // #16799
  44556. M=M+1
  44557. //vv push_d_to_stack
  44558. //vv push_constant(0)
  44559. //
  44560. //// push constant 0
  44561. //^^ push_constant(0)
  44562. // #16800
  44563. @0
  44564. // #16801
  44565. D=A
  44566. //^^ push_d_to_stack
  44567. // #16802
  44568. @SP
  44569. // #16803
  44570. A=M
  44571. // #16804
  44572. M=D
  44573. // #16805
  44574. @SP
  44575. // #16806
  44576. M=M+1
  44577. //vv push_d_to_stack
  44578. //vv push_constant(0)
  44579. //
  44580. //// push constant 0
  44581. //^^ push_constant(0)
  44582. // #16807
  44583. @0
  44584. // #16808
  44585. D=A
  44586. //^^ push_d_to_stack
  44587. // #16809
  44588. @SP
  44589. // #16810
  44590. A=M
  44591. // #16811
  44592. M=D
  44593. // #16812
  44594. @SP
  44595. // #16813
  44596. M=M+1
  44597. //vv push_d_to_stack
  44598. //vv push_constant(0)
  44599. //
  44600. //// push constant 0
  44601. //^^ push_constant(0)
  44602. // #16814
  44603. @0
  44604. // #16815
  44605. D=A
  44606. //^^ push_d_to_stack
  44607. // #16816
  44608. @SP
  44609. // #16817
  44610. A=M
  44611. // #16818
  44612. M=D
  44613. // #16819
  44614. @SP
  44615. // #16820
  44616. M=M+1
  44617. //vv push_d_to_stack
  44618. //vv push_constant(0)
  44619. //
  44620. //// push constant 0
  44621. //^^ push_constant(0)
  44622. // #16821
  44623. @0
  44624. // #16822
  44625. D=A
  44626. //^^ push_d_to_stack
  44627. // #16823
  44628. @SP
  44629. // #16824
  44630. A=M
  44631. // #16825
  44632. M=D
  44633. // #16826
  44634. @SP
  44635. // #16827
  44636. M=M+1
  44637. //vv push_d_to_stack
  44638. //vv push_constant(0)
  44639. //
  44640. //// push constant 0
  44641. //^^ push_constant(0)
  44642. // #16828
  44643. @0
  44644. // #16829
  44645. D=A
  44646. //^^ push_d_to_stack
  44647. // #16830
  44648. @SP
  44649. // #16831
  44650. A=M
  44651. // #16832
  44652. M=D
  44653. // #16833
  44654. @SP
  44655. // #16834
  44656. M=M+1
  44657. //vv push_d_to_stack
  44658. //vv push_constant(0)
  44659. //
  44660. //// push constant 0
  44661. //^^ push_constant(0)
  44662. // #16835
  44663. @0
  44664. // #16836
  44665. D=A
  44666. //^^ push_d_to_stack
  44667. // #16837
  44668. @SP
  44669. // #16838
  44670. A=M
  44671. // #16839
  44672. M=D
  44673. // #16840
  44674. @SP
  44675. // #16841
  44676. M=M+1
  44677. //vv push_d_to_stack
  44678. //vv push_constant(0)
  44679. //
  44680. //// call Output.create 12
  44681. //^^ push_constant(RET_ADDR_140)
  44682. // #16842
  44683. @RET_ADDR_140
  44684. // #16843
  44685. D=A
  44686. //^^ push_d_to_stack
  44687. // #16844
  44688. @SP
  44689. // #16845
  44690. A=M
  44691. // #16846
  44692. M=D
  44693. // #16847
  44694. @SP
  44695. // #16848
  44696. M=M+1
  44697. //vv push_d_to_stack
  44698. //vv push_constant(RET_ADDR_140)
  44699. //push return-address
  44700. // #16849
  44701. @LCL
  44702. // #16850
  44703. D=M
  44704. //^^ push_d_to_stack
  44705. // #16851
  44706. @SP
  44707. // #16852
  44708. A=M
  44709. // #16853
  44710. M=D
  44711. // #16854
  44712. @SP
  44713. // #16855
  44714. M=M+1
  44715. //vv push_d_to_stack
  44716. //push LCL
  44717. // #16856
  44718. @ARG
  44719. // #16857
  44720. D=M
  44721. //^^ push_d_to_stack
  44722. // #16858
  44723. @SP
  44724. // #16859
  44725. A=M
  44726. // #16860
  44727. M=D
  44728. // #16861
  44729. @SP
  44730. // #16862
  44731. M=M+1
  44732. //vv push_d_to_stack
  44733. //push ARG
  44734. // #16863
  44735. @THIS
  44736. // #16864
  44737. D=M
  44738. //^^ push_d_to_stack
  44739. // #16865
  44740. @SP
  44741. // #16866
  44742. A=M
  44743. // #16867
  44744. M=D
  44745. // #16868
  44746. @SP
  44747. // #16869
  44748. M=M+1
  44749. //vv push_d_to_stack
  44750. //push THIS
  44751. // #16870
  44752. @THAT
  44753. // #16871
  44754. D=M
  44755. //^^ push_d_to_stack
  44756. // #16872
  44757. @SP
  44758. // #16873
  44759. A=M
  44760. // #16874
  44761. M=D
  44762. // #16875
  44763. @SP
  44764. // #16876
  44765. M=M+1
  44766. //vv push_d_to_stack
  44767. //push THAT
  44768. // #16877
  44769. @SP
  44770. // #16878
  44771. D=M
  44772. // #16879
  44773. @ARG
  44774. // #16880
  44775. M=D
  44776. // #16881
  44777. @17
  44778. // #16882
  44779. D=A
  44780. // #16883
  44781. @ARG
  44782. // #16884
  44783. M=M-D // ARG = SP - args - 5
  44784. // #16885
  44785. @SP
  44786. // #16886
  44787. D=M
  44788. // #16887
  44789. @LCL
  44790. // #16888
  44791. M=D // LCL = SP
  44792. // #16889
  44793. @Output.create
  44794. // #16890
  44795. 0;JMP
  44796. (RET_ADDR_140)
  44797. //
  44798. //// pop temp 0
  44799. //^^ pop_to_loc{5)
  44800. //^^ pop_stack_to_d
  44801. // #16891
  44802. @SP
  44803. // #16892
  44804. M=M-1
  44805. // #16893
  44806. A=M
  44807. // #16894
  44808. D=M
  44809. //vv pop_stack_to_d
  44810. // #16895
  44811. @5
  44812. // #16896
  44813. M=D
  44814. //vv pop_to_loc{5)
  44815. //
  44816. //// push constant 97
  44817. //^^ push_constant(97)
  44818. // #16897
  44819. @97
  44820. // #16898
  44821. D=A
  44822. //^^ push_d_to_stack
  44823. // #16899
  44824. @SP
  44825. // #16900
  44826. A=M
  44827. // #16901
  44828. M=D
  44829. // #16902
  44830. @SP
  44831. // #16903
  44832. M=M+1
  44833. //vv push_d_to_stack
  44834. //vv push_constant(97)
  44835. //
  44836. //// push constant 0
  44837. //^^ push_constant(0)
  44838. // #16904
  44839. @0
  44840. // #16905
  44841. D=A
  44842. //^^ push_d_to_stack
  44843. // #16906
  44844. @SP
  44845. // #16907
  44846. A=M
  44847. // #16908
  44848. M=D
  44849. // #16909
  44850. @SP
  44851. // #16910
  44852. M=M+1
  44853. //vv push_d_to_stack
  44854. //vv push_constant(0)
  44855. //
  44856. //// push constant 0
  44857. //^^ push_constant(0)
  44858. // #16911
  44859. @0
  44860. // #16912
  44861. D=A
  44862. //^^ push_d_to_stack
  44863. // #16913
  44864. @SP
  44865. // #16914
  44866. A=M
  44867. // #16915
  44868. M=D
  44869. // #16916
  44870. @SP
  44871. // #16917
  44872. M=M+1
  44873. //vv push_d_to_stack
  44874. //vv push_constant(0)
  44875. //
  44876. //// push constant 0
  44877. //^^ push_constant(0)
  44878. // #16918
  44879. @0
  44880. // #16919
  44881. D=A
  44882. //^^ push_d_to_stack
  44883. // #16920
  44884. @SP
  44885. // #16921
  44886. A=M
  44887. // #16922
  44888. M=D
  44889. // #16923
  44890. @SP
  44891. // #16924
  44892. M=M+1
  44893. //vv push_d_to_stack
  44894. //vv push_constant(0)
  44895. //
  44896. //// push constant 14
  44897. //^^ push_constant(14)
  44898. // #16925
  44899. @14
  44900. // #16926
  44901. D=A
  44902. //^^ push_d_to_stack
  44903. // #16927
  44904. @SP
  44905. // #16928
  44906. A=M
  44907. // #16929
  44908. M=D
  44909. // #16930
  44910. @SP
  44911. // #16931
  44912. M=M+1
  44913. //vv push_d_to_stack
  44914. //vv push_constant(14)
  44915. //
  44916. //// push constant 24
  44917. //^^ push_constant(24)
  44918. // #16932
  44919. @24
  44920. // #16933
  44921. D=A
  44922. //^^ push_d_to_stack
  44923. // #16934
  44924. @SP
  44925. // #16935
  44926. A=M
  44927. // #16936
  44928. M=D
  44929. // #16937
  44930. @SP
  44931. // #16938
  44932. M=M+1
  44933. //vv push_d_to_stack
  44934. //vv push_constant(24)
  44935. //
  44936. //// push constant 30
  44937. //^^ push_constant(30)
  44938. // #16939
  44939. @30
  44940. // #16940
  44941. D=A
  44942. //^^ push_d_to_stack
  44943. // #16941
  44944. @SP
  44945. // #16942
  44946. A=M
  44947. // #16943
  44948. M=D
  44949. // #16944
  44950. @SP
  44951. // #16945
  44952. M=M+1
  44953. //vv push_d_to_stack
  44954. //vv push_constant(30)
  44955. //
  44956. //// push constant 27
  44957. //^^ push_constant(27)
  44958. // #16946
  44959. @27
  44960. // #16947
  44961. D=A
  44962. //^^ push_d_to_stack
  44963. // #16948
  44964. @SP
  44965. // #16949
  44966. A=M
  44967. // #16950
  44968. M=D
  44969. // #16951
  44970. @SP
  44971. // #16952
  44972. M=M+1
  44973. //vv push_d_to_stack
  44974. //vv push_constant(27)
  44975. //
  44976. //// push constant 27
  44977. //^^ push_constant(27)
  44978. // #16953
  44979. @27
  44980. // #16954
  44981. D=A
  44982. //^^ push_d_to_stack
  44983. // #16955
  44984. @SP
  44985. // #16956
  44986. A=M
  44987. // #16957
  44988. M=D
  44989. // #16958
  44990. @SP
  44991. // #16959
  44992. M=M+1
  44993. //vv push_d_to_stack
  44994. //vv push_constant(27)
  44995. //
  44996. //// push constant 54
  44997. //^^ push_constant(54)
  44998. // #16960
  44999. @54
  45000. // #16961
  45001. D=A
  45002. //^^ push_d_to_stack
  45003. // #16962
  45004. @SP
  45005. // #16963
  45006. A=M
  45007. // #16964
  45008. M=D
  45009. // #16965
  45010. @SP
  45011. // #16966
  45012. M=M+1
  45013. //vv push_d_to_stack
  45014. //vv push_constant(54)
  45015. //
  45016. //// push constant 0
  45017. //^^ push_constant(0)
  45018. // #16967
  45019. @0
  45020. // #16968
  45021. D=A
  45022. //^^ push_d_to_stack
  45023. // #16969
  45024. @SP
  45025. // #16970
  45026. A=M
  45027. // #16971
  45028. M=D
  45029. // #16972
  45030. @SP
  45031. // #16973
  45032. M=M+1
  45033. //vv push_d_to_stack
  45034. //vv push_constant(0)
  45035. //
  45036. //// push constant 0
  45037. //^^ push_constant(0)
  45038. // #16974
  45039. @0
  45040. // #16975
  45041. D=A
  45042. //^^ push_d_to_stack
  45043. // #16976
  45044. @SP
  45045. // #16977
  45046. A=M
  45047. // #16978
  45048. M=D
  45049. // #16979
  45050. @SP
  45051. // #16980
  45052. M=M+1
  45053. //vv push_d_to_stack
  45054. //vv push_constant(0)
  45055. //
  45056. //// call Output.create 12
  45057. //^^ push_constant(RET_ADDR_141)
  45058. // #16981
  45059. @RET_ADDR_141
  45060. // #16982
  45061. D=A
  45062. //^^ push_d_to_stack
  45063. // #16983
  45064. @SP
  45065. // #16984
  45066. A=M
  45067. // #16985
  45068. M=D
  45069. // #16986
  45070. @SP
  45071. // #16987
  45072. M=M+1
  45073. //vv push_d_to_stack
  45074. //vv push_constant(RET_ADDR_141)
  45075. //push return-address
  45076. // #16988
  45077. @LCL
  45078. // #16989
  45079. D=M
  45080. //^^ push_d_to_stack
  45081. // #16990
  45082. @SP
  45083. // #16991
  45084. A=M
  45085. // #16992
  45086. M=D
  45087. // #16993
  45088. @SP
  45089. // #16994
  45090. M=M+1
  45091. //vv push_d_to_stack
  45092. //push LCL
  45093. // #16995
  45094. @ARG
  45095. // #16996
  45096. D=M
  45097. //^^ push_d_to_stack
  45098. // #16997
  45099. @SP
  45100. // #16998
  45101. A=M
  45102. // #16999
  45103. M=D
  45104. // #17000
  45105. @SP
  45106. // #17001
  45107. M=M+1
  45108. //vv push_d_to_stack
  45109. //push ARG
  45110. // #17002
  45111. @THIS
  45112. // #17003
  45113. D=M
  45114. //^^ push_d_to_stack
  45115. // #17004
  45116. @SP
  45117. // #17005
  45118. A=M
  45119. // #17006
  45120. M=D
  45121. // #17007
  45122. @SP
  45123. // #17008
  45124. M=M+1
  45125. //vv push_d_to_stack
  45126. //push THIS
  45127. // #17009
  45128. @THAT
  45129. // #17010
  45130. D=M
  45131. //^^ push_d_to_stack
  45132. // #17011
  45133. @SP
  45134. // #17012
  45135. A=M
  45136. // #17013
  45137. M=D
  45138. // #17014
  45139. @SP
  45140. // #17015
  45141. M=M+1
  45142. //vv push_d_to_stack
  45143. //push THAT
  45144. // #17016
  45145. @SP
  45146. // #17017
  45147. D=M
  45148. // #17018
  45149. @ARG
  45150. // #17019
  45151. M=D
  45152. // #17020
  45153. @17
  45154. // #17021
  45155. D=A
  45156. // #17022
  45157. @ARG
  45158. // #17023
  45159. M=M-D // ARG = SP - args - 5
  45160. // #17024
  45161. @SP
  45162. // #17025
  45163. D=M
  45164. // #17026
  45165. @LCL
  45166. // #17027
  45167. M=D // LCL = SP
  45168. // #17028
  45169. @Output.create
  45170. // #17029
  45171. 0;JMP
  45172. (RET_ADDR_141)
  45173. //
  45174. //// pop temp 0
  45175. //^^ pop_to_loc{5)
  45176. //^^ pop_stack_to_d
  45177. // #17030
  45178. @SP
  45179. // #17031
  45180. M=M-1
  45181. // #17032
  45182. A=M
  45183. // #17033
  45184. D=M
  45185. //vv pop_stack_to_d
  45186. // #17034
  45187. @5
  45188. // #17035
  45189. M=D
  45190. //vv pop_to_loc{5)
  45191. //
  45192. //// push constant 98
  45193. //^^ push_constant(98)
  45194. // #17036
  45195. @98
  45196. // #17037
  45197. D=A
  45198. //^^ push_d_to_stack
  45199. // #17038
  45200. @SP
  45201. // #17039
  45202. A=M
  45203. // #17040
  45204. M=D
  45205. // #17041
  45206. @SP
  45207. // #17042
  45208. M=M+1
  45209. //vv push_d_to_stack
  45210. //vv push_constant(98)
  45211. //
  45212. //// push constant 3
  45213. //^^ push_constant(3)
  45214. // #17043
  45215. @3
  45216. // #17044
  45217. D=A
  45218. //^^ push_d_to_stack
  45219. // #17045
  45220. @SP
  45221. // #17046
  45222. A=M
  45223. // #17047
  45224. M=D
  45225. // #17048
  45226. @SP
  45227. // #17049
  45228. M=M+1
  45229. //vv push_d_to_stack
  45230. //vv push_constant(3)
  45231. //
  45232. //// push constant 3
  45233. //^^ push_constant(3)
  45234. // #17050
  45235. @3
  45236. // #17051
  45237. D=A
  45238. //^^ push_d_to_stack
  45239. // #17052
  45240. @SP
  45241. // #17053
  45242. A=M
  45243. // #17054
  45244. M=D
  45245. // #17055
  45246. @SP
  45247. // #17056
  45248. M=M+1
  45249. //vv push_d_to_stack
  45250. //vv push_constant(3)
  45251. //
  45252. //// push constant 3
  45253. //^^ push_constant(3)
  45254. // #17057
  45255. @3
  45256. // #17058
  45257. D=A
  45258. //^^ push_d_to_stack
  45259. // #17059
  45260. @SP
  45261. // #17060
  45262. A=M
  45263. // #17061
  45264. M=D
  45265. // #17062
  45266. @SP
  45267. // #17063
  45268. M=M+1
  45269. //vv push_d_to_stack
  45270. //vv push_constant(3)
  45271. //
  45272. //// push constant 15
  45273. //^^ push_constant(15)
  45274. // #17064
  45275. @15
  45276. // #17065
  45277. D=A
  45278. //^^ push_d_to_stack
  45279. // #17066
  45280. @SP
  45281. // #17067
  45282. A=M
  45283. // #17068
  45284. M=D
  45285. // #17069
  45286. @SP
  45287. // #17070
  45288. M=M+1
  45289. //vv push_d_to_stack
  45290. //vv push_constant(15)
  45291. //
  45292. //// push constant 27
  45293. //^^ push_constant(27)
  45294. // #17071
  45295. @27
  45296. // #17072
  45297. D=A
  45298. //^^ push_d_to_stack
  45299. // #17073
  45300. @SP
  45301. // #17074
  45302. A=M
  45303. // #17075
  45304. M=D
  45305. // #17076
  45306. @SP
  45307. // #17077
  45308. M=M+1
  45309. //vv push_d_to_stack
  45310. //vv push_constant(27)
  45311. //
  45312. //// push constant 51
  45313. //^^ push_constant(51)
  45314. // #17078
  45315. @51
  45316. // #17079
  45317. D=A
  45318. //^^ push_d_to_stack
  45319. // #17080
  45320. @SP
  45321. // #17081
  45322. A=M
  45323. // #17082
  45324. M=D
  45325. // #17083
  45326. @SP
  45327. // #17084
  45328. M=M+1
  45329. //vv push_d_to_stack
  45330. //vv push_constant(51)
  45331. //
  45332. //// push constant 51
  45333. //^^ push_constant(51)
  45334. // #17085
  45335. @51
  45336. // #17086
  45337. D=A
  45338. //^^ push_d_to_stack
  45339. // #17087
  45340. @SP
  45341. // #17088
  45342. A=M
  45343. // #17089
  45344. M=D
  45345. // #17090
  45346. @SP
  45347. // #17091
  45348. M=M+1
  45349. //vv push_d_to_stack
  45350. //vv push_constant(51)
  45351. //
  45352. //// push constant 51
  45353. //^^ push_constant(51)
  45354. // #17092
  45355. @51
  45356. // #17093
  45357. D=A
  45358. //^^ push_d_to_stack
  45359. // #17094
  45360. @SP
  45361. // #17095
  45362. A=M
  45363. // #17096
  45364. M=D
  45365. // #17097
  45366. @SP
  45367. // #17098
  45368. M=M+1
  45369. //vv push_d_to_stack
  45370. //vv push_constant(51)
  45371. //
  45372. //// push constant 30
  45373. //^^ push_constant(30)
  45374. // #17099
  45375. @30
  45376. // #17100
  45377. D=A
  45378. //^^ push_d_to_stack
  45379. // #17101
  45380. @SP
  45381. // #17102
  45382. A=M
  45383. // #17103
  45384. M=D
  45385. // #17104
  45386. @SP
  45387. // #17105
  45388. M=M+1
  45389. //vv push_d_to_stack
  45390. //vv push_constant(30)
  45391. //
  45392. //// push constant 0
  45393. //^^ push_constant(0)
  45394. // #17106
  45395. @0
  45396. // #17107
  45397. D=A
  45398. //^^ push_d_to_stack
  45399. // #17108
  45400. @SP
  45401. // #17109
  45402. A=M
  45403. // #17110
  45404. M=D
  45405. // #17111
  45406. @SP
  45407. // #17112
  45408. M=M+1
  45409. //vv push_d_to_stack
  45410. //vv push_constant(0)
  45411. //
  45412. //// push constant 0
  45413. //^^ push_constant(0)
  45414. // #17113
  45415. @0
  45416. // #17114
  45417. D=A
  45418. //^^ push_d_to_stack
  45419. // #17115
  45420. @SP
  45421. // #17116
  45422. A=M
  45423. // #17117
  45424. M=D
  45425. // #17118
  45426. @SP
  45427. // #17119
  45428. M=M+1
  45429. //vv push_d_to_stack
  45430. //vv push_constant(0)
  45431. //
  45432. //// call Output.create 12
  45433. //^^ push_constant(RET_ADDR_142)
  45434. // #17120
  45435. @RET_ADDR_142
  45436. // #17121
  45437. D=A
  45438. //^^ push_d_to_stack
  45439. // #17122
  45440. @SP
  45441. // #17123
  45442. A=M
  45443. // #17124
  45444. M=D
  45445. // #17125
  45446. @SP
  45447. // #17126
  45448. M=M+1
  45449. //vv push_d_to_stack
  45450. //vv push_constant(RET_ADDR_142)
  45451. //push return-address
  45452. // #17127
  45453. @LCL
  45454. // #17128
  45455. D=M
  45456. //^^ push_d_to_stack
  45457. // #17129
  45458. @SP
  45459. // #17130
  45460. A=M
  45461. // #17131
  45462. M=D
  45463. // #17132
  45464. @SP
  45465. // #17133
  45466. M=M+1
  45467. //vv push_d_to_stack
  45468. //push LCL
  45469. // #17134
  45470. @ARG
  45471. // #17135
  45472. D=M
  45473. //^^ push_d_to_stack
  45474. // #17136
  45475. @SP
  45476. // #17137
  45477. A=M
  45478. // #17138
  45479. M=D
  45480. // #17139
  45481. @SP
  45482. // #17140
  45483. M=M+1
  45484. //vv push_d_to_stack
  45485. //push ARG
  45486. // #17141
  45487. @THIS
  45488. // #17142
  45489. D=M
  45490. //^^ push_d_to_stack
  45491. // #17143
  45492. @SP
  45493. // #17144
  45494. A=M
  45495. // #17145
  45496. M=D
  45497. // #17146
  45498. @SP
  45499. // #17147
  45500. M=M+1
  45501. //vv push_d_to_stack
  45502. //push THIS
  45503. // #17148
  45504. @THAT
  45505. // #17149
  45506. D=M
  45507. //^^ push_d_to_stack
  45508. // #17150
  45509. @SP
  45510. // #17151
  45511. A=M
  45512. // #17152
  45513. M=D
  45514. // #17153
  45515. @SP
  45516. // #17154
  45517. M=M+1
  45518. //vv push_d_to_stack
  45519. //push THAT
  45520. // #17155
  45521. @SP
  45522. // #17156
  45523. D=M
  45524. // #17157
  45525. @ARG
  45526. // #17158
  45527. M=D
  45528. // #17159
  45529. @17
  45530. // #17160
  45531. D=A
  45532. // #17161
  45533. @ARG
  45534. // #17162
  45535. M=M-D // ARG = SP - args - 5
  45536. // #17163
  45537. @SP
  45538. // #17164
  45539. D=M
  45540. // #17165
  45541. @LCL
  45542. // #17166
  45543. M=D // LCL = SP
  45544. // #17167
  45545. @Output.create
  45546. // #17168
  45547. 0;JMP
  45548. (RET_ADDR_142)
  45549. //
  45550. //// pop temp 0
  45551. //^^ pop_to_loc{5)
  45552. //^^ pop_stack_to_d
  45553. // #17169
  45554. @SP
  45555. // #17170
  45556. M=M-1
  45557. // #17171
  45558. A=M
  45559. // #17172
  45560. D=M
  45561. //vv pop_stack_to_d
  45562. // #17173
  45563. @5
  45564. // #17174
  45565. M=D
  45566. //vv pop_to_loc{5)
  45567. //
  45568. //// push constant 99
  45569. //^^ push_constant(99)
  45570. // #17175
  45571. @99
  45572. // #17176
  45573. D=A
  45574. //^^ push_d_to_stack
  45575. // #17177
  45576. @SP
  45577. // #17178
  45578. A=M
  45579. // #17179
  45580. M=D
  45581. // #17180
  45582. @SP
  45583. // #17181
  45584. M=M+1
  45585. //vv push_d_to_stack
  45586. //vv push_constant(99)
  45587. //
  45588. //// push constant 0
  45589. //^^ push_constant(0)
  45590. // #17182
  45591. @0
  45592. // #17183
  45593. D=A
  45594. //^^ push_d_to_stack
  45595. // #17184
  45596. @SP
  45597. // #17185
  45598. A=M
  45599. // #17186
  45600. M=D
  45601. // #17187
  45602. @SP
  45603. // #17188
  45604. M=M+1
  45605. //vv push_d_to_stack
  45606. //vv push_constant(0)
  45607. //
  45608. //// push constant 0
  45609. //^^ push_constant(0)
  45610. // #17189
  45611. @0
  45612. // #17190
  45613. D=A
  45614. //^^ push_d_to_stack
  45615. // #17191
  45616. @SP
  45617. // #17192
  45618. A=M
  45619. // #17193
  45620. M=D
  45621. // #17194
  45622. @SP
  45623. // #17195
  45624. M=M+1
  45625. //vv push_d_to_stack
  45626. //vv push_constant(0)
  45627. //
  45628. //// push constant 0
  45629. //^^ push_constant(0)
  45630. // #17196
  45631. @0
  45632. // #17197
  45633. D=A
  45634. //^^ push_d_to_stack
  45635. // #17198
  45636. @SP
  45637. // #17199
  45638. A=M
  45639. // #17200
  45640. M=D
  45641. // #17201
  45642. @SP
  45643. // #17202
  45644. M=M+1
  45645. //vv push_d_to_stack
  45646. //vv push_constant(0)
  45647. //
  45648. //// push constant 30
  45649. //^^ push_constant(30)
  45650. // #17203
  45651. @30
  45652. // #17204
  45653. D=A
  45654. //^^ push_d_to_stack
  45655. // #17205
  45656. @SP
  45657. // #17206
  45658. A=M
  45659. // #17207
  45660. M=D
  45661. // #17208
  45662. @SP
  45663. // #17209
  45664. M=M+1
  45665. //vv push_d_to_stack
  45666. //vv push_constant(30)
  45667. //
  45668. //// push constant 51
  45669. //^^ push_constant(51)
  45670. // #17210
  45671. @51
  45672. // #17211
  45673. D=A
  45674. //^^ push_d_to_stack
  45675. // #17212
  45676. @SP
  45677. // #17213
  45678. A=M
  45679. // #17214
  45680. M=D
  45681. // #17215
  45682. @SP
  45683. // #17216
  45684. M=M+1
  45685. //vv push_d_to_stack
  45686. //vv push_constant(51)
  45687. //
  45688. //// push constant 3
  45689. //^^ push_constant(3)
  45690. // #17217
  45691. @3
  45692. // #17218
  45693. D=A
  45694. //^^ push_d_to_stack
  45695. // #17219
  45696. @SP
  45697. // #17220
  45698. A=M
  45699. // #17221
  45700. M=D
  45701. // #17222
  45702. @SP
  45703. // #17223
  45704. M=M+1
  45705. //vv push_d_to_stack
  45706. //vv push_constant(3)
  45707. //
  45708. //// push constant 3
  45709. //^^ push_constant(3)
  45710. // #17224
  45711. @3
  45712. // #17225
  45713. D=A
  45714. //^^ push_d_to_stack
  45715. // #17226
  45716. @SP
  45717. // #17227
  45718. A=M
  45719. // #17228
  45720. M=D
  45721. // #17229
  45722. @SP
  45723. // #17230
  45724. M=M+1
  45725. //vv push_d_to_stack
  45726. //vv push_constant(3)
  45727. //
  45728. //// push constant 51
  45729. //^^ push_constant(51)
  45730. // #17231
  45731. @51
  45732. // #17232
  45733. D=A
  45734. //^^ push_d_to_stack
  45735. // #17233
  45736. @SP
  45737. // #17234
  45738. A=M
  45739. // #17235
  45740. M=D
  45741. // #17236
  45742. @SP
  45743. // #17237
  45744. M=M+1
  45745. //vv push_d_to_stack
  45746. //vv push_constant(51)
  45747. //
  45748. //// push constant 30
  45749. //^^ push_constant(30)
  45750. // #17238
  45751. @30
  45752. // #17239
  45753. D=A
  45754. //^^ push_d_to_stack
  45755. // #17240
  45756. @SP
  45757. // #17241
  45758. A=M
  45759. // #17242
  45760. M=D
  45761. // #17243
  45762. @SP
  45763. // #17244
  45764. M=M+1
  45765. //vv push_d_to_stack
  45766. //vv push_constant(30)
  45767. //
  45768. //// push constant 0
  45769. //^^ push_constant(0)
  45770. // #17245
  45771. @0
  45772. // #17246
  45773. D=A
  45774. //^^ push_d_to_stack
  45775. // #17247
  45776. @SP
  45777. // #17248
  45778. A=M
  45779. // #17249
  45780. M=D
  45781. // #17250
  45782. @SP
  45783. // #17251
  45784. M=M+1
  45785. //vv push_d_to_stack
  45786. //vv push_constant(0)
  45787. //
  45788. //// push constant 0
  45789. //^^ push_constant(0)
  45790. // #17252
  45791. @0
  45792. // #17253
  45793. D=A
  45794. //^^ push_d_to_stack
  45795. // #17254
  45796. @SP
  45797. // #17255
  45798. A=M
  45799. // #17256
  45800. M=D
  45801. // #17257
  45802. @SP
  45803. // #17258
  45804. M=M+1
  45805. //vv push_d_to_stack
  45806. //vv push_constant(0)
  45807. //
  45808. //// call Output.create 12
  45809. //^^ push_constant(RET_ADDR_143)
  45810. // #17259
  45811. @RET_ADDR_143
  45812. // #17260
  45813. D=A
  45814. //^^ push_d_to_stack
  45815. // #17261
  45816. @SP
  45817. // #17262
  45818. A=M
  45819. // #17263
  45820. M=D
  45821. // #17264
  45822. @SP
  45823. // #17265
  45824. M=M+1
  45825. //vv push_d_to_stack
  45826. //vv push_constant(RET_ADDR_143)
  45827. //push return-address
  45828. // #17266
  45829. @LCL
  45830. // #17267
  45831. D=M
  45832. //^^ push_d_to_stack
  45833. // #17268
  45834. @SP
  45835. // #17269
  45836. A=M
  45837. // #17270
  45838. M=D
  45839. // #17271
  45840. @SP
  45841. // #17272
  45842. M=M+1
  45843. //vv push_d_to_stack
  45844. //push LCL
  45845. // #17273
  45846. @ARG
  45847. // #17274
  45848. D=M
  45849. //^^ push_d_to_stack
  45850. // #17275
  45851. @SP
  45852. // #17276
  45853. A=M
  45854. // #17277
  45855. M=D
  45856. // #17278
  45857. @SP
  45858. // #17279
  45859. M=M+1
  45860. //vv push_d_to_stack
  45861. //push ARG
  45862. // #17280
  45863. @THIS
  45864. // #17281
  45865. D=M
  45866. //^^ push_d_to_stack
  45867. // #17282
  45868. @SP
  45869. // #17283
  45870. A=M
  45871. // #17284
  45872. M=D
  45873. // #17285
  45874. @SP
  45875. // #17286
  45876. M=M+1
  45877. //vv push_d_to_stack
  45878. //push THIS
  45879. // #17287
  45880. @THAT
  45881. // #17288
  45882. D=M
  45883. //^^ push_d_to_stack
  45884. // #17289
  45885. @SP
  45886. // #17290
  45887. A=M
  45888. // #17291
  45889. M=D
  45890. // #17292
  45891. @SP
  45892. // #17293
  45893. M=M+1
  45894. //vv push_d_to_stack
  45895. //push THAT
  45896. // #17294
  45897. @SP
  45898. // #17295
  45899. D=M
  45900. // #17296
  45901. @ARG
  45902. // #17297
  45903. M=D
  45904. // #17298
  45905. @17
  45906. // #17299
  45907. D=A
  45908. // #17300
  45909. @ARG
  45910. // #17301
  45911. M=M-D // ARG = SP - args - 5
  45912. // #17302
  45913. @SP
  45914. // #17303
  45915. D=M
  45916. // #17304
  45917. @LCL
  45918. // #17305
  45919. M=D // LCL = SP
  45920. // #17306
  45921. @Output.create
  45922. // #17307
  45923. 0;JMP
  45924. (RET_ADDR_143)
  45925. //
  45926. //// pop temp 0
  45927. //^^ pop_to_loc{5)
  45928. //^^ pop_stack_to_d
  45929. // #17308
  45930. @SP
  45931. // #17309
  45932. M=M-1
  45933. // #17310
  45934. A=M
  45935. // #17311
  45936. D=M
  45937. //vv pop_stack_to_d
  45938. // #17312
  45939. @5
  45940. // #17313
  45941. M=D
  45942. //vv pop_to_loc{5)
  45943. //
  45944. //// push constant 100
  45945. //^^ push_constant(100)
  45946. // #17314
  45947. @100
  45948. // #17315
  45949. D=A
  45950. //^^ push_d_to_stack
  45951. // #17316
  45952. @SP
  45953. // #17317
  45954. A=M
  45955. // #17318
  45956. M=D
  45957. // #17319
  45958. @SP
  45959. // #17320
  45960. M=M+1
  45961. //vv push_d_to_stack
  45962. //vv push_constant(100)
  45963. //
  45964. //// push constant 48
  45965. //^^ push_constant(48)
  45966. // #17321
  45967. @48
  45968. // #17322
  45969. D=A
  45970. //^^ push_d_to_stack
  45971. // #17323
  45972. @SP
  45973. // #17324
  45974. A=M
  45975. // #17325
  45976. M=D
  45977. // #17326
  45978. @SP
  45979. // #17327
  45980. M=M+1
  45981. //vv push_d_to_stack
  45982. //vv push_constant(48)
  45983. //
  45984. //// push constant 48
  45985. //^^ push_constant(48)
  45986. // #17328
  45987. @48
  45988. // #17329
  45989. D=A
  45990. //^^ push_d_to_stack
  45991. // #17330
  45992. @SP
  45993. // #17331
  45994. A=M
  45995. // #17332
  45996. M=D
  45997. // #17333
  45998. @SP
  45999. // #17334
  46000. M=M+1
  46001. //vv push_d_to_stack
  46002. //vv push_constant(48)
  46003. //
  46004. //// push constant 48
  46005. //^^ push_constant(48)
  46006. // #17335
  46007. @48
  46008. // #17336
  46009. D=A
  46010. //^^ push_d_to_stack
  46011. // #17337
  46012. @SP
  46013. // #17338
  46014. A=M
  46015. // #17339
  46016. M=D
  46017. // #17340
  46018. @SP
  46019. // #17341
  46020. M=M+1
  46021. //vv push_d_to_stack
  46022. //vv push_constant(48)
  46023. //
  46024. //// push constant 60
  46025. //^^ push_constant(60)
  46026. // #17342
  46027. @60
  46028. // #17343
  46029. D=A
  46030. //^^ push_d_to_stack
  46031. // #17344
  46032. @SP
  46033. // #17345
  46034. A=M
  46035. // #17346
  46036. M=D
  46037. // #17347
  46038. @SP
  46039. // #17348
  46040. M=M+1
  46041. //vv push_d_to_stack
  46042. //vv push_constant(60)
  46043. //
  46044. //// push constant 54
  46045. //^^ push_constant(54)
  46046. // #17349
  46047. @54
  46048. // #17350
  46049. D=A
  46050. //^^ push_d_to_stack
  46051. // #17351
  46052. @SP
  46053. // #17352
  46054. A=M
  46055. // #17353
  46056. M=D
  46057. // #17354
  46058. @SP
  46059. // #17355
  46060. M=M+1
  46061. //vv push_d_to_stack
  46062. //vv push_constant(54)
  46063. //
  46064. //// push constant 51
  46065. //^^ push_constant(51)
  46066. // #17356
  46067. @51
  46068. // #17357
  46069. D=A
  46070. //^^ push_d_to_stack
  46071. // #17358
  46072. @SP
  46073. // #17359
  46074. A=M
  46075. // #17360
  46076. M=D
  46077. // #17361
  46078. @SP
  46079. // #17362
  46080. M=M+1
  46081. //vv push_d_to_stack
  46082. //vv push_constant(51)
  46083. //
  46084. //// push constant 51
  46085. //^^ push_constant(51)
  46086. // #17363
  46087. @51
  46088. // #17364
  46089. D=A
  46090. //^^ push_d_to_stack
  46091. // #17365
  46092. @SP
  46093. // #17366
  46094. A=M
  46095. // #17367
  46096. M=D
  46097. // #17368
  46098. @SP
  46099. // #17369
  46100. M=M+1
  46101. //vv push_d_to_stack
  46102. //vv push_constant(51)
  46103. //
  46104. //// push constant 51
  46105. //^^ push_constant(51)
  46106. // #17370
  46107. @51
  46108. // #17371
  46109. D=A
  46110. //^^ push_d_to_stack
  46111. // #17372
  46112. @SP
  46113. // #17373
  46114. A=M
  46115. // #17374
  46116. M=D
  46117. // #17375
  46118. @SP
  46119. // #17376
  46120. M=M+1
  46121. //vv push_d_to_stack
  46122. //vv push_constant(51)
  46123. //
  46124. //// push constant 30
  46125. //^^ push_constant(30)
  46126. // #17377
  46127. @30
  46128. // #17378
  46129. D=A
  46130. //^^ push_d_to_stack
  46131. // #17379
  46132. @SP
  46133. // #17380
  46134. A=M
  46135. // #17381
  46136. M=D
  46137. // #17382
  46138. @SP
  46139. // #17383
  46140. M=M+1
  46141. //vv push_d_to_stack
  46142. //vv push_constant(30)
  46143. //
  46144. //// push constant 0
  46145. //^^ push_constant(0)
  46146. // #17384
  46147. @0
  46148. // #17385
  46149. D=A
  46150. //^^ push_d_to_stack
  46151. // #17386
  46152. @SP
  46153. // #17387
  46154. A=M
  46155. // #17388
  46156. M=D
  46157. // #17389
  46158. @SP
  46159. // #17390
  46160. M=M+1
  46161. //vv push_d_to_stack
  46162. //vv push_constant(0)
  46163. //
  46164. //// push constant 0
  46165. //^^ push_constant(0)
  46166. // #17391
  46167. @0
  46168. // #17392
  46169. D=A
  46170. //^^ push_d_to_stack
  46171. // #17393
  46172. @SP
  46173. // #17394
  46174. A=M
  46175. // #17395
  46176. M=D
  46177. // #17396
  46178. @SP
  46179. // #17397
  46180. M=M+1
  46181. //vv push_d_to_stack
  46182. //vv push_constant(0)
  46183. //
  46184. //// call Output.create 12
  46185. //^^ push_constant(RET_ADDR_144)
  46186. // #17398
  46187. @RET_ADDR_144
  46188. // #17399
  46189. D=A
  46190. //^^ push_d_to_stack
  46191. // #17400
  46192. @SP
  46193. // #17401
  46194. A=M
  46195. // #17402
  46196. M=D
  46197. // #17403
  46198. @SP
  46199. // #17404
  46200. M=M+1
  46201. //vv push_d_to_stack
  46202. //vv push_constant(RET_ADDR_144)
  46203. //push return-address
  46204. // #17405
  46205. @LCL
  46206. // #17406
  46207. D=M
  46208. //^^ push_d_to_stack
  46209. // #17407
  46210. @SP
  46211. // #17408
  46212. A=M
  46213. // #17409
  46214. M=D
  46215. // #17410
  46216. @SP
  46217. // #17411
  46218. M=M+1
  46219. //vv push_d_to_stack
  46220. //push LCL
  46221. // #17412
  46222. @ARG
  46223. // #17413
  46224. D=M
  46225. //^^ push_d_to_stack
  46226. // #17414
  46227. @SP
  46228. // #17415
  46229. A=M
  46230. // #17416
  46231. M=D
  46232. // #17417
  46233. @SP
  46234. // #17418
  46235. M=M+1
  46236. //vv push_d_to_stack
  46237. //push ARG
  46238. // #17419
  46239. @THIS
  46240. // #17420
  46241. D=M
  46242. //^^ push_d_to_stack
  46243. // #17421
  46244. @SP
  46245. // #17422
  46246. A=M
  46247. // #17423
  46248. M=D
  46249. // #17424
  46250. @SP
  46251. // #17425
  46252. M=M+1
  46253. //vv push_d_to_stack
  46254. //push THIS
  46255. // #17426
  46256. @THAT
  46257. // #17427
  46258. D=M
  46259. //^^ push_d_to_stack
  46260. // #17428
  46261. @SP
  46262. // #17429
  46263. A=M
  46264. // #17430
  46265. M=D
  46266. // #17431
  46267. @SP
  46268. // #17432
  46269. M=M+1
  46270. //vv push_d_to_stack
  46271. //push THAT
  46272. // #17433
  46273. @SP
  46274. // #17434
  46275. D=M
  46276. // #17435
  46277. @ARG
  46278. // #17436
  46279. M=D
  46280. // #17437
  46281. @17
  46282. // #17438
  46283. D=A
  46284. // #17439
  46285. @ARG
  46286. // #17440
  46287. M=M-D // ARG = SP - args - 5
  46288. // #17441
  46289. @SP
  46290. // #17442
  46291. D=M
  46292. // #17443
  46293. @LCL
  46294. // #17444
  46295. M=D // LCL = SP
  46296. // #17445
  46297. @Output.create
  46298. // #17446
  46299. 0;JMP
  46300. (RET_ADDR_144)
  46301. //
  46302. //// pop temp 0
  46303. //^^ pop_to_loc{5)
  46304. //^^ pop_stack_to_d
  46305. // #17447
  46306. @SP
  46307. // #17448
  46308. M=M-1
  46309. // #17449
  46310. A=M
  46311. // #17450
  46312. D=M
  46313. //vv pop_stack_to_d
  46314. // #17451
  46315. @5
  46316. // #17452
  46317. M=D
  46318. //vv pop_to_loc{5)
  46319. //
  46320. //// push constant 101
  46321. //^^ push_constant(101)
  46322. // #17453
  46323. @101
  46324. // #17454
  46325. D=A
  46326. //^^ push_d_to_stack
  46327. // #17455
  46328. @SP
  46329. // #17456
  46330. A=M
  46331. // #17457
  46332. M=D
  46333. // #17458
  46334. @SP
  46335. // #17459
  46336. M=M+1
  46337. //vv push_d_to_stack
  46338. //vv push_constant(101)
  46339. //
  46340. //// push constant 0
  46341. //^^ push_constant(0)
  46342. // #17460
  46343. @0
  46344. // #17461
  46345. D=A
  46346. //^^ push_d_to_stack
  46347. // #17462
  46348. @SP
  46349. // #17463
  46350. A=M
  46351. // #17464
  46352. M=D
  46353. // #17465
  46354. @SP
  46355. // #17466
  46356. M=M+1
  46357. //vv push_d_to_stack
  46358. //vv push_constant(0)
  46359. //
  46360. //// push constant 0
  46361. //^^ push_constant(0)
  46362. // #17467
  46363. @0
  46364. // #17468
  46365. D=A
  46366. //^^ push_d_to_stack
  46367. // #17469
  46368. @SP
  46369. // #17470
  46370. A=M
  46371. // #17471
  46372. M=D
  46373. // #17472
  46374. @SP
  46375. // #17473
  46376. M=M+1
  46377. //vv push_d_to_stack
  46378. //vv push_constant(0)
  46379. //
  46380. //// push constant 0
  46381. //^^ push_constant(0)
  46382. // #17474
  46383. @0
  46384. // #17475
  46385. D=A
  46386. //^^ push_d_to_stack
  46387. // #17476
  46388. @SP
  46389. // #17477
  46390. A=M
  46391. // #17478
  46392. M=D
  46393. // #17479
  46394. @SP
  46395. // #17480
  46396. M=M+1
  46397. //vv push_d_to_stack
  46398. //vv push_constant(0)
  46399. //
  46400. //// push constant 30
  46401. //^^ push_constant(30)
  46402. // #17481
  46403. @30
  46404. // #17482
  46405. D=A
  46406. //^^ push_d_to_stack
  46407. // #17483
  46408. @SP
  46409. // #17484
  46410. A=M
  46411. // #17485
  46412. M=D
  46413. // #17486
  46414. @SP
  46415. // #17487
  46416. M=M+1
  46417. //vv push_d_to_stack
  46418. //vv push_constant(30)
  46419. //
  46420. //// push constant 51
  46421. //^^ push_constant(51)
  46422. // #17488
  46423. @51
  46424. // #17489
  46425. D=A
  46426. //^^ push_d_to_stack
  46427. // #17490
  46428. @SP
  46429. // #17491
  46430. A=M
  46431. // #17492
  46432. M=D
  46433. // #17493
  46434. @SP
  46435. // #17494
  46436. M=M+1
  46437. //vv push_d_to_stack
  46438. //vv push_constant(51)
  46439. //
  46440. //// push constant 63
  46441. //^^ push_constant(63)
  46442. // #17495
  46443. @63
  46444. // #17496
  46445. D=A
  46446. //^^ push_d_to_stack
  46447. // #17497
  46448. @SP
  46449. // #17498
  46450. A=M
  46451. // #17499
  46452. M=D
  46453. // #17500
  46454. @SP
  46455. // #17501
  46456. M=M+1
  46457. //vv push_d_to_stack
  46458. //vv push_constant(63)
  46459. //
  46460. //// push constant 3
  46461. //^^ push_constant(3)
  46462. // #17502
  46463. @3
  46464. // #17503
  46465. D=A
  46466. //^^ push_d_to_stack
  46467. // #17504
  46468. @SP
  46469. // #17505
  46470. A=M
  46471. // #17506
  46472. M=D
  46473. // #17507
  46474. @SP
  46475. // #17508
  46476. M=M+1
  46477. //vv push_d_to_stack
  46478. //vv push_constant(3)
  46479. //
  46480. //// push constant 51
  46481. //^^ push_constant(51)
  46482. // #17509
  46483. @51
  46484. // #17510
  46485. D=A
  46486. //^^ push_d_to_stack
  46487. // #17511
  46488. @SP
  46489. // #17512
  46490. A=M
  46491. // #17513
  46492. M=D
  46493. // #17514
  46494. @SP
  46495. // #17515
  46496. M=M+1
  46497. //vv push_d_to_stack
  46498. //vv push_constant(51)
  46499. //
  46500. //// push constant 30
  46501. //^^ push_constant(30)
  46502. // #17516
  46503. @30
  46504. // #17517
  46505. D=A
  46506. //^^ push_d_to_stack
  46507. // #17518
  46508. @SP
  46509. // #17519
  46510. A=M
  46511. // #17520
  46512. M=D
  46513. // #17521
  46514. @SP
  46515. // #17522
  46516. M=M+1
  46517. //vv push_d_to_stack
  46518. //vv push_constant(30)
  46519. //
  46520. //// push constant 0
  46521. //^^ push_constant(0)
  46522. // #17523
  46523. @0
  46524. // #17524
  46525. D=A
  46526. //^^ push_d_to_stack
  46527. // #17525
  46528. @SP
  46529. // #17526
  46530. A=M
  46531. // #17527
  46532. M=D
  46533. // #17528
  46534. @SP
  46535. // #17529
  46536. M=M+1
  46537. //vv push_d_to_stack
  46538. //vv push_constant(0)
  46539. //
  46540. //// push constant 0
  46541. //^^ push_constant(0)
  46542. // #17530
  46543. @0
  46544. // #17531
  46545. D=A
  46546. //^^ push_d_to_stack
  46547. // #17532
  46548. @SP
  46549. // #17533
  46550. A=M
  46551. // #17534
  46552. M=D
  46553. // #17535
  46554. @SP
  46555. // #17536
  46556. M=M+1
  46557. //vv push_d_to_stack
  46558. //vv push_constant(0)
  46559. //
  46560. //// call Output.create 12
  46561. //^^ push_constant(RET_ADDR_145)
  46562. // #17537
  46563. @RET_ADDR_145
  46564. // #17538
  46565. D=A
  46566. //^^ push_d_to_stack
  46567. // #17539
  46568. @SP
  46569. // #17540
  46570. A=M
  46571. // #17541
  46572. M=D
  46573. // #17542
  46574. @SP
  46575. // #17543
  46576. M=M+1
  46577. //vv push_d_to_stack
  46578. //vv push_constant(RET_ADDR_145)
  46579. //push return-address
  46580. // #17544
  46581. @LCL
  46582. // #17545
  46583. D=M
  46584. //^^ push_d_to_stack
  46585. // #17546
  46586. @SP
  46587. // #17547
  46588. A=M
  46589. // #17548
  46590. M=D
  46591. // #17549
  46592. @SP
  46593. // #17550
  46594. M=M+1
  46595. //vv push_d_to_stack
  46596. //push LCL
  46597. // #17551
  46598. @ARG
  46599. // #17552
  46600. D=M
  46601. //^^ push_d_to_stack
  46602. // #17553
  46603. @SP
  46604. // #17554
  46605. A=M
  46606. // #17555
  46607. M=D
  46608. // #17556
  46609. @SP
  46610. // #17557
  46611. M=M+1
  46612. //vv push_d_to_stack
  46613. //push ARG
  46614. // #17558
  46615. @THIS
  46616. // #17559
  46617. D=M
  46618. //^^ push_d_to_stack
  46619. // #17560
  46620. @SP
  46621. // #17561
  46622. A=M
  46623. // #17562
  46624. M=D
  46625. // #17563
  46626. @SP
  46627. // #17564
  46628. M=M+1
  46629. //vv push_d_to_stack
  46630. //push THIS
  46631. // #17565
  46632. @THAT
  46633. // #17566
  46634. D=M
  46635. //^^ push_d_to_stack
  46636. // #17567
  46637. @SP
  46638. // #17568
  46639. A=M
  46640. // #17569
  46641. M=D
  46642. // #17570
  46643. @SP
  46644. // #17571
  46645. M=M+1
  46646. //vv push_d_to_stack
  46647. //push THAT
  46648. // #17572
  46649. @SP
  46650. // #17573
  46651. D=M
  46652. // #17574
  46653. @ARG
  46654. // #17575
  46655. M=D
  46656. // #17576
  46657. @17
  46658. // #17577
  46659. D=A
  46660. // #17578
  46661. @ARG
  46662. // #17579
  46663. M=M-D // ARG = SP - args - 5
  46664. // #17580
  46665. @SP
  46666. // #17581
  46667. D=M
  46668. // #17582
  46669. @LCL
  46670. // #17583
  46671. M=D // LCL = SP
  46672. // #17584
  46673. @Output.create
  46674. // #17585
  46675. 0;JMP
  46676. (RET_ADDR_145)
  46677. //
  46678. //// pop temp 0
  46679. //^^ pop_to_loc{5)
  46680. //^^ pop_stack_to_d
  46681. // #17586
  46682. @SP
  46683. // #17587
  46684. M=M-1
  46685. // #17588
  46686. A=M
  46687. // #17589
  46688. D=M
  46689. //vv pop_stack_to_d
  46690. // #17590
  46691. @5
  46692. // #17591
  46693. M=D
  46694. //vv pop_to_loc{5)
  46695. //
  46696. //// push constant 102
  46697. //^^ push_constant(102)
  46698. // #17592
  46699. @102
  46700. // #17593
  46701. D=A
  46702. //^^ push_d_to_stack
  46703. // #17594
  46704. @SP
  46705. // #17595
  46706. A=M
  46707. // #17596
  46708. M=D
  46709. // #17597
  46710. @SP
  46711. // #17598
  46712. M=M+1
  46713. //vv push_d_to_stack
  46714. //vv push_constant(102)
  46715. //
  46716. //// push constant 28
  46717. //^^ push_constant(28)
  46718. // #17599
  46719. @28
  46720. // #17600
  46721. D=A
  46722. //^^ push_d_to_stack
  46723. // #17601
  46724. @SP
  46725. // #17602
  46726. A=M
  46727. // #17603
  46728. M=D
  46729. // #17604
  46730. @SP
  46731. // #17605
  46732. M=M+1
  46733. //vv push_d_to_stack
  46734. //vv push_constant(28)
  46735. //
  46736. //// push constant 54
  46737. //^^ push_constant(54)
  46738. // #17606
  46739. @54
  46740. // #17607
  46741. D=A
  46742. //^^ push_d_to_stack
  46743. // #17608
  46744. @SP
  46745. // #17609
  46746. A=M
  46747. // #17610
  46748. M=D
  46749. // #17611
  46750. @SP
  46751. // #17612
  46752. M=M+1
  46753. //vv push_d_to_stack
  46754. //vv push_constant(54)
  46755. //
  46756. //// push constant 38
  46757. //^^ push_constant(38)
  46758. // #17613
  46759. @38
  46760. // #17614
  46761. D=A
  46762. //^^ push_d_to_stack
  46763. // #17615
  46764. @SP
  46765. // #17616
  46766. A=M
  46767. // #17617
  46768. M=D
  46769. // #17618
  46770. @SP
  46771. // #17619
  46772. M=M+1
  46773. //vv push_d_to_stack
  46774. //vv push_constant(38)
  46775. //
  46776. //// push constant 6
  46777. //^^ push_constant(6)
  46778. // #17620
  46779. @6
  46780. // #17621
  46781. D=A
  46782. //^^ push_d_to_stack
  46783. // #17622
  46784. @SP
  46785. // #17623
  46786. A=M
  46787. // #17624
  46788. M=D
  46789. // #17625
  46790. @SP
  46791. // #17626
  46792. M=M+1
  46793. //vv push_d_to_stack
  46794. //vv push_constant(6)
  46795. //
  46796. //// push constant 15
  46797. //^^ push_constant(15)
  46798. // #17627
  46799. @15
  46800. // #17628
  46801. D=A
  46802. //^^ push_d_to_stack
  46803. // #17629
  46804. @SP
  46805. // #17630
  46806. A=M
  46807. // #17631
  46808. M=D
  46809. // #17632
  46810. @SP
  46811. // #17633
  46812. M=M+1
  46813. //vv push_d_to_stack
  46814. //vv push_constant(15)
  46815. //
  46816. //// push constant 6
  46817. //^^ push_constant(6)
  46818. // #17634
  46819. @6
  46820. // #17635
  46821. D=A
  46822. //^^ push_d_to_stack
  46823. // #17636
  46824. @SP
  46825. // #17637
  46826. A=M
  46827. // #17638
  46828. M=D
  46829. // #17639
  46830. @SP
  46831. // #17640
  46832. M=M+1
  46833. //vv push_d_to_stack
  46834. //vv push_constant(6)
  46835. //
  46836. //// push constant 6
  46837. //^^ push_constant(6)
  46838. // #17641
  46839. @6
  46840. // #17642
  46841. D=A
  46842. //^^ push_d_to_stack
  46843. // #17643
  46844. @SP
  46845. // #17644
  46846. A=M
  46847. // #17645
  46848. M=D
  46849. // #17646
  46850. @SP
  46851. // #17647
  46852. M=M+1
  46853. //vv push_d_to_stack
  46854. //vv push_constant(6)
  46855. //
  46856. //// push constant 6
  46857. //^^ push_constant(6)
  46858. // #17648
  46859. @6
  46860. // #17649
  46861. D=A
  46862. //^^ push_d_to_stack
  46863. // #17650
  46864. @SP
  46865. // #17651
  46866. A=M
  46867. // #17652
  46868. M=D
  46869. // #17653
  46870. @SP
  46871. // #17654
  46872. M=M+1
  46873. //vv push_d_to_stack
  46874. //vv push_constant(6)
  46875. //
  46876. //// push constant 15
  46877. //^^ push_constant(15)
  46878. // #17655
  46879. @15
  46880. // #17656
  46881. D=A
  46882. //^^ push_d_to_stack
  46883. // #17657
  46884. @SP
  46885. // #17658
  46886. A=M
  46887. // #17659
  46888. M=D
  46889. // #17660
  46890. @SP
  46891. // #17661
  46892. M=M+1
  46893. //vv push_d_to_stack
  46894. //vv push_constant(15)
  46895. //
  46896. //// push constant 0
  46897. //^^ push_constant(0)
  46898. // #17662
  46899. @0
  46900. // #17663
  46901. D=A
  46902. //^^ push_d_to_stack
  46903. // #17664
  46904. @SP
  46905. // #17665
  46906. A=M
  46907. // #17666
  46908. M=D
  46909. // #17667
  46910. @SP
  46911. // #17668
  46912. M=M+1
  46913. //vv push_d_to_stack
  46914. //vv push_constant(0)
  46915. //
  46916. //// push constant 0
  46917. //^^ push_constant(0)
  46918. // #17669
  46919. @0
  46920. // #17670
  46921. D=A
  46922. //^^ push_d_to_stack
  46923. // #17671
  46924. @SP
  46925. // #17672
  46926. A=M
  46927. // #17673
  46928. M=D
  46929. // #17674
  46930. @SP
  46931. // #17675
  46932. M=M+1
  46933. //vv push_d_to_stack
  46934. //vv push_constant(0)
  46935. //
  46936. //// call Output.create 12
  46937. //^^ push_constant(RET_ADDR_146)
  46938. // #17676
  46939. @RET_ADDR_146
  46940. // #17677
  46941. D=A
  46942. //^^ push_d_to_stack
  46943. // #17678
  46944. @SP
  46945. // #17679
  46946. A=M
  46947. // #17680
  46948. M=D
  46949. // #17681
  46950. @SP
  46951. // #17682
  46952. M=M+1
  46953. //vv push_d_to_stack
  46954. //vv push_constant(RET_ADDR_146)
  46955. //push return-address
  46956. // #17683
  46957. @LCL
  46958. // #17684
  46959. D=M
  46960. //^^ push_d_to_stack
  46961. // #17685
  46962. @SP
  46963. // #17686
  46964. A=M
  46965. // #17687
  46966. M=D
  46967. // #17688
  46968. @SP
  46969. // #17689
  46970. M=M+1
  46971. //vv push_d_to_stack
  46972. //push LCL
  46973. // #17690
  46974. @ARG
  46975. // #17691
  46976. D=M
  46977. //^^ push_d_to_stack
  46978. // #17692
  46979. @SP
  46980. // #17693
  46981. A=M
  46982. // #17694
  46983. M=D
  46984. // #17695
  46985. @SP
  46986. // #17696
  46987. M=M+1
  46988. //vv push_d_to_stack
  46989. //push ARG
  46990. // #17697
  46991. @THIS
  46992. // #17698
  46993. D=M
  46994. //^^ push_d_to_stack
  46995. // #17699
  46996. @SP
  46997. // #17700
  46998. A=M
  46999. // #17701
  47000. M=D
  47001. // #17702
  47002. @SP
  47003. // #17703
  47004. M=M+1
  47005. //vv push_d_to_stack
  47006. //push THIS
  47007. // #17704
  47008. @THAT
  47009. // #17705
  47010. D=M
  47011. //^^ push_d_to_stack
  47012. // #17706
  47013. @SP
  47014. // #17707
  47015. A=M
  47016. // #17708
  47017. M=D
  47018. // #17709
  47019. @SP
  47020. // #17710
  47021. M=M+1
  47022. //vv push_d_to_stack
  47023. //push THAT
  47024. // #17711
  47025. @SP
  47026. // #17712
  47027. D=M
  47028. // #17713
  47029. @ARG
  47030. // #17714
  47031. M=D
  47032. // #17715
  47033. @17
  47034. // #17716
  47035. D=A
  47036. // #17717
  47037. @ARG
  47038. // #17718
  47039. M=M-D // ARG = SP - args - 5
  47040. // #17719
  47041. @SP
  47042. // #17720
  47043. D=M
  47044. // #17721
  47045. @LCL
  47046. // #17722
  47047. M=D // LCL = SP
  47048. // #17723
  47049. @Output.create
  47050. // #17724
  47051. 0;JMP
  47052. (RET_ADDR_146)
  47053. //
  47054. //// pop temp 0
  47055. //^^ pop_to_loc{5)
  47056. //^^ pop_stack_to_d
  47057. // #17725
  47058. @SP
  47059. // #17726
  47060. M=M-1
  47061. // #17727
  47062. A=M
  47063. // #17728
  47064. D=M
  47065. //vv pop_stack_to_d
  47066. // #17729
  47067. @5
  47068. // #17730
  47069. M=D
  47070. //vv pop_to_loc{5)
  47071. //
  47072. //// push constant 103
  47073. //^^ push_constant(103)
  47074. // #17731
  47075. @103
  47076. // #17732
  47077. D=A
  47078. //^^ push_d_to_stack
  47079. // #17733
  47080. @SP
  47081. // #17734
  47082. A=M
  47083. // #17735
  47084. M=D
  47085. // #17736
  47086. @SP
  47087. // #17737
  47088. M=M+1
  47089. //vv push_d_to_stack
  47090. //vv push_constant(103)
  47091. //
  47092. //// push constant 0
  47093. //^^ push_constant(0)
  47094. // #17738
  47095. @0
  47096. // #17739
  47097. D=A
  47098. //^^ push_d_to_stack
  47099. // #17740
  47100. @SP
  47101. // #17741
  47102. A=M
  47103. // #17742
  47104. M=D
  47105. // #17743
  47106. @SP
  47107. // #17744
  47108. M=M+1
  47109. //vv push_d_to_stack
  47110. //vv push_constant(0)
  47111. //
  47112. //// push constant 0
  47113. //^^ push_constant(0)
  47114. // #17745
  47115. @0
  47116. // #17746
  47117. D=A
  47118. //^^ push_d_to_stack
  47119. // #17747
  47120. @SP
  47121. // #17748
  47122. A=M
  47123. // #17749
  47124. M=D
  47125. // #17750
  47126. @SP
  47127. // #17751
  47128. M=M+1
  47129. //vv push_d_to_stack
  47130. //vv push_constant(0)
  47131. //
  47132. //// push constant 30
  47133. //^^ push_constant(30)
  47134. // #17752
  47135. @30
  47136. // #17753
  47137. D=A
  47138. //^^ push_d_to_stack
  47139. // #17754
  47140. @SP
  47141. // #17755
  47142. A=M
  47143. // #17756
  47144. M=D
  47145. // #17757
  47146. @SP
  47147. // #17758
  47148. M=M+1
  47149. //vv push_d_to_stack
  47150. //vv push_constant(30)
  47151. //
  47152. //// push constant 51
  47153. //^^ push_constant(51)
  47154. // #17759
  47155. @51
  47156. // #17760
  47157. D=A
  47158. //^^ push_d_to_stack
  47159. // #17761
  47160. @SP
  47161. // #17762
  47162. A=M
  47163. // #17763
  47164. M=D
  47165. // #17764
  47166. @SP
  47167. // #17765
  47168. M=M+1
  47169. //vv push_d_to_stack
  47170. //vv push_constant(51)
  47171. //
  47172. //// push constant 51
  47173. //^^ push_constant(51)
  47174. // #17766
  47175. @51
  47176. // #17767
  47177. D=A
  47178. //^^ push_d_to_stack
  47179. // #17768
  47180. @SP
  47181. // #17769
  47182. A=M
  47183. // #17770
  47184. M=D
  47185. // #17771
  47186. @SP
  47187. // #17772
  47188. M=M+1
  47189. //vv push_d_to_stack
  47190. //vv push_constant(51)
  47191. //
  47192. //// push constant 51
  47193. //^^ push_constant(51)
  47194. // #17773
  47195. @51
  47196. // #17774
  47197. D=A
  47198. //^^ push_d_to_stack
  47199. // #17775
  47200. @SP
  47201. // #17776
  47202. A=M
  47203. // #17777
  47204. M=D
  47205. // #17778
  47206. @SP
  47207. // #17779
  47208. M=M+1
  47209. //vv push_d_to_stack
  47210. //vv push_constant(51)
  47211. //
  47212. //// push constant 62
  47213. //^^ push_constant(62)
  47214. // #17780
  47215. @62
  47216. // #17781
  47217. D=A
  47218. //^^ push_d_to_stack
  47219. // #17782
  47220. @SP
  47221. // #17783
  47222. A=M
  47223. // #17784
  47224. M=D
  47225. // #17785
  47226. @SP
  47227. // #17786
  47228. M=M+1
  47229. //vv push_d_to_stack
  47230. //vv push_constant(62)
  47231. //
  47232. //// push constant 48
  47233. //^^ push_constant(48)
  47234. // #17787
  47235. @48
  47236. // #17788
  47237. D=A
  47238. //^^ push_d_to_stack
  47239. // #17789
  47240. @SP
  47241. // #17790
  47242. A=M
  47243. // #17791
  47244. M=D
  47245. // #17792
  47246. @SP
  47247. // #17793
  47248. M=M+1
  47249. //vv push_d_to_stack
  47250. //vv push_constant(48)
  47251. //
  47252. //// push constant 51
  47253. //^^ push_constant(51)
  47254. // #17794
  47255. @51
  47256. // #17795
  47257. D=A
  47258. //^^ push_d_to_stack
  47259. // #17796
  47260. @SP
  47261. // #17797
  47262. A=M
  47263. // #17798
  47264. M=D
  47265. // #17799
  47266. @SP
  47267. // #17800
  47268. M=M+1
  47269. //vv push_d_to_stack
  47270. //vv push_constant(51)
  47271. //
  47272. //// push constant 30
  47273. //^^ push_constant(30)
  47274. // #17801
  47275. @30
  47276. // #17802
  47277. D=A
  47278. //^^ push_d_to_stack
  47279. // #17803
  47280. @SP
  47281. // #17804
  47282. A=M
  47283. // #17805
  47284. M=D
  47285. // #17806
  47286. @SP
  47287. // #17807
  47288. M=M+1
  47289. //vv push_d_to_stack
  47290. //vv push_constant(30)
  47291. //
  47292. //// push constant 0
  47293. //^^ push_constant(0)
  47294. // #17808
  47295. @0
  47296. // #17809
  47297. D=A
  47298. //^^ push_d_to_stack
  47299. // #17810
  47300. @SP
  47301. // #17811
  47302. A=M
  47303. // #17812
  47304. M=D
  47305. // #17813
  47306. @SP
  47307. // #17814
  47308. M=M+1
  47309. //vv push_d_to_stack
  47310. //vv push_constant(0)
  47311. //
  47312. //// call Output.create 12
  47313. //^^ push_constant(RET_ADDR_147)
  47314. // #17815
  47315. @RET_ADDR_147
  47316. // #17816
  47317. D=A
  47318. //^^ push_d_to_stack
  47319. // #17817
  47320. @SP
  47321. // #17818
  47322. A=M
  47323. // #17819
  47324. M=D
  47325. // #17820
  47326. @SP
  47327. // #17821
  47328. M=M+1
  47329. //vv push_d_to_stack
  47330. //vv push_constant(RET_ADDR_147)
  47331. //push return-address
  47332. // #17822
  47333. @LCL
  47334. // #17823
  47335. D=M
  47336. //^^ push_d_to_stack
  47337. // #17824
  47338. @SP
  47339. // #17825
  47340. A=M
  47341. // #17826
  47342. M=D
  47343. // #17827
  47344. @SP
  47345. // #17828
  47346. M=M+1
  47347. //vv push_d_to_stack
  47348. //push LCL
  47349. // #17829
  47350. @ARG
  47351. // #17830
  47352. D=M
  47353. //^^ push_d_to_stack
  47354. // #17831
  47355. @SP
  47356. // #17832
  47357. A=M
  47358. // #17833
  47359. M=D
  47360. // #17834
  47361. @SP
  47362. // #17835
  47363. M=M+1
  47364. //vv push_d_to_stack
  47365. //push ARG
  47366. // #17836
  47367. @THIS
  47368. // #17837
  47369. D=M
  47370. //^^ push_d_to_stack
  47371. // #17838
  47372. @SP
  47373. // #17839
  47374. A=M
  47375. // #17840
  47376. M=D
  47377. // #17841
  47378. @SP
  47379. // #17842
  47380. M=M+1
  47381. //vv push_d_to_stack
  47382. //push THIS
  47383. // #17843
  47384. @THAT
  47385. // #17844
  47386. D=M
  47387. //^^ push_d_to_stack
  47388. // #17845
  47389. @SP
  47390. // #17846
  47391. A=M
  47392. // #17847
  47393. M=D
  47394. // #17848
  47395. @SP
  47396. // #17849
  47397. M=M+1
  47398. //vv push_d_to_stack
  47399. //push THAT
  47400. // #17850
  47401. @SP
  47402. // #17851
  47403. D=M
  47404. // #17852
  47405. @ARG
  47406. // #17853
  47407. M=D
  47408. // #17854
  47409. @17
  47410. // #17855
  47411. D=A
  47412. // #17856
  47413. @ARG
  47414. // #17857
  47415. M=M-D // ARG = SP - args - 5
  47416. // #17858
  47417. @SP
  47418. // #17859
  47419. D=M
  47420. // #17860
  47421. @LCL
  47422. // #17861
  47423. M=D // LCL = SP
  47424. // #17862
  47425. @Output.create
  47426. // #17863
  47427. 0;JMP
  47428. (RET_ADDR_147)
  47429. //
  47430. //// pop temp 0
  47431. //^^ pop_to_loc{5)
  47432. //^^ pop_stack_to_d
  47433. // #17864
  47434. @SP
  47435. // #17865
  47436. M=M-1
  47437. // #17866
  47438. A=M
  47439. // #17867
  47440. D=M
  47441. //vv pop_stack_to_d
  47442. // #17868
  47443. @5
  47444. // #17869
  47445. M=D
  47446. //vv pop_to_loc{5)
  47447. //
  47448. //// push constant 104
  47449. //^^ push_constant(104)
  47450. // #17870
  47451. @104
  47452. // #17871
  47453. D=A
  47454. //^^ push_d_to_stack
  47455. // #17872
  47456. @SP
  47457. // #17873
  47458. A=M
  47459. // #17874
  47460. M=D
  47461. // #17875
  47462. @SP
  47463. // #17876
  47464. M=M+1
  47465. //vv push_d_to_stack
  47466. //vv push_constant(104)
  47467. //
  47468. //// push constant 3
  47469. //^^ push_constant(3)
  47470. // #17877
  47471. @3
  47472. // #17878
  47473. D=A
  47474. //^^ push_d_to_stack
  47475. // #17879
  47476. @SP
  47477. // #17880
  47478. A=M
  47479. // #17881
  47480. M=D
  47481. // #17882
  47482. @SP
  47483. // #17883
  47484. M=M+1
  47485. //vv push_d_to_stack
  47486. //vv push_constant(3)
  47487. //
  47488. //// push constant 3
  47489. //^^ push_constant(3)
  47490. // #17884
  47491. @3
  47492. // #17885
  47493. D=A
  47494. //^^ push_d_to_stack
  47495. // #17886
  47496. @SP
  47497. // #17887
  47498. A=M
  47499. // #17888
  47500. M=D
  47501. // #17889
  47502. @SP
  47503. // #17890
  47504. M=M+1
  47505. //vv push_d_to_stack
  47506. //vv push_constant(3)
  47507. //
  47508. //// push constant 3
  47509. //^^ push_constant(3)
  47510. // #17891
  47511. @3
  47512. // #17892
  47513. D=A
  47514. //^^ push_d_to_stack
  47515. // #17893
  47516. @SP
  47517. // #17894
  47518. A=M
  47519. // #17895
  47520. M=D
  47521. // #17896
  47522. @SP
  47523. // #17897
  47524. M=M+1
  47525. //vv push_d_to_stack
  47526. //vv push_constant(3)
  47527. //
  47528. //// push constant 27
  47529. //^^ push_constant(27)
  47530. // #17898
  47531. @27
  47532. // #17899
  47533. D=A
  47534. //^^ push_d_to_stack
  47535. // #17900
  47536. @SP
  47537. // #17901
  47538. A=M
  47539. // #17902
  47540. M=D
  47541. // #17903
  47542. @SP
  47543. // #17904
  47544. M=M+1
  47545. //vv push_d_to_stack
  47546. //vv push_constant(27)
  47547. //
  47548. //// push constant 55
  47549. //^^ push_constant(55)
  47550. // #17905
  47551. @55
  47552. // #17906
  47553. D=A
  47554. //^^ push_d_to_stack
  47555. // #17907
  47556. @SP
  47557. // #17908
  47558. A=M
  47559. // #17909
  47560. M=D
  47561. // #17910
  47562. @SP
  47563. // #17911
  47564. M=M+1
  47565. //vv push_d_to_stack
  47566. //vv push_constant(55)
  47567. //
  47568. //// push constant 51
  47569. //^^ push_constant(51)
  47570. // #17912
  47571. @51
  47572. // #17913
  47573. D=A
  47574. //^^ push_d_to_stack
  47575. // #17914
  47576. @SP
  47577. // #17915
  47578. A=M
  47579. // #17916
  47580. M=D
  47581. // #17917
  47582. @SP
  47583. // #17918
  47584. M=M+1
  47585. //vv push_d_to_stack
  47586. //vv push_constant(51)
  47587. //
  47588. //// push constant 51
  47589. //^^ push_constant(51)
  47590. // #17919
  47591. @51
  47592. // #17920
  47593. D=A
  47594. //^^ push_d_to_stack
  47595. // #17921
  47596. @SP
  47597. // #17922
  47598. A=M
  47599. // #17923
  47600. M=D
  47601. // #17924
  47602. @SP
  47603. // #17925
  47604. M=M+1
  47605. //vv push_d_to_stack
  47606. //vv push_constant(51)
  47607. //
  47608. //// push constant 51
  47609. //^^ push_constant(51)
  47610. // #17926
  47611. @51
  47612. // #17927
  47613. D=A
  47614. //^^ push_d_to_stack
  47615. // #17928
  47616. @SP
  47617. // #17929
  47618. A=M
  47619. // #17930
  47620. M=D
  47621. // #17931
  47622. @SP
  47623. // #17932
  47624. M=M+1
  47625. //vv push_d_to_stack
  47626. //vv push_constant(51)
  47627. //
  47628. //// push constant 51
  47629. //^^ push_constant(51)
  47630. // #17933
  47631. @51
  47632. // #17934
  47633. D=A
  47634. //^^ push_d_to_stack
  47635. // #17935
  47636. @SP
  47637. // #17936
  47638. A=M
  47639. // #17937
  47640. M=D
  47641. // #17938
  47642. @SP
  47643. // #17939
  47644. M=M+1
  47645. //vv push_d_to_stack
  47646. //vv push_constant(51)
  47647. //
  47648. //// push constant 0
  47649. //^^ push_constant(0)
  47650. // #17940
  47651. @0
  47652. // #17941
  47653. D=A
  47654. //^^ push_d_to_stack
  47655. // #17942
  47656. @SP
  47657. // #17943
  47658. A=M
  47659. // #17944
  47660. M=D
  47661. // #17945
  47662. @SP
  47663. // #17946
  47664. M=M+1
  47665. //vv push_d_to_stack
  47666. //vv push_constant(0)
  47667. //
  47668. //// push constant 0
  47669. //^^ push_constant(0)
  47670. // #17947
  47671. @0
  47672. // #17948
  47673. D=A
  47674. //^^ push_d_to_stack
  47675. // #17949
  47676. @SP
  47677. // #17950
  47678. A=M
  47679. // #17951
  47680. M=D
  47681. // #17952
  47682. @SP
  47683. // #17953
  47684. M=M+1
  47685. //vv push_d_to_stack
  47686. //vv push_constant(0)
  47687. //
  47688. //// call Output.create 12
  47689. //^^ push_constant(RET_ADDR_148)
  47690. // #17954
  47691. @RET_ADDR_148
  47692. // #17955
  47693. D=A
  47694. //^^ push_d_to_stack
  47695. // #17956
  47696. @SP
  47697. // #17957
  47698. A=M
  47699. // #17958
  47700. M=D
  47701. // #17959
  47702. @SP
  47703. // #17960
  47704. M=M+1
  47705. //vv push_d_to_stack
  47706. //vv push_constant(RET_ADDR_148)
  47707. //push return-address
  47708. // #17961
  47709. @LCL
  47710. // #17962
  47711. D=M
  47712. //^^ push_d_to_stack
  47713. // #17963
  47714. @SP
  47715. // #17964
  47716. A=M
  47717. // #17965
  47718. M=D
  47719. // #17966
  47720. @SP
  47721. // #17967
  47722. M=M+1
  47723. //vv push_d_to_stack
  47724. //push LCL
  47725. // #17968
  47726. @ARG
  47727. // #17969
  47728. D=M
  47729. //^^ push_d_to_stack
  47730. // #17970
  47731. @SP
  47732. // #17971
  47733. A=M
  47734. // #17972
  47735. M=D
  47736. // #17973
  47737. @SP
  47738. // #17974
  47739. M=M+1
  47740. //vv push_d_to_stack
  47741. //push ARG
  47742. // #17975
  47743. @THIS
  47744. // #17976
  47745. D=M
  47746. //^^ push_d_to_stack
  47747. // #17977
  47748. @SP
  47749. // #17978
  47750. A=M
  47751. // #17979
  47752. M=D
  47753. // #17980
  47754. @SP
  47755. // #17981
  47756. M=M+1
  47757. //vv push_d_to_stack
  47758. //push THIS
  47759. // #17982
  47760. @THAT
  47761. // #17983
  47762. D=M
  47763. //^^ push_d_to_stack
  47764. // #17984
  47765. @SP
  47766. // #17985
  47767. A=M
  47768. // #17986
  47769. M=D
  47770. // #17987
  47771. @SP
  47772. // #17988
  47773. M=M+1
  47774. //vv push_d_to_stack
  47775. //push THAT
  47776. // #17989
  47777. @SP
  47778. // #17990
  47779. D=M
  47780. // #17991
  47781. @ARG
  47782. // #17992
  47783. M=D
  47784. // #17993
  47785. @17
  47786. // #17994
  47787. D=A
  47788. // #17995
  47789. @ARG
  47790. // #17996
  47791. M=M-D // ARG = SP - args - 5
  47792. // #17997
  47793. @SP
  47794. // #17998
  47795. D=M
  47796. // #17999
  47797. @LCL
  47798. // #18000
  47799. M=D // LCL = SP
  47800. // #18001
  47801. @Output.create
  47802. // #18002
  47803. 0;JMP
  47804. (RET_ADDR_148)
  47805. //
  47806. //// pop temp 0
  47807. //^^ pop_to_loc{5)
  47808. //^^ pop_stack_to_d
  47809. // #18003
  47810. @SP
  47811. // #18004
  47812. M=M-1
  47813. // #18005
  47814. A=M
  47815. // #18006
  47816. D=M
  47817. //vv pop_stack_to_d
  47818. // #18007
  47819. @5
  47820. // #18008
  47821. M=D
  47822. //vv pop_to_loc{5)
  47823. //
  47824. //// push constant 105
  47825. //^^ push_constant(105)
  47826. // #18009
  47827. @105
  47828. // #18010
  47829. D=A
  47830. //^^ push_d_to_stack
  47831. // #18011
  47832. @SP
  47833. // #18012
  47834. A=M
  47835. // #18013
  47836. M=D
  47837. // #18014
  47838. @SP
  47839. // #18015
  47840. M=M+1
  47841. //vv push_d_to_stack
  47842. //vv push_constant(105)
  47843. //
  47844. //// push constant 12
  47845. //^^ push_constant(12)
  47846. // #18016
  47847. @12
  47848. // #18017
  47849. D=A
  47850. //^^ push_d_to_stack
  47851. // #18018
  47852. @SP
  47853. // #18019
  47854. A=M
  47855. // #18020
  47856. M=D
  47857. // #18021
  47858. @SP
  47859. // #18022
  47860. M=M+1
  47861. //vv push_d_to_stack
  47862. //vv push_constant(12)
  47863. //
  47864. //// push constant 12
  47865. //^^ push_constant(12)
  47866. // #18023
  47867. @12
  47868. // #18024
  47869. D=A
  47870. //^^ push_d_to_stack
  47871. // #18025
  47872. @SP
  47873. // #18026
  47874. A=M
  47875. // #18027
  47876. M=D
  47877. // #18028
  47878. @SP
  47879. // #18029
  47880. M=M+1
  47881. //vv push_d_to_stack
  47882. //vv push_constant(12)
  47883. //
  47884. //// push constant 0
  47885. //^^ push_constant(0)
  47886. // #18030
  47887. @0
  47888. // #18031
  47889. D=A
  47890. //^^ push_d_to_stack
  47891. // #18032
  47892. @SP
  47893. // #18033
  47894. A=M
  47895. // #18034
  47896. M=D
  47897. // #18035
  47898. @SP
  47899. // #18036
  47900. M=M+1
  47901. //vv push_d_to_stack
  47902. //vv push_constant(0)
  47903. //
  47904. //// push constant 14
  47905. //^^ push_constant(14)
  47906. // #18037
  47907. @14
  47908. // #18038
  47909. D=A
  47910. //^^ push_d_to_stack
  47911. // #18039
  47912. @SP
  47913. // #18040
  47914. A=M
  47915. // #18041
  47916. M=D
  47917. // #18042
  47918. @SP
  47919. // #18043
  47920. M=M+1
  47921. //vv push_d_to_stack
  47922. //vv push_constant(14)
  47923. //
  47924. //// push constant 12
  47925. //^^ push_constant(12)
  47926. // #18044
  47927. @12
  47928. // #18045
  47929. D=A
  47930. //^^ push_d_to_stack
  47931. // #18046
  47932. @SP
  47933. // #18047
  47934. A=M
  47935. // #18048
  47936. M=D
  47937. // #18049
  47938. @SP
  47939. // #18050
  47940. M=M+1
  47941. //vv push_d_to_stack
  47942. //vv push_constant(12)
  47943. //
  47944. //// push constant 12
  47945. //^^ push_constant(12)
  47946. // #18051
  47947. @12
  47948. // #18052
  47949. D=A
  47950. //^^ push_d_to_stack
  47951. // #18053
  47952. @SP
  47953. // #18054
  47954. A=M
  47955. // #18055
  47956. M=D
  47957. // #18056
  47958. @SP
  47959. // #18057
  47960. M=M+1
  47961. //vv push_d_to_stack
  47962. //vv push_constant(12)
  47963. //
  47964. //// push constant 12
  47965. //^^ push_constant(12)
  47966. // #18058
  47967. @12
  47968. // #18059
  47969. D=A
  47970. //^^ push_d_to_stack
  47971. // #18060
  47972. @SP
  47973. // #18061
  47974. A=M
  47975. // #18062
  47976. M=D
  47977. // #18063
  47978. @SP
  47979. // #18064
  47980. M=M+1
  47981. //vv push_d_to_stack
  47982. //vv push_constant(12)
  47983. //
  47984. //// push constant 12
  47985. //^^ push_constant(12)
  47986. // #18065
  47987. @12
  47988. // #18066
  47989. D=A
  47990. //^^ push_d_to_stack
  47991. // #18067
  47992. @SP
  47993. // #18068
  47994. A=M
  47995. // #18069
  47996. M=D
  47997. // #18070
  47998. @SP
  47999. // #18071
  48000. M=M+1
  48001. //vv push_d_to_stack
  48002. //vv push_constant(12)
  48003. //
  48004. //// push constant 30
  48005. //^^ push_constant(30)
  48006. // #18072
  48007. @30
  48008. // #18073
  48009. D=A
  48010. //^^ push_d_to_stack
  48011. // #18074
  48012. @SP
  48013. // #18075
  48014. A=M
  48015. // #18076
  48016. M=D
  48017. // #18077
  48018. @SP
  48019. // #18078
  48020. M=M+1
  48021. //vv push_d_to_stack
  48022. //vv push_constant(30)
  48023. //
  48024. //// push constant 0
  48025. //^^ push_constant(0)
  48026. // #18079
  48027. @0
  48028. // #18080
  48029. D=A
  48030. //^^ push_d_to_stack
  48031. // #18081
  48032. @SP
  48033. // #18082
  48034. A=M
  48035. // #18083
  48036. M=D
  48037. // #18084
  48038. @SP
  48039. // #18085
  48040. M=M+1
  48041. //vv push_d_to_stack
  48042. //vv push_constant(0)
  48043. //
  48044. //// push constant 0
  48045. //^^ push_constant(0)
  48046. // #18086
  48047. @0
  48048. // #18087
  48049. D=A
  48050. //^^ push_d_to_stack
  48051. // #18088
  48052. @SP
  48053. // #18089
  48054. A=M
  48055. // #18090
  48056. M=D
  48057. // #18091
  48058. @SP
  48059. // #18092
  48060. M=M+1
  48061. //vv push_d_to_stack
  48062. //vv push_constant(0)
  48063. //
  48064. //// call Output.create 12
  48065. //^^ push_constant(RET_ADDR_149)
  48066. // #18093
  48067. @RET_ADDR_149
  48068. // #18094
  48069. D=A
  48070. //^^ push_d_to_stack
  48071. // #18095
  48072. @SP
  48073. // #18096
  48074. A=M
  48075. // #18097
  48076. M=D
  48077. // #18098
  48078. @SP
  48079. // #18099
  48080. M=M+1
  48081. //vv push_d_to_stack
  48082. //vv push_constant(RET_ADDR_149)
  48083. //push return-address
  48084. // #18100
  48085. @LCL
  48086. // #18101
  48087. D=M
  48088. //^^ push_d_to_stack
  48089. // #18102
  48090. @SP
  48091. // #18103
  48092. A=M
  48093. // #18104
  48094. M=D
  48095. // #18105
  48096. @SP
  48097. // #18106
  48098. M=M+1
  48099. //vv push_d_to_stack
  48100. //push LCL
  48101. // #18107
  48102. @ARG
  48103. // #18108
  48104. D=M
  48105. //^^ push_d_to_stack
  48106. // #18109
  48107. @SP
  48108. // #18110
  48109. A=M
  48110. // #18111
  48111. M=D
  48112. // #18112
  48113. @SP
  48114. // #18113
  48115. M=M+1
  48116. //vv push_d_to_stack
  48117. //push ARG
  48118. // #18114
  48119. @THIS
  48120. // #18115
  48121. D=M
  48122. //^^ push_d_to_stack
  48123. // #18116
  48124. @SP
  48125. // #18117
  48126. A=M
  48127. // #18118
  48128. M=D
  48129. // #18119
  48130. @SP
  48131. // #18120
  48132. M=M+1
  48133. //vv push_d_to_stack
  48134. //push THIS
  48135. // #18121
  48136. @THAT
  48137. // #18122
  48138. D=M
  48139. //^^ push_d_to_stack
  48140. // #18123
  48141. @SP
  48142. // #18124
  48143. A=M
  48144. // #18125
  48145. M=D
  48146. // #18126
  48147. @SP
  48148. // #18127
  48149. M=M+1
  48150. //vv push_d_to_stack
  48151. //push THAT
  48152. // #18128
  48153. @SP
  48154. // #18129
  48155. D=M
  48156. // #18130
  48157. @ARG
  48158. // #18131
  48159. M=D
  48160. // #18132
  48161. @17
  48162. // #18133
  48163. D=A
  48164. // #18134
  48165. @ARG
  48166. // #18135
  48167. M=M-D // ARG = SP - args - 5
  48168. // #18136
  48169. @SP
  48170. // #18137
  48171. D=M
  48172. // #18138
  48173. @LCL
  48174. // #18139
  48175. M=D // LCL = SP
  48176. // #18140
  48177. @Output.create
  48178. // #18141
  48179. 0;JMP
  48180. (RET_ADDR_149)
  48181. //
  48182. //// pop temp 0
  48183. //^^ pop_to_loc{5)
  48184. //^^ pop_stack_to_d
  48185. // #18142
  48186. @SP
  48187. // #18143
  48188. M=M-1
  48189. // #18144
  48190. A=M
  48191. // #18145
  48192. D=M
  48193. //vv pop_stack_to_d
  48194. // #18146
  48195. @5
  48196. // #18147
  48197. M=D
  48198. //vv pop_to_loc{5)
  48199. //
  48200. //// push constant 106
  48201. //^^ push_constant(106)
  48202. // #18148
  48203. @106
  48204. // #18149
  48205. D=A
  48206. //^^ push_d_to_stack
  48207. // #18150
  48208. @SP
  48209. // #18151
  48210. A=M
  48211. // #18152
  48212. M=D
  48213. // #18153
  48214. @SP
  48215. // #18154
  48216. M=M+1
  48217. //vv push_d_to_stack
  48218. //vv push_constant(106)
  48219. //
  48220. //// push constant 48
  48221. //^^ push_constant(48)
  48222. // #18155
  48223. @48
  48224. // #18156
  48225. D=A
  48226. //^^ push_d_to_stack
  48227. // #18157
  48228. @SP
  48229. // #18158
  48230. A=M
  48231. // #18159
  48232. M=D
  48233. // #18160
  48234. @SP
  48235. // #18161
  48236. M=M+1
  48237. //vv push_d_to_stack
  48238. //vv push_constant(48)
  48239. //
  48240. //// push constant 48
  48241. //^^ push_constant(48)
  48242. // #18162
  48243. @48
  48244. // #18163
  48245. D=A
  48246. //^^ push_d_to_stack
  48247. // #18164
  48248. @SP
  48249. // #18165
  48250. A=M
  48251. // #18166
  48252. M=D
  48253. // #18167
  48254. @SP
  48255. // #18168
  48256. M=M+1
  48257. //vv push_d_to_stack
  48258. //vv push_constant(48)
  48259. //
  48260. //// push constant 0
  48261. //^^ push_constant(0)
  48262. // #18169
  48263. @0
  48264. // #18170
  48265. D=A
  48266. //^^ push_d_to_stack
  48267. // #18171
  48268. @SP
  48269. // #18172
  48270. A=M
  48271. // #18173
  48272. M=D
  48273. // #18174
  48274. @SP
  48275. // #18175
  48276. M=M+1
  48277. //vv push_d_to_stack
  48278. //vv push_constant(0)
  48279. //
  48280. //// push constant 56
  48281. //^^ push_constant(56)
  48282. // #18176
  48283. @56
  48284. // #18177
  48285. D=A
  48286. //^^ push_d_to_stack
  48287. // #18178
  48288. @SP
  48289. // #18179
  48290. A=M
  48291. // #18180
  48292. M=D
  48293. // #18181
  48294. @SP
  48295. // #18182
  48296. M=M+1
  48297. //vv push_d_to_stack
  48298. //vv push_constant(56)
  48299. //
  48300. //// push constant 48
  48301. //^^ push_constant(48)
  48302. // #18183
  48303. @48
  48304. // #18184
  48305. D=A
  48306. //^^ push_d_to_stack
  48307. // #18185
  48308. @SP
  48309. // #18186
  48310. A=M
  48311. // #18187
  48312. M=D
  48313. // #18188
  48314. @SP
  48315. // #18189
  48316. M=M+1
  48317. //vv push_d_to_stack
  48318. //vv push_constant(48)
  48319. //
  48320. //// push constant 48
  48321. //^^ push_constant(48)
  48322. // #18190
  48323. @48
  48324. // #18191
  48325. D=A
  48326. //^^ push_d_to_stack
  48327. // #18192
  48328. @SP
  48329. // #18193
  48330. A=M
  48331. // #18194
  48332. M=D
  48333. // #18195
  48334. @SP
  48335. // #18196
  48336. M=M+1
  48337. //vv push_d_to_stack
  48338. //vv push_constant(48)
  48339. //
  48340. //// push constant 48
  48341. //^^ push_constant(48)
  48342. // #18197
  48343. @48
  48344. // #18198
  48345. D=A
  48346. //^^ push_d_to_stack
  48347. // #18199
  48348. @SP
  48349. // #18200
  48350. A=M
  48351. // #18201
  48352. M=D
  48353. // #18202
  48354. @SP
  48355. // #18203
  48356. M=M+1
  48357. //vv push_d_to_stack
  48358. //vv push_constant(48)
  48359. //
  48360. //// push constant 48
  48361. //^^ push_constant(48)
  48362. // #18204
  48363. @48
  48364. // #18205
  48365. D=A
  48366. //^^ push_d_to_stack
  48367. // #18206
  48368. @SP
  48369. // #18207
  48370. A=M
  48371. // #18208
  48372. M=D
  48373. // #18209
  48374. @SP
  48375. // #18210
  48376. M=M+1
  48377. //vv push_d_to_stack
  48378. //vv push_constant(48)
  48379. //
  48380. //// push constant 51
  48381. //^^ push_constant(51)
  48382. // #18211
  48383. @51
  48384. // #18212
  48385. D=A
  48386. //^^ push_d_to_stack
  48387. // #18213
  48388. @SP
  48389. // #18214
  48390. A=M
  48391. // #18215
  48392. M=D
  48393. // #18216
  48394. @SP
  48395. // #18217
  48396. M=M+1
  48397. //vv push_d_to_stack
  48398. //vv push_constant(51)
  48399. //
  48400. //// push constant 30
  48401. //^^ push_constant(30)
  48402. // #18218
  48403. @30
  48404. // #18219
  48405. D=A
  48406. //^^ push_d_to_stack
  48407. // #18220
  48408. @SP
  48409. // #18221
  48410. A=M
  48411. // #18222
  48412. M=D
  48413. // #18223
  48414. @SP
  48415. // #18224
  48416. M=M+1
  48417. //vv push_d_to_stack
  48418. //vv push_constant(30)
  48419. //
  48420. //// push constant 0
  48421. //^^ push_constant(0)
  48422. // #18225
  48423. @0
  48424. // #18226
  48425. D=A
  48426. //^^ push_d_to_stack
  48427. // #18227
  48428. @SP
  48429. // #18228
  48430. A=M
  48431. // #18229
  48432. M=D
  48433. // #18230
  48434. @SP
  48435. // #18231
  48436. M=M+1
  48437. //vv push_d_to_stack
  48438. //vv push_constant(0)
  48439. //
  48440. //// call Output.create 12
  48441. //^^ push_constant(RET_ADDR_150)
  48442. // #18232
  48443. @RET_ADDR_150
  48444. // #18233
  48445. D=A
  48446. //^^ push_d_to_stack
  48447. // #18234
  48448. @SP
  48449. // #18235
  48450. A=M
  48451. // #18236
  48452. M=D
  48453. // #18237
  48454. @SP
  48455. // #18238
  48456. M=M+1
  48457. //vv push_d_to_stack
  48458. //vv push_constant(RET_ADDR_150)
  48459. //push return-address
  48460. // #18239
  48461. @LCL
  48462. // #18240
  48463. D=M
  48464. //^^ push_d_to_stack
  48465. // #18241
  48466. @SP
  48467. // #18242
  48468. A=M
  48469. // #18243
  48470. M=D
  48471. // #18244
  48472. @SP
  48473. // #18245
  48474. M=M+1
  48475. //vv push_d_to_stack
  48476. //push LCL
  48477. // #18246
  48478. @ARG
  48479. // #18247
  48480. D=M
  48481. //^^ push_d_to_stack
  48482. // #18248
  48483. @SP
  48484. // #18249
  48485. A=M
  48486. // #18250
  48487. M=D
  48488. // #18251
  48489. @SP
  48490. // #18252
  48491. M=M+1
  48492. //vv push_d_to_stack
  48493. //push ARG
  48494. // #18253
  48495. @THIS
  48496. // #18254
  48497. D=M
  48498. //^^ push_d_to_stack
  48499. // #18255
  48500. @SP
  48501. // #18256
  48502. A=M
  48503. // #18257
  48504. M=D
  48505. // #18258
  48506. @SP
  48507. // #18259
  48508. M=M+1
  48509. //vv push_d_to_stack
  48510. //push THIS
  48511. // #18260
  48512. @THAT
  48513. // #18261
  48514. D=M
  48515. //^^ push_d_to_stack
  48516. // #18262
  48517. @SP
  48518. // #18263
  48519. A=M
  48520. // #18264
  48521. M=D
  48522. // #18265
  48523. @SP
  48524. // #18266
  48525. M=M+1
  48526. //vv push_d_to_stack
  48527. //push THAT
  48528. // #18267
  48529. @SP
  48530. // #18268
  48531. D=M
  48532. // #18269
  48533. @ARG
  48534. // #18270
  48535. M=D
  48536. // #18271
  48537. @17
  48538. // #18272
  48539. D=A
  48540. // #18273
  48541. @ARG
  48542. // #18274
  48543. M=M-D // ARG = SP - args - 5
  48544. // #18275
  48545. @SP
  48546. // #18276
  48547. D=M
  48548. // #18277
  48549. @LCL
  48550. // #18278
  48551. M=D // LCL = SP
  48552. // #18279
  48553. @Output.create
  48554. // #18280
  48555. 0;JMP
  48556. (RET_ADDR_150)
  48557. //
  48558. //// pop temp 0
  48559. //^^ pop_to_loc{5)
  48560. //^^ pop_stack_to_d
  48561. // #18281
  48562. @SP
  48563. // #18282
  48564. M=M-1
  48565. // #18283
  48566. A=M
  48567. // #18284
  48568. D=M
  48569. //vv pop_stack_to_d
  48570. // #18285
  48571. @5
  48572. // #18286
  48573. M=D
  48574. //vv pop_to_loc{5)
  48575. //
  48576. //// push constant 107
  48577. //^^ push_constant(107)
  48578. // #18287
  48579. @107
  48580. // #18288
  48581. D=A
  48582. //^^ push_d_to_stack
  48583. // #18289
  48584. @SP
  48585. // #18290
  48586. A=M
  48587. // #18291
  48588. M=D
  48589. // #18292
  48590. @SP
  48591. // #18293
  48592. M=M+1
  48593. //vv push_d_to_stack
  48594. //vv push_constant(107)
  48595. //
  48596. //// push constant 3
  48597. //^^ push_constant(3)
  48598. // #18294
  48599. @3
  48600. // #18295
  48601. D=A
  48602. //^^ push_d_to_stack
  48603. // #18296
  48604. @SP
  48605. // #18297
  48606. A=M
  48607. // #18298
  48608. M=D
  48609. // #18299
  48610. @SP
  48611. // #18300
  48612. M=M+1
  48613. //vv push_d_to_stack
  48614. //vv push_constant(3)
  48615. //
  48616. //// push constant 3
  48617. //^^ push_constant(3)
  48618. // #18301
  48619. @3
  48620. // #18302
  48621. D=A
  48622. //^^ push_d_to_stack
  48623. // #18303
  48624. @SP
  48625. // #18304
  48626. A=M
  48627. // #18305
  48628. M=D
  48629. // #18306
  48630. @SP
  48631. // #18307
  48632. M=M+1
  48633. //vv push_d_to_stack
  48634. //vv push_constant(3)
  48635. //
  48636. //// push constant 3
  48637. //^^ push_constant(3)
  48638. // #18308
  48639. @3
  48640. // #18309
  48641. D=A
  48642. //^^ push_d_to_stack
  48643. // #18310
  48644. @SP
  48645. // #18311
  48646. A=M
  48647. // #18312
  48648. M=D
  48649. // #18313
  48650. @SP
  48651. // #18314
  48652. M=M+1
  48653. //vv push_d_to_stack
  48654. //vv push_constant(3)
  48655. //
  48656. //// push constant 51
  48657. //^^ push_constant(51)
  48658. // #18315
  48659. @51
  48660. // #18316
  48661. D=A
  48662. //^^ push_d_to_stack
  48663. // #18317
  48664. @SP
  48665. // #18318
  48666. A=M
  48667. // #18319
  48668. M=D
  48669. // #18320
  48670. @SP
  48671. // #18321
  48672. M=M+1
  48673. //vv push_d_to_stack
  48674. //vv push_constant(51)
  48675. //
  48676. //// push constant 27
  48677. //^^ push_constant(27)
  48678. // #18322
  48679. @27
  48680. // #18323
  48681. D=A
  48682. //^^ push_d_to_stack
  48683. // #18324
  48684. @SP
  48685. // #18325
  48686. A=M
  48687. // #18326
  48688. M=D
  48689. // #18327
  48690. @SP
  48691. // #18328
  48692. M=M+1
  48693. //vv push_d_to_stack
  48694. //vv push_constant(27)
  48695. //
  48696. //// push constant 15
  48697. //^^ push_constant(15)
  48698. // #18329
  48699. @15
  48700. // #18330
  48701. D=A
  48702. //^^ push_d_to_stack
  48703. // #18331
  48704. @SP
  48705. // #18332
  48706. A=M
  48707. // #18333
  48708. M=D
  48709. // #18334
  48710. @SP
  48711. // #18335
  48712. M=M+1
  48713. //vv push_d_to_stack
  48714. //vv push_constant(15)
  48715. //
  48716. //// push constant 15
  48717. //^^ push_constant(15)
  48718. // #18336
  48719. @15
  48720. // #18337
  48721. D=A
  48722. //^^ push_d_to_stack
  48723. // #18338
  48724. @SP
  48725. // #18339
  48726. A=M
  48727. // #18340
  48728. M=D
  48729. // #18341
  48730. @SP
  48731. // #18342
  48732. M=M+1
  48733. //vv push_d_to_stack
  48734. //vv push_constant(15)
  48735. //
  48736. //// push constant 27
  48737. //^^ push_constant(27)
  48738. // #18343
  48739. @27
  48740. // #18344
  48741. D=A
  48742. //^^ push_d_to_stack
  48743. // #18345
  48744. @SP
  48745. // #18346
  48746. A=M
  48747. // #18347
  48748. M=D
  48749. // #18348
  48750. @SP
  48751. // #18349
  48752. M=M+1
  48753. //vv push_d_to_stack
  48754. //vv push_constant(27)
  48755. //
  48756. //// push constant 51
  48757. //^^ push_constant(51)
  48758. // #18350
  48759. @51
  48760. // #18351
  48761. D=A
  48762. //^^ push_d_to_stack
  48763. // #18352
  48764. @SP
  48765. // #18353
  48766. A=M
  48767. // #18354
  48768. M=D
  48769. // #18355
  48770. @SP
  48771. // #18356
  48772. M=M+1
  48773. //vv push_d_to_stack
  48774. //vv push_constant(51)
  48775. //
  48776. //// push constant 0
  48777. //^^ push_constant(0)
  48778. // #18357
  48779. @0
  48780. // #18358
  48781. D=A
  48782. //^^ push_d_to_stack
  48783. // #18359
  48784. @SP
  48785. // #18360
  48786. A=M
  48787. // #18361
  48788. M=D
  48789. // #18362
  48790. @SP
  48791. // #18363
  48792. M=M+1
  48793. //vv push_d_to_stack
  48794. //vv push_constant(0)
  48795. //
  48796. //// push constant 0
  48797. //^^ push_constant(0)
  48798. // #18364
  48799. @0
  48800. // #18365
  48801. D=A
  48802. //^^ push_d_to_stack
  48803. // #18366
  48804. @SP
  48805. // #18367
  48806. A=M
  48807. // #18368
  48808. M=D
  48809. // #18369
  48810. @SP
  48811. // #18370
  48812. M=M+1
  48813. //vv push_d_to_stack
  48814. //vv push_constant(0)
  48815. //
  48816. //// call Output.create 12
  48817. //^^ push_constant(RET_ADDR_151)
  48818. // #18371
  48819. @RET_ADDR_151
  48820. // #18372
  48821. D=A
  48822. //^^ push_d_to_stack
  48823. // #18373
  48824. @SP
  48825. // #18374
  48826. A=M
  48827. // #18375
  48828. M=D
  48829. // #18376
  48830. @SP
  48831. // #18377
  48832. M=M+1
  48833. //vv push_d_to_stack
  48834. //vv push_constant(RET_ADDR_151)
  48835. //push return-address
  48836. // #18378
  48837. @LCL
  48838. // #18379
  48839. D=M
  48840. //^^ push_d_to_stack
  48841. // #18380
  48842. @SP
  48843. // #18381
  48844. A=M
  48845. // #18382
  48846. M=D
  48847. // #18383
  48848. @SP
  48849. // #18384
  48850. M=M+1
  48851. //vv push_d_to_stack
  48852. //push LCL
  48853. // #18385
  48854. @ARG
  48855. // #18386
  48856. D=M
  48857. //^^ push_d_to_stack
  48858. // #18387
  48859. @SP
  48860. // #18388
  48861. A=M
  48862. // #18389
  48863. M=D
  48864. // #18390
  48865. @SP
  48866. // #18391
  48867. M=M+1
  48868. //vv push_d_to_stack
  48869. //push ARG
  48870. // #18392
  48871. @THIS
  48872. // #18393
  48873. D=M
  48874. //^^ push_d_to_stack
  48875. // #18394
  48876. @SP
  48877. // #18395
  48878. A=M
  48879. // #18396
  48880. M=D
  48881. // #18397
  48882. @SP
  48883. // #18398
  48884. M=M+1
  48885. //vv push_d_to_stack
  48886. //push THIS
  48887. // #18399
  48888. @THAT
  48889. // #18400
  48890. D=M
  48891. //^^ push_d_to_stack
  48892. // #18401
  48893. @SP
  48894. // #18402
  48895. A=M
  48896. // #18403
  48897. M=D
  48898. // #18404
  48899. @SP
  48900. // #18405
  48901. M=M+1
  48902. //vv push_d_to_stack
  48903. //push THAT
  48904. // #18406
  48905. @SP
  48906. // #18407
  48907. D=M
  48908. // #18408
  48909. @ARG
  48910. // #18409
  48911. M=D
  48912. // #18410
  48913. @17
  48914. // #18411
  48915. D=A
  48916. // #18412
  48917. @ARG
  48918. // #18413
  48919. M=M-D // ARG = SP - args - 5
  48920. // #18414
  48921. @SP
  48922. // #18415
  48923. D=M
  48924. // #18416
  48925. @LCL
  48926. // #18417
  48927. M=D // LCL = SP
  48928. // #18418
  48929. @Output.create
  48930. // #18419
  48931. 0;JMP
  48932. (RET_ADDR_151)
  48933. //
  48934. //// pop temp 0
  48935. //^^ pop_to_loc{5)
  48936. //^^ pop_stack_to_d
  48937. // #18420
  48938. @SP
  48939. // #18421
  48940. M=M-1
  48941. // #18422
  48942. A=M
  48943. // #18423
  48944. D=M
  48945. //vv pop_stack_to_d
  48946. // #18424
  48947. @5
  48948. // #18425
  48949. M=D
  48950. //vv pop_to_loc{5)
  48951. //
  48952. //// push constant 108
  48953. //^^ push_constant(108)
  48954. // #18426
  48955. @108
  48956. // #18427
  48957. D=A
  48958. //^^ push_d_to_stack
  48959. // #18428
  48960. @SP
  48961. // #18429
  48962. A=M
  48963. // #18430
  48964. M=D
  48965. // #18431
  48966. @SP
  48967. // #18432
  48968. M=M+1
  48969. //vv push_d_to_stack
  48970. //vv push_constant(108)
  48971. //
  48972. //// push constant 14
  48973. //^^ push_constant(14)
  48974. // #18433
  48975. @14
  48976. // #18434
  48977. D=A
  48978. //^^ push_d_to_stack
  48979. // #18435
  48980. @SP
  48981. // #18436
  48982. A=M
  48983. // #18437
  48984. M=D
  48985. // #18438
  48986. @SP
  48987. // #18439
  48988. M=M+1
  48989. //vv push_d_to_stack
  48990. //vv push_constant(14)
  48991. //
  48992. //// push constant 12
  48993. //^^ push_constant(12)
  48994. // #18440
  48995. @12
  48996. // #18441
  48997. D=A
  48998. //^^ push_d_to_stack
  48999. // #18442
  49000. @SP
  49001. // #18443
  49002. A=M
  49003. // #18444
  49004. M=D
  49005. // #18445
  49006. @SP
  49007. // #18446
  49008. M=M+1
  49009. //vv push_d_to_stack
  49010. //vv push_constant(12)
  49011. //
  49012. //// push constant 12
  49013. //^^ push_constant(12)
  49014. // #18447
  49015. @12
  49016. // #18448
  49017. D=A
  49018. //^^ push_d_to_stack
  49019. // #18449
  49020. @SP
  49021. // #18450
  49022. A=M
  49023. // #18451
  49024. M=D
  49025. // #18452
  49026. @SP
  49027. // #18453
  49028. M=M+1
  49029. //vv push_d_to_stack
  49030. //vv push_constant(12)
  49031. //
  49032. //// push constant 12
  49033. //^^ push_constant(12)
  49034. // #18454
  49035. @12
  49036. // #18455
  49037. D=A
  49038. //^^ push_d_to_stack
  49039. // #18456
  49040. @SP
  49041. // #18457
  49042. A=M
  49043. // #18458
  49044. M=D
  49045. // #18459
  49046. @SP
  49047. // #18460
  49048. M=M+1
  49049. //vv push_d_to_stack
  49050. //vv push_constant(12)
  49051. //
  49052. //// push constant 12
  49053. //^^ push_constant(12)
  49054. // #18461
  49055. @12
  49056. // #18462
  49057. D=A
  49058. //^^ push_d_to_stack
  49059. // #18463
  49060. @SP
  49061. // #18464
  49062. A=M
  49063. // #18465
  49064. M=D
  49065. // #18466
  49066. @SP
  49067. // #18467
  49068. M=M+1
  49069. //vv push_d_to_stack
  49070. //vv push_constant(12)
  49071. //
  49072. //// push constant 12
  49073. //^^ push_constant(12)
  49074. // #18468
  49075. @12
  49076. // #18469
  49077. D=A
  49078. //^^ push_d_to_stack
  49079. // #18470
  49080. @SP
  49081. // #18471
  49082. A=M
  49083. // #18472
  49084. M=D
  49085. // #18473
  49086. @SP
  49087. // #18474
  49088. M=M+1
  49089. //vv push_d_to_stack
  49090. //vv push_constant(12)
  49091. //
  49092. //// push constant 12
  49093. //^^ push_constant(12)
  49094. // #18475
  49095. @12
  49096. // #18476
  49097. D=A
  49098. //^^ push_d_to_stack
  49099. // #18477
  49100. @SP
  49101. // #18478
  49102. A=M
  49103. // #18479
  49104. M=D
  49105. // #18480
  49106. @SP
  49107. // #18481
  49108. M=M+1
  49109. //vv push_d_to_stack
  49110. //vv push_constant(12)
  49111. //
  49112. //// push constant 12
  49113. //^^ push_constant(12)
  49114. // #18482
  49115. @12
  49116. // #18483
  49117. D=A
  49118. //^^ push_d_to_stack
  49119. // #18484
  49120. @SP
  49121. // #18485
  49122. A=M
  49123. // #18486
  49124. M=D
  49125. // #18487
  49126. @SP
  49127. // #18488
  49128. M=M+1
  49129. //vv push_d_to_stack
  49130. //vv push_constant(12)
  49131. //
  49132. //// push constant 30
  49133. //^^ push_constant(30)
  49134. // #18489
  49135. @30
  49136. // #18490
  49137. D=A
  49138. //^^ push_d_to_stack
  49139. // #18491
  49140. @SP
  49141. // #18492
  49142. A=M
  49143. // #18493
  49144. M=D
  49145. // #18494
  49146. @SP
  49147. // #18495
  49148. M=M+1
  49149. //vv push_d_to_stack
  49150. //vv push_constant(30)
  49151. //
  49152. //// push constant 0
  49153. //^^ push_constant(0)
  49154. // #18496
  49155. @0
  49156. // #18497
  49157. D=A
  49158. //^^ push_d_to_stack
  49159. // #18498
  49160. @SP
  49161. // #18499
  49162. A=M
  49163. // #18500
  49164. M=D
  49165. // #18501
  49166. @SP
  49167. // #18502
  49168. M=M+1
  49169. //vv push_d_to_stack
  49170. //vv push_constant(0)
  49171. //
  49172. //// push constant 0
  49173. //^^ push_constant(0)
  49174. // #18503
  49175. @0
  49176. // #18504
  49177. D=A
  49178. //^^ push_d_to_stack
  49179. // #18505
  49180. @SP
  49181. // #18506
  49182. A=M
  49183. // #18507
  49184. M=D
  49185. // #18508
  49186. @SP
  49187. // #18509
  49188. M=M+1
  49189. //vv push_d_to_stack
  49190. //vv push_constant(0)
  49191. //
  49192. //// call Output.create 12
  49193. //^^ push_constant(RET_ADDR_152)
  49194. // #18510
  49195. @RET_ADDR_152
  49196. // #18511
  49197. D=A
  49198. //^^ push_d_to_stack
  49199. // #18512
  49200. @SP
  49201. // #18513
  49202. A=M
  49203. // #18514
  49204. M=D
  49205. // #18515
  49206. @SP
  49207. // #18516
  49208. M=M+1
  49209. //vv push_d_to_stack
  49210. //vv push_constant(RET_ADDR_152)
  49211. //push return-address
  49212. // #18517
  49213. @LCL
  49214. // #18518
  49215. D=M
  49216. //^^ push_d_to_stack
  49217. // #18519
  49218. @SP
  49219. // #18520
  49220. A=M
  49221. // #18521
  49222. M=D
  49223. // #18522
  49224. @SP
  49225. // #18523
  49226. M=M+1
  49227. //vv push_d_to_stack
  49228. //push LCL
  49229. // #18524
  49230. @ARG
  49231. // #18525
  49232. D=M
  49233. //^^ push_d_to_stack
  49234. // #18526
  49235. @SP
  49236. // #18527
  49237. A=M
  49238. // #18528
  49239. M=D
  49240. // #18529
  49241. @SP
  49242. // #18530
  49243. M=M+1
  49244. //vv push_d_to_stack
  49245. //push ARG
  49246. // #18531
  49247. @THIS
  49248. // #18532
  49249. D=M
  49250. //^^ push_d_to_stack
  49251. // #18533
  49252. @SP
  49253. // #18534
  49254. A=M
  49255. // #18535
  49256. M=D
  49257. // #18536
  49258. @SP
  49259. // #18537
  49260. M=M+1
  49261. //vv push_d_to_stack
  49262. //push THIS
  49263. // #18538
  49264. @THAT
  49265. // #18539
  49266. D=M
  49267. //^^ push_d_to_stack
  49268. // #18540
  49269. @SP
  49270. // #18541
  49271. A=M
  49272. // #18542
  49273. M=D
  49274. // #18543
  49275. @SP
  49276. // #18544
  49277. M=M+1
  49278. //vv push_d_to_stack
  49279. //push THAT
  49280. // #18545
  49281. @SP
  49282. // #18546
  49283. D=M
  49284. // #18547
  49285. @ARG
  49286. // #18548
  49287. M=D
  49288. // #18549
  49289. @17
  49290. // #18550
  49291. D=A
  49292. // #18551
  49293. @ARG
  49294. // #18552
  49295. M=M-D // ARG = SP - args - 5
  49296. // #18553
  49297. @SP
  49298. // #18554
  49299. D=M
  49300. // #18555
  49301. @LCL
  49302. // #18556
  49303. M=D // LCL = SP
  49304. // #18557
  49305. @Output.create
  49306. // #18558
  49307. 0;JMP
  49308. (RET_ADDR_152)
  49309. //
  49310. //// pop temp 0
  49311. //^^ pop_to_loc{5)
  49312. //^^ pop_stack_to_d
  49313. // #18559
  49314. @SP
  49315. // #18560
  49316. M=M-1
  49317. // #18561
  49318. A=M
  49319. // #18562
  49320. D=M
  49321. //vv pop_stack_to_d
  49322. // #18563
  49323. @5
  49324. // #18564
  49325. M=D
  49326. //vv pop_to_loc{5)
  49327. //
  49328. //// push constant 109
  49329. //^^ push_constant(109)
  49330. // #18565
  49331. @109
  49332. // #18566
  49333. D=A
  49334. //^^ push_d_to_stack
  49335. // #18567
  49336. @SP
  49337. // #18568
  49338. A=M
  49339. // #18569
  49340. M=D
  49341. // #18570
  49342. @SP
  49343. // #18571
  49344. M=M+1
  49345. //vv push_d_to_stack
  49346. //vv push_constant(109)
  49347. //
  49348. //// push constant 0
  49349. //^^ push_constant(0)
  49350. // #18572
  49351. @0
  49352. // #18573
  49353. D=A
  49354. //^^ push_d_to_stack
  49355. // #18574
  49356. @SP
  49357. // #18575
  49358. A=M
  49359. // #18576
  49360. M=D
  49361. // #18577
  49362. @SP
  49363. // #18578
  49364. M=M+1
  49365. //vv push_d_to_stack
  49366. //vv push_constant(0)
  49367. //
  49368. //// push constant 0
  49369. //^^ push_constant(0)
  49370. // #18579
  49371. @0
  49372. // #18580
  49373. D=A
  49374. //^^ push_d_to_stack
  49375. // #18581
  49376. @SP
  49377. // #18582
  49378. A=M
  49379. // #18583
  49380. M=D
  49381. // #18584
  49382. @SP
  49383. // #18585
  49384. M=M+1
  49385. //vv push_d_to_stack
  49386. //vv push_constant(0)
  49387. //
  49388. //// push constant 0
  49389. //^^ push_constant(0)
  49390. // #18586
  49391. @0
  49392. // #18587
  49393. D=A
  49394. //^^ push_d_to_stack
  49395. // #18588
  49396. @SP
  49397. // #18589
  49398. A=M
  49399. // #18590
  49400. M=D
  49401. // #18591
  49402. @SP
  49403. // #18592
  49404. M=M+1
  49405. //vv push_d_to_stack
  49406. //vv push_constant(0)
  49407. //
  49408. //// push constant 29
  49409. //^^ push_constant(29)
  49410. // #18593
  49411. @29
  49412. // #18594
  49413. D=A
  49414. //^^ push_d_to_stack
  49415. // #18595
  49416. @SP
  49417. // #18596
  49418. A=M
  49419. // #18597
  49420. M=D
  49421. // #18598
  49422. @SP
  49423. // #18599
  49424. M=M+1
  49425. //vv push_d_to_stack
  49426. //vv push_constant(29)
  49427. //
  49428. //// push constant 63
  49429. //^^ push_constant(63)
  49430. // #18600
  49431. @63
  49432. // #18601
  49433. D=A
  49434. //^^ push_d_to_stack
  49435. // #18602
  49436. @SP
  49437. // #18603
  49438. A=M
  49439. // #18604
  49440. M=D
  49441. // #18605
  49442. @SP
  49443. // #18606
  49444. M=M+1
  49445. //vv push_d_to_stack
  49446. //vv push_constant(63)
  49447. //
  49448. //// push constant 43
  49449. //^^ push_constant(43)
  49450. // #18607
  49451. @43
  49452. // #18608
  49453. D=A
  49454. //^^ push_d_to_stack
  49455. // #18609
  49456. @SP
  49457. // #18610
  49458. A=M
  49459. // #18611
  49460. M=D
  49461. // #18612
  49462. @SP
  49463. // #18613
  49464. M=M+1
  49465. //vv push_d_to_stack
  49466. //vv push_constant(43)
  49467. //
  49468. //// push constant 43
  49469. //^^ push_constant(43)
  49470. // #18614
  49471. @43
  49472. // #18615
  49473. D=A
  49474. //^^ push_d_to_stack
  49475. // #18616
  49476. @SP
  49477. // #18617
  49478. A=M
  49479. // #18618
  49480. M=D
  49481. // #18619
  49482. @SP
  49483. // #18620
  49484. M=M+1
  49485. //vv push_d_to_stack
  49486. //vv push_constant(43)
  49487. //
  49488. //// push constant 43
  49489. //^^ push_constant(43)
  49490. // #18621
  49491. @43
  49492. // #18622
  49493. D=A
  49494. //^^ push_d_to_stack
  49495. // #18623
  49496. @SP
  49497. // #18624
  49498. A=M
  49499. // #18625
  49500. M=D
  49501. // #18626
  49502. @SP
  49503. // #18627
  49504. M=M+1
  49505. //vv push_d_to_stack
  49506. //vv push_constant(43)
  49507. //
  49508. //// push constant 43
  49509. //^^ push_constant(43)
  49510. // #18628
  49511. @43
  49512. // #18629
  49513. D=A
  49514. //^^ push_d_to_stack
  49515. // #18630
  49516. @SP
  49517. // #18631
  49518. A=M
  49519. // #18632
  49520. M=D
  49521. // #18633
  49522. @SP
  49523. // #18634
  49524. M=M+1
  49525. //vv push_d_to_stack
  49526. //vv push_constant(43)
  49527. //
  49528. //// push constant 0
  49529. //^^ push_constant(0)
  49530. // #18635
  49531. @0
  49532. // #18636
  49533. D=A
  49534. //^^ push_d_to_stack
  49535. // #18637
  49536. @SP
  49537. // #18638
  49538. A=M
  49539. // #18639
  49540. M=D
  49541. // #18640
  49542. @SP
  49543. // #18641
  49544. M=M+1
  49545. //vv push_d_to_stack
  49546. //vv push_constant(0)
  49547. //
  49548. //// push constant 0
  49549. //^^ push_constant(0)
  49550. // #18642
  49551. @0
  49552. // #18643
  49553. D=A
  49554. //^^ push_d_to_stack
  49555. // #18644
  49556. @SP
  49557. // #18645
  49558. A=M
  49559. // #18646
  49560. M=D
  49561. // #18647
  49562. @SP
  49563. // #18648
  49564. M=M+1
  49565. //vv push_d_to_stack
  49566. //vv push_constant(0)
  49567. //
  49568. //// call Output.create 12
  49569. //^^ push_constant(RET_ADDR_153)
  49570. // #18649
  49571. @RET_ADDR_153
  49572. // #18650
  49573. D=A
  49574. //^^ push_d_to_stack
  49575. // #18651
  49576. @SP
  49577. // #18652
  49578. A=M
  49579. // #18653
  49580. M=D
  49581. // #18654
  49582. @SP
  49583. // #18655
  49584. M=M+1
  49585. //vv push_d_to_stack
  49586. //vv push_constant(RET_ADDR_153)
  49587. //push return-address
  49588. // #18656
  49589. @LCL
  49590. // #18657
  49591. D=M
  49592. //^^ push_d_to_stack
  49593. // #18658
  49594. @SP
  49595. // #18659
  49596. A=M
  49597. // #18660
  49598. M=D
  49599. // #18661
  49600. @SP
  49601. // #18662
  49602. M=M+1
  49603. //vv push_d_to_stack
  49604. //push LCL
  49605. // #18663
  49606. @ARG
  49607. // #18664
  49608. D=M
  49609. //^^ push_d_to_stack
  49610. // #18665
  49611. @SP
  49612. // #18666
  49613. A=M
  49614. // #18667
  49615. M=D
  49616. // #18668
  49617. @SP
  49618. // #18669
  49619. M=M+1
  49620. //vv push_d_to_stack
  49621. //push ARG
  49622. // #18670
  49623. @THIS
  49624. // #18671
  49625. D=M
  49626. //^^ push_d_to_stack
  49627. // #18672
  49628. @SP
  49629. // #18673
  49630. A=M
  49631. // #18674
  49632. M=D
  49633. // #18675
  49634. @SP
  49635. // #18676
  49636. M=M+1
  49637. //vv push_d_to_stack
  49638. //push THIS
  49639. // #18677
  49640. @THAT
  49641. // #18678
  49642. D=M
  49643. //^^ push_d_to_stack
  49644. // #18679
  49645. @SP
  49646. // #18680
  49647. A=M
  49648. // #18681
  49649. M=D
  49650. // #18682
  49651. @SP
  49652. // #18683
  49653. M=M+1
  49654. //vv push_d_to_stack
  49655. //push THAT
  49656. // #18684
  49657. @SP
  49658. // #18685
  49659. D=M
  49660. // #18686
  49661. @ARG
  49662. // #18687
  49663. M=D
  49664. // #18688
  49665. @17
  49666. // #18689
  49667. D=A
  49668. // #18690
  49669. @ARG
  49670. // #18691
  49671. M=M-D // ARG = SP - args - 5
  49672. // #18692
  49673. @SP
  49674. // #18693
  49675. D=M
  49676. // #18694
  49677. @LCL
  49678. // #18695
  49679. M=D // LCL = SP
  49680. // #18696
  49681. @Output.create
  49682. // #18697
  49683. 0;JMP
  49684. (RET_ADDR_153)
  49685. //
  49686. //// pop temp 0
  49687. //^^ pop_to_loc{5)
  49688. //^^ pop_stack_to_d
  49689. // #18698
  49690. @SP
  49691. // #18699
  49692. M=M-1
  49693. // #18700
  49694. A=M
  49695. // #18701
  49696. D=M
  49697. //vv pop_stack_to_d
  49698. // #18702
  49699. @5
  49700. // #18703
  49701. M=D
  49702. //vv pop_to_loc{5)
  49703. //
  49704. //// push constant 110
  49705. //^^ push_constant(110)
  49706. // #18704
  49707. @110
  49708. // #18705
  49709. D=A
  49710. //^^ push_d_to_stack
  49711. // #18706
  49712. @SP
  49713. // #18707
  49714. A=M
  49715. // #18708
  49716. M=D
  49717. // #18709
  49718. @SP
  49719. // #18710
  49720. M=M+1
  49721. //vv push_d_to_stack
  49722. //vv push_constant(110)
  49723. //
  49724. //// push constant 0
  49725. //^^ push_constant(0)
  49726. // #18711
  49727. @0
  49728. // #18712
  49729. D=A
  49730. //^^ push_d_to_stack
  49731. // #18713
  49732. @SP
  49733. // #18714
  49734. A=M
  49735. // #18715
  49736. M=D
  49737. // #18716
  49738. @SP
  49739. // #18717
  49740. M=M+1
  49741. //vv push_d_to_stack
  49742. //vv push_constant(0)
  49743. //
  49744. //// push constant 0
  49745. //^^ push_constant(0)
  49746. // #18718
  49747. @0
  49748. // #18719
  49749. D=A
  49750. //^^ push_d_to_stack
  49751. // #18720
  49752. @SP
  49753. // #18721
  49754. A=M
  49755. // #18722
  49756. M=D
  49757. // #18723
  49758. @SP
  49759. // #18724
  49760. M=M+1
  49761. //vv push_d_to_stack
  49762. //vv push_constant(0)
  49763. //
  49764. //// push constant 0
  49765. //^^ push_constant(0)
  49766. // #18725
  49767. @0
  49768. // #18726
  49769. D=A
  49770. //^^ push_d_to_stack
  49771. // #18727
  49772. @SP
  49773. // #18728
  49774. A=M
  49775. // #18729
  49776. M=D
  49777. // #18730
  49778. @SP
  49779. // #18731
  49780. M=M+1
  49781. //vv push_d_to_stack
  49782. //vv push_constant(0)
  49783. //
  49784. //// push constant 29
  49785. //^^ push_constant(29)
  49786. // #18732
  49787. @29
  49788. // #18733
  49789. D=A
  49790. //^^ push_d_to_stack
  49791. // #18734
  49792. @SP
  49793. // #18735
  49794. A=M
  49795. // #18736
  49796. M=D
  49797. // #18737
  49798. @SP
  49799. // #18738
  49800. M=M+1
  49801. //vv push_d_to_stack
  49802. //vv push_constant(29)
  49803. //
  49804. //// push constant 51
  49805. //^^ push_constant(51)
  49806. // #18739
  49807. @51
  49808. // #18740
  49809. D=A
  49810. //^^ push_d_to_stack
  49811. // #18741
  49812. @SP
  49813. // #18742
  49814. A=M
  49815. // #18743
  49816. M=D
  49817. // #18744
  49818. @SP
  49819. // #18745
  49820. M=M+1
  49821. //vv push_d_to_stack
  49822. //vv push_constant(51)
  49823. //
  49824. //// push constant 51
  49825. //^^ push_constant(51)
  49826. // #18746
  49827. @51
  49828. // #18747
  49829. D=A
  49830. //^^ push_d_to_stack
  49831. // #18748
  49832. @SP
  49833. // #18749
  49834. A=M
  49835. // #18750
  49836. M=D
  49837. // #18751
  49838. @SP
  49839. // #18752
  49840. M=M+1
  49841. //vv push_d_to_stack
  49842. //vv push_constant(51)
  49843. //
  49844. //// push constant 51
  49845. //^^ push_constant(51)
  49846. // #18753
  49847. @51
  49848. // #18754
  49849. D=A
  49850. //^^ push_d_to_stack
  49851. // #18755
  49852. @SP
  49853. // #18756
  49854. A=M
  49855. // #18757
  49856. M=D
  49857. // #18758
  49858. @SP
  49859. // #18759
  49860. M=M+1
  49861. //vv push_d_to_stack
  49862. //vv push_constant(51)
  49863. //
  49864. //// push constant 51
  49865. //^^ push_constant(51)
  49866. // #18760
  49867. @51
  49868. // #18761
  49869. D=A
  49870. //^^ push_d_to_stack
  49871. // #18762
  49872. @SP
  49873. // #18763
  49874. A=M
  49875. // #18764
  49876. M=D
  49877. // #18765
  49878. @SP
  49879. // #18766
  49880. M=M+1
  49881. //vv push_d_to_stack
  49882. //vv push_constant(51)
  49883. //
  49884. //// push constant 51
  49885. //^^ push_constant(51)
  49886. // #18767
  49887. @51
  49888. // #18768
  49889. D=A
  49890. //^^ push_d_to_stack
  49891. // #18769
  49892. @SP
  49893. // #18770
  49894. A=M
  49895. // #18771
  49896. M=D
  49897. // #18772
  49898. @SP
  49899. // #18773
  49900. M=M+1
  49901. //vv push_d_to_stack
  49902. //vv push_constant(51)
  49903. //
  49904. //// push constant 0
  49905. //^^ push_constant(0)
  49906. // #18774
  49907. @0
  49908. // #18775
  49909. D=A
  49910. //^^ push_d_to_stack
  49911. // #18776
  49912. @SP
  49913. // #18777
  49914. A=M
  49915. // #18778
  49916. M=D
  49917. // #18779
  49918. @SP
  49919. // #18780
  49920. M=M+1
  49921. //vv push_d_to_stack
  49922. //vv push_constant(0)
  49923. //
  49924. //// push constant 0
  49925. //^^ push_constant(0)
  49926. // #18781
  49927. @0
  49928. // #18782
  49929. D=A
  49930. //^^ push_d_to_stack
  49931. // #18783
  49932. @SP
  49933. // #18784
  49934. A=M
  49935. // #18785
  49936. M=D
  49937. // #18786
  49938. @SP
  49939. // #18787
  49940. M=M+1
  49941. //vv push_d_to_stack
  49942. //vv push_constant(0)
  49943. //
  49944. //// call Output.create 12
  49945. //^^ push_constant(RET_ADDR_154)
  49946. // #18788
  49947. @RET_ADDR_154
  49948. // #18789
  49949. D=A
  49950. //^^ push_d_to_stack
  49951. // #18790
  49952. @SP
  49953. // #18791
  49954. A=M
  49955. // #18792
  49956. M=D
  49957. // #18793
  49958. @SP
  49959. // #18794
  49960. M=M+1
  49961. //vv push_d_to_stack
  49962. //vv push_constant(RET_ADDR_154)
  49963. //push return-address
  49964. // #1879