/09/Square/Square.asm

http://github.com/tianyicui/No.658659 · Assembly · 104957 lines · 529 code · 0 blank · 104428 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. // #18795
  49965. @LCL
  49966. // #18796
  49967. D=M
  49968. //^^ push_d_to_stack
  49969. // #18797
  49970. @SP
  49971. // #18798
  49972. A=M
  49973. // #18799
  49974. M=D
  49975. // #18800
  49976. @SP
  49977. // #18801
  49978. M=M+1
  49979. //vv push_d_to_stack
  49980. //push LCL
  49981. // #18802
  49982. @ARG
  49983. // #18803
  49984. D=M
  49985. //^^ push_d_to_stack
  49986. // #18804
  49987. @SP
  49988. // #18805
  49989. A=M
  49990. // #18806
  49991. M=D
  49992. // #18807
  49993. @SP
  49994. // #18808
  49995. M=M+1
  49996. //vv push_d_to_stack
  49997. //push ARG
  49998. // #18809
  49999. @THIS
  50000. // #18810
  50001. D=M
  50002. //^^ push_d_to_stack
  50003. // #18811
  50004. @SP
  50005. // #18812
  50006. A=M
  50007. // #18813
  50008. M=D
  50009. // #18814
  50010. @SP
  50011. // #18815
  50012. M=M+1
  50013. //vv push_d_to_stack
  50014. //push THIS
  50015. // #18816
  50016. @THAT
  50017. // #18817
  50018. D=M
  50019. //^^ push_d_to_stack
  50020. // #18818
  50021. @SP
  50022. // #18819
  50023. A=M
  50024. // #18820
  50025. M=D
  50026. // #18821
  50027. @SP
  50028. // #18822
  50029. M=M+1
  50030. //vv push_d_to_stack
  50031. //push THAT
  50032. // #18823
  50033. @SP
  50034. // #18824
  50035. D=M
  50036. // #18825
  50037. @ARG
  50038. // #18826
  50039. M=D
  50040. // #18827
  50041. @17
  50042. // #18828
  50043. D=A
  50044. // #18829
  50045. @ARG
  50046. // #18830
  50047. M=M-D // ARG = SP - args - 5
  50048. // #18831
  50049. @SP
  50050. // #18832
  50051. D=M
  50052. // #18833
  50053. @LCL
  50054. // #18834
  50055. M=D // LCL = SP
  50056. // #18835
  50057. @Output.create
  50058. // #18836
  50059. 0;JMP
  50060. (RET_ADDR_154)
  50061. //
  50062. //// pop temp 0
  50063. //^^ pop_to_loc{5)
  50064. //^^ pop_stack_to_d
  50065. // #18837
  50066. @SP
  50067. // #18838
  50068. M=M-1
  50069. // #18839
  50070. A=M
  50071. // #18840
  50072. D=M
  50073. //vv pop_stack_to_d
  50074. // #18841
  50075. @5
  50076. // #18842
  50077. M=D
  50078. //vv pop_to_loc{5)
  50079. //
  50080. //// push constant 111
  50081. //^^ push_constant(111)
  50082. // #18843
  50083. @111
  50084. // #18844
  50085. D=A
  50086. //^^ push_d_to_stack
  50087. // #18845
  50088. @SP
  50089. // #18846
  50090. A=M
  50091. // #18847
  50092. M=D
  50093. // #18848
  50094. @SP
  50095. // #18849
  50096. M=M+1
  50097. //vv push_d_to_stack
  50098. //vv push_constant(111)
  50099. //
  50100. //// push constant 0
  50101. //^^ push_constant(0)
  50102. // #18850
  50103. @0
  50104. // #18851
  50105. D=A
  50106. //^^ push_d_to_stack
  50107. // #18852
  50108. @SP
  50109. // #18853
  50110. A=M
  50111. // #18854
  50112. M=D
  50113. // #18855
  50114. @SP
  50115. // #18856
  50116. M=M+1
  50117. //vv push_d_to_stack
  50118. //vv push_constant(0)
  50119. //
  50120. //// push constant 0
  50121. //^^ push_constant(0)
  50122. // #18857
  50123. @0
  50124. // #18858
  50125. D=A
  50126. //^^ push_d_to_stack
  50127. // #18859
  50128. @SP
  50129. // #18860
  50130. A=M
  50131. // #18861
  50132. M=D
  50133. // #18862
  50134. @SP
  50135. // #18863
  50136. M=M+1
  50137. //vv push_d_to_stack
  50138. //vv push_constant(0)
  50139. //
  50140. //// push constant 0
  50141. //^^ push_constant(0)
  50142. // #18864
  50143. @0
  50144. // #18865
  50145. D=A
  50146. //^^ push_d_to_stack
  50147. // #18866
  50148. @SP
  50149. // #18867
  50150. A=M
  50151. // #18868
  50152. M=D
  50153. // #18869
  50154. @SP
  50155. // #18870
  50156. M=M+1
  50157. //vv push_d_to_stack
  50158. //vv push_constant(0)
  50159. //
  50160. //// push constant 30
  50161. //^^ push_constant(30)
  50162. // #18871
  50163. @30
  50164. // #18872
  50165. D=A
  50166. //^^ push_d_to_stack
  50167. // #18873
  50168. @SP
  50169. // #18874
  50170. A=M
  50171. // #18875
  50172. M=D
  50173. // #18876
  50174. @SP
  50175. // #18877
  50176. M=M+1
  50177. //vv push_d_to_stack
  50178. //vv push_constant(30)
  50179. //
  50180. //// push constant 51
  50181. //^^ push_constant(51)
  50182. // #18878
  50183. @51
  50184. // #18879
  50185. D=A
  50186. //^^ push_d_to_stack
  50187. // #18880
  50188. @SP
  50189. // #18881
  50190. A=M
  50191. // #18882
  50192. M=D
  50193. // #18883
  50194. @SP
  50195. // #18884
  50196. M=M+1
  50197. //vv push_d_to_stack
  50198. //vv push_constant(51)
  50199. //
  50200. //// push constant 51
  50201. //^^ push_constant(51)
  50202. // #18885
  50203. @51
  50204. // #18886
  50205. D=A
  50206. //^^ push_d_to_stack
  50207. // #18887
  50208. @SP
  50209. // #18888
  50210. A=M
  50211. // #18889
  50212. M=D
  50213. // #18890
  50214. @SP
  50215. // #18891
  50216. M=M+1
  50217. //vv push_d_to_stack
  50218. //vv push_constant(51)
  50219. //
  50220. //// push constant 51
  50221. //^^ push_constant(51)
  50222. // #18892
  50223. @51
  50224. // #18893
  50225. D=A
  50226. //^^ push_d_to_stack
  50227. // #18894
  50228. @SP
  50229. // #18895
  50230. A=M
  50231. // #18896
  50232. M=D
  50233. // #18897
  50234. @SP
  50235. // #18898
  50236. M=M+1
  50237. //vv push_d_to_stack
  50238. //vv push_constant(51)
  50239. //
  50240. //// push constant 51
  50241. //^^ push_constant(51)
  50242. // #18899
  50243. @51
  50244. // #18900
  50245. D=A
  50246. //^^ push_d_to_stack
  50247. // #18901
  50248. @SP
  50249. // #18902
  50250. A=M
  50251. // #18903
  50252. M=D
  50253. // #18904
  50254. @SP
  50255. // #18905
  50256. M=M+1
  50257. //vv push_d_to_stack
  50258. //vv push_constant(51)
  50259. //
  50260. //// push constant 30
  50261. //^^ push_constant(30)
  50262. // #18906
  50263. @30
  50264. // #18907
  50265. D=A
  50266. //^^ push_d_to_stack
  50267. // #18908
  50268. @SP
  50269. // #18909
  50270. A=M
  50271. // #18910
  50272. M=D
  50273. // #18911
  50274. @SP
  50275. // #18912
  50276. M=M+1
  50277. //vv push_d_to_stack
  50278. //vv push_constant(30)
  50279. //
  50280. //// push constant 0
  50281. //^^ push_constant(0)
  50282. // #18913
  50283. @0
  50284. // #18914
  50285. D=A
  50286. //^^ push_d_to_stack
  50287. // #18915
  50288. @SP
  50289. // #18916
  50290. A=M
  50291. // #18917
  50292. M=D
  50293. // #18918
  50294. @SP
  50295. // #18919
  50296. M=M+1
  50297. //vv push_d_to_stack
  50298. //vv push_constant(0)
  50299. //
  50300. //// push constant 0
  50301. //^^ push_constant(0)
  50302. // #18920
  50303. @0
  50304. // #18921
  50305. D=A
  50306. //^^ push_d_to_stack
  50307. // #18922
  50308. @SP
  50309. // #18923
  50310. A=M
  50311. // #18924
  50312. M=D
  50313. // #18925
  50314. @SP
  50315. // #18926
  50316. M=M+1
  50317. //vv push_d_to_stack
  50318. //vv push_constant(0)
  50319. //
  50320. //// call Output.create 12
  50321. //^^ push_constant(RET_ADDR_155)
  50322. // #18927
  50323. @RET_ADDR_155
  50324. // #18928
  50325. D=A
  50326. //^^ push_d_to_stack
  50327. // #18929
  50328. @SP
  50329. // #18930
  50330. A=M
  50331. // #18931
  50332. M=D
  50333. // #18932
  50334. @SP
  50335. // #18933
  50336. M=M+1
  50337. //vv push_d_to_stack
  50338. //vv push_constant(RET_ADDR_155)
  50339. //push return-address
  50340. // #18934
  50341. @LCL
  50342. // #18935
  50343. D=M
  50344. //^^ push_d_to_stack
  50345. // #18936
  50346. @SP
  50347. // #18937
  50348. A=M
  50349. // #18938
  50350. M=D
  50351. // #18939
  50352. @SP
  50353. // #18940
  50354. M=M+1
  50355. //vv push_d_to_stack
  50356. //push LCL
  50357. // #18941
  50358. @ARG
  50359. // #18942
  50360. D=M
  50361. //^^ push_d_to_stack
  50362. // #18943
  50363. @SP
  50364. // #18944
  50365. A=M
  50366. // #18945
  50367. M=D
  50368. // #18946
  50369. @SP
  50370. // #18947
  50371. M=M+1
  50372. //vv push_d_to_stack
  50373. //push ARG
  50374. // #18948
  50375. @THIS
  50376. // #18949
  50377. D=M
  50378. //^^ push_d_to_stack
  50379. // #18950
  50380. @SP
  50381. // #18951
  50382. A=M
  50383. // #18952
  50384. M=D
  50385. // #18953
  50386. @SP
  50387. // #18954
  50388. M=M+1
  50389. //vv push_d_to_stack
  50390. //push THIS
  50391. // #18955
  50392. @THAT
  50393. // #18956
  50394. D=M
  50395. //^^ push_d_to_stack
  50396. // #18957
  50397. @SP
  50398. // #18958
  50399. A=M
  50400. // #18959
  50401. M=D
  50402. // #18960
  50403. @SP
  50404. // #18961
  50405. M=M+1
  50406. //vv push_d_to_stack
  50407. //push THAT
  50408. // #18962
  50409. @SP
  50410. // #18963
  50411. D=M
  50412. // #18964
  50413. @ARG
  50414. // #18965
  50415. M=D
  50416. // #18966
  50417. @17
  50418. // #18967
  50419. D=A
  50420. // #18968
  50421. @ARG
  50422. // #18969
  50423. M=M-D // ARG = SP - args - 5
  50424. // #18970
  50425. @SP
  50426. // #18971
  50427. D=M
  50428. // #18972
  50429. @LCL
  50430. // #18973
  50431. M=D // LCL = SP
  50432. // #18974
  50433. @Output.create
  50434. // #18975
  50435. 0;JMP
  50436. (RET_ADDR_155)
  50437. //
  50438. //// pop temp 0
  50439. //^^ pop_to_loc{5)
  50440. //^^ pop_stack_to_d
  50441. // #18976
  50442. @SP
  50443. // #18977
  50444. M=M-1
  50445. // #18978
  50446. A=M
  50447. // #18979
  50448. D=M
  50449. //vv pop_stack_to_d
  50450. // #18980
  50451. @5
  50452. // #18981
  50453. M=D
  50454. //vv pop_to_loc{5)
  50455. //
  50456. //// push constant 112
  50457. //^^ push_constant(112)
  50458. // #18982
  50459. @112
  50460. // #18983
  50461. D=A
  50462. //^^ push_d_to_stack
  50463. // #18984
  50464. @SP
  50465. // #18985
  50466. A=M
  50467. // #18986
  50468. M=D
  50469. // #18987
  50470. @SP
  50471. // #18988
  50472. M=M+1
  50473. //vv push_d_to_stack
  50474. //vv push_constant(112)
  50475. //
  50476. //// push constant 0
  50477. //^^ push_constant(0)
  50478. // #18989
  50479. @0
  50480. // #18990
  50481. D=A
  50482. //^^ push_d_to_stack
  50483. // #18991
  50484. @SP
  50485. // #18992
  50486. A=M
  50487. // #18993
  50488. M=D
  50489. // #18994
  50490. @SP
  50491. // #18995
  50492. M=M+1
  50493. //vv push_d_to_stack
  50494. //vv push_constant(0)
  50495. //
  50496. //// push constant 0
  50497. //^^ push_constant(0)
  50498. // #18996
  50499. @0
  50500. // #18997
  50501. D=A
  50502. //^^ push_d_to_stack
  50503. // #18998
  50504. @SP
  50505. // #18999
  50506. A=M
  50507. // #19000
  50508. M=D
  50509. // #19001
  50510. @SP
  50511. // #19002
  50512. M=M+1
  50513. //vv push_d_to_stack
  50514. //vv push_constant(0)
  50515. //
  50516. //// push constant 0
  50517. //^^ push_constant(0)
  50518. // #19003
  50519. @0
  50520. // #19004
  50521. D=A
  50522. //^^ push_d_to_stack
  50523. // #19005
  50524. @SP
  50525. // #19006
  50526. A=M
  50527. // #19007
  50528. M=D
  50529. // #19008
  50530. @SP
  50531. // #19009
  50532. M=M+1
  50533. //vv push_d_to_stack
  50534. //vv push_constant(0)
  50535. //
  50536. //// push constant 30
  50537. //^^ push_constant(30)
  50538. // #19010
  50539. @30
  50540. // #19011
  50541. D=A
  50542. //^^ push_d_to_stack
  50543. // #19012
  50544. @SP
  50545. // #19013
  50546. A=M
  50547. // #19014
  50548. M=D
  50549. // #19015
  50550. @SP
  50551. // #19016
  50552. M=M+1
  50553. //vv push_d_to_stack
  50554. //vv push_constant(30)
  50555. //
  50556. //// push constant 51
  50557. //^^ push_constant(51)
  50558. // #19017
  50559. @51
  50560. // #19018
  50561. D=A
  50562. //^^ push_d_to_stack
  50563. // #19019
  50564. @SP
  50565. // #19020
  50566. A=M
  50567. // #19021
  50568. M=D
  50569. // #19022
  50570. @SP
  50571. // #19023
  50572. M=M+1
  50573. //vv push_d_to_stack
  50574. //vv push_constant(51)
  50575. //
  50576. //// push constant 51
  50577. //^^ push_constant(51)
  50578. // #19024
  50579. @51
  50580. // #19025
  50581. D=A
  50582. //^^ push_d_to_stack
  50583. // #19026
  50584. @SP
  50585. // #19027
  50586. A=M
  50587. // #19028
  50588. M=D
  50589. // #19029
  50590. @SP
  50591. // #19030
  50592. M=M+1
  50593. //vv push_d_to_stack
  50594. //vv push_constant(51)
  50595. //
  50596. //// push constant 51
  50597. //^^ push_constant(51)
  50598. // #19031
  50599. @51
  50600. // #19032
  50601. D=A
  50602. //^^ push_d_to_stack
  50603. // #19033
  50604. @SP
  50605. // #19034
  50606. A=M
  50607. // #19035
  50608. M=D
  50609. // #19036
  50610. @SP
  50611. // #19037
  50612. M=M+1
  50613. //vv push_d_to_stack
  50614. //vv push_constant(51)
  50615. //
  50616. //// push constant 31
  50617. //^^ push_constant(31)
  50618. // #19038
  50619. @31
  50620. // #19039
  50621. D=A
  50622. //^^ push_d_to_stack
  50623. // #19040
  50624. @SP
  50625. // #19041
  50626. A=M
  50627. // #19042
  50628. M=D
  50629. // #19043
  50630. @SP
  50631. // #19044
  50632. M=M+1
  50633. //vv push_d_to_stack
  50634. //vv push_constant(31)
  50635. //
  50636. //// push constant 3
  50637. //^^ push_constant(3)
  50638. // #19045
  50639. @3
  50640. // #19046
  50641. D=A
  50642. //^^ push_d_to_stack
  50643. // #19047
  50644. @SP
  50645. // #19048
  50646. A=M
  50647. // #19049
  50648. M=D
  50649. // #19050
  50650. @SP
  50651. // #19051
  50652. M=M+1
  50653. //vv push_d_to_stack
  50654. //vv push_constant(3)
  50655. //
  50656. //// push constant 3
  50657. //^^ push_constant(3)
  50658. // #19052
  50659. @3
  50660. // #19053
  50661. D=A
  50662. //^^ push_d_to_stack
  50663. // #19054
  50664. @SP
  50665. // #19055
  50666. A=M
  50667. // #19056
  50668. M=D
  50669. // #19057
  50670. @SP
  50671. // #19058
  50672. M=M+1
  50673. //vv push_d_to_stack
  50674. //vv push_constant(3)
  50675. //
  50676. //// push constant 0
  50677. //^^ push_constant(0)
  50678. // #19059
  50679. @0
  50680. // #19060
  50681. D=A
  50682. //^^ push_d_to_stack
  50683. // #19061
  50684. @SP
  50685. // #19062
  50686. A=M
  50687. // #19063
  50688. M=D
  50689. // #19064
  50690. @SP
  50691. // #19065
  50692. M=M+1
  50693. //vv push_d_to_stack
  50694. //vv push_constant(0)
  50695. //
  50696. //// call Output.create 12
  50697. //^^ push_constant(RET_ADDR_156)
  50698. // #19066
  50699. @RET_ADDR_156
  50700. // #19067
  50701. D=A
  50702. //^^ push_d_to_stack
  50703. // #19068
  50704. @SP
  50705. // #19069
  50706. A=M
  50707. // #19070
  50708. M=D
  50709. // #19071
  50710. @SP
  50711. // #19072
  50712. M=M+1
  50713. //vv push_d_to_stack
  50714. //vv push_constant(RET_ADDR_156)
  50715. //push return-address
  50716. // #19073
  50717. @LCL
  50718. // #19074
  50719. D=M
  50720. //^^ push_d_to_stack
  50721. // #19075
  50722. @SP
  50723. // #19076
  50724. A=M
  50725. // #19077
  50726. M=D
  50727. // #19078
  50728. @SP
  50729. // #19079
  50730. M=M+1
  50731. //vv push_d_to_stack
  50732. //push LCL
  50733. // #19080
  50734. @ARG
  50735. // #19081
  50736. D=M
  50737. //^^ push_d_to_stack
  50738. // #19082
  50739. @SP
  50740. // #19083
  50741. A=M
  50742. // #19084
  50743. M=D
  50744. // #19085
  50745. @SP
  50746. // #19086
  50747. M=M+1
  50748. //vv push_d_to_stack
  50749. //push ARG
  50750. // #19087
  50751. @THIS
  50752. // #19088
  50753. D=M
  50754. //^^ push_d_to_stack
  50755. // #19089
  50756. @SP
  50757. // #19090
  50758. A=M
  50759. // #19091
  50760. M=D
  50761. // #19092
  50762. @SP
  50763. // #19093
  50764. M=M+1
  50765. //vv push_d_to_stack
  50766. //push THIS
  50767. // #19094
  50768. @THAT
  50769. // #19095
  50770. D=M
  50771. //^^ push_d_to_stack
  50772. // #19096
  50773. @SP
  50774. // #19097
  50775. A=M
  50776. // #19098
  50777. M=D
  50778. // #19099
  50779. @SP
  50780. // #19100
  50781. M=M+1
  50782. //vv push_d_to_stack
  50783. //push THAT
  50784. // #19101
  50785. @SP
  50786. // #19102
  50787. D=M
  50788. // #19103
  50789. @ARG
  50790. // #19104
  50791. M=D
  50792. // #19105
  50793. @17
  50794. // #19106
  50795. D=A
  50796. // #19107
  50797. @ARG
  50798. // #19108
  50799. M=M-D // ARG = SP - args - 5
  50800. // #19109
  50801. @SP
  50802. // #19110
  50803. D=M
  50804. // #19111
  50805. @LCL
  50806. // #19112
  50807. M=D // LCL = SP
  50808. // #19113
  50809. @Output.create
  50810. // #19114
  50811. 0;JMP
  50812. (RET_ADDR_156)
  50813. //
  50814. //// pop temp 0
  50815. //^^ pop_to_loc{5)
  50816. //^^ pop_stack_to_d
  50817. // #19115
  50818. @SP
  50819. // #19116
  50820. M=M-1
  50821. // #19117
  50822. A=M
  50823. // #19118
  50824. D=M
  50825. //vv pop_stack_to_d
  50826. // #19119
  50827. @5
  50828. // #19120
  50829. M=D
  50830. //vv pop_to_loc{5)
  50831. //
  50832. //// push constant 113
  50833. //^^ push_constant(113)
  50834. // #19121
  50835. @113
  50836. // #19122
  50837. D=A
  50838. //^^ push_d_to_stack
  50839. // #19123
  50840. @SP
  50841. // #19124
  50842. A=M
  50843. // #19125
  50844. M=D
  50845. // #19126
  50846. @SP
  50847. // #19127
  50848. M=M+1
  50849. //vv push_d_to_stack
  50850. //vv push_constant(113)
  50851. //
  50852. //// push constant 0
  50853. //^^ push_constant(0)
  50854. // #19128
  50855. @0
  50856. // #19129
  50857. D=A
  50858. //^^ push_d_to_stack
  50859. // #19130
  50860. @SP
  50861. // #19131
  50862. A=M
  50863. // #19132
  50864. M=D
  50865. // #19133
  50866. @SP
  50867. // #19134
  50868. M=M+1
  50869. //vv push_d_to_stack
  50870. //vv push_constant(0)
  50871. //
  50872. //// push constant 0
  50873. //^^ push_constant(0)
  50874. // #19135
  50875. @0
  50876. // #19136
  50877. D=A
  50878. //^^ push_d_to_stack
  50879. // #19137
  50880. @SP
  50881. // #19138
  50882. A=M
  50883. // #19139
  50884. M=D
  50885. // #19140
  50886. @SP
  50887. // #19141
  50888. M=M+1
  50889. //vv push_d_to_stack
  50890. //vv push_constant(0)
  50891. //
  50892. //// push constant 0
  50893. //^^ push_constant(0)
  50894. // #19142
  50895. @0
  50896. // #19143
  50897. D=A
  50898. //^^ push_d_to_stack
  50899. // #19144
  50900. @SP
  50901. // #19145
  50902. A=M
  50903. // #19146
  50904. M=D
  50905. // #19147
  50906. @SP
  50907. // #19148
  50908. M=M+1
  50909. //vv push_d_to_stack
  50910. //vv push_constant(0)
  50911. //
  50912. //// push constant 30
  50913. //^^ push_constant(30)
  50914. // #19149
  50915. @30
  50916. // #19150
  50917. D=A
  50918. //^^ push_d_to_stack
  50919. // #19151
  50920. @SP
  50921. // #19152
  50922. A=M
  50923. // #19153
  50924. M=D
  50925. // #19154
  50926. @SP
  50927. // #19155
  50928. M=M+1
  50929. //vv push_d_to_stack
  50930. //vv push_constant(30)
  50931. //
  50932. //// push constant 51
  50933. //^^ push_constant(51)
  50934. // #19156
  50935. @51
  50936. // #19157
  50937. D=A
  50938. //^^ push_d_to_stack
  50939. // #19158
  50940. @SP
  50941. // #19159
  50942. A=M
  50943. // #19160
  50944. M=D
  50945. // #19161
  50946. @SP
  50947. // #19162
  50948. M=M+1
  50949. //vv push_d_to_stack
  50950. //vv push_constant(51)
  50951. //
  50952. //// push constant 51
  50953. //^^ push_constant(51)
  50954. // #19163
  50955. @51
  50956. // #19164
  50957. D=A
  50958. //^^ push_d_to_stack
  50959. // #19165
  50960. @SP
  50961. // #19166
  50962. A=M
  50963. // #19167
  50964. M=D
  50965. // #19168
  50966. @SP
  50967. // #19169
  50968. M=M+1
  50969. //vv push_d_to_stack
  50970. //vv push_constant(51)
  50971. //
  50972. //// push constant 51
  50973. //^^ push_constant(51)
  50974. // #19170
  50975. @51
  50976. // #19171
  50977. D=A
  50978. //^^ push_d_to_stack
  50979. // #19172
  50980. @SP
  50981. // #19173
  50982. A=M
  50983. // #19174
  50984. M=D
  50985. // #19175
  50986. @SP
  50987. // #19176
  50988. M=M+1
  50989. //vv push_d_to_stack
  50990. //vv push_constant(51)
  50991. //
  50992. //// push constant 62
  50993. //^^ push_constant(62)
  50994. // #19177
  50995. @62
  50996. // #19178
  50997. D=A
  50998. //^^ push_d_to_stack
  50999. // #19179
  51000. @SP
  51001. // #19180
  51002. A=M
  51003. // #19181
  51004. M=D
  51005. // #19182
  51006. @SP
  51007. // #19183
  51008. M=M+1
  51009. //vv push_d_to_stack
  51010. //vv push_constant(62)
  51011. //
  51012. //// push constant 48
  51013. //^^ push_constant(48)
  51014. // #19184
  51015. @48
  51016. // #19185
  51017. D=A
  51018. //^^ push_d_to_stack
  51019. // #19186
  51020. @SP
  51021. // #19187
  51022. A=M
  51023. // #19188
  51024. M=D
  51025. // #19189
  51026. @SP
  51027. // #19190
  51028. M=M+1
  51029. //vv push_d_to_stack
  51030. //vv push_constant(48)
  51031. //
  51032. //// push constant 48
  51033. //^^ push_constant(48)
  51034. // #19191
  51035. @48
  51036. // #19192
  51037. D=A
  51038. //^^ push_d_to_stack
  51039. // #19193
  51040. @SP
  51041. // #19194
  51042. A=M
  51043. // #19195
  51044. M=D
  51045. // #19196
  51046. @SP
  51047. // #19197
  51048. M=M+1
  51049. //vv push_d_to_stack
  51050. //vv push_constant(48)
  51051. //
  51052. //// push constant 0
  51053. //^^ push_constant(0)
  51054. // #19198
  51055. @0
  51056. // #19199
  51057. D=A
  51058. //^^ push_d_to_stack
  51059. // #19200
  51060. @SP
  51061. // #19201
  51062. A=M
  51063. // #19202
  51064. M=D
  51065. // #19203
  51066. @SP
  51067. // #19204
  51068. M=M+1
  51069. //vv push_d_to_stack
  51070. //vv push_constant(0)
  51071. //
  51072. //// call Output.create 12
  51073. //^^ push_constant(RET_ADDR_157)
  51074. // #19205
  51075. @RET_ADDR_157
  51076. // #19206
  51077. D=A
  51078. //^^ push_d_to_stack
  51079. // #19207
  51080. @SP
  51081. // #19208
  51082. A=M
  51083. // #19209
  51084. M=D
  51085. // #19210
  51086. @SP
  51087. // #19211
  51088. M=M+1
  51089. //vv push_d_to_stack
  51090. //vv push_constant(RET_ADDR_157)
  51091. //push return-address
  51092. // #19212
  51093. @LCL
  51094. // #19213
  51095. D=M
  51096. //^^ push_d_to_stack
  51097. // #19214
  51098. @SP
  51099. // #19215
  51100. A=M
  51101. // #19216
  51102. M=D
  51103. // #19217
  51104. @SP
  51105. // #19218
  51106. M=M+1
  51107. //vv push_d_to_stack
  51108. //push LCL
  51109. // #19219
  51110. @ARG
  51111. // #19220
  51112. D=M
  51113. //^^ push_d_to_stack
  51114. // #19221
  51115. @SP
  51116. // #19222
  51117. A=M
  51118. // #19223
  51119. M=D
  51120. // #19224
  51121. @SP
  51122. // #19225
  51123. M=M+1
  51124. //vv push_d_to_stack
  51125. //push ARG
  51126. // #19226
  51127. @THIS
  51128. // #19227
  51129. D=M
  51130. //^^ push_d_to_stack
  51131. // #19228
  51132. @SP
  51133. // #19229
  51134. A=M
  51135. // #19230
  51136. M=D
  51137. // #19231
  51138. @SP
  51139. // #19232
  51140. M=M+1
  51141. //vv push_d_to_stack
  51142. //push THIS
  51143. // #19233
  51144. @THAT
  51145. // #19234
  51146. D=M
  51147. //^^ push_d_to_stack
  51148. // #19235
  51149. @SP
  51150. // #19236
  51151. A=M
  51152. // #19237
  51153. M=D
  51154. // #19238
  51155. @SP
  51156. // #19239
  51157. M=M+1
  51158. //vv push_d_to_stack
  51159. //push THAT
  51160. // #19240
  51161. @SP
  51162. // #19241
  51163. D=M
  51164. // #19242
  51165. @ARG
  51166. // #19243
  51167. M=D
  51168. // #19244
  51169. @17
  51170. // #19245
  51171. D=A
  51172. // #19246
  51173. @ARG
  51174. // #19247
  51175. M=M-D // ARG = SP - args - 5
  51176. // #19248
  51177. @SP
  51178. // #19249
  51179. D=M
  51180. // #19250
  51181. @LCL
  51182. // #19251
  51183. M=D // LCL = SP
  51184. // #19252
  51185. @Output.create
  51186. // #19253
  51187. 0;JMP
  51188. (RET_ADDR_157)
  51189. //
  51190. //// pop temp 0
  51191. //^^ pop_to_loc{5)
  51192. //^^ pop_stack_to_d
  51193. // #19254
  51194. @SP
  51195. // #19255
  51196. M=M-1
  51197. // #19256
  51198. A=M
  51199. // #19257
  51200. D=M
  51201. //vv pop_stack_to_d
  51202. // #19258
  51203. @5
  51204. // #19259
  51205. M=D
  51206. //vv pop_to_loc{5)
  51207. //
  51208. //// push constant 114
  51209. //^^ push_constant(114)
  51210. // #19260
  51211. @114
  51212. // #19261
  51213. D=A
  51214. //^^ push_d_to_stack
  51215. // #19262
  51216. @SP
  51217. // #19263
  51218. A=M
  51219. // #19264
  51220. M=D
  51221. // #19265
  51222. @SP
  51223. // #19266
  51224. M=M+1
  51225. //vv push_d_to_stack
  51226. //vv push_constant(114)
  51227. //
  51228. //// push constant 0
  51229. //^^ push_constant(0)
  51230. // #19267
  51231. @0
  51232. // #19268
  51233. D=A
  51234. //^^ push_d_to_stack
  51235. // #19269
  51236. @SP
  51237. // #19270
  51238. A=M
  51239. // #19271
  51240. M=D
  51241. // #19272
  51242. @SP
  51243. // #19273
  51244. M=M+1
  51245. //vv push_d_to_stack
  51246. //vv push_constant(0)
  51247. //
  51248. //// push constant 0
  51249. //^^ push_constant(0)
  51250. // #19274
  51251. @0
  51252. // #19275
  51253. D=A
  51254. //^^ push_d_to_stack
  51255. // #19276
  51256. @SP
  51257. // #19277
  51258. A=M
  51259. // #19278
  51260. M=D
  51261. // #19279
  51262. @SP
  51263. // #19280
  51264. M=M+1
  51265. //vv push_d_to_stack
  51266. //vv push_constant(0)
  51267. //
  51268. //// push constant 0
  51269. //^^ push_constant(0)
  51270. // #19281
  51271. @0
  51272. // #19282
  51273. D=A
  51274. //^^ push_d_to_stack
  51275. // #19283
  51276. @SP
  51277. // #19284
  51278. A=M
  51279. // #19285
  51280. M=D
  51281. // #19286
  51282. @SP
  51283. // #19287
  51284. M=M+1
  51285. //vv push_d_to_stack
  51286. //vv push_constant(0)
  51287. //
  51288. //// push constant 29
  51289. //^^ push_constant(29)
  51290. // #19288
  51291. @29
  51292. // #19289
  51293. D=A
  51294. //^^ push_d_to_stack
  51295. // #19290
  51296. @SP
  51297. // #19291
  51298. A=M
  51299. // #19292
  51300. M=D
  51301. // #19293
  51302. @SP
  51303. // #19294
  51304. M=M+1
  51305. //vv push_d_to_stack
  51306. //vv push_constant(29)
  51307. //
  51308. //// push constant 55
  51309. //^^ push_constant(55)
  51310. // #19295
  51311. @55
  51312. // #19296
  51313. D=A
  51314. //^^ push_d_to_stack
  51315. // #19297
  51316. @SP
  51317. // #19298
  51318. A=M
  51319. // #19299
  51320. M=D
  51321. // #19300
  51322. @SP
  51323. // #19301
  51324. M=M+1
  51325. //vv push_d_to_stack
  51326. //vv push_constant(55)
  51327. //
  51328. //// push constant 51
  51329. //^^ push_constant(51)
  51330. // #19302
  51331. @51
  51332. // #19303
  51333. D=A
  51334. //^^ push_d_to_stack
  51335. // #19304
  51336. @SP
  51337. // #19305
  51338. A=M
  51339. // #19306
  51340. M=D
  51341. // #19307
  51342. @SP
  51343. // #19308
  51344. M=M+1
  51345. //vv push_d_to_stack
  51346. //vv push_constant(51)
  51347. //
  51348. //// push constant 3
  51349. //^^ push_constant(3)
  51350. // #19309
  51351. @3
  51352. // #19310
  51353. D=A
  51354. //^^ push_d_to_stack
  51355. // #19311
  51356. @SP
  51357. // #19312
  51358. A=M
  51359. // #19313
  51360. M=D
  51361. // #19314
  51362. @SP
  51363. // #19315
  51364. M=M+1
  51365. //vv push_d_to_stack
  51366. //vv push_constant(3)
  51367. //
  51368. //// push constant 3
  51369. //^^ push_constant(3)
  51370. // #19316
  51371. @3
  51372. // #19317
  51373. D=A
  51374. //^^ push_d_to_stack
  51375. // #19318
  51376. @SP
  51377. // #19319
  51378. A=M
  51379. // #19320
  51380. M=D
  51381. // #19321
  51382. @SP
  51383. // #19322
  51384. M=M+1
  51385. //vv push_d_to_stack
  51386. //vv push_constant(3)
  51387. //
  51388. //// push constant 7
  51389. //^^ push_constant(7)
  51390. // #19323
  51391. @7
  51392. // #19324
  51393. D=A
  51394. //^^ push_d_to_stack
  51395. // #19325
  51396. @SP
  51397. // #19326
  51398. A=M
  51399. // #19327
  51400. M=D
  51401. // #19328
  51402. @SP
  51403. // #19329
  51404. M=M+1
  51405. //vv push_d_to_stack
  51406. //vv push_constant(7)
  51407. //
  51408. //// push constant 0
  51409. //^^ push_constant(0)
  51410. // #19330
  51411. @0
  51412. // #19331
  51413. D=A
  51414. //^^ push_d_to_stack
  51415. // #19332
  51416. @SP
  51417. // #19333
  51418. A=M
  51419. // #19334
  51420. M=D
  51421. // #19335
  51422. @SP
  51423. // #19336
  51424. M=M+1
  51425. //vv push_d_to_stack
  51426. //vv push_constant(0)
  51427. //
  51428. //// push constant 0
  51429. //^^ push_constant(0)
  51430. // #19337
  51431. @0
  51432. // #19338
  51433. D=A
  51434. //^^ push_d_to_stack
  51435. // #19339
  51436. @SP
  51437. // #19340
  51438. A=M
  51439. // #19341
  51440. M=D
  51441. // #19342
  51442. @SP
  51443. // #19343
  51444. M=M+1
  51445. //vv push_d_to_stack
  51446. //vv push_constant(0)
  51447. //
  51448. //// call Output.create 12
  51449. //^^ push_constant(RET_ADDR_158)
  51450. // #19344
  51451. @RET_ADDR_158
  51452. // #19345
  51453. D=A
  51454. //^^ push_d_to_stack
  51455. // #19346
  51456. @SP
  51457. // #19347
  51458. A=M
  51459. // #19348
  51460. M=D
  51461. // #19349
  51462. @SP
  51463. // #19350
  51464. M=M+1
  51465. //vv push_d_to_stack
  51466. //vv push_constant(RET_ADDR_158)
  51467. //push return-address
  51468. // #19351
  51469. @LCL
  51470. // #19352
  51471. D=M
  51472. //^^ push_d_to_stack
  51473. // #19353
  51474. @SP
  51475. // #19354
  51476. A=M
  51477. // #19355
  51478. M=D
  51479. // #19356
  51480. @SP
  51481. // #19357
  51482. M=M+1
  51483. //vv push_d_to_stack
  51484. //push LCL
  51485. // #19358
  51486. @ARG
  51487. // #19359
  51488. D=M
  51489. //^^ push_d_to_stack
  51490. // #19360
  51491. @SP
  51492. // #19361
  51493. A=M
  51494. // #19362
  51495. M=D
  51496. // #19363
  51497. @SP
  51498. // #19364
  51499. M=M+1
  51500. //vv push_d_to_stack
  51501. //push ARG
  51502. // #19365
  51503. @THIS
  51504. // #19366
  51505. D=M
  51506. //^^ push_d_to_stack
  51507. // #19367
  51508. @SP
  51509. // #19368
  51510. A=M
  51511. // #19369
  51512. M=D
  51513. // #19370
  51514. @SP
  51515. // #19371
  51516. M=M+1
  51517. //vv push_d_to_stack
  51518. //push THIS
  51519. // #19372
  51520. @THAT
  51521. // #19373
  51522. D=M
  51523. //^^ push_d_to_stack
  51524. // #19374
  51525. @SP
  51526. // #19375
  51527. A=M
  51528. // #19376
  51529. M=D
  51530. // #19377
  51531. @SP
  51532. // #19378
  51533. M=M+1
  51534. //vv push_d_to_stack
  51535. //push THAT
  51536. // #19379
  51537. @SP
  51538. // #19380
  51539. D=M
  51540. // #19381
  51541. @ARG
  51542. // #19382
  51543. M=D
  51544. // #19383
  51545. @17
  51546. // #19384
  51547. D=A
  51548. // #19385
  51549. @ARG
  51550. // #19386
  51551. M=M-D // ARG = SP - args - 5
  51552. // #19387
  51553. @SP
  51554. // #19388
  51555. D=M
  51556. // #19389
  51557. @LCL
  51558. // #19390
  51559. M=D // LCL = SP
  51560. // #19391
  51561. @Output.create
  51562. // #19392
  51563. 0;JMP
  51564. (RET_ADDR_158)
  51565. //
  51566. //// pop temp 0
  51567. //^^ pop_to_loc{5)
  51568. //^^ pop_stack_to_d
  51569. // #19393
  51570. @SP
  51571. // #19394
  51572. M=M-1
  51573. // #19395
  51574. A=M
  51575. // #19396
  51576. D=M
  51577. //vv pop_stack_to_d
  51578. // #19397
  51579. @5
  51580. // #19398
  51581. M=D
  51582. //vv pop_to_loc{5)
  51583. //
  51584. //// push constant 115
  51585. //^^ push_constant(115)
  51586. // #19399
  51587. @115
  51588. // #19400
  51589. D=A
  51590. //^^ push_d_to_stack
  51591. // #19401
  51592. @SP
  51593. // #19402
  51594. A=M
  51595. // #19403
  51596. M=D
  51597. // #19404
  51598. @SP
  51599. // #19405
  51600. M=M+1
  51601. //vv push_d_to_stack
  51602. //vv push_constant(115)
  51603. //
  51604. //// push constant 0
  51605. //^^ push_constant(0)
  51606. // #19406
  51607. @0
  51608. // #19407
  51609. D=A
  51610. //^^ push_d_to_stack
  51611. // #19408
  51612. @SP
  51613. // #19409
  51614. A=M
  51615. // #19410
  51616. M=D
  51617. // #19411
  51618. @SP
  51619. // #19412
  51620. M=M+1
  51621. //vv push_d_to_stack
  51622. //vv push_constant(0)
  51623. //
  51624. //// push constant 0
  51625. //^^ push_constant(0)
  51626. // #19413
  51627. @0
  51628. // #19414
  51629. D=A
  51630. //^^ push_d_to_stack
  51631. // #19415
  51632. @SP
  51633. // #19416
  51634. A=M
  51635. // #19417
  51636. M=D
  51637. // #19418
  51638. @SP
  51639. // #19419
  51640. M=M+1
  51641. //vv push_d_to_stack
  51642. //vv push_constant(0)
  51643. //
  51644. //// push constant 0
  51645. //^^ push_constant(0)
  51646. // #19420
  51647. @0
  51648. // #19421
  51649. D=A
  51650. //^^ push_d_to_stack
  51651. // #19422
  51652. @SP
  51653. // #19423
  51654. A=M
  51655. // #19424
  51656. M=D
  51657. // #19425
  51658. @SP
  51659. // #19426
  51660. M=M+1
  51661. //vv push_d_to_stack
  51662. //vv push_constant(0)
  51663. //
  51664. //// push constant 30
  51665. //^^ push_constant(30)
  51666. // #19427
  51667. @30
  51668. // #19428
  51669. D=A
  51670. //^^ push_d_to_stack
  51671. // #19429
  51672. @SP
  51673. // #19430
  51674. A=M
  51675. // #19431
  51676. M=D
  51677. // #19432
  51678. @SP
  51679. // #19433
  51680. M=M+1
  51681. //vv push_d_to_stack
  51682. //vv push_constant(30)
  51683. //
  51684. //// push constant 51
  51685. //^^ push_constant(51)
  51686. // #19434
  51687. @51
  51688. // #19435
  51689. D=A
  51690. //^^ push_d_to_stack
  51691. // #19436
  51692. @SP
  51693. // #19437
  51694. A=M
  51695. // #19438
  51696. M=D
  51697. // #19439
  51698. @SP
  51699. // #19440
  51700. M=M+1
  51701. //vv push_d_to_stack
  51702. //vv push_constant(51)
  51703. //
  51704. //// push constant 6
  51705. //^^ push_constant(6)
  51706. // #19441
  51707. @6
  51708. // #19442
  51709. D=A
  51710. //^^ push_d_to_stack
  51711. // #19443
  51712. @SP
  51713. // #19444
  51714. A=M
  51715. // #19445
  51716. M=D
  51717. // #19446
  51718. @SP
  51719. // #19447
  51720. M=M+1
  51721. //vv push_d_to_stack
  51722. //vv push_constant(6)
  51723. //
  51724. //// push constant 24
  51725. //^^ push_constant(24)
  51726. // #19448
  51727. @24
  51728. // #19449
  51729. D=A
  51730. //^^ push_d_to_stack
  51731. // #19450
  51732. @SP
  51733. // #19451
  51734. A=M
  51735. // #19452
  51736. M=D
  51737. // #19453
  51738. @SP
  51739. // #19454
  51740. M=M+1
  51741. //vv push_d_to_stack
  51742. //vv push_constant(24)
  51743. //
  51744. //// push constant 51
  51745. //^^ push_constant(51)
  51746. // #19455
  51747. @51
  51748. // #19456
  51749. D=A
  51750. //^^ push_d_to_stack
  51751. // #19457
  51752. @SP
  51753. // #19458
  51754. A=M
  51755. // #19459
  51756. M=D
  51757. // #19460
  51758. @SP
  51759. // #19461
  51760. M=M+1
  51761. //vv push_d_to_stack
  51762. //vv push_constant(51)
  51763. //
  51764. //// push constant 30
  51765. //^^ push_constant(30)
  51766. // #19462
  51767. @30
  51768. // #19463
  51769. D=A
  51770. //^^ push_d_to_stack
  51771. // #19464
  51772. @SP
  51773. // #19465
  51774. A=M
  51775. // #19466
  51776. M=D
  51777. // #19467
  51778. @SP
  51779. // #19468
  51780. M=M+1
  51781. //vv push_d_to_stack
  51782. //vv push_constant(30)
  51783. //
  51784. //// push constant 0
  51785. //^^ push_constant(0)
  51786. // #19469
  51787. @0
  51788. // #19470
  51789. D=A
  51790. //^^ push_d_to_stack
  51791. // #19471
  51792. @SP
  51793. // #19472
  51794. A=M
  51795. // #19473
  51796. M=D
  51797. // #19474
  51798. @SP
  51799. // #19475
  51800. M=M+1
  51801. //vv push_d_to_stack
  51802. //vv push_constant(0)
  51803. //
  51804. //// push constant 0
  51805. //^^ push_constant(0)
  51806. // #19476
  51807. @0
  51808. // #19477
  51809. D=A
  51810. //^^ push_d_to_stack
  51811. // #19478
  51812. @SP
  51813. // #19479
  51814. A=M
  51815. // #19480
  51816. M=D
  51817. // #19481
  51818. @SP
  51819. // #19482
  51820. M=M+1
  51821. //vv push_d_to_stack
  51822. //vv push_constant(0)
  51823. //
  51824. //// call Output.create 12
  51825. //^^ push_constant(RET_ADDR_159)
  51826. // #19483
  51827. @RET_ADDR_159
  51828. // #19484
  51829. D=A
  51830. //^^ push_d_to_stack
  51831. // #19485
  51832. @SP
  51833. // #19486
  51834. A=M
  51835. // #19487
  51836. M=D
  51837. // #19488
  51838. @SP
  51839. // #19489
  51840. M=M+1
  51841. //vv push_d_to_stack
  51842. //vv push_constant(RET_ADDR_159)
  51843. //push return-address
  51844. // #19490
  51845. @LCL
  51846. // #19491
  51847. D=M
  51848. //^^ push_d_to_stack
  51849. // #19492
  51850. @SP
  51851. // #19493
  51852. A=M
  51853. // #19494
  51854. M=D
  51855. // #19495
  51856. @SP
  51857. // #19496
  51858. M=M+1
  51859. //vv push_d_to_stack
  51860. //push LCL
  51861. // #19497
  51862. @ARG
  51863. // #19498
  51864. D=M
  51865. //^^ push_d_to_stack
  51866. // #19499
  51867. @SP
  51868. // #19500
  51869. A=M
  51870. // #19501
  51871. M=D
  51872. // #19502
  51873. @SP
  51874. // #19503
  51875. M=M+1
  51876. //vv push_d_to_stack
  51877. //push ARG
  51878. // #19504
  51879. @THIS
  51880. // #19505
  51881. D=M
  51882. //^^ push_d_to_stack
  51883. // #19506
  51884. @SP
  51885. // #19507
  51886. A=M
  51887. // #19508
  51888. M=D
  51889. // #19509
  51890. @SP
  51891. // #19510
  51892. M=M+1
  51893. //vv push_d_to_stack
  51894. //push THIS
  51895. // #19511
  51896. @THAT
  51897. // #19512
  51898. D=M
  51899. //^^ push_d_to_stack
  51900. // #19513
  51901. @SP
  51902. // #19514
  51903. A=M
  51904. // #19515
  51905. M=D
  51906. // #19516
  51907. @SP
  51908. // #19517
  51909. M=M+1
  51910. //vv push_d_to_stack
  51911. //push THAT
  51912. // #19518
  51913. @SP
  51914. // #19519
  51915. D=M
  51916. // #19520
  51917. @ARG
  51918. // #19521
  51919. M=D
  51920. // #19522
  51921. @17
  51922. // #19523
  51923. D=A
  51924. // #19524
  51925. @ARG
  51926. // #19525
  51927. M=M-D // ARG = SP - args - 5
  51928. // #19526
  51929. @SP
  51930. // #19527
  51931. D=M
  51932. // #19528
  51933. @LCL
  51934. // #19529
  51935. M=D // LCL = SP
  51936. // #19530
  51937. @Output.create
  51938. // #19531
  51939. 0;JMP
  51940. (RET_ADDR_159)
  51941. //
  51942. //// pop temp 0
  51943. //^^ pop_to_loc{5)
  51944. //^^ pop_stack_to_d
  51945. // #19532
  51946. @SP
  51947. // #19533
  51948. M=M-1
  51949. // #19534
  51950. A=M
  51951. // #19535
  51952. D=M
  51953. //vv pop_stack_to_d
  51954. // #19536
  51955. @5
  51956. // #19537
  51957. M=D
  51958. //vv pop_to_loc{5)
  51959. //
  51960. //// push constant 116
  51961. //^^ push_constant(116)
  51962. // #19538
  51963. @116
  51964. // #19539
  51965. D=A
  51966. //^^ push_d_to_stack
  51967. // #19540
  51968. @SP
  51969. // #19541
  51970. A=M
  51971. // #19542
  51972. M=D
  51973. // #19543
  51974. @SP
  51975. // #19544
  51976. M=M+1
  51977. //vv push_d_to_stack
  51978. //vv push_constant(116)
  51979. //
  51980. //// push constant 4
  51981. //^^ push_constant(4)
  51982. // #19545
  51983. @4
  51984. // #19546
  51985. D=A
  51986. //^^ push_d_to_stack
  51987. // #19547
  51988. @SP
  51989. // #19548
  51990. A=M
  51991. // #19549
  51992. M=D
  51993. // #19550
  51994. @SP
  51995. // #19551
  51996. M=M+1
  51997. //vv push_d_to_stack
  51998. //vv push_constant(4)
  51999. //
  52000. //// push constant 6
  52001. //^^ push_constant(6)
  52002. // #19552
  52003. @6
  52004. // #19553
  52005. D=A
  52006. //^^ push_d_to_stack
  52007. // #19554
  52008. @SP
  52009. // #19555
  52010. A=M
  52011. // #19556
  52012. M=D
  52013. // #19557
  52014. @SP
  52015. // #19558
  52016. M=M+1
  52017. //vv push_d_to_stack
  52018. //vv push_constant(6)
  52019. //
  52020. //// push constant 6
  52021. //^^ push_constant(6)
  52022. // #19559
  52023. @6
  52024. // #19560
  52025. D=A
  52026. //^^ push_d_to_stack
  52027. // #19561
  52028. @SP
  52029. // #19562
  52030. A=M
  52031. // #19563
  52032. M=D
  52033. // #19564
  52034. @SP
  52035. // #19565
  52036. M=M+1
  52037. //vv push_d_to_stack
  52038. //vv push_constant(6)
  52039. //
  52040. //// push constant 15
  52041. //^^ push_constant(15)
  52042. // #19566
  52043. @15
  52044. // #19567
  52045. D=A
  52046. //^^ push_d_to_stack
  52047. // #19568
  52048. @SP
  52049. // #19569
  52050. A=M
  52051. // #19570
  52052. M=D
  52053. // #19571
  52054. @SP
  52055. // #19572
  52056. M=M+1
  52057. //vv push_d_to_stack
  52058. //vv push_constant(15)
  52059. //
  52060. //// push constant 6
  52061. //^^ push_constant(6)
  52062. // #19573
  52063. @6
  52064. // #19574
  52065. D=A
  52066. //^^ push_d_to_stack
  52067. // #19575
  52068. @SP
  52069. // #19576
  52070. A=M
  52071. // #19577
  52072. M=D
  52073. // #19578
  52074. @SP
  52075. // #19579
  52076. M=M+1
  52077. //vv push_d_to_stack
  52078. //vv push_constant(6)
  52079. //
  52080. //// push constant 6
  52081. //^^ push_constant(6)
  52082. // #19580
  52083. @6
  52084. // #19581
  52085. D=A
  52086. //^^ push_d_to_stack
  52087. // #19582
  52088. @SP
  52089. // #19583
  52090. A=M
  52091. // #19584
  52092. M=D
  52093. // #19585
  52094. @SP
  52095. // #19586
  52096. M=M+1
  52097. //vv push_d_to_stack
  52098. //vv push_constant(6)
  52099. //
  52100. //// push constant 6
  52101. //^^ push_constant(6)
  52102. // #19587
  52103. @6
  52104. // #19588
  52105. D=A
  52106. //^^ push_d_to_stack
  52107. // #19589
  52108. @SP
  52109. // #19590
  52110. A=M
  52111. // #19591
  52112. M=D
  52113. // #19592
  52114. @SP
  52115. // #19593
  52116. M=M+1
  52117. //vv push_d_to_stack
  52118. //vv push_constant(6)
  52119. //
  52120. //// push constant 54
  52121. //^^ push_constant(54)
  52122. // #19594
  52123. @54
  52124. // #19595
  52125. D=A
  52126. //^^ push_d_to_stack
  52127. // #19596
  52128. @SP
  52129. // #19597
  52130. A=M
  52131. // #19598
  52132. M=D
  52133. // #19599
  52134. @SP
  52135. // #19600
  52136. M=M+1
  52137. //vv push_d_to_stack
  52138. //vv push_constant(54)
  52139. //
  52140. //// push constant 28
  52141. //^^ push_constant(28)
  52142. // #19601
  52143. @28
  52144. // #19602
  52145. D=A
  52146. //^^ push_d_to_stack
  52147. // #19603
  52148. @SP
  52149. // #19604
  52150. A=M
  52151. // #19605
  52152. M=D
  52153. // #19606
  52154. @SP
  52155. // #19607
  52156. M=M+1
  52157. //vv push_d_to_stack
  52158. //vv push_constant(28)
  52159. //
  52160. //// push constant 0
  52161. //^^ push_constant(0)
  52162. // #19608
  52163. @0
  52164. // #19609
  52165. D=A
  52166. //^^ push_d_to_stack
  52167. // #19610
  52168. @SP
  52169. // #19611
  52170. A=M
  52171. // #19612
  52172. M=D
  52173. // #19613
  52174. @SP
  52175. // #19614
  52176. M=M+1
  52177. //vv push_d_to_stack
  52178. //vv push_constant(0)
  52179. //
  52180. //// push constant 0
  52181. //^^ push_constant(0)
  52182. // #19615
  52183. @0
  52184. // #19616
  52185. D=A
  52186. //^^ push_d_to_stack
  52187. // #19617
  52188. @SP
  52189. // #19618
  52190. A=M
  52191. // #19619
  52192. M=D
  52193. // #19620
  52194. @SP
  52195. // #19621
  52196. M=M+1
  52197. //vv push_d_to_stack
  52198. //vv push_constant(0)
  52199. //
  52200. //// call Output.create 12
  52201. //^^ push_constant(RET_ADDR_160)
  52202. // #19622
  52203. @RET_ADDR_160
  52204. // #19623
  52205. D=A
  52206. //^^ push_d_to_stack
  52207. // #19624
  52208. @SP
  52209. // #19625
  52210. A=M
  52211. // #19626
  52212. M=D
  52213. // #19627
  52214. @SP
  52215. // #19628
  52216. M=M+1
  52217. //vv push_d_to_stack
  52218. //vv push_constant(RET_ADDR_160)
  52219. //push return-address
  52220. // #19629
  52221. @LCL
  52222. // #19630
  52223. D=M
  52224. //^^ push_d_to_stack
  52225. // #19631
  52226. @SP
  52227. // #19632
  52228. A=M
  52229. // #19633
  52230. M=D
  52231. // #19634
  52232. @SP
  52233. // #19635
  52234. M=M+1
  52235. //vv push_d_to_stack
  52236. //push LCL
  52237. // #19636
  52238. @ARG
  52239. // #19637
  52240. D=M
  52241. //^^ push_d_to_stack
  52242. // #19638
  52243. @SP
  52244. // #19639
  52245. A=M
  52246. // #19640
  52247. M=D
  52248. // #19641
  52249. @SP
  52250. // #19642
  52251. M=M+1
  52252. //vv push_d_to_stack
  52253. //push ARG
  52254. // #19643
  52255. @THIS
  52256. // #19644
  52257. D=M
  52258. //^^ push_d_to_stack
  52259. // #19645
  52260. @SP
  52261. // #19646
  52262. A=M
  52263. // #19647
  52264. M=D
  52265. // #19648
  52266. @SP
  52267. // #19649
  52268. M=M+1
  52269. //vv push_d_to_stack
  52270. //push THIS
  52271. // #19650
  52272. @THAT
  52273. // #19651
  52274. D=M
  52275. //^^ push_d_to_stack
  52276. // #19652
  52277. @SP
  52278. // #19653
  52279. A=M
  52280. // #19654
  52281. M=D
  52282. // #19655
  52283. @SP
  52284. // #19656
  52285. M=M+1
  52286. //vv push_d_to_stack
  52287. //push THAT
  52288. // #19657
  52289. @SP
  52290. // #19658
  52291. D=M
  52292. // #19659
  52293. @ARG
  52294. // #19660
  52295. M=D
  52296. // #19661
  52297. @17
  52298. // #19662
  52299. D=A
  52300. // #19663
  52301. @ARG
  52302. // #19664
  52303. M=M-D // ARG = SP - args - 5
  52304. // #19665
  52305. @SP
  52306. // #19666
  52307. D=M
  52308. // #19667
  52309. @LCL
  52310. // #19668
  52311. M=D // LCL = SP
  52312. // #19669
  52313. @Output.create
  52314. // #19670
  52315. 0;JMP
  52316. (RET_ADDR_160)
  52317. //
  52318. //// pop temp 0
  52319. //^^ pop_to_loc{5)
  52320. //^^ pop_stack_to_d
  52321. // #19671
  52322. @SP
  52323. // #19672
  52324. M=M-1
  52325. // #19673
  52326. A=M
  52327. // #19674
  52328. D=M
  52329. //vv pop_stack_to_d
  52330. // #19675
  52331. @5
  52332. // #19676
  52333. M=D
  52334. //vv pop_to_loc{5)
  52335. //
  52336. //// push constant 117
  52337. //^^ push_constant(117)
  52338. // #19677
  52339. @117
  52340. // #19678
  52341. D=A
  52342. //^^ push_d_to_stack
  52343. // #19679
  52344. @SP
  52345. // #19680
  52346. A=M
  52347. // #19681
  52348. M=D
  52349. // #19682
  52350. @SP
  52351. // #19683
  52352. M=M+1
  52353. //vv push_d_to_stack
  52354. //vv push_constant(117)
  52355. //
  52356. //// push constant 0
  52357. //^^ push_constant(0)
  52358. // #19684
  52359. @0
  52360. // #19685
  52361. D=A
  52362. //^^ push_d_to_stack
  52363. // #19686
  52364. @SP
  52365. // #19687
  52366. A=M
  52367. // #19688
  52368. M=D
  52369. // #19689
  52370. @SP
  52371. // #19690
  52372. M=M+1
  52373. //vv push_d_to_stack
  52374. //vv push_constant(0)
  52375. //
  52376. //// push constant 0
  52377. //^^ push_constant(0)
  52378. // #19691
  52379. @0
  52380. // #19692
  52381. D=A
  52382. //^^ push_d_to_stack
  52383. // #19693
  52384. @SP
  52385. // #19694
  52386. A=M
  52387. // #19695
  52388. M=D
  52389. // #19696
  52390. @SP
  52391. // #19697
  52392. M=M+1
  52393. //vv push_d_to_stack
  52394. //vv push_constant(0)
  52395. //
  52396. //// push constant 0
  52397. //^^ push_constant(0)
  52398. // #19698
  52399. @0
  52400. // #19699
  52401. D=A
  52402. //^^ push_d_to_stack
  52403. // #19700
  52404. @SP
  52405. // #19701
  52406. A=M
  52407. // #19702
  52408. M=D
  52409. // #19703
  52410. @SP
  52411. // #19704
  52412. M=M+1
  52413. //vv push_d_to_stack
  52414. //vv push_constant(0)
  52415. //
  52416. //// push constant 27
  52417. //^^ push_constant(27)
  52418. // #19705
  52419. @27
  52420. // #19706
  52421. D=A
  52422. //^^ push_d_to_stack
  52423. // #19707
  52424. @SP
  52425. // #19708
  52426. A=M
  52427. // #19709
  52428. M=D
  52429. // #19710
  52430. @SP
  52431. // #19711
  52432. M=M+1
  52433. //vv push_d_to_stack
  52434. //vv push_constant(27)
  52435. //
  52436. //// push constant 27
  52437. //^^ push_constant(27)
  52438. // #19712
  52439. @27
  52440. // #19713
  52441. D=A
  52442. //^^ push_d_to_stack
  52443. // #19714
  52444. @SP
  52445. // #19715
  52446. A=M
  52447. // #19716
  52448. M=D
  52449. // #19717
  52450. @SP
  52451. // #19718
  52452. M=M+1
  52453. //vv push_d_to_stack
  52454. //vv push_constant(27)
  52455. //
  52456. //// push constant 27
  52457. //^^ push_constant(27)
  52458. // #19719
  52459. @27
  52460. // #19720
  52461. D=A
  52462. //^^ push_d_to_stack
  52463. // #19721
  52464. @SP
  52465. // #19722
  52466. A=M
  52467. // #19723
  52468. M=D
  52469. // #19724
  52470. @SP
  52471. // #19725
  52472. M=M+1
  52473. //vv push_d_to_stack
  52474. //vv push_constant(27)
  52475. //
  52476. //// push constant 27
  52477. //^^ push_constant(27)
  52478. // #19726
  52479. @27
  52480. // #19727
  52481. D=A
  52482. //^^ push_d_to_stack
  52483. // #19728
  52484. @SP
  52485. // #19729
  52486. A=M
  52487. // #19730
  52488. M=D
  52489. // #19731
  52490. @SP
  52491. // #19732
  52492. M=M+1
  52493. //vv push_d_to_stack
  52494. //vv push_constant(27)
  52495. //
  52496. //// push constant 27
  52497. //^^ push_constant(27)
  52498. // #19733
  52499. @27
  52500. // #19734
  52501. D=A
  52502. //^^ push_d_to_stack
  52503. // #19735
  52504. @SP
  52505. // #19736
  52506. A=M
  52507. // #19737
  52508. M=D
  52509. // #19738
  52510. @SP
  52511. // #19739
  52512. M=M+1
  52513. //vv push_d_to_stack
  52514. //vv push_constant(27)
  52515. //
  52516. //// push constant 54
  52517. //^^ push_constant(54)
  52518. // #19740
  52519. @54
  52520. // #19741
  52521. D=A
  52522. //^^ push_d_to_stack
  52523. // #19742
  52524. @SP
  52525. // #19743
  52526. A=M
  52527. // #19744
  52528. M=D
  52529. // #19745
  52530. @SP
  52531. // #19746
  52532. M=M+1
  52533. //vv push_d_to_stack
  52534. //vv push_constant(54)
  52535. //
  52536. //// push constant 0
  52537. //^^ push_constant(0)
  52538. // #19747
  52539. @0
  52540. // #19748
  52541. D=A
  52542. //^^ push_d_to_stack
  52543. // #19749
  52544. @SP
  52545. // #19750
  52546. A=M
  52547. // #19751
  52548. M=D
  52549. // #19752
  52550. @SP
  52551. // #19753
  52552. M=M+1
  52553. //vv push_d_to_stack
  52554. //vv push_constant(0)
  52555. //
  52556. //// push constant 0
  52557. //^^ push_constant(0)
  52558. // #19754
  52559. @0
  52560. // #19755
  52561. D=A
  52562. //^^ push_d_to_stack
  52563. // #19756
  52564. @SP
  52565. // #19757
  52566. A=M
  52567. // #19758
  52568. M=D
  52569. // #19759
  52570. @SP
  52571. // #19760
  52572. M=M+1
  52573. //vv push_d_to_stack
  52574. //vv push_constant(0)
  52575. //
  52576. //// call Output.create 12
  52577. //^^ push_constant(RET_ADDR_161)
  52578. // #19761
  52579. @RET_ADDR_161
  52580. // #19762
  52581. D=A
  52582. //^^ push_d_to_stack
  52583. // #19763
  52584. @SP
  52585. // #19764
  52586. A=M
  52587. // #19765
  52588. M=D
  52589. // #19766
  52590. @SP
  52591. // #19767
  52592. M=M+1
  52593. //vv push_d_to_stack
  52594. //vv push_constant(RET_ADDR_161)
  52595. //push return-address
  52596. // #19768
  52597. @LCL
  52598. // #19769
  52599. D=M
  52600. //^^ push_d_to_stack
  52601. // #19770
  52602. @SP
  52603. // #19771
  52604. A=M
  52605. // #19772
  52606. M=D
  52607. // #19773
  52608. @SP
  52609. // #19774
  52610. M=M+1
  52611. //vv push_d_to_stack
  52612. //push LCL
  52613. // #19775
  52614. @ARG
  52615. // #19776
  52616. D=M
  52617. //^^ push_d_to_stack
  52618. // #19777
  52619. @SP
  52620. // #19778
  52621. A=M
  52622. // #19779
  52623. M=D
  52624. // #19780
  52625. @SP
  52626. // #19781
  52627. M=M+1
  52628. //vv push_d_to_stack
  52629. //push ARG
  52630. // #19782
  52631. @THIS
  52632. // #19783
  52633. D=M
  52634. //^^ push_d_to_stack
  52635. // #19784
  52636. @SP
  52637. // #19785
  52638. A=M
  52639. // #19786
  52640. M=D
  52641. // #19787
  52642. @SP
  52643. // #19788
  52644. M=M+1
  52645. //vv push_d_to_stack
  52646. //push THIS
  52647. // #19789
  52648. @THAT
  52649. // #19790
  52650. D=M
  52651. //^^ push_d_to_stack
  52652. // #19791
  52653. @SP
  52654. // #19792
  52655. A=M
  52656. // #19793
  52657. M=D
  52658. // #19794
  52659. @SP
  52660. // #19795
  52661. M=M+1
  52662. //vv push_d_to_stack
  52663. //push THAT
  52664. // #19796
  52665. @SP
  52666. // #19797
  52667. D=M
  52668. // #19798
  52669. @ARG
  52670. // #19799
  52671. M=D
  52672. // #19800
  52673. @17
  52674. // #19801
  52675. D=A
  52676. // #19802
  52677. @ARG
  52678. // #19803
  52679. M=M-D // ARG = SP - args - 5
  52680. // #19804
  52681. @SP
  52682. // #19805
  52683. D=M
  52684. // #19806
  52685. @LCL
  52686. // #19807
  52687. M=D // LCL = SP
  52688. // #19808
  52689. @Output.create
  52690. // #19809
  52691. 0;JMP
  52692. (RET_ADDR_161)
  52693. //
  52694. //// pop temp 0
  52695. //^^ pop_to_loc{5)
  52696. //^^ pop_stack_to_d
  52697. // #19810
  52698. @SP
  52699. // #19811
  52700. M=M-1
  52701. // #19812
  52702. A=M
  52703. // #19813
  52704. D=M
  52705. //vv pop_stack_to_d
  52706. // #19814
  52707. @5
  52708. // #19815
  52709. M=D
  52710. //vv pop_to_loc{5)
  52711. //
  52712. //// push constant 118
  52713. //^^ push_constant(118)
  52714. // #19816
  52715. @118
  52716. // #19817
  52717. D=A
  52718. //^^ push_d_to_stack
  52719. // #19818
  52720. @SP
  52721. // #19819
  52722. A=M
  52723. // #19820
  52724. M=D
  52725. // #19821
  52726. @SP
  52727. // #19822
  52728. M=M+1
  52729. //vv push_d_to_stack
  52730. //vv push_constant(118)
  52731. //
  52732. //// push constant 0
  52733. //^^ push_constant(0)
  52734. // #19823
  52735. @0
  52736. // #19824
  52737. D=A
  52738. //^^ push_d_to_stack
  52739. // #19825
  52740. @SP
  52741. // #19826
  52742. A=M
  52743. // #19827
  52744. M=D
  52745. // #19828
  52746. @SP
  52747. // #19829
  52748. M=M+1
  52749. //vv push_d_to_stack
  52750. //vv push_constant(0)
  52751. //
  52752. //// push constant 0
  52753. //^^ push_constant(0)
  52754. // #19830
  52755. @0
  52756. // #19831
  52757. D=A
  52758. //^^ push_d_to_stack
  52759. // #19832
  52760. @SP
  52761. // #19833
  52762. A=M
  52763. // #19834
  52764. M=D
  52765. // #19835
  52766. @SP
  52767. // #19836
  52768. M=M+1
  52769. //vv push_d_to_stack
  52770. //vv push_constant(0)
  52771. //
  52772. //// push constant 0
  52773. //^^ push_constant(0)
  52774. // #19837
  52775. @0
  52776. // #19838
  52777. D=A
  52778. //^^ push_d_to_stack
  52779. // #19839
  52780. @SP
  52781. // #19840
  52782. A=M
  52783. // #19841
  52784. M=D
  52785. // #19842
  52786. @SP
  52787. // #19843
  52788. M=M+1
  52789. //vv push_d_to_stack
  52790. //vv push_constant(0)
  52791. //
  52792. //// push constant 51
  52793. //^^ push_constant(51)
  52794. // #19844
  52795. @51
  52796. // #19845
  52797. D=A
  52798. //^^ push_d_to_stack
  52799. // #19846
  52800. @SP
  52801. // #19847
  52802. A=M
  52803. // #19848
  52804. M=D
  52805. // #19849
  52806. @SP
  52807. // #19850
  52808. M=M+1
  52809. //vv push_d_to_stack
  52810. //vv push_constant(51)
  52811. //
  52812. //// push constant 51
  52813. //^^ push_constant(51)
  52814. // #19851
  52815. @51
  52816. // #19852
  52817. D=A
  52818. //^^ push_d_to_stack
  52819. // #19853
  52820. @SP
  52821. // #19854
  52822. A=M
  52823. // #19855
  52824. M=D
  52825. // #19856
  52826. @SP
  52827. // #19857
  52828. M=M+1
  52829. //vv push_d_to_stack
  52830. //vv push_constant(51)
  52831. //
  52832. //// push constant 51
  52833. //^^ push_constant(51)
  52834. // #19858
  52835. @51
  52836. // #19859
  52837. D=A
  52838. //^^ push_d_to_stack
  52839. // #19860
  52840. @SP
  52841. // #19861
  52842. A=M
  52843. // #19862
  52844. M=D
  52845. // #19863
  52846. @SP
  52847. // #19864
  52848. M=M+1
  52849. //vv push_d_to_stack
  52850. //vv push_constant(51)
  52851. //
  52852. //// push constant 51
  52853. //^^ push_constant(51)
  52854. // #19865
  52855. @51
  52856. // #19866
  52857. D=A
  52858. //^^ push_d_to_stack
  52859. // #19867
  52860. @SP
  52861. // #19868
  52862. A=M
  52863. // #19869
  52864. M=D
  52865. // #19870
  52866. @SP
  52867. // #19871
  52868. M=M+1
  52869. //vv push_d_to_stack
  52870. //vv push_constant(51)
  52871. //
  52872. //// push constant 30
  52873. //^^ push_constant(30)
  52874. // #19872
  52875. @30
  52876. // #19873
  52877. D=A
  52878. //^^ push_d_to_stack
  52879. // #19874
  52880. @SP
  52881. // #19875
  52882. A=M
  52883. // #19876
  52884. M=D
  52885. // #19877
  52886. @SP
  52887. // #19878
  52888. M=M+1
  52889. //vv push_d_to_stack
  52890. //vv push_constant(30)
  52891. //
  52892. //// push constant 12
  52893. //^^ push_constant(12)
  52894. // #19879
  52895. @12
  52896. // #19880
  52897. D=A
  52898. //^^ push_d_to_stack
  52899. // #19881
  52900. @SP
  52901. // #19882
  52902. A=M
  52903. // #19883
  52904. M=D
  52905. // #19884
  52906. @SP
  52907. // #19885
  52908. M=M+1
  52909. //vv push_d_to_stack
  52910. //vv push_constant(12)
  52911. //
  52912. //// push constant 0
  52913. //^^ push_constant(0)
  52914. // #19886
  52915. @0
  52916. // #19887
  52917. D=A
  52918. //^^ push_d_to_stack
  52919. // #19888
  52920. @SP
  52921. // #19889
  52922. A=M
  52923. // #19890
  52924. M=D
  52925. // #19891
  52926. @SP
  52927. // #19892
  52928. M=M+1
  52929. //vv push_d_to_stack
  52930. //vv push_constant(0)
  52931. //
  52932. //// push constant 0
  52933. //^^ push_constant(0)
  52934. // #19893
  52935. @0
  52936. // #19894
  52937. D=A
  52938. //^^ push_d_to_stack
  52939. // #19895
  52940. @SP
  52941. // #19896
  52942. A=M
  52943. // #19897
  52944. M=D
  52945. // #19898
  52946. @SP
  52947. // #19899
  52948. M=M+1
  52949. //vv push_d_to_stack
  52950. //vv push_constant(0)
  52951. //
  52952. //// call Output.create 12
  52953. //^^ push_constant(RET_ADDR_162)
  52954. // #19900
  52955. @RET_ADDR_162
  52956. // #19901
  52957. D=A
  52958. //^^ push_d_to_stack
  52959. // #19902
  52960. @SP
  52961. // #19903
  52962. A=M
  52963. // #19904
  52964. M=D
  52965. // #19905
  52966. @SP
  52967. // #19906
  52968. M=M+1
  52969. //vv push_d_to_stack
  52970. //vv push_constant(RET_ADDR_162)
  52971. //push return-address
  52972. // #19907
  52973. @LCL
  52974. // #19908
  52975. D=M
  52976. //^^ push_d_to_stack
  52977. // #19909
  52978. @SP
  52979. // #19910
  52980. A=M
  52981. // #19911
  52982. M=D
  52983. // #19912
  52984. @SP
  52985. // #19913
  52986. M=M+1
  52987. //vv push_d_to_stack
  52988. //push LCL
  52989. // #19914
  52990. @ARG
  52991. // #19915
  52992. D=M
  52993. //^^ push_d_to_stack
  52994. // #19916
  52995. @SP
  52996. // #19917
  52997. A=M
  52998. // #19918
  52999. M=D
  53000. // #19919
  53001. @SP
  53002. // #19920
  53003. M=M+1
  53004. //vv push_d_to_stack
  53005. //push ARG
  53006. // #19921
  53007. @THIS
  53008. // #19922
  53009. D=M
  53010. //^^ push_d_to_stack
  53011. // #19923
  53012. @SP
  53013. // #19924
  53014. A=M
  53015. // #19925
  53016. M=D
  53017. // #19926
  53018. @SP
  53019. // #19927
  53020. M=M+1
  53021. //vv push_d_to_stack
  53022. //push THIS
  53023. // #19928
  53024. @THAT
  53025. // #19929
  53026. D=M
  53027. //^^ push_d_to_stack
  53028. // #19930
  53029. @SP
  53030. // #19931
  53031. A=M
  53032. // #19932
  53033. M=D
  53034. // #19933
  53035. @SP
  53036. // #19934
  53037. M=M+1
  53038. //vv push_d_to_stack
  53039. //push THAT
  53040. // #19935
  53041. @SP
  53042. // #19936
  53043. D=M
  53044. // #19937
  53045. @ARG
  53046. // #19938
  53047. M=D
  53048. // #19939
  53049. @17
  53050. // #19940
  53051. D=A
  53052. // #19941
  53053. @ARG
  53054. // #19942
  53055. M=M-D // ARG = SP - args - 5
  53056. // #19943
  53057. @SP
  53058. // #19944
  53059. D=M
  53060. // #19945
  53061. @LCL
  53062. // #19946
  53063. M=D // LCL = SP
  53064. // #19947
  53065. @Output.create
  53066. // #19948
  53067. 0;JMP
  53068. (RET_ADDR_162)
  53069. //
  53070. //// pop temp 0
  53071. //^^ pop_to_loc{5)
  53072. //^^ pop_stack_to_d
  53073. // #19949
  53074. @SP
  53075. // #19950
  53076. M=M-1
  53077. // #19951
  53078. A=M
  53079. // #19952
  53080. D=M
  53081. //vv pop_stack_to_d
  53082. // #19953
  53083. @5
  53084. // #19954
  53085. M=D
  53086. //vv pop_to_loc{5)
  53087. //
  53088. //// push constant 119
  53089. //^^ push_constant(119)
  53090. // #19955
  53091. @119
  53092. // #19956
  53093. D=A
  53094. //^^ push_d_to_stack
  53095. // #19957
  53096. @SP
  53097. // #19958
  53098. A=M
  53099. // #19959
  53100. M=D
  53101. // #19960
  53102. @SP
  53103. // #19961
  53104. M=M+1
  53105. //vv push_d_to_stack
  53106. //vv push_constant(119)
  53107. //
  53108. //// push constant 0
  53109. //^^ push_constant(0)
  53110. // #19962
  53111. @0
  53112. // #19963
  53113. D=A
  53114. //^^ push_d_to_stack
  53115. // #19964
  53116. @SP
  53117. // #19965
  53118. A=M
  53119. // #19966
  53120. M=D
  53121. // #19967
  53122. @SP
  53123. // #19968
  53124. M=M+1
  53125. //vv push_d_to_stack
  53126. //vv push_constant(0)
  53127. //
  53128. //// push constant 0
  53129. //^^ push_constant(0)
  53130. // #19969
  53131. @0
  53132. // #19970
  53133. D=A
  53134. //^^ push_d_to_stack
  53135. // #19971
  53136. @SP
  53137. // #19972
  53138. A=M
  53139. // #19973
  53140. M=D
  53141. // #19974
  53142. @SP
  53143. // #19975
  53144. M=M+1
  53145. //vv push_d_to_stack
  53146. //vv push_constant(0)
  53147. //
  53148. //// push constant 0
  53149. //^^ push_constant(0)
  53150. // #19976
  53151. @0
  53152. // #19977
  53153. D=A
  53154. //^^ push_d_to_stack
  53155. // #19978
  53156. @SP
  53157. // #19979
  53158. A=M
  53159. // #19980
  53160. M=D
  53161. // #19981
  53162. @SP
  53163. // #19982
  53164. M=M+1
  53165. //vv push_d_to_stack
  53166. //vv push_constant(0)
  53167. //
  53168. //// push constant 51
  53169. //^^ push_constant(51)
  53170. // #19983
  53171. @51
  53172. // #19984
  53173. D=A
  53174. //^^ push_d_to_stack
  53175. // #19985
  53176. @SP
  53177. // #19986
  53178. A=M
  53179. // #19987
  53180. M=D
  53181. // #19988
  53182. @SP
  53183. // #19989
  53184. M=M+1
  53185. //vv push_d_to_stack
  53186. //vv push_constant(51)
  53187. //
  53188. //// push constant 51
  53189. //^^ push_constant(51)
  53190. // #19990
  53191. @51
  53192. // #19991
  53193. D=A
  53194. //^^ push_d_to_stack
  53195. // #19992
  53196. @SP
  53197. // #19993
  53198. A=M
  53199. // #19994
  53200. M=D
  53201. // #19995
  53202. @SP
  53203. // #19996
  53204. M=M+1
  53205. //vv push_d_to_stack
  53206. //vv push_constant(51)
  53207. //
  53208. //// push constant 51
  53209. //^^ push_constant(51)
  53210. // #19997
  53211. @51
  53212. // #19998
  53213. D=A
  53214. //^^ push_d_to_stack
  53215. // #19999
  53216. @SP
  53217. // #20000
  53218. A=M
  53219. // #20001
  53220. M=D
  53221. // #20002
  53222. @SP
  53223. // #20003
  53224. M=M+1
  53225. //vv push_d_to_stack
  53226. //vv push_constant(51)
  53227. //
  53228. //// push constant 63
  53229. //^^ push_constant(63)
  53230. // #20004
  53231. @63
  53232. // #20005
  53233. D=A
  53234. //^^ push_d_to_stack
  53235. // #20006
  53236. @SP
  53237. // #20007
  53238. A=M
  53239. // #20008
  53240. M=D
  53241. // #20009
  53242. @SP
  53243. // #20010
  53244. M=M+1
  53245. //vv push_d_to_stack
  53246. //vv push_constant(63)
  53247. //
  53248. //// push constant 63
  53249. //^^ push_constant(63)
  53250. // #20011
  53251. @63
  53252. // #20012
  53253. D=A
  53254. //^^ push_d_to_stack
  53255. // #20013
  53256. @SP
  53257. // #20014
  53258. A=M
  53259. // #20015
  53260. M=D
  53261. // #20016
  53262. @SP
  53263. // #20017
  53264. M=M+1
  53265. //vv push_d_to_stack
  53266. //vv push_constant(63)
  53267. //
  53268. //// push constant 18
  53269. //^^ push_constant(18)
  53270. // #20018
  53271. @18
  53272. // #20019
  53273. D=A
  53274. //^^ push_d_to_stack
  53275. // #20020
  53276. @SP
  53277. // #20021
  53278. A=M
  53279. // #20022
  53280. M=D
  53281. // #20023
  53282. @SP
  53283. // #20024
  53284. M=M+1
  53285. //vv push_d_to_stack
  53286. //vv push_constant(18)
  53287. //
  53288. //// push constant 0
  53289. //^^ push_constant(0)
  53290. // #20025
  53291. @0
  53292. // #20026
  53293. D=A
  53294. //^^ push_d_to_stack
  53295. // #20027
  53296. @SP
  53297. // #20028
  53298. A=M
  53299. // #20029
  53300. M=D
  53301. // #20030
  53302. @SP
  53303. // #20031
  53304. M=M+1
  53305. //vv push_d_to_stack
  53306. //vv push_constant(0)
  53307. //
  53308. //// push constant 0
  53309. //^^ push_constant(0)
  53310. // #20032
  53311. @0
  53312. // #20033
  53313. D=A
  53314. //^^ push_d_to_stack
  53315. // #20034
  53316. @SP
  53317. // #20035
  53318. A=M
  53319. // #20036
  53320. M=D
  53321. // #20037
  53322. @SP
  53323. // #20038
  53324. M=M+1
  53325. //vv push_d_to_stack
  53326. //vv push_constant(0)
  53327. //
  53328. //// call Output.create 12
  53329. //^^ push_constant(RET_ADDR_163)
  53330. // #20039
  53331. @RET_ADDR_163
  53332. // #20040
  53333. D=A
  53334. //^^ push_d_to_stack
  53335. // #20041
  53336. @SP
  53337. // #20042
  53338. A=M
  53339. // #20043
  53340. M=D
  53341. // #20044
  53342. @SP
  53343. // #20045
  53344. M=M+1
  53345. //vv push_d_to_stack
  53346. //vv push_constant(RET_ADDR_163)
  53347. //push return-address
  53348. // #20046
  53349. @LCL
  53350. // #20047
  53351. D=M
  53352. //^^ push_d_to_stack
  53353. // #20048
  53354. @SP
  53355. // #20049
  53356. A=M
  53357. // #20050
  53358. M=D
  53359. // #20051
  53360. @SP
  53361. // #20052
  53362. M=M+1
  53363. //vv push_d_to_stack
  53364. //push LCL
  53365. // #20053
  53366. @ARG
  53367. // #20054
  53368. D=M
  53369. //^^ push_d_to_stack
  53370. // #20055
  53371. @SP
  53372. // #20056
  53373. A=M
  53374. // #20057
  53375. M=D
  53376. // #20058
  53377. @SP
  53378. // #20059
  53379. M=M+1
  53380. //vv push_d_to_stack
  53381. //push ARG
  53382. // #20060
  53383. @THIS
  53384. // #20061
  53385. D=M
  53386. //^^ push_d_to_stack
  53387. // #20062
  53388. @SP
  53389. // #20063
  53390. A=M
  53391. // #20064
  53392. M=D
  53393. // #20065
  53394. @SP
  53395. // #20066
  53396. M=M+1
  53397. //vv push_d_to_stack
  53398. //push THIS
  53399. // #20067
  53400. @THAT
  53401. // #20068
  53402. D=M
  53403. //^^ push_d_to_stack
  53404. // #20069
  53405. @SP
  53406. // #20070
  53407. A=M
  53408. // #20071
  53409. M=D
  53410. // #20072
  53411. @SP
  53412. // #20073
  53413. M=M+1
  53414. //vv push_d_to_stack
  53415. //push THAT
  53416. // #20074
  53417. @SP
  53418. // #20075
  53419. D=M
  53420. // #20076
  53421. @ARG
  53422. // #20077
  53423. M=D
  53424. // #20078
  53425. @17
  53426. // #20079
  53427. D=A
  53428. // #20080
  53429. @ARG
  53430. // #20081
  53431. M=M-D // ARG = SP - args - 5
  53432. // #20082
  53433. @SP
  53434. // #20083
  53435. D=M
  53436. // #20084
  53437. @LCL
  53438. // #20085
  53439. M=D // LCL = SP
  53440. // #20086
  53441. @Output.create
  53442. // #20087
  53443. 0;JMP
  53444. (RET_ADDR_163)
  53445. //
  53446. //// pop temp 0
  53447. //^^ pop_to_loc{5)
  53448. //^^ pop_stack_to_d
  53449. // #20088
  53450. @SP
  53451. // #20089
  53452. M=M-1
  53453. // #20090
  53454. A=M
  53455. // #20091
  53456. D=M
  53457. //vv pop_stack_to_d
  53458. // #20092
  53459. @5
  53460. // #20093
  53461. M=D
  53462. //vv pop_to_loc{5)
  53463. //
  53464. //// push constant 120
  53465. //^^ push_constant(120)
  53466. // #20094
  53467. @120
  53468. // #20095
  53469. D=A
  53470. //^^ push_d_to_stack
  53471. // #20096
  53472. @SP
  53473. // #20097
  53474. A=M
  53475. // #20098
  53476. M=D
  53477. // #20099
  53478. @SP
  53479. // #20100
  53480. M=M+1
  53481. //vv push_d_to_stack
  53482. //vv push_constant(120)
  53483. //
  53484. //// push constant 0
  53485. //^^ push_constant(0)
  53486. // #20101
  53487. @0
  53488. // #20102
  53489. D=A
  53490. //^^ push_d_to_stack
  53491. // #20103
  53492. @SP
  53493. // #20104
  53494. A=M
  53495. // #20105
  53496. M=D
  53497. // #20106
  53498. @SP
  53499. // #20107
  53500. M=M+1
  53501. //vv push_d_to_stack
  53502. //vv push_constant(0)
  53503. //
  53504. //// push constant 0
  53505. //^^ push_constant(0)
  53506. // #20108
  53507. @0
  53508. // #20109
  53509. D=A
  53510. //^^ push_d_to_stack
  53511. // #20110
  53512. @SP
  53513. // #20111
  53514. A=M
  53515. // #20112
  53516. M=D
  53517. // #20113
  53518. @SP
  53519. // #20114
  53520. M=M+1
  53521. //vv push_d_to_stack
  53522. //vv push_constant(0)
  53523. //
  53524. //// push constant 0
  53525. //^^ push_constant(0)
  53526. // #20115
  53527. @0
  53528. // #20116
  53529. D=A
  53530. //^^ push_d_to_stack
  53531. // #20117
  53532. @SP
  53533. // #20118
  53534. A=M
  53535. // #20119
  53536. M=D
  53537. // #20120
  53538. @SP
  53539. // #20121
  53540. M=M+1
  53541. //vv push_d_to_stack
  53542. //vv push_constant(0)
  53543. //
  53544. //// push constant 51
  53545. //^^ push_constant(51)
  53546. // #20122
  53547. @51
  53548. // #20123
  53549. D=A
  53550. //^^ push_d_to_stack
  53551. // #20124
  53552. @SP
  53553. // #20125
  53554. A=M
  53555. // #20126
  53556. M=D
  53557. // #20127
  53558. @SP
  53559. // #20128
  53560. M=M+1
  53561. //vv push_d_to_stack
  53562. //vv push_constant(51)
  53563. //
  53564. //// push constant 30
  53565. //^^ push_constant(30)
  53566. // #20129
  53567. @30
  53568. // #20130
  53569. D=A
  53570. //^^ push_d_to_stack
  53571. // #20131
  53572. @SP
  53573. // #20132
  53574. A=M
  53575. // #20133
  53576. M=D
  53577. // #20134
  53578. @SP
  53579. // #20135
  53580. M=M+1
  53581. //vv push_d_to_stack
  53582. //vv push_constant(30)
  53583. //
  53584. //// push constant 12
  53585. //^^ push_constant(12)
  53586. // #20136
  53587. @12
  53588. // #20137
  53589. D=A
  53590. //^^ push_d_to_stack
  53591. // #20138
  53592. @SP
  53593. // #20139
  53594. A=M
  53595. // #20140
  53596. M=D
  53597. // #20141
  53598. @SP
  53599. // #20142
  53600. M=M+1
  53601. //vv push_d_to_stack
  53602. //vv push_constant(12)
  53603. //
  53604. //// push constant 12
  53605. //^^ push_constant(12)
  53606. // #20143
  53607. @12
  53608. // #20144
  53609. D=A
  53610. //^^ push_d_to_stack
  53611. // #20145
  53612. @SP
  53613. // #20146
  53614. A=M
  53615. // #20147
  53616. M=D
  53617. // #20148
  53618. @SP
  53619. // #20149
  53620. M=M+1
  53621. //vv push_d_to_stack
  53622. //vv push_constant(12)
  53623. //
  53624. //// push constant 30
  53625. //^^ push_constant(30)
  53626. // #20150
  53627. @30
  53628. // #20151
  53629. D=A
  53630. //^^ push_d_to_stack
  53631. // #20152
  53632. @SP
  53633. // #20153
  53634. A=M
  53635. // #20154
  53636. M=D
  53637. // #20155
  53638. @SP
  53639. // #20156
  53640. M=M+1
  53641. //vv push_d_to_stack
  53642. //vv push_constant(30)
  53643. //
  53644. //// push constant 51
  53645. //^^ push_constant(51)
  53646. // #20157
  53647. @51
  53648. // #20158
  53649. D=A
  53650. //^^ push_d_to_stack
  53651. // #20159
  53652. @SP
  53653. // #20160
  53654. A=M
  53655. // #20161
  53656. M=D
  53657. // #20162
  53658. @SP
  53659. // #20163
  53660. M=M+1
  53661. //vv push_d_to_stack
  53662. //vv push_constant(51)
  53663. //
  53664. //// push constant 0
  53665. //^^ push_constant(0)
  53666. // #20164
  53667. @0
  53668. // #20165
  53669. D=A
  53670. //^^ push_d_to_stack
  53671. // #20166
  53672. @SP
  53673. // #20167
  53674. A=M
  53675. // #20168
  53676. M=D
  53677. // #20169
  53678. @SP
  53679. // #20170
  53680. M=M+1
  53681. //vv push_d_to_stack
  53682. //vv push_constant(0)
  53683. //
  53684. //// push constant 0
  53685. //^^ push_constant(0)
  53686. // #20171
  53687. @0
  53688. // #20172
  53689. D=A
  53690. //^^ push_d_to_stack
  53691. // #20173
  53692. @SP
  53693. // #20174
  53694. A=M
  53695. // #20175
  53696. M=D
  53697. // #20176
  53698. @SP
  53699. // #20177
  53700. M=M+1
  53701. //vv push_d_to_stack
  53702. //vv push_constant(0)
  53703. //
  53704. //// call Output.create 12
  53705. //^^ push_constant(RET_ADDR_164)
  53706. // #20178
  53707. @RET_ADDR_164
  53708. // #20179
  53709. D=A
  53710. //^^ push_d_to_stack
  53711. // #20180
  53712. @SP
  53713. // #20181
  53714. A=M
  53715. // #20182
  53716. M=D
  53717. // #20183
  53718. @SP
  53719. // #20184
  53720. M=M+1
  53721. //vv push_d_to_stack
  53722. //vv push_constant(RET_ADDR_164)
  53723. //push return-address
  53724. // #20185
  53725. @LCL
  53726. // #20186
  53727. D=M
  53728. //^^ push_d_to_stack
  53729. // #20187
  53730. @SP
  53731. // #20188
  53732. A=M
  53733. // #20189
  53734. M=D
  53735. // #20190
  53736. @SP
  53737. // #20191
  53738. M=M+1
  53739. //vv push_d_to_stack
  53740. //push LCL
  53741. // #20192
  53742. @ARG
  53743. // #20193
  53744. D=M
  53745. //^^ push_d_to_stack
  53746. // #20194
  53747. @SP
  53748. // #20195
  53749. A=M
  53750. // #20196
  53751. M=D
  53752. // #20197
  53753. @SP
  53754. // #20198
  53755. M=M+1
  53756. //vv push_d_to_stack
  53757. //push ARG
  53758. // #20199
  53759. @THIS
  53760. // #20200
  53761. D=M
  53762. //^^ push_d_to_stack
  53763. // #20201
  53764. @SP
  53765. // #20202
  53766. A=M
  53767. // #20203
  53768. M=D
  53769. // #20204
  53770. @SP
  53771. // #20205
  53772. M=M+1
  53773. //vv push_d_to_stack
  53774. //push THIS
  53775. // #20206
  53776. @THAT
  53777. // #20207
  53778. D=M
  53779. //^^ push_d_to_stack
  53780. // #20208
  53781. @SP
  53782. // #20209
  53783. A=M
  53784. // #20210
  53785. M=D
  53786. // #20211
  53787. @SP
  53788. // #20212
  53789. M=M+1
  53790. //vv push_d_to_stack
  53791. //push THAT
  53792. // #20213
  53793. @SP
  53794. // #20214
  53795. D=M
  53796. // #20215
  53797. @ARG
  53798. // #20216
  53799. M=D
  53800. // #20217
  53801. @17
  53802. // #20218
  53803. D=A
  53804. // #20219
  53805. @ARG
  53806. // #20220
  53807. M=M-D // ARG = SP - args - 5
  53808. // #20221
  53809. @SP
  53810. // #20222
  53811. D=M
  53812. // #20223
  53813. @LCL
  53814. // #20224
  53815. M=D // LCL = SP
  53816. // #20225
  53817. @Output.create
  53818. // #20226
  53819. 0;JMP
  53820. (RET_ADDR_164)
  53821. //
  53822. //// pop temp 0
  53823. //^^ pop_to_loc{5)
  53824. //^^ pop_stack_to_d
  53825. // #20227
  53826. @SP
  53827. // #20228
  53828. M=M-1
  53829. // #20229
  53830. A=M
  53831. // #20230
  53832. D=M
  53833. //vv pop_stack_to_d
  53834. // #20231
  53835. @5
  53836. // #20232
  53837. M=D
  53838. //vv pop_to_loc{5)
  53839. //
  53840. //// push constant 121
  53841. //^^ push_constant(121)
  53842. // #20233
  53843. @121
  53844. // #20234
  53845. D=A
  53846. //^^ push_d_to_stack
  53847. // #20235
  53848. @SP
  53849. // #20236
  53850. A=M
  53851. // #20237
  53852. M=D
  53853. // #20238
  53854. @SP
  53855. // #20239
  53856. M=M+1
  53857. //vv push_d_to_stack
  53858. //vv push_constant(121)
  53859. //
  53860. //// push constant 0
  53861. //^^ push_constant(0)
  53862. // #20240
  53863. @0
  53864. // #20241
  53865. D=A
  53866. //^^ push_d_to_stack
  53867. // #20242
  53868. @SP
  53869. // #20243
  53870. A=M
  53871. // #20244
  53872. M=D
  53873. // #20245
  53874. @SP
  53875. // #20246
  53876. M=M+1
  53877. //vv push_d_to_stack
  53878. //vv push_constant(0)
  53879. //
  53880. //// push constant 0
  53881. //^^ push_constant(0)
  53882. // #20247
  53883. @0
  53884. // #20248
  53885. D=A
  53886. //^^ push_d_to_stack
  53887. // #20249
  53888. @SP
  53889. // #20250
  53890. A=M
  53891. // #20251
  53892. M=D
  53893. // #20252
  53894. @SP
  53895. // #20253
  53896. M=M+1
  53897. //vv push_d_to_stack
  53898. //vv push_constant(0)
  53899. //
  53900. //// push constant 0
  53901. //^^ push_constant(0)
  53902. // #20254
  53903. @0
  53904. // #20255
  53905. D=A
  53906. //^^ push_d_to_stack
  53907. // #20256
  53908. @SP
  53909. // #20257
  53910. A=M
  53911. // #20258
  53912. M=D
  53913. // #20259
  53914. @SP
  53915. // #20260
  53916. M=M+1
  53917. //vv push_d_to_stack
  53918. //vv push_constant(0)
  53919. //
  53920. //// push constant 51
  53921. //^^ push_constant(51)
  53922. // #20261
  53923. @51
  53924. // #20262
  53925. D=A
  53926. //^^ push_d_to_stack
  53927. // #20263
  53928. @SP
  53929. // #20264
  53930. A=M
  53931. // #20265
  53932. M=D
  53933. // #20266
  53934. @SP
  53935. // #20267
  53936. M=M+1
  53937. //vv push_d_to_stack
  53938. //vv push_constant(51)
  53939. //
  53940. //// push constant 51
  53941. //^^ push_constant(51)
  53942. // #20268
  53943. @51
  53944. // #20269
  53945. D=A
  53946. //^^ push_d_to_stack
  53947. // #20270
  53948. @SP
  53949. // #20271
  53950. A=M
  53951. // #20272
  53952. M=D
  53953. // #20273
  53954. @SP
  53955. // #20274
  53956. M=M+1
  53957. //vv push_d_to_stack
  53958. //vv push_constant(51)
  53959. //
  53960. //// push constant 51
  53961. //^^ push_constant(51)
  53962. // #20275
  53963. @51
  53964. // #20276
  53965. D=A
  53966. //^^ push_d_to_stack
  53967. // #20277
  53968. @SP
  53969. // #20278
  53970. A=M
  53971. // #20279
  53972. M=D
  53973. // #20280
  53974. @SP
  53975. // #20281
  53976. M=M+1
  53977. //vv push_d_to_stack
  53978. //vv push_constant(51)
  53979. //
  53980. //// push constant 62
  53981. //^^ push_constant(62)
  53982. // #20282
  53983. @62
  53984. // #20283
  53985. D=A
  53986. //^^ push_d_to_stack
  53987. // #20284
  53988. @SP
  53989. // #20285
  53990. A=M
  53991. // #20286
  53992. M=D
  53993. // #20287
  53994. @SP
  53995. // #20288
  53996. M=M+1
  53997. //vv push_d_to_stack
  53998. //vv push_constant(62)
  53999. //
  54000. //// push constant 48
  54001. //^^ push_constant(48)
  54002. // #20289
  54003. @48
  54004. // #20290
  54005. D=A
  54006. //^^ push_d_to_stack
  54007. // #20291
  54008. @SP
  54009. // #20292
  54010. A=M
  54011. // #20293
  54012. M=D
  54013. // #20294
  54014. @SP
  54015. // #20295
  54016. M=M+1
  54017. //vv push_d_to_stack
  54018. //vv push_constant(48)
  54019. //
  54020. //// push constant 24
  54021. //^^ push_constant(24)
  54022. // #20296
  54023. @24
  54024. // #20297
  54025. D=A
  54026. //^^ push_d_to_stack
  54027. // #20298
  54028. @SP
  54029. // #20299
  54030. A=M
  54031. // #20300
  54032. M=D
  54033. // #20301
  54034. @SP
  54035. // #20302
  54036. M=M+1
  54037. //vv push_d_to_stack
  54038. //vv push_constant(24)
  54039. //
  54040. //// push constant 15
  54041. //^^ push_constant(15)
  54042. // #20303
  54043. @15
  54044. // #20304
  54045. D=A
  54046. //^^ push_d_to_stack
  54047. // #20305
  54048. @SP
  54049. // #20306
  54050. A=M
  54051. // #20307
  54052. M=D
  54053. // #20308
  54054. @SP
  54055. // #20309
  54056. M=M+1
  54057. //vv push_d_to_stack
  54058. //vv push_constant(15)
  54059. //
  54060. //// push constant 0
  54061. //^^ push_constant(0)
  54062. // #20310
  54063. @0
  54064. // #20311
  54065. D=A
  54066. //^^ push_d_to_stack
  54067. // #20312
  54068. @SP
  54069. // #20313
  54070. A=M
  54071. // #20314
  54072. M=D
  54073. // #20315
  54074. @SP
  54075. // #20316
  54076. M=M+1
  54077. //vv push_d_to_stack
  54078. //vv push_constant(0)
  54079. //
  54080. //// call Output.create 12
  54081. //^^ push_constant(RET_ADDR_165)
  54082. // #20317
  54083. @RET_ADDR_165
  54084. // #20318
  54085. D=A
  54086. //^^ push_d_to_stack
  54087. // #20319
  54088. @SP
  54089. // #20320
  54090. A=M
  54091. // #20321
  54092. M=D
  54093. // #20322
  54094. @SP
  54095. // #20323
  54096. M=M+1
  54097. //vv push_d_to_stack
  54098. //vv push_constant(RET_ADDR_165)
  54099. //push return-address
  54100. // #20324
  54101. @LCL
  54102. // #20325
  54103. D=M
  54104. //^^ push_d_to_stack
  54105. // #20326
  54106. @SP
  54107. // #20327
  54108. A=M
  54109. // #20328
  54110. M=D
  54111. // #20329
  54112. @SP
  54113. // #20330
  54114. M=M+1
  54115. //vv push_d_to_stack
  54116. //push LCL
  54117. // #20331
  54118. @ARG
  54119. // #20332
  54120. D=M
  54121. //^^ push_d_to_stack
  54122. // #20333
  54123. @SP
  54124. // #20334
  54125. A=M
  54126. // #20335
  54127. M=D
  54128. // #20336
  54129. @SP
  54130. // #20337
  54131. M=M+1
  54132. //vv push_d_to_stack
  54133. //push ARG
  54134. // #20338
  54135. @THIS
  54136. // #20339
  54137. D=M
  54138. //^^ push_d_to_stack
  54139. // #20340
  54140. @SP
  54141. // #20341
  54142. A=M
  54143. // #20342
  54144. M=D
  54145. // #20343
  54146. @SP
  54147. // #20344
  54148. M=M+1
  54149. //vv push_d_to_stack
  54150. //push THIS
  54151. // #20345
  54152. @THAT
  54153. // #20346
  54154. D=M
  54155. //^^ push_d_to_stack
  54156. // #20347
  54157. @SP
  54158. // #20348
  54159. A=M
  54160. // #20349
  54161. M=D
  54162. // #20350
  54163. @SP
  54164. // #20351
  54165. M=M+1
  54166. //vv push_d_to_stack
  54167. //push THAT
  54168. // #20352
  54169. @SP
  54170. // #20353
  54171. D=M
  54172. // #20354
  54173. @ARG
  54174. // #20355
  54175. M=D
  54176. // #20356
  54177. @17
  54178. // #20357
  54179. D=A
  54180. // #20358
  54181. @ARG
  54182. // #20359
  54183. M=M-D // ARG = SP - args - 5
  54184. // #20360
  54185. @SP
  54186. // #20361
  54187. D=M
  54188. // #20362
  54189. @LCL
  54190. // #20363
  54191. M=D // LCL = SP
  54192. // #20364
  54193. @Output.create
  54194. // #20365
  54195. 0;JMP
  54196. (RET_ADDR_165)
  54197. //
  54198. //// pop temp 0
  54199. //^^ pop_to_loc{5)
  54200. //^^ pop_stack_to_d
  54201. // #20366
  54202. @SP
  54203. // #20367
  54204. M=M-1
  54205. // #20368
  54206. A=M
  54207. // #20369
  54208. D=M
  54209. //vv pop_stack_to_d
  54210. // #20370
  54211. @5
  54212. // #20371
  54213. M=D
  54214. //vv pop_to_loc{5)
  54215. //
  54216. //// push constant 122
  54217. //^^ push_constant(122)
  54218. // #20372
  54219. @122
  54220. // #20373
  54221. D=A
  54222. //^^ push_d_to_stack
  54223. // #20374
  54224. @SP
  54225. // #20375
  54226. A=M
  54227. // #20376
  54228. M=D
  54229. // #20377
  54230. @SP
  54231. // #20378
  54232. M=M+1
  54233. //vv push_d_to_stack
  54234. //vv push_constant(122)
  54235. //
  54236. //// push constant 0
  54237. //^^ push_constant(0)
  54238. // #20379
  54239. @0
  54240. // #20380
  54241. D=A
  54242. //^^ push_d_to_stack
  54243. // #20381
  54244. @SP
  54245. // #20382
  54246. A=M
  54247. // #20383
  54248. M=D
  54249. // #20384
  54250. @SP
  54251. // #20385
  54252. M=M+1
  54253. //vv push_d_to_stack
  54254. //vv push_constant(0)
  54255. //
  54256. //// push constant 0
  54257. //^^ push_constant(0)
  54258. // #20386
  54259. @0
  54260. // #20387
  54261. D=A
  54262. //^^ push_d_to_stack
  54263. // #20388
  54264. @SP
  54265. // #20389
  54266. A=M
  54267. // #20390
  54268. M=D
  54269. // #20391
  54270. @SP
  54271. // #20392
  54272. M=M+1
  54273. //vv push_d_to_stack
  54274. //vv push_constant(0)
  54275. //
  54276. //// push constant 0
  54277. //^^ push_constant(0)
  54278. // #20393
  54279. @0
  54280. // #20394
  54281. D=A
  54282. //^^ push_d_to_stack
  54283. // #20395
  54284. @SP
  54285. // #20396
  54286. A=M
  54287. // #20397
  54288. M=D
  54289. // #20398
  54290. @SP
  54291. // #20399
  54292. M=M+1
  54293. //vv push_d_to_stack
  54294. //vv push_constant(0)
  54295. //
  54296. //// push constant 63
  54297. //^^ push_constant(63)
  54298. // #20400
  54299. @63
  54300. // #20401
  54301. D=A
  54302. //^^ push_d_to_stack
  54303. // #20402
  54304. @SP
  54305. // #20403
  54306. A=M
  54307. // #20404
  54308. M=D
  54309. // #20405
  54310. @SP
  54311. // #20406
  54312. M=M+1
  54313. //vv push_d_to_stack
  54314. //vv push_constant(63)
  54315. //
  54316. //// push constant 27
  54317. //^^ push_constant(27)
  54318. // #20407
  54319. @27
  54320. // #20408
  54321. D=A
  54322. //^^ push_d_to_stack
  54323. // #20409
  54324. @SP
  54325. // #20410
  54326. A=M
  54327. // #20411
  54328. M=D
  54329. // #20412
  54330. @SP
  54331. // #20413
  54332. M=M+1
  54333. //vv push_d_to_stack
  54334. //vv push_constant(27)
  54335. //
  54336. //// push constant 12
  54337. //^^ push_constant(12)
  54338. // #20414
  54339. @12
  54340. // #20415
  54341. D=A
  54342. //^^ push_d_to_stack
  54343. // #20416
  54344. @SP
  54345. // #20417
  54346. A=M
  54347. // #20418
  54348. M=D
  54349. // #20419
  54350. @SP
  54351. // #20420
  54352. M=M+1
  54353. //vv push_d_to_stack
  54354. //vv push_constant(12)
  54355. //
  54356. //// push constant 6
  54357. //^^ push_constant(6)
  54358. // #20421
  54359. @6
  54360. // #20422
  54361. D=A
  54362. //^^ push_d_to_stack
  54363. // #20423
  54364. @SP
  54365. // #20424
  54366. A=M
  54367. // #20425
  54368. M=D
  54369. // #20426
  54370. @SP
  54371. // #20427
  54372. M=M+1
  54373. //vv push_d_to_stack
  54374. //vv push_constant(6)
  54375. //
  54376. //// push constant 51
  54377. //^^ push_constant(51)
  54378. // #20428
  54379. @51
  54380. // #20429
  54381. D=A
  54382. //^^ push_d_to_stack
  54383. // #20430
  54384. @SP
  54385. // #20431
  54386. A=M
  54387. // #20432
  54388. M=D
  54389. // #20433
  54390. @SP
  54391. // #20434
  54392. M=M+1
  54393. //vv push_d_to_stack
  54394. //vv push_constant(51)
  54395. //
  54396. //// push constant 63
  54397. //^^ push_constant(63)
  54398. // #20435
  54399. @63
  54400. // #20436
  54401. D=A
  54402. //^^ push_d_to_stack
  54403. // #20437
  54404. @SP
  54405. // #20438
  54406. A=M
  54407. // #20439
  54408. M=D
  54409. // #20440
  54410. @SP
  54411. // #20441
  54412. M=M+1
  54413. //vv push_d_to_stack
  54414. //vv push_constant(63)
  54415. //
  54416. //// push constant 0
  54417. //^^ push_constant(0)
  54418. // #20442
  54419. @0
  54420. // #20443
  54421. D=A
  54422. //^^ push_d_to_stack
  54423. // #20444
  54424. @SP
  54425. // #20445
  54426. A=M
  54427. // #20446
  54428. M=D
  54429. // #20447
  54430. @SP
  54431. // #20448
  54432. M=M+1
  54433. //vv push_d_to_stack
  54434. //vv push_constant(0)
  54435. //
  54436. //// push constant 0
  54437. //^^ push_constant(0)
  54438. // #20449
  54439. @0
  54440. // #20450
  54441. D=A
  54442. //^^ push_d_to_stack
  54443. // #20451
  54444. @SP
  54445. // #20452
  54446. A=M
  54447. // #20453
  54448. M=D
  54449. // #20454
  54450. @SP
  54451. // #20455
  54452. M=M+1
  54453. //vv push_d_to_stack
  54454. //vv push_constant(0)
  54455. //
  54456. //// call Output.create 12
  54457. //^^ push_constant(RET_ADDR_166)
  54458. // #20456
  54459. @RET_ADDR_166
  54460. // #20457
  54461. D=A
  54462. //^^ push_d_to_stack
  54463. // #20458
  54464. @SP
  54465. // #20459
  54466. A=M
  54467. // #20460
  54468. M=D
  54469. // #20461
  54470. @SP
  54471. // #20462
  54472. M=M+1
  54473. //vv push_d_to_stack
  54474. //vv push_constant(RET_ADDR_166)
  54475. //push return-address
  54476. // #20463
  54477. @LCL
  54478. // #20464
  54479. D=M
  54480. //^^ push_d_to_stack
  54481. // #20465
  54482. @SP
  54483. // #20466
  54484. A=M
  54485. // #20467
  54486. M=D
  54487. // #20468
  54488. @SP
  54489. // #20469
  54490. M=M+1
  54491. //vv push_d_to_stack
  54492. //push LCL
  54493. // #20470
  54494. @ARG
  54495. // #20471
  54496. D=M
  54497. //^^ push_d_to_stack
  54498. // #20472
  54499. @SP
  54500. // #20473
  54501. A=M
  54502. // #20474
  54503. M=D
  54504. // #20475
  54505. @SP
  54506. // #20476
  54507. M=M+1
  54508. //vv push_d_to_stack
  54509. //push ARG
  54510. // #20477
  54511. @THIS
  54512. // #20478
  54513. D=M
  54514. //^^ push_d_to_stack
  54515. // #20479
  54516. @SP
  54517. // #20480
  54518. A=M
  54519. // #20481
  54520. M=D
  54521. // #20482
  54522. @SP
  54523. // #20483
  54524. M=M+1
  54525. //vv push_d_to_stack
  54526. //push THIS
  54527. // #20484
  54528. @THAT
  54529. // #20485
  54530. D=M
  54531. //^^ push_d_to_stack
  54532. // #20486
  54533. @SP
  54534. // #20487
  54535. A=M
  54536. // #20488
  54537. M=D
  54538. // #20489
  54539. @SP
  54540. // #20490
  54541. M=M+1
  54542. //vv push_d_to_stack
  54543. //push THAT
  54544. // #20491
  54545. @SP
  54546. // #20492
  54547. D=M
  54548. // #20493
  54549. @ARG
  54550. // #20494
  54551. M=D
  54552. // #20495
  54553. @17
  54554. // #20496
  54555. D=A
  54556. // #20497
  54557. @ARG
  54558. // #20498
  54559. M=M-D // ARG = SP - args - 5
  54560. // #20499
  54561. @SP
  54562. // #20500
  54563. D=M
  54564. // #20501
  54565. @LCL
  54566. // #20502
  54567. M=D // LCL = SP
  54568. // #20503
  54569. @Output.create
  54570. // #20504
  54571. 0;JMP
  54572. (RET_ADDR_166)
  54573. //
  54574. //// pop temp 0
  54575. //^^ pop_to_loc{5)
  54576. //^^ pop_stack_to_d
  54577. // #20505
  54578. @SP
  54579. // #20506
  54580. M=M-1
  54581. // #20507
  54582. A=M
  54583. // #20508
  54584. D=M
  54585. //vv pop_stack_to_d
  54586. // #20509
  54587. @5
  54588. // #20510
  54589. M=D
  54590. //vv pop_to_loc{5)
  54591. //
  54592. //// push constant 123
  54593. //^^ push_constant(123)
  54594. // #20511
  54595. @123
  54596. // #20512
  54597. D=A
  54598. //^^ push_d_to_stack
  54599. // #20513
  54600. @SP
  54601. // #20514
  54602. A=M
  54603. // #20515
  54604. M=D
  54605. // #20516
  54606. @SP
  54607. // #20517
  54608. M=M+1
  54609. //vv push_d_to_stack
  54610. //vv push_constant(123)
  54611. //
  54612. //// push constant 56
  54613. //^^ push_constant(56)
  54614. // #20518
  54615. @56
  54616. // #20519
  54617. D=A
  54618. //^^ push_d_to_stack
  54619. // #20520
  54620. @SP
  54621. // #20521
  54622. A=M
  54623. // #20522
  54624. M=D
  54625. // #20523
  54626. @SP
  54627. // #20524
  54628. M=M+1
  54629. //vv push_d_to_stack
  54630. //vv push_constant(56)
  54631. //
  54632. //// push constant 12
  54633. //^^ push_constant(12)
  54634. // #20525
  54635. @12
  54636. // #20526
  54637. D=A
  54638. //^^ push_d_to_stack
  54639. // #20527
  54640. @SP
  54641. // #20528
  54642. A=M
  54643. // #20529
  54644. M=D
  54645. // #20530
  54646. @SP
  54647. // #20531
  54648. M=M+1
  54649. //vv push_d_to_stack
  54650. //vv push_constant(12)
  54651. //
  54652. //// push constant 12
  54653. //^^ push_constant(12)
  54654. // #20532
  54655. @12
  54656. // #20533
  54657. D=A
  54658. //^^ push_d_to_stack
  54659. // #20534
  54660. @SP
  54661. // #20535
  54662. A=M
  54663. // #20536
  54664. M=D
  54665. // #20537
  54666. @SP
  54667. // #20538
  54668. M=M+1
  54669. //vv push_d_to_stack
  54670. //vv push_constant(12)
  54671. //
  54672. //// push constant 12
  54673. //^^ push_constant(12)
  54674. // #20539
  54675. @12
  54676. // #20540
  54677. D=A
  54678. //^^ push_d_to_stack
  54679. // #20541
  54680. @SP
  54681. // #20542
  54682. A=M
  54683. // #20543
  54684. M=D
  54685. // #20544
  54686. @SP
  54687. // #20545
  54688. M=M+1
  54689. //vv push_d_to_stack
  54690. //vv push_constant(12)
  54691. //
  54692. //// push constant 7
  54693. //^^ push_constant(7)
  54694. // #20546
  54695. @7
  54696. // #20547
  54697. D=A
  54698. //^^ push_d_to_stack
  54699. // #20548
  54700. @SP
  54701. // #20549
  54702. A=M
  54703. // #20550
  54704. M=D
  54705. // #20551
  54706. @SP
  54707. // #20552
  54708. M=M+1
  54709. //vv push_d_to_stack
  54710. //vv push_constant(7)
  54711. //
  54712. //// push constant 12
  54713. //^^ push_constant(12)
  54714. // #20553
  54715. @12
  54716. // #20554
  54717. D=A
  54718. //^^ push_d_to_stack
  54719. // #20555
  54720. @SP
  54721. // #20556
  54722. A=M
  54723. // #20557
  54724. M=D
  54725. // #20558
  54726. @SP
  54727. // #20559
  54728. M=M+1
  54729. //vv push_d_to_stack
  54730. //vv push_constant(12)
  54731. //
  54732. //// push constant 12
  54733. //^^ push_constant(12)
  54734. // #20560
  54735. @12
  54736. // #20561
  54737. D=A
  54738. //^^ push_d_to_stack
  54739. // #20562
  54740. @SP
  54741. // #20563
  54742. A=M
  54743. // #20564
  54744. M=D
  54745. // #20565
  54746. @SP
  54747. // #20566
  54748. M=M+1
  54749. //vv push_d_to_stack
  54750. //vv push_constant(12)
  54751. //
  54752. //// push constant 12
  54753. //^^ push_constant(12)
  54754. // #20567
  54755. @12
  54756. // #20568
  54757. D=A
  54758. //^^ push_d_to_stack
  54759. // #20569
  54760. @SP
  54761. // #20570
  54762. A=M
  54763. // #20571
  54764. M=D
  54765. // #20572
  54766. @SP
  54767. // #20573
  54768. M=M+1
  54769. //vv push_d_to_stack
  54770. //vv push_constant(12)
  54771. //
  54772. //// push constant 56
  54773. //^^ push_constant(56)
  54774. // #20574
  54775. @56
  54776. // #20575
  54777. D=A
  54778. //^^ push_d_to_stack
  54779. // #20576
  54780. @SP
  54781. // #20577
  54782. A=M
  54783. // #20578
  54784. M=D
  54785. // #20579
  54786. @SP
  54787. // #20580
  54788. M=M+1
  54789. //vv push_d_to_stack
  54790. //vv push_constant(56)
  54791. //
  54792. //// push constant 0
  54793. //^^ push_constant(0)
  54794. // #20581
  54795. @0
  54796. // #20582
  54797. D=A
  54798. //^^ push_d_to_stack
  54799. // #20583
  54800. @SP
  54801. // #20584
  54802. A=M
  54803. // #20585
  54804. M=D
  54805. // #20586
  54806. @SP
  54807. // #20587
  54808. M=M+1
  54809. //vv push_d_to_stack
  54810. //vv push_constant(0)
  54811. //
  54812. //// push constant 0
  54813. //^^ push_constant(0)
  54814. // #20588
  54815. @0
  54816. // #20589
  54817. D=A
  54818. //^^ push_d_to_stack
  54819. // #20590
  54820. @SP
  54821. // #20591
  54822. A=M
  54823. // #20592
  54824. M=D
  54825. // #20593
  54826. @SP
  54827. // #20594
  54828. M=M+1
  54829. //vv push_d_to_stack
  54830. //vv push_constant(0)
  54831. //
  54832. //// call Output.create 12
  54833. //^^ push_constant(RET_ADDR_167)
  54834. // #20595
  54835. @RET_ADDR_167
  54836. // #20596
  54837. D=A
  54838. //^^ push_d_to_stack
  54839. // #20597
  54840. @SP
  54841. // #20598
  54842. A=M
  54843. // #20599
  54844. M=D
  54845. // #20600
  54846. @SP
  54847. // #20601
  54848. M=M+1
  54849. //vv push_d_to_stack
  54850. //vv push_constant(RET_ADDR_167)
  54851. //push return-address
  54852. // #20602
  54853. @LCL
  54854. // #20603
  54855. D=M
  54856. //^^ push_d_to_stack
  54857. // #20604
  54858. @SP
  54859. // #20605
  54860. A=M
  54861. // #20606
  54862. M=D
  54863. // #20607
  54864. @SP
  54865. // #20608
  54866. M=M+1
  54867. //vv push_d_to_stack
  54868. //push LCL
  54869. // #20609
  54870. @ARG
  54871. // #20610
  54872. D=M
  54873. //^^ push_d_to_stack
  54874. // #20611
  54875. @SP
  54876. // #20612
  54877. A=M
  54878. // #20613
  54879. M=D
  54880. // #20614
  54881. @SP
  54882. // #20615
  54883. M=M+1
  54884. //vv push_d_to_stack
  54885. //push ARG
  54886. // #20616
  54887. @THIS
  54888. // #20617
  54889. D=M
  54890. //^^ push_d_to_stack
  54891. // #20618
  54892. @SP
  54893. // #20619
  54894. A=M
  54895. // #20620
  54896. M=D
  54897. // #20621
  54898. @SP
  54899. // #20622
  54900. M=M+1
  54901. //vv push_d_to_stack
  54902. //push THIS
  54903. // #20623
  54904. @THAT
  54905. // #20624
  54906. D=M
  54907. //^^ push_d_to_stack
  54908. // #20625
  54909. @SP
  54910. // #20626
  54911. A=M
  54912. // #20627
  54913. M=D
  54914. // #20628
  54915. @SP
  54916. // #20629
  54917. M=M+1
  54918. //vv push_d_to_stack
  54919. //push THAT
  54920. // #20630
  54921. @SP
  54922. // #20631
  54923. D=M
  54924. // #20632
  54925. @ARG
  54926. // #20633
  54927. M=D
  54928. // #20634
  54929. @17
  54930. // #20635
  54931. D=A
  54932. // #20636
  54933. @ARG
  54934. // #20637
  54935. M=M-D // ARG = SP - args - 5
  54936. // #20638
  54937. @SP
  54938. // #20639
  54939. D=M
  54940. // #20640
  54941. @LCL
  54942. // #20641
  54943. M=D // LCL = SP
  54944. // #20642
  54945. @Output.create
  54946. // #20643
  54947. 0;JMP
  54948. (RET_ADDR_167)
  54949. //
  54950. //// pop temp 0
  54951. //^^ pop_to_loc{5)
  54952. //^^ pop_stack_to_d
  54953. // #20644
  54954. @SP
  54955. // #20645
  54956. M=M-1
  54957. // #20646
  54958. A=M
  54959. // #20647
  54960. D=M
  54961. //vv pop_stack_to_d
  54962. // #20648
  54963. @5
  54964. // #20649
  54965. M=D
  54966. //vv pop_to_loc{5)
  54967. //
  54968. //// push constant 124
  54969. //^^ push_constant(124)
  54970. // #20650
  54971. @124
  54972. // #20651
  54973. D=A
  54974. //^^ push_d_to_stack
  54975. // #20652
  54976. @SP
  54977. // #20653
  54978. A=M
  54979. // #20654
  54980. M=D
  54981. // #20655
  54982. @SP
  54983. // #20656
  54984. M=M+1
  54985. //vv push_d_to_stack
  54986. //vv push_constant(124)
  54987. //
  54988. //// push constant 12
  54989. //^^ push_constant(12)
  54990. // #20657
  54991. @12
  54992. // #20658
  54993. D=A
  54994. //^^ push_d_to_stack
  54995. // #20659
  54996. @SP
  54997. // #20660
  54998. A=M
  54999. // #20661
  55000. M=D
  55001. // #20662
  55002. @SP
  55003. // #20663
  55004. M=M+1
  55005. //vv push_d_to_stack
  55006. //vv push_constant(12)
  55007. //
  55008. //// push constant 12
  55009. //^^ push_constant(12)
  55010. // #20664
  55011. @12
  55012. // #20665
  55013. D=A
  55014. //^^ push_d_to_stack
  55015. // #20666
  55016. @SP
  55017. // #20667
  55018. A=M
  55019. // #20668
  55020. M=D
  55021. // #20669
  55022. @SP
  55023. // #20670
  55024. M=M+1
  55025. //vv push_d_to_stack
  55026. //vv push_constant(12)
  55027. //
  55028. //// push constant 12
  55029. //^^ push_constant(12)
  55030. // #20671
  55031. @12
  55032. // #20672
  55033. D=A
  55034. //^^ push_d_to_stack
  55035. // #20673
  55036. @SP
  55037. // #20674
  55038. A=M
  55039. // #20675
  55040. M=D
  55041. // #20676
  55042. @SP
  55043. // #20677
  55044. M=M+1
  55045. //vv push_d_to_stack
  55046. //vv push_constant(12)
  55047. //
  55048. //// push constant 12
  55049. //^^ push_constant(12)
  55050. // #20678
  55051. @12
  55052. // #20679
  55053. D=A
  55054. //^^ push_d_to_stack
  55055. // #20680
  55056. @SP
  55057. // #20681
  55058. A=M
  55059. // #20682
  55060. M=D
  55061. // #20683
  55062. @SP
  55063. // #20684
  55064. M=M+1
  55065. //vv push_d_to_stack
  55066. //vv push_constant(12)
  55067. //
  55068. //// push constant 12
  55069. //^^ push_constant(12)
  55070. // #20685
  55071. @12
  55072. // #20686
  55073. D=A
  55074. //^^ push_d_to_stack
  55075. // #20687
  55076. @SP
  55077. // #20688
  55078. A=M
  55079. // #20689
  55080. M=D
  55081. // #20690
  55082. @SP
  55083. // #20691
  55084. M=M+1
  55085. //vv push_d_to_stack
  55086. //vv push_constant(12)
  55087. //
  55088. //// push constant 12
  55089. //^^ push_constant(12)
  55090. // #20692
  55091. @12
  55092. // #20693
  55093. D=A
  55094. //^^ push_d_to_stack
  55095. // #20694
  55096. @SP
  55097. // #20695
  55098. A=M
  55099. // #20696
  55100. M=D
  55101. // #20697
  55102. @SP
  55103. // #20698
  55104. M=M+1
  55105. //vv push_d_to_stack
  55106. //vv push_constant(12)
  55107. //
  55108. //// push constant 12
  55109. //^^ push_constant(12)
  55110. // #20699
  55111. @12
  55112. // #20700
  55113. D=A
  55114. //^^ push_d_to_stack
  55115. // #20701
  55116. @SP
  55117. // #20702
  55118. A=M
  55119. // #20703
  55120. M=D
  55121. // #20704
  55122. @SP
  55123. // #20705
  55124. M=M+1
  55125. //vv push_d_to_stack
  55126. //vv push_constant(12)
  55127. //
  55128. //// push constant 12
  55129. //^^ push_constant(12)
  55130. // #20706
  55131. @12
  55132. // #20707
  55133. D=A
  55134. //^^ push_d_to_stack
  55135. // #20708
  55136. @SP
  55137. // #20709
  55138. A=M
  55139. // #20710
  55140. M=D
  55141. // #20711
  55142. @SP
  55143. // #20712
  55144. M=M+1
  55145. //vv push_d_to_stack
  55146. //vv push_constant(12)
  55147. //
  55148. //// push constant 12
  55149. //^^ push_constant(12)
  55150. // #20713
  55151. @12
  55152. // #20714
  55153. D=A
  55154. //^^ push_d_to_stack
  55155. // #20715
  55156. @SP
  55157. // #20716
  55158. A=M
  55159. // #20717
  55160. M=D
  55161. // #20718
  55162. @SP
  55163. // #20719
  55164. M=M+1
  55165. //vv push_d_to_stack
  55166. //vv push_constant(12)
  55167. //
  55168. //// push constant 0
  55169. //^^ push_constant(0)
  55170. // #20720
  55171. @0
  55172. // #20721
  55173. D=A
  55174. //^^ push_d_to_stack
  55175. // #20722
  55176. @SP
  55177. // #20723
  55178. A=M
  55179. // #20724
  55180. M=D
  55181. // #20725
  55182. @SP
  55183. // #20726
  55184. M=M+1
  55185. //vv push_d_to_stack
  55186. //vv push_constant(0)
  55187. //
  55188. //// push constant 0
  55189. //^^ push_constant(0)
  55190. // #20727
  55191. @0
  55192. // #20728
  55193. D=A
  55194. //^^ push_d_to_stack
  55195. // #20729
  55196. @SP
  55197. // #20730
  55198. A=M
  55199. // #20731
  55200. M=D
  55201. // #20732
  55202. @SP
  55203. // #20733
  55204. M=M+1
  55205. //vv push_d_to_stack
  55206. //vv push_constant(0)
  55207. //
  55208. //// call Output.create 12
  55209. //^^ push_constant(RET_ADDR_168)
  55210. // #20734
  55211. @RET_ADDR_168
  55212. // #20735
  55213. D=A
  55214. //^^ push_d_to_stack
  55215. // #20736
  55216. @SP
  55217. // #20737
  55218. A=M
  55219. // #20738
  55220. M=D
  55221. // #20739
  55222. @SP
  55223. // #20740
  55224. M=M+1
  55225. //vv push_d_to_stack
  55226. //vv push_constant(RET_ADDR_168)
  55227. //push return-address
  55228. // #20741
  55229. @LCL
  55230. // #20742
  55231. D=M
  55232. //^^ push_d_to_stack
  55233. // #20743
  55234. @SP
  55235. // #20744
  55236. A=M
  55237. // #20745
  55238. M=D
  55239. // #20746
  55240. @SP
  55241. // #20747
  55242. M=M+1
  55243. //vv push_d_to_stack
  55244. //push LCL
  55245. // #20748
  55246. @ARG
  55247. // #20749
  55248. D=M
  55249. //^^ push_d_to_stack
  55250. // #20750
  55251. @SP
  55252. // #20751
  55253. A=M
  55254. // #20752
  55255. M=D
  55256. // #20753
  55257. @SP
  55258. // #20754
  55259. M=M+1
  55260. //vv push_d_to_stack
  55261. //push ARG
  55262. // #20755
  55263. @THIS
  55264. // #20756
  55265. D=M
  55266. //^^ push_d_to_stack
  55267. // #20757
  55268. @SP
  55269. // #20758
  55270. A=M
  55271. // #20759
  55272. M=D
  55273. // #20760
  55274. @SP
  55275. // #20761
  55276. M=M+1
  55277. //vv push_d_to_stack
  55278. //push THIS
  55279. // #20762
  55280. @THAT
  55281. // #20763
  55282. D=M
  55283. //^^ push_d_to_stack
  55284. // #20764
  55285. @SP
  55286. // #20765
  55287. A=M
  55288. // #20766
  55289. M=D
  55290. // #20767
  55291. @SP
  55292. // #20768
  55293. M=M+1
  55294. //vv push_d_to_stack
  55295. //push THAT
  55296. // #20769
  55297. @SP
  55298. // #20770
  55299. D=M
  55300. // #20771
  55301. @ARG
  55302. // #20772
  55303. M=D
  55304. // #20773
  55305. @17
  55306. // #20774
  55307. D=A
  55308. // #20775
  55309. @ARG
  55310. // #20776
  55311. M=M-D // ARG = SP - args - 5
  55312. // #20777
  55313. @SP
  55314. // #20778
  55315. D=M
  55316. // #20779
  55317. @LCL
  55318. // #20780
  55319. M=D // LCL = SP
  55320. // #20781
  55321. @Output.create
  55322. // #20782
  55323. 0;JMP
  55324. (RET_ADDR_168)
  55325. //
  55326. //// pop temp 0
  55327. //^^ pop_to_loc{5)
  55328. //^^ pop_stack_to_d
  55329. // #20783
  55330. @SP
  55331. // #20784
  55332. M=M-1
  55333. // #20785
  55334. A=M
  55335. // #20786
  55336. D=M
  55337. //vv pop_stack_to_d
  55338. // #20787
  55339. @5
  55340. // #20788
  55341. M=D
  55342. //vv pop_to_loc{5)
  55343. //
  55344. //// push constant 125
  55345. //^^ push_constant(125)
  55346. // #20789
  55347. @125
  55348. // #20790
  55349. D=A
  55350. //^^ push_d_to_stack
  55351. // #20791
  55352. @SP
  55353. // #20792
  55354. A=M
  55355. // #20793
  55356. M=D
  55357. // #20794
  55358. @SP
  55359. // #20795
  55360. M=M+1
  55361. //vv push_d_to_stack
  55362. //vv push_constant(125)
  55363. //
  55364. //// push constant 7
  55365. //^^ push_constant(7)
  55366. // #20796
  55367. @7
  55368. // #20797
  55369. D=A
  55370. //^^ push_d_to_stack
  55371. // #20798
  55372. @SP
  55373. // #20799
  55374. A=M
  55375. // #20800
  55376. M=D
  55377. // #20801
  55378. @SP
  55379. // #20802
  55380. M=M+1
  55381. //vv push_d_to_stack
  55382. //vv push_constant(7)
  55383. //
  55384. //// push constant 12
  55385. //^^ push_constant(12)
  55386. // #20803
  55387. @12
  55388. // #20804
  55389. D=A
  55390. //^^ push_d_to_stack
  55391. // #20805
  55392. @SP
  55393. // #20806
  55394. A=M
  55395. // #20807
  55396. M=D
  55397. // #20808
  55398. @SP
  55399. // #20809
  55400. M=M+1
  55401. //vv push_d_to_stack
  55402. //vv push_constant(12)
  55403. //
  55404. //// push constant 12
  55405. //^^ push_constant(12)
  55406. // #20810
  55407. @12
  55408. // #20811
  55409. D=A
  55410. //^^ push_d_to_stack
  55411. // #20812
  55412. @SP
  55413. // #20813
  55414. A=M
  55415. // #20814
  55416. M=D
  55417. // #20815
  55418. @SP
  55419. // #20816
  55420. M=M+1
  55421. //vv push_d_to_stack
  55422. //vv push_constant(12)
  55423. //
  55424. //// push constant 12
  55425. //^^ push_constant(12)
  55426. // #20817
  55427. @12
  55428. // #20818
  55429. D=A
  55430. //^^ push_d_to_stack
  55431. // #20819
  55432. @SP
  55433. // #20820
  55434. A=M
  55435. // #20821
  55436. M=D
  55437. // #20822
  55438. @SP
  55439. // #20823
  55440. M=M+1
  55441. //vv push_d_to_stack
  55442. //vv push_constant(12)
  55443. //
  55444. //// push constant 56
  55445. //^^ push_constant(56)
  55446. // #20824
  55447. @56
  55448. // #20825
  55449. D=A
  55450. //^^ push_d_to_stack
  55451. // #20826
  55452. @SP
  55453. // #20827
  55454. A=M
  55455. // #20828
  55456. M=D
  55457. // #20829
  55458. @SP
  55459. // #20830
  55460. M=M+1
  55461. //vv push_d_to_stack
  55462. //vv push_constant(56)
  55463. //
  55464. //// push constant 12
  55465. //^^ push_constant(12)
  55466. // #20831
  55467. @12
  55468. // #20832
  55469. D=A
  55470. //^^ push_d_to_stack
  55471. // #20833
  55472. @SP
  55473. // #20834
  55474. A=M
  55475. // #20835
  55476. M=D
  55477. // #20836
  55478. @SP
  55479. // #20837
  55480. M=M+1
  55481. //vv push_d_to_stack
  55482. //vv push_constant(12)
  55483. //
  55484. //// push constant 12
  55485. //^^ push_constant(12)
  55486. // #20838
  55487. @12
  55488. // #20839
  55489. D=A
  55490. //^^ push_d_to_stack
  55491. // #20840
  55492. @SP
  55493. // #20841
  55494. A=M
  55495. // #20842
  55496. M=D
  55497. // #20843
  55498. @SP
  55499. // #20844
  55500. M=M+1
  55501. //vv push_d_to_stack
  55502. //vv push_constant(12)
  55503. //
  55504. //// push constant 12
  55505. //^^ push_constant(12)
  55506. // #20845
  55507. @12
  55508. // #20846
  55509. D=A
  55510. //^^ push_d_to_stack
  55511. // #20847
  55512. @SP
  55513. // #20848
  55514. A=M
  55515. // #20849
  55516. M=D
  55517. // #20850
  55518. @SP
  55519. // #20851
  55520. M=M+1
  55521. //vv push_d_to_stack
  55522. //vv push_constant(12)
  55523. //
  55524. //// push constant 7
  55525. //^^ push_constant(7)
  55526. // #20852
  55527. @7
  55528. // #20853
  55529. D=A
  55530. //^^ push_d_to_stack
  55531. // #20854
  55532. @SP
  55533. // #20855
  55534. A=M
  55535. // #20856
  55536. M=D
  55537. // #20857
  55538. @SP
  55539. // #20858
  55540. M=M+1
  55541. //vv push_d_to_stack
  55542. //vv push_constant(7)
  55543. //
  55544. //// push constant 0
  55545. //^^ push_constant(0)
  55546. // #20859
  55547. @0
  55548. // #20860
  55549. D=A
  55550. //^^ push_d_to_stack
  55551. // #20861
  55552. @SP
  55553. // #20862
  55554. A=M
  55555. // #20863
  55556. M=D
  55557. // #20864
  55558. @SP
  55559. // #20865
  55560. M=M+1
  55561. //vv push_d_to_stack
  55562. //vv push_constant(0)
  55563. //
  55564. //// push constant 0
  55565. //^^ push_constant(0)
  55566. // #20866
  55567. @0
  55568. // #20867
  55569. D=A
  55570. //^^ push_d_to_stack
  55571. // #20868
  55572. @SP
  55573. // #20869
  55574. A=M
  55575. // #20870
  55576. M=D
  55577. // #20871
  55578. @SP
  55579. // #20872
  55580. M=M+1
  55581. //vv push_d_to_stack
  55582. //vv push_constant(0)
  55583. //
  55584. //// call Output.create 12
  55585. //^^ push_constant(RET_ADDR_169)
  55586. // #20873
  55587. @RET_ADDR_169
  55588. // #20874
  55589. D=A
  55590. //^^ push_d_to_stack
  55591. // #20875
  55592. @SP
  55593. // #20876
  55594. A=M
  55595. // #20877
  55596. M=D
  55597. // #20878
  55598. @SP
  55599. // #20879
  55600. M=M+1
  55601. //vv push_d_to_stack
  55602. //vv push_constant(RET_ADDR_169)
  55603. //push return-address
  55604. // #20880
  55605. @LCL
  55606. // #20881
  55607. D=M
  55608. //^^ push_d_to_stack
  55609. // #20882
  55610. @SP
  55611. // #20883
  55612. A=M
  55613. // #20884
  55614. M=D
  55615. // #20885
  55616. @SP
  55617. // #20886
  55618. M=M+1
  55619. //vv push_d_to_stack
  55620. //push LCL
  55621. // #20887
  55622. @ARG
  55623. // #20888
  55624. D=M
  55625. //^^ push_d_to_stack
  55626. // #20889
  55627. @SP
  55628. // #20890
  55629. A=M
  55630. // #20891
  55631. M=D
  55632. // #20892
  55633. @SP
  55634. // #20893
  55635. M=M+1
  55636. //vv push_d_to_stack
  55637. //push ARG
  55638. // #20894
  55639. @THIS
  55640. // #20895
  55641. D=M
  55642. //^^ push_d_to_stack
  55643. // #20896
  55644. @SP
  55645. // #20897
  55646. A=M
  55647. // #20898
  55648. M=D
  55649. // #20899
  55650. @SP
  55651. // #20900
  55652. M=M+1
  55653. //vv push_d_to_stack
  55654. //push THIS
  55655. // #20901
  55656. @THAT
  55657. // #20902
  55658. D=M
  55659. //^^ push_d_to_stack
  55660. // #20903
  55661. @SP
  55662. // #20904
  55663. A=M
  55664. // #20905
  55665. M=D
  55666. // #20906
  55667. @SP
  55668. // #20907
  55669. M=M+1
  55670. //vv push_d_to_stack
  55671. //push THAT
  55672. // #20908
  55673. @SP
  55674. // #20909
  55675. D=M
  55676. // #20910
  55677. @ARG
  55678. // #20911
  55679. M=D
  55680. // #20912
  55681. @17
  55682. // #20913
  55683. D=A
  55684. // #20914
  55685. @ARG
  55686. // #20915
  55687. M=M-D // ARG = SP - args - 5
  55688. // #20916
  55689. @SP
  55690. // #20917
  55691. D=M
  55692. // #20918
  55693. @LCL
  55694. // #20919
  55695. M=D // LCL = SP
  55696. // #20920
  55697. @Output.create
  55698. // #20921
  55699. 0;JMP
  55700. (RET_ADDR_169)
  55701. //
  55702. //// pop temp 0
  55703. //^^ pop_to_loc{5)
  55704. //^^ pop_stack_to_d
  55705. // #20922
  55706. @SP
  55707. // #20923
  55708. M=M-1
  55709. // #20924
  55710. A=M
  55711. // #20925
  55712. D=M
  55713. //vv pop_stack_to_d
  55714. // #20926
  55715. @5
  55716. // #20927
  55717. M=D
  55718. //vv pop_to_loc{5)
  55719. //
  55720. //// push constant 126
  55721. //^^ push_constant(126)
  55722. // #20928
  55723. @126
  55724. // #20929
  55725. D=A
  55726. //^^ push_d_to_stack
  55727. // #20930
  55728. @SP
  55729. // #20931
  55730. A=M
  55731. // #20932
  55732. M=D
  55733. // #20933
  55734. @SP
  55735. // #20934
  55736. M=M+1
  55737. //vv push_d_to_stack
  55738. //vv push_constant(126)
  55739. //
  55740. //// push constant 38
  55741. //^^ push_constant(38)
  55742. // #20935
  55743. @38
  55744. // #20936
  55745. D=A
  55746. //^^ push_d_to_stack
  55747. // #20937
  55748. @SP
  55749. // #20938
  55750. A=M
  55751. // #20939
  55752. M=D
  55753. // #20940
  55754. @SP
  55755. // #20941
  55756. M=M+1
  55757. //vv push_d_to_stack
  55758. //vv push_constant(38)
  55759. //
  55760. //// push constant 45
  55761. //^^ push_constant(45)
  55762. // #20942
  55763. @45
  55764. // #20943
  55765. D=A
  55766. //^^ push_d_to_stack
  55767. // #20944
  55768. @SP
  55769. // #20945
  55770. A=M
  55771. // #20946
  55772. M=D
  55773. // #20947
  55774. @SP
  55775. // #20948
  55776. M=M+1
  55777. //vv push_d_to_stack
  55778. //vv push_constant(45)
  55779. //
  55780. //// push constant 25
  55781. //^^ push_constant(25)
  55782. // #20949
  55783. @25
  55784. // #20950
  55785. D=A
  55786. //^^ push_d_to_stack
  55787. // #20951
  55788. @SP
  55789. // #20952
  55790. A=M
  55791. // #20953
  55792. M=D
  55793. // #20954
  55794. @SP
  55795. // #20955
  55796. M=M+1
  55797. //vv push_d_to_stack
  55798. //vv push_constant(25)
  55799. //
  55800. //// push constant 0
  55801. //^^ push_constant(0)
  55802. // #20956
  55803. @0
  55804. // #20957
  55805. D=A
  55806. //^^ push_d_to_stack
  55807. // #20958
  55808. @SP
  55809. // #20959
  55810. A=M
  55811. // #20960
  55812. M=D
  55813. // #20961
  55814. @SP
  55815. // #20962
  55816. M=M+1
  55817. //vv push_d_to_stack
  55818. //vv push_constant(0)
  55819. //
  55820. //// push constant 0
  55821. //^^ push_constant(0)
  55822. // #20963
  55823. @0
  55824. // #20964
  55825. D=A
  55826. //^^ push_d_to_stack
  55827. // #20965
  55828. @SP
  55829. // #20966
  55830. A=M
  55831. // #20967
  55832. M=D
  55833. // #20968
  55834. @SP
  55835. // #20969
  55836. M=M+1
  55837. //vv push_d_to_stack
  55838. //vv push_constant(0)
  55839. //
  55840. //// push constant 0
  55841. //^^ push_constant(0)
  55842. // #20970
  55843. @0
  55844. // #20971
  55845. D=A
  55846. //^^ push_d_to_stack
  55847. // #20972
  55848. @SP
  55849. // #20973
  55850. A=M
  55851. // #20974
  55852. M=D
  55853. // #20975
  55854. @SP
  55855. // #20976
  55856. M=M+1
  55857. //vv push_d_to_stack
  55858. //vv push_constant(0)
  55859. //
  55860. //// push constant 0
  55861. //^^ push_constant(0)
  55862. // #20977
  55863. @0
  55864. // #20978
  55865. D=A
  55866. //^^ push_d_to_stack
  55867. // #20979
  55868. @SP
  55869. // #20980
  55870. A=M
  55871. // #20981
  55872. M=D
  55873. // #20982
  55874. @SP
  55875. // #20983
  55876. M=M+1
  55877. //vv push_d_to_stack
  55878. //vv push_constant(0)
  55879. //
  55880. //// push constant 0
  55881. //^^ push_constant(0)
  55882. // #20984
  55883. @0
  55884. // #20985
  55885. D=A
  55886. //^^ push_d_to_stack
  55887. // #20986
  55888. @SP
  55889. // #20987
  55890. A=M
  55891. // #20988
  55892. M=D
  55893. // #20989
  55894. @SP
  55895. // #20990
  55896. M=M+1
  55897. //vv push_d_to_stack
  55898. //vv push_constant(0)
  55899. //
  55900. //// push constant 0
  55901. //^^ push_constant(0)
  55902. // #20991
  55903. @0
  55904. // #20992
  55905. D=A
  55906. //^^ push_d_to_stack
  55907. // #20993
  55908. @SP
  55909. // #20994
  55910. A=M
  55911. // #20995
  55912. M=D
  55913. // #20996
  55914. @SP
  55915. // #20997
  55916. M=M+1
  55917. //vv push_d_to_stack
  55918. //vv push_constant(0)
  55919. //
  55920. //// push constant 0
  55921. //^^ push_constant(0)
  55922. // #20998
  55923. @0
  55924. // #20999
  55925. D=A
  55926. //^^ push_d_to_stack
  55927. // #21000
  55928. @SP
  55929. // #21001
  55930. A=M
  55931. // #21002
  55932. M=D
  55933. // #21003
  55934. @SP
  55935. // #21004
  55936. M=M+1
  55937. //vv push_d_to_stack
  55938. //vv push_constant(0)
  55939. //
  55940. //// push constant 0
  55941. //^^ push_constant(0)
  55942. // #21005
  55943. @0
  55944. // #21006
  55945. D=A
  55946. //^^ push_d_to_stack
  55947. // #21007
  55948. @SP
  55949. // #21008
  55950. A=M
  55951. // #21009
  55952. M=D
  55953. // #21010
  55954. @SP
  55955. // #21011
  55956. M=M+1
  55957. //vv push_d_to_stack
  55958. //vv push_constant(0)
  55959. //
  55960. //// call Output.create 12
  55961. //^^ push_constant(RET_ADDR_170)
  55962. // #21012
  55963. @RET_ADDR_170
  55964. // #21013
  55965. D=A
  55966. //^^ push_d_to_stack
  55967. // #21014
  55968. @SP
  55969. // #21015
  55970. A=M
  55971. // #21016
  55972. M=D
  55973. // #21017
  55974. @SP
  55975. // #21018
  55976. M=M+1
  55977. //vv push_d_to_stack
  55978. //vv push_constant(RET_ADDR_170)
  55979. //push return-address
  55980. // #21019
  55981. @LCL
  55982. // #21020
  55983. D=M
  55984. //^^ push_d_to_stack
  55985. // #21021
  55986. @SP
  55987. // #21022
  55988. A=M
  55989. // #21023
  55990. M=D
  55991. // #21024
  55992. @SP
  55993. // #21025
  55994. M=M+1
  55995. //vv push_d_to_stack
  55996. //push LCL
  55997. // #21026
  55998. @ARG
  55999. // #21027
  56000. D=M
  56001. //^^ push_d_to_stack
  56002. // #21028
  56003. @SP
  56004. // #21029
  56005. A=M
  56006. // #21030
  56007. M=D
  56008. // #21031
  56009. @SP
  56010. // #21032
  56011. M=M+1
  56012. //vv push_d_to_stack
  56013. //push ARG
  56014. // #21033
  56015. @THIS
  56016. // #21034
  56017. D=M
  56018. //^^ push_d_to_stack
  56019. // #21035
  56020. @SP
  56021. // #21036
  56022. A=M
  56023. // #21037
  56024. M=D
  56025. // #21038
  56026. @SP
  56027. // #21039
  56028. M=M+1
  56029. //vv push_d_to_stack
  56030. //push THIS
  56031. // #21040
  56032. @THAT
  56033. // #21041
  56034. D=M
  56035. //^^ push_d_to_stack
  56036. // #21042
  56037. @SP
  56038. // #21043
  56039. A=M
  56040. // #21044
  56041. M=D
  56042. // #21045
  56043. @SP
  56044. // #21046
  56045. M=M+1
  56046. //vv push_d_to_stack
  56047. //push THAT
  56048. // #21047
  56049. @SP
  56050. // #21048
  56051. D=M
  56052. // #21049
  56053. @ARG
  56054. // #21050
  56055. M=D
  56056. // #21051
  56057. @17
  56058. // #21052
  56059. D=A
  56060. // #21053
  56061. @ARG
  56062. // #21054
  56063. M=M-D // ARG = SP - args - 5
  56064. // #21055
  56065. @SP
  56066. // #21056
  56067. D=M
  56068. // #21057
  56069. @LCL
  56070. // #21058
  56071. M=D // LCL = SP
  56072. // #21059
  56073. @Output.create
  56074. // #21060
  56075. 0;JMP
  56076. (RET_ADDR_170)
  56077. //
  56078. //// pop temp 0
  56079. //^^ pop_to_loc{5)
  56080. //^^ pop_stack_to_d
  56081. // #21061
  56082. @SP
  56083. // #21062
  56084. M=M-1
  56085. // #21063
  56086. A=M
  56087. // #21064
  56088. D=M
  56089. //vv pop_stack_to_d
  56090. // #21065
  56091. @5
  56092. // #21066
  56093. M=D
  56094. //vv pop_to_loc{5)
  56095. //
  56096. //// push constant 0
  56097. //^^ push_constant(0)
  56098. // #21067
  56099. @0
  56100. // #21068
  56101. D=A
  56102. //^^ push_d_to_stack
  56103. // #21069
  56104. @SP
  56105. // #21070
  56106. A=M
  56107. // #21071
  56108. M=D
  56109. // #21072
  56110. @SP
  56111. // #21073
  56112. M=M+1
  56113. //vv push_d_to_stack
  56114. //vv push_constant(0)
  56115. //
  56116. //// return
  56117. // #21074
  56118. @LCL
  56119. // #21075
  56120. D=M
  56121. // #21076
  56122. @R14
  56123. // #21077
  56124. M=D //R14=LCL
  56125. // #21078
  56126. @5
  56127. // #21079
  56128. A=D-A
  56129. // #21080
  56130. D=M
  56131. // #21081
  56132. @R15
  56133. // #21082
  56134. M=D //R15=*(LCL-5)
  56135. //^^ pop_stack_to_d
  56136. // #21083
  56137. @SP
  56138. // #21084
  56139. M=M-1
  56140. // #21085
  56141. A=M
  56142. // #21086
  56143. D=M
  56144. //vv pop_stack_to_d
  56145. // #21087
  56146. @ARG
  56147. // #21088
  56148. A=M
  56149. // #21089
  56150. M=D //*ARG = pop()
  56151. // #21090
  56152. @ARG
  56153. // #21091
  56154. D=M
  56155. // #21092
  56156. @SP
  56157. // #21093
  56158. M=D+1 //SP=ARG+1
  56159. // #21094
  56160. @R14
  56161. // #21095
  56162. AM=M-1
  56163. // #21096
  56164. D=M
  56165. // #21097
  56166. @THAT
  56167. // #21098
  56168. M=D //THAT = *(--R14)
  56169. // #21099
  56170. @R14
  56171. // #21100
  56172. AM=M-1
  56173. // #21101
  56174. D=M
  56175. // #21102
  56176. @THIS
  56177. // #21103
  56178. M=D //THIS = *(--R14)
  56179. // #21104
  56180. @R14
  56181. // #21105
  56182. AM=M-1
  56183. // #21106
  56184. D=M
  56185. // #21107
  56186. @ARG
  56187. // #21108
  56188. M=D //ARG = *(--R14)
  56189. // #21109
  56190. @R14
  56191. // #21110
  56192. AM=M-1
  56193. // #21111
  56194. D=M
  56195. // #21112
  56196. @LCL
  56197. // #21113
  56198. M=D //LCL = *(--R14)
  56199. // #21114
  56200. @R15
  56201. // #21115
  56202. A=M
  56203. // #21116
  56204. 0;JMP //goto *R15
  56205. //
  56206. //// function Output.create 1
  56207. (Output.create)
  56208. // #21117
  56209. D=0
  56210. //^^ push_d_to_stack
  56211. // #21118
  56212. @SP
  56213. // #21119
  56214. A=M
  56215. // #21120
  56216. M=D
  56217. // #21121
  56218. @SP
  56219. // #21122
  56220. M=M+1
  56221. //vv push_d_to_stack
  56222. //
  56223. //// push constant 11
  56224. //^^ push_constant(11)
  56225. // #21123
  56226. @11
  56227. // #21124
  56228. D=A
  56229. //^^ push_d_to_stack
  56230. // #21125
  56231. @SP
  56232. // #21126
  56233. A=M
  56234. // #21127
  56235. M=D
  56236. // #21128
  56237. @SP
  56238. // #21129
  56239. M=M+1
  56240. //vv push_d_to_stack
  56241. //vv push_constant(11)
  56242. //
  56243. //// call Array.new 1
  56244. //^^ push_constant(RET_ADDR_171)
  56245. // #21130
  56246. @RET_ADDR_171
  56247. // #21131
  56248. D=A
  56249. //^^ push_d_to_stack
  56250. // #21132
  56251. @SP
  56252. // #21133
  56253. A=M
  56254. // #21134
  56255. M=D
  56256. // #21135
  56257. @SP
  56258. // #21136
  56259. M=M+1
  56260. //vv push_d_to_stack
  56261. //vv push_constant(RET_ADDR_171)
  56262. //push return-address
  56263. // #21137
  56264. @LCL
  56265. // #21138
  56266. D=M
  56267. //^^ push_d_to_stack
  56268. // #21139
  56269. @SP
  56270. // #21140
  56271. A=M
  56272. // #21141
  56273. M=D
  56274. // #21142
  56275. @SP
  56276. // #21143
  56277. M=M+1
  56278. //vv push_d_to_stack
  56279. //push LCL
  56280. // #21144
  56281. @ARG
  56282. // #21145
  56283. D=M
  56284. //^^ push_d_to_stack
  56285. // #21146
  56286. @SP
  56287. // #21147
  56288. A=M
  56289. // #21148
  56290. M=D
  56291. // #21149
  56292. @SP
  56293. // #21150
  56294. M=M+1
  56295. //vv push_d_to_stack
  56296. //push ARG
  56297. // #21151
  56298. @THIS
  56299. // #21152
  56300. D=M
  56301. //^^ push_d_to_stack
  56302. // #21153
  56303. @SP
  56304. // #21154
  56305. A=M
  56306. // #21155
  56307. M=D
  56308. // #21156
  56309. @SP
  56310. // #21157
  56311. M=M+1
  56312. //vv push_d_to_stack
  56313. //push THIS
  56314. // #21158
  56315. @THAT
  56316. // #21159
  56317. D=M
  56318. //^^ push_d_to_stack
  56319. // #21160
  56320. @SP
  56321. // #21161
  56322. A=M
  56323. // #21162
  56324. M=D
  56325. // #21163
  56326. @SP
  56327. // #21164
  56328. M=M+1
  56329. //vv push_d_to_stack
  56330. //push THAT
  56331. // #21165
  56332. @SP
  56333. // #21166
  56334. D=M
  56335. // #21167
  56336. @ARG
  56337. // #21168
  56338. M=D
  56339. // #21169
  56340. @6
  56341. // #21170
  56342. D=A
  56343. // #21171
  56344. @ARG
  56345. // #21172
  56346. M=M-D // ARG = SP - args - 5
  56347. // #21173
  56348. @SP
  56349. // #21174
  56350. D=M
  56351. // #21175
  56352. @LCL
  56353. // #21176
  56354. M=D // LCL = SP
  56355. // #21177
  56356. @Array.new
  56357. // #21178
  56358. 0;JMP
  56359. (RET_ADDR_171)
  56360. //
  56361. //// pop local 0
  56362. //^^ pop_to_ram(LCL, 0)
  56363. // #21179
  56364. @LCL
  56365. // #21180
  56366. D=M
  56367. // #21181
  56368. @0
  56369. // #21182
  56370. D=D+A
  56371. // #21183
  56372. @R13
  56373. // #21184
  56374. M=D
  56375. //^^ pop_stack_to_d
  56376. // #21185
  56377. @SP
  56378. // #21186
  56379. M=M-1
  56380. // #21187
  56381. A=M
  56382. // #21188
  56383. D=M
  56384. //vv pop_stack_to_d
  56385. // #21189
  56386. @R13
  56387. // #21190
  56388. A=M
  56389. // #21191
  56390. M=D
  56391. // #21192
  56392. @R13
  56393. // #21193
  56394. M=0
  56395. //vv pop_to_ram(LCL, 0)
  56396. //
  56397. //// push argument 0
  56398. //^^ push_from_ram(ARG, 0)
  56399. // #21194
  56400. @ARG
  56401. // #21195
  56402. D=M
  56403. // #21196
  56404. @0
  56405. // #21197
  56406. A=D+A
  56407. // #21198
  56408. D=M
  56409. //^^ push_d_to_stack
  56410. // #21199
  56411. @SP
  56412. // #21200
  56413. A=M
  56414. // #21201
  56415. M=D
  56416. // #21202
  56417. @SP
  56418. // #21203
  56419. M=M+1
  56420. //vv push_d_to_stack
  56421. //vv push_from_ram(ARG, 0)
  56422. //
  56423. //// push static 5
  56424. //^^ push_from_loc(Output.vm.5)
  56425. // #21204
  56426. @Output.vm.5
  56427. // #21205
  56428. D=M
  56429. //^^ push_d_to_stack
  56430. // #21206
  56431. @SP
  56432. // #21207
  56433. A=M
  56434. // #21208
  56435. M=D
  56436. // #21209
  56437. @SP
  56438. // #21210
  56439. M=M+1
  56440. //vv push_d_to_stack
  56441. //vv push_from_loc(Output.vm.5)
  56442. //
  56443. //// add
  56444. //^^ arith_binary_op(+)
  56445. //^^ pop_stack_to_d
  56446. // #21211
  56447. @SP
  56448. // #21212
  56449. M=M-1
  56450. // #21213
  56451. A=M
  56452. // #21214
  56453. D=M
  56454. //vv pop_stack_to_d
  56455. //^^ arith_d_with_stack_top(D+M)
  56456. // #21215
  56457. @R13
  56458. // #21216
  56459. M=D
  56460. //^^ pop_stack_to_d
  56461. // #21217
  56462. @SP
  56463. // #21218
  56464. M=M-1
  56465. // #21219
  56466. A=M
  56467. // #21220
  56468. D=M
  56469. //vv pop_stack_to_d
  56470. // #21221
  56471. @R13
  56472. // #21222
  56473. D=D+M
  56474. // #21223
  56475. @R13
  56476. // #21224
  56477. M=0
  56478. //vv arith_d_with_stack_top(D+M)
  56479. //^^ push_d_to_stack
  56480. // #21225
  56481. @SP
  56482. // #21226
  56483. A=M
  56484. // #21227
  56485. M=D
  56486. // #21228
  56487. @SP
  56488. // #21229
  56489. M=M+1
  56490. //vv push_d_to_stack
  56491. //vv arith_binary_op(+)
  56492. //
  56493. //// push local 0
  56494. //^^ push_from_ram(LCL, 0)
  56495. // #21230
  56496. @LCL
  56497. // #21231
  56498. D=M
  56499. // #21232
  56500. @0
  56501. // #21233
  56502. A=D+A
  56503. // #21234
  56504. D=M
  56505. //^^ push_d_to_stack
  56506. // #21235
  56507. @SP
  56508. // #21236
  56509. A=M
  56510. // #21237
  56511. M=D
  56512. // #21238
  56513. @SP
  56514. // #21239
  56515. M=M+1
  56516. //vv push_d_to_stack
  56517. //vv push_from_ram(LCL, 0)
  56518. //
  56519. //// pop temp 0
  56520. //^^ pop_to_loc{5)
  56521. //^^ pop_stack_to_d
  56522. // #21240
  56523. @SP
  56524. // #21241
  56525. M=M-1
  56526. // #21242
  56527. A=M
  56528. // #21243
  56529. D=M
  56530. //vv pop_stack_to_d
  56531. // #21244
  56532. @5
  56533. // #21245
  56534. M=D
  56535. //vv pop_to_loc{5)
  56536. //
  56537. //// pop pointer 1
  56538. //^^ pop_to_loc{4)
  56539. //^^ pop_stack_to_d
  56540. // #21246
  56541. @SP
  56542. // #21247
  56543. M=M-1
  56544. // #21248
  56545. A=M
  56546. // #21249
  56547. D=M
  56548. //vv pop_stack_to_d
  56549. // #21250
  56550. @4
  56551. // #21251
  56552. M=D
  56553. //vv pop_to_loc{4)
  56554. //
  56555. //// push temp 0
  56556. //^^ push_from_loc(5)
  56557. // #21252
  56558. @5
  56559. // #21253
  56560. D=M
  56561. //^^ push_d_to_stack
  56562. // #21254
  56563. @SP
  56564. // #21255
  56565. A=M
  56566. // #21256
  56567. M=D
  56568. // #21257
  56569. @SP
  56570. // #21258
  56571. M=M+1
  56572. //vv push_d_to_stack
  56573. //vv push_from_loc(5)
  56574. //
  56575. //// pop that 0
  56576. //^^ pop_to_ram(THAT, 0)
  56577. // #21259
  56578. @THAT
  56579. // #21260
  56580. D=M
  56581. // #21261
  56582. @0
  56583. // #21262
  56584. D=D+A
  56585. // #21263
  56586. @R13
  56587. // #21264
  56588. M=D
  56589. //^^ pop_stack_to_d
  56590. // #21265
  56591. @SP
  56592. // #21266
  56593. M=M-1
  56594. // #21267
  56595. A=M
  56596. // #21268
  56597. D=M
  56598. //vv pop_stack_to_d
  56599. // #21269
  56600. @R13
  56601. // #21270
  56602. A=M
  56603. // #21271
  56604. M=D
  56605. // #21272
  56606. @R13
  56607. // #21273
  56608. M=0
  56609. //vv pop_to_ram(THAT, 0)
  56610. //
  56611. //// push constant 0
  56612. //^^ push_constant(0)
  56613. // #21274
  56614. @0
  56615. // #21275
  56616. D=A
  56617. //^^ push_d_to_stack
  56618. // #21276
  56619. @SP
  56620. // #21277
  56621. A=M
  56622. // #21278
  56623. M=D
  56624. // #21279
  56625. @SP
  56626. // #21280
  56627. M=M+1
  56628. //vv push_d_to_stack
  56629. //vv push_constant(0)
  56630. //
  56631. //// push local 0
  56632. //^^ push_from_ram(LCL, 0)
  56633. // #21281
  56634. @LCL
  56635. // #21282
  56636. D=M
  56637. // #21283
  56638. @0
  56639. // #21284
  56640. A=D+A
  56641. // #21285
  56642. D=M
  56643. //^^ push_d_to_stack
  56644. // #21286
  56645. @SP
  56646. // #21287
  56647. A=M
  56648. // #21288
  56649. M=D
  56650. // #21289
  56651. @SP
  56652. // #21290
  56653. M=M+1
  56654. //vv push_d_to_stack
  56655. //vv push_from_ram(LCL, 0)
  56656. //
  56657. //// add
  56658. //^^ arith_binary_op(+)
  56659. //^^ pop_stack_to_d
  56660. // #21291
  56661. @SP
  56662. // #21292
  56663. M=M-1
  56664. // #21293
  56665. A=M
  56666. // #21294
  56667. D=M
  56668. //vv pop_stack_to_d
  56669. //^^ arith_d_with_stack_top(D+M)
  56670. // #21295
  56671. @R13
  56672. // #21296
  56673. M=D
  56674. //^^ pop_stack_to_d
  56675. // #21297
  56676. @SP
  56677. // #21298
  56678. M=M-1
  56679. // #21299
  56680. A=M
  56681. // #21300
  56682. D=M
  56683. //vv pop_stack_to_d
  56684. // #21301
  56685. @R13
  56686. // #21302
  56687. D=D+M
  56688. // #21303
  56689. @R13
  56690. // #21304
  56691. M=0
  56692. //vv arith_d_with_stack_top(D+M)
  56693. //^^ push_d_to_stack
  56694. // #21305
  56695. @SP
  56696. // #21306
  56697. A=M
  56698. // #21307
  56699. M=D
  56700. // #21308
  56701. @SP
  56702. // #21309
  56703. M=M+1
  56704. //vv push_d_to_stack
  56705. //vv arith_binary_op(+)
  56706. //
  56707. //// push argument 1
  56708. //^^ push_from_ram(ARG, 1)
  56709. // #21310
  56710. @ARG
  56711. // #21311
  56712. D=M
  56713. // #21312
  56714. @1
  56715. // #21313
  56716. A=D+A
  56717. // #21314
  56718. D=M
  56719. //^^ push_d_to_stack
  56720. // #21315
  56721. @SP
  56722. // #21316
  56723. A=M
  56724. // #21317
  56725. M=D
  56726. // #21318
  56727. @SP
  56728. // #21319
  56729. M=M+1
  56730. //vv push_d_to_stack
  56731. //vv push_from_ram(ARG, 1)
  56732. //
  56733. //// pop temp 0
  56734. //^^ pop_to_loc{5)
  56735. //^^ pop_stack_to_d
  56736. // #21320
  56737. @SP
  56738. // #21321
  56739. M=M-1
  56740. // #21322
  56741. A=M
  56742. // #21323
  56743. D=M
  56744. //vv pop_stack_to_d
  56745. // #21324
  56746. @5
  56747. // #21325
  56748. M=D
  56749. //vv pop_to_loc{5)
  56750. //
  56751. //// pop pointer 1
  56752. //^^ pop_to_loc{4)
  56753. //^^ pop_stack_to_d
  56754. // #21326
  56755. @SP
  56756. // #21327
  56757. M=M-1
  56758. // #21328
  56759. A=M
  56760. // #21329
  56761. D=M
  56762. //vv pop_stack_to_d
  56763. // #21330
  56764. @4
  56765. // #21331
  56766. M=D
  56767. //vv pop_to_loc{4)
  56768. //
  56769. //// push temp 0
  56770. //^^ push_from_loc(5)
  56771. // #21332
  56772. @5
  56773. // #21333
  56774. D=M
  56775. //^^ push_d_to_stack
  56776. // #21334
  56777. @SP
  56778. // #21335
  56779. A=M
  56780. // #21336
  56781. M=D
  56782. // #21337
  56783. @SP
  56784. // #21338
  56785. M=M+1
  56786. //vv push_d_to_stack
  56787. //vv push_from_loc(5)
  56788. //
  56789. //// pop that 0
  56790. //^^ pop_to_ram(THAT, 0)
  56791. // #21339
  56792. @THAT
  56793. // #21340
  56794. D=M
  56795. // #21341
  56796. @0
  56797. // #21342
  56798. D=D+A
  56799. // #21343
  56800. @R13
  56801. // #21344
  56802. M=D
  56803. //^^ pop_stack_to_d
  56804. // #21345
  56805. @SP
  56806. // #21346
  56807. M=M-1
  56808. // #21347
  56809. A=M
  56810. // #21348
  56811. D=M
  56812. //vv pop_stack_to_d
  56813. // #21349
  56814. @R13
  56815. // #21350
  56816. A=M
  56817. // #21351
  56818. M=D
  56819. // #21352
  56820. @R13
  56821. // #21353
  56822. M=0
  56823. //vv pop_to_ram(THAT, 0)
  56824. //
  56825. //// push constant 1
  56826. //^^ push_constant(1)
  56827. // #21354
  56828. @1
  56829. // #21355
  56830. D=A
  56831. //^^ push_d_to_stack
  56832. // #21356
  56833. @SP
  56834. // #21357
  56835. A=M
  56836. // #21358
  56837. M=D
  56838. // #21359
  56839. @SP
  56840. // #21360
  56841. M=M+1
  56842. //vv push_d_to_stack
  56843. //vv push_constant(1)
  56844. //
  56845. //// push local 0
  56846. //^^ push_from_ram(LCL, 0)
  56847. // #21361
  56848. @LCL
  56849. // #21362
  56850. D=M
  56851. // #21363
  56852. @0
  56853. // #21364
  56854. A=D+A
  56855. // #21365
  56856. D=M
  56857. //^^ push_d_to_stack
  56858. // #21366
  56859. @SP
  56860. // #21367
  56861. A=M
  56862. // #21368
  56863. M=D
  56864. // #21369
  56865. @SP
  56866. // #21370
  56867. M=M+1
  56868. //vv push_d_to_stack
  56869. //vv push_from_ram(LCL, 0)
  56870. //
  56871. //// add
  56872. //^^ arith_binary_op(+)
  56873. //^^ pop_stack_to_d
  56874. // #21371
  56875. @SP
  56876. // #21372
  56877. M=M-1
  56878. // #21373
  56879. A=M
  56880. // #21374
  56881. D=M
  56882. //vv pop_stack_to_d
  56883. //^^ arith_d_with_stack_top(D+M)
  56884. // #21375
  56885. @R13
  56886. // #21376
  56887. M=D
  56888. //^^ pop_stack_to_d
  56889. // #21377
  56890. @SP
  56891. // #21378
  56892. M=M-1
  56893. // #21379
  56894. A=M
  56895. // #21380
  56896. D=M
  56897. //vv pop_stack_to_d
  56898. // #21381
  56899. @R13
  56900. // #21382
  56901. D=D+M
  56902. // #21383
  56903. @R13
  56904. // #21384
  56905. M=0
  56906. //vv arith_d_with_stack_top(D+M)
  56907. //^^ push_d_to_stack
  56908. // #21385
  56909. @SP
  56910. // #21386
  56911. A=M
  56912. // #21387
  56913. M=D
  56914. // #21388
  56915. @SP
  56916. // #21389
  56917. M=M+1
  56918. //vv push_d_to_stack
  56919. //vv arith_binary_op(+)
  56920. //
  56921. //// push argument 2
  56922. //^^ push_from_ram(ARG, 2)
  56923. // #21390
  56924. @ARG
  56925. // #21391
  56926. D=M
  56927. // #21392
  56928. @2
  56929. // #21393
  56930. A=D+A
  56931. // #21394
  56932. D=M
  56933. //^^ push_d_to_stack
  56934. // #21395
  56935. @SP
  56936. // #21396
  56937. A=M
  56938. // #21397
  56939. M=D
  56940. // #21398
  56941. @SP
  56942. // #21399
  56943. M=M+1
  56944. //vv push_d_to_stack
  56945. //vv push_from_ram(ARG, 2)
  56946. //
  56947. //// pop temp 0
  56948. //^^ pop_to_loc{5)
  56949. //^^ pop_stack_to_d
  56950. // #21400
  56951. @SP
  56952. // #21401
  56953. M=M-1
  56954. // #21402
  56955. A=M
  56956. // #21403
  56957. D=M
  56958. //vv pop_stack_to_d
  56959. // #21404
  56960. @5
  56961. // #21405
  56962. M=D
  56963. //vv pop_to_loc{5)
  56964. //
  56965. //// pop pointer 1
  56966. //^^ pop_to_loc{4)
  56967. //^^ pop_stack_to_d
  56968. // #21406
  56969. @SP
  56970. // #21407
  56971. M=M-1
  56972. // #21408
  56973. A=M
  56974. // #21409
  56975. D=M
  56976. //vv pop_stack_to_d
  56977. // #21410
  56978. @4
  56979. // #21411
  56980. M=D
  56981. //vv pop_to_loc{4)
  56982. //
  56983. //// push temp 0
  56984. //^^ push_from_loc(5)
  56985. // #21412
  56986. @5
  56987. // #21413
  56988. D=M
  56989. //^^ push_d_to_stack
  56990. // #21414
  56991. @SP
  56992. // #21415
  56993. A=M
  56994. // #21416
  56995. M=D
  56996. // #21417
  56997. @SP
  56998. // #21418
  56999. M=M+1
  57000. //vv push_d_to_stack
  57001. //vv push_from_loc(5)
  57002. //
  57003. //// pop that 0
  57004. //^^ pop_to_ram(THAT, 0)
  57005. // #21419
  57006. @THAT
  57007. // #21420
  57008. D=M
  57009. // #21421
  57010. @0
  57011. // #21422
  57012. D=D+A
  57013. // #21423
  57014. @R13
  57015. // #21424
  57016. M=D
  57017. //^^ pop_stack_to_d
  57018. // #21425
  57019. @SP
  57020. // #21426
  57021. M=M-1
  57022. // #21427
  57023. A=M
  57024. // #21428
  57025. D=M
  57026. //vv pop_stack_to_d
  57027. // #21429
  57028. @R13
  57029. // #21430
  57030. A=M
  57031. // #21431
  57032. M=D
  57033. // #21432
  57034. @R13
  57035. // #21433
  57036. M=0
  57037. //vv pop_to_ram(THAT, 0)
  57038. //
  57039. //// push constant 2
  57040. //^^ push_constant(2)
  57041. // #21434
  57042. @2
  57043. // #21435
  57044. D=A
  57045. //^^ push_d_to_stack
  57046. // #21436
  57047. @SP
  57048. // #21437
  57049. A=M
  57050. // #21438
  57051. M=D
  57052. // #21439
  57053. @SP
  57054. // #21440
  57055. M=M+1
  57056. //vv push_d_to_stack
  57057. //vv push_constant(2)
  57058. //
  57059. //// push local 0
  57060. //^^ push_from_ram(LCL, 0)
  57061. // #21441
  57062. @LCL
  57063. // #21442
  57064. D=M
  57065. // #21443
  57066. @0
  57067. // #21444
  57068. A=D+A
  57069. // #21445
  57070. D=M
  57071. //^^ push_d_to_stack
  57072. // #21446
  57073. @SP
  57074. // #21447
  57075. A=M
  57076. // #21448
  57077. M=D
  57078. // #21449
  57079. @SP
  57080. // #21450
  57081. M=M+1
  57082. //vv push_d_to_stack
  57083. //vv push_from_ram(LCL, 0)
  57084. //
  57085. //// add
  57086. //^^ arith_binary_op(+)
  57087. //^^ pop_stack_to_d
  57088. // #21451
  57089. @SP
  57090. // #21452
  57091. M=M-1
  57092. // #21453
  57093. A=M
  57094. // #21454
  57095. D=M
  57096. //vv pop_stack_to_d
  57097. //^^ arith_d_with_stack_top(D+M)
  57098. // #21455
  57099. @R13
  57100. // #21456
  57101. M=D
  57102. //^^ pop_stack_to_d
  57103. // #21457
  57104. @SP
  57105. // #21458
  57106. M=M-1
  57107. // #21459
  57108. A=M
  57109. // #21460
  57110. D=M
  57111. //vv pop_stack_to_d
  57112. // #21461
  57113. @R13
  57114. // #21462
  57115. D=D+M
  57116. // #21463
  57117. @R13
  57118. // #21464
  57119. M=0
  57120. //vv arith_d_with_stack_top(D+M)
  57121. //^^ push_d_to_stack
  57122. // #21465
  57123. @SP
  57124. // #21466
  57125. A=M
  57126. // #21467
  57127. M=D
  57128. // #21468
  57129. @SP
  57130. // #21469
  57131. M=M+1
  57132. //vv push_d_to_stack
  57133. //vv arith_binary_op(+)
  57134. //
  57135. //// push argument 3
  57136. //^^ push_from_ram(ARG, 3)
  57137. // #21470
  57138. @ARG
  57139. // #21471
  57140. D=M
  57141. // #21472
  57142. @3
  57143. // #21473
  57144. A=D+A
  57145. // #21474
  57146. D=M
  57147. //^^ push_d_to_stack
  57148. // #21475
  57149. @SP
  57150. // #21476
  57151. A=M
  57152. // #21477
  57153. M=D
  57154. // #21478
  57155. @SP
  57156. // #21479
  57157. M=M+1
  57158. //vv push_d_to_stack
  57159. //vv push_from_ram(ARG, 3)
  57160. //
  57161. //// pop temp 0
  57162. //^^ pop_to_loc{5)
  57163. //^^ pop_stack_to_d
  57164. // #21480
  57165. @SP
  57166. // #21481
  57167. M=M-1
  57168. // #21482
  57169. A=M
  57170. // #21483
  57171. D=M
  57172. //vv pop_stack_to_d
  57173. // #21484
  57174. @5
  57175. // #21485
  57176. M=D
  57177. //vv pop_to_loc{5)
  57178. //
  57179. //// pop pointer 1
  57180. //^^ pop_to_loc{4)
  57181. //^^ pop_stack_to_d
  57182. // #21486
  57183. @SP
  57184. // #21487
  57185. M=M-1
  57186. // #21488
  57187. A=M
  57188. // #21489
  57189. D=M
  57190. //vv pop_stack_to_d
  57191. // #21490
  57192. @4
  57193. // #21491
  57194. M=D
  57195. //vv pop_to_loc{4)
  57196. //
  57197. //// push temp 0
  57198. //^^ push_from_loc(5)
  57199. // #21492
  57200. @5
  57201. // #21493
  57202. D=M
  57203. //^^ push_d_to_stack
  57204. // #21494
  57205. @SP
  57206. // #21495
  57207. A=M
  57208. // #21496
  57209. M=D
  57210. // #21497
  57211. @SP
  57212. // #21498
  57213. M=M+1
  57214. //vv push_d_to_stack
  57215. //vv push_from_loc(5)
  57216. //
  57217. //// pop that 0
  57218. //^^ pop_to_ram(THAT, 0)
  57219. // #21499
  57220. @THAT
  57221. // #21500
  57222. D=M
  57223. // #21501
  57224. @0
  57225. // #21502
  57226. D=D+A
  57227. // #21503
  57228. @R13
  57229. // #21504
  57230. M=D
  57231. //^^ pop_stack_to_d
  57232. // #21505
  57233. @SP
  57234. // #21506
  57235. M=M-1
  57236. // #21507
  57237. A=M
  57238. // #21508
  57239. D=M
  57240. //vv pop_stack_to_d
  57241. // #21509
  57242. @R13
  57243. // #21510
  57244. A=M
  57245. // #21511
  57246. M=D
  57247. // #21512
  57248. @R13
  57249. // #21513
  57250. M=0
  57251. //vv pop_to_ram(THAT, 0)
  57252. //
  57253. //// push constant 3
  57254. //^^ push_constant(3)
  57255. // #21514
  57256. @3
  57257. // #21515
  57258. D=A
  57259. //^^ push_d_to_stack
  57260. // #21516
  57261. @SP
  57262. // #21517
  57263. A=M
  57264. // #21518
  57265. M=D
  57266. // #21519
  57267. @SP
  57268. // #21520
  57269. M=M+1
  57270. //vv push_d_to_stack
  57271. //vv push_constant(3)
  57272. //
  57273. //// push local 0
  57274. //^^ push_from_ram(LCL, 0)
  57275. // #21521
  57276. @LCL
  57277. // #21522
  57278. D=M
  57279. // #21523
  57280. @0
  57281. // #21524
  57282. A=D+A
  57283. // #21525
  57284. D=M
  57285. //^^ push_d_to_stack
  57286. // #21526
  57287. @SP
  57288. // #21527
  57289. A=M
  57290. // #21528
  57291. M=D
  57292. // #21529
  57293. @SP
  57294. // #21530
  57295. M=M+1
  57296. //vv push_d_to_stack
  57297. //vv push_from_ram(LCL, 0)
  57298. //
  57299. //// add
  57300. //^^ arith_binary_op(+)
  57301. //^^ pop_stack_to_d
  57302. // #21531
  57303. @SP
  57304. // #21532
  57305. M=M-1
  57306. // #21533
  57307. A=M
  57308. // #21534
  57309. D=M
  57310. //vv pop_stack_to_d
  57311. //^^ arith_d_with_stack_top(D+M)
  57312. // #21535
  57313. @R13
  57314. // #21536
  57315. M=D
  57316. //^^ pop_stack_to_d
  57317. // #21537
  57318. @SP
  57319. // #21538
  57320. M=M-1
  57321. // #21539
  57322. A=M
  57323. // #21540
  57324. D=M
  57325. //vv pop_stack_to_d
  57326. // #21541
  57327. @R13
  57328. // #21542
  57329. D=D+M
  57330. // #21543
  57331. @R13
  57332. // #21544
  57333. M=0
  57334. //vv arith_d_with_stack_top(D+M)
  57335. //^^ push_d_to_stack
  57336. // #21545
  57337. @SP
  57338. // #21546
  57339. A=M
  57340. // #21547
  57341. M=D
  57342. // #21548
  57343. @SP
  57344. // #21549
  57345. M=M+1
  57346. //vv push_d_to_stack
  57347. //vv arith_binary_op(+)
  57348. //
  57349. //// push argument 4
  57350. //^^ push_from_ram(ARG, 4)
  57351. // #21550
  57352. @ARG
  57353. // #21551
  57354. D=M
  57355. // #21552
  57356. @4
  57357. // #21553
  57358. A=D+A
  57359. // #21554
  57360. D=M
  57361. //^^ push_d_to_stack
  57362. // #21555
  57363. @SP
  57364. // #21556
  57365. A=M
  57366. // #21557
  57367. M=D
  57368. // #21558
  57369. @SP
  57370. // #21559
  57371. M=M+1
  57372. //vv push_d_to_stack
  57373. //vv push_from_ram(ARG, 4)
  57374. //
  57375. //// pop temp 0
  57376. //^^ pop_to_loc{5)
  57377. //^^ pop_stack_to_d
  57378. // #21560
  57379. @SP
  57380. // #21561
  57381. M=M-1
  57382. // #21562
  57383. A=M
  57384. // #21563
  57385. D=M
  57386. //vv pop_stack_to_d
  57387. // #21564
  57388. @5
  57389. // #21565
  57390. M=D
  57391. //vv pop_to_loc{5)
  57392. //
  57393. //// pop pointer 1
  57394. //^^ pop_to_loc{4)
  57395. //^^ pop_stack_to_d
  57396. // #21566
  57397. @SP
  57398. // #21567
  57399. M=M-1
  57400. // #21568
  57401. A=M
  57402. // #21569
  57403. D=M
  57404. //vv pop_stack_to_d
  57405. // #21570
  57406. @4
  57407. // #21571
  57408. M=D
  57409. //vv pop_to_loc{4)
  57410. //
  57411. //// push temp 0
  57412. //^^ push_from_loc(5)
  57413. // #21572
  57414. @5
  57415. // #21573
  57416. D=M
  57417. //^^ push_d_to_stack
  57418. // #21574
  57419. @SP
  57420. // #21575
  57421. A=M
  57422. // #21576
  57423. M=D
  57424. // #21577
  57425. @SP
  57426. // #21578
  57427. M=M+1
  57428. //vv push_d_to_stack
  57429. //vv push_from_loc(5)
  57430. //
  57431. //// pop that 0
  57432. //^^ pop_to_ram(THAT, 0)
  57433. // #21579
  57434. @THAT
  57435. // #21580
  57436. D=M
  57437. // #21581
  57438. @0
  57439. // #21582
  57440. D=D+A
  57441. // #21583
  57442. @R13
  57443. // #21584
  57444. M=D
  57445. //^^ pop_stack_to_d
  57446. // #21585
  57447. @SP
  57448. // #21586
  57449. M=M-1
  57450. // #21587
  57451. A=M
  57452. // #21588
  57453. D=M
  57454. //vv pop_stack_to_d
  57455. // #21589
  57456. @R13
  57457. // #21590
  57458. A=M
  57459. // #21591
  57460. M=D
  57461. // #21592
  57462. @R13
  57463. // #21593
  57464. M=0
  57465. //vv pop_to_ram(THAT, 0)
  57466. //
  57467. //// push constant 4
  57468. //^^ push_constant(4)
  57469. // #21594
  57470. @4
  57471. // #21595
  57472. D=A
  57473. //^^ push_d_to_stack
  57474. // #21596
  57475. @SP
  57476. // #21597
  57477. A=M
  57478. // #21598
  57479. M=D
  57480. // #21599
  57481. @SP
  57482. // #21600
  57483. M=M+1
  57484. //vv push_d_to_stack
  57485. //vv push_constant(4)
  57486. //
  57487. //// push local 0
  57488. //^^ push_from_ram(LCL, 0)
  57489. // #21601
  57490. @LCL
  57491. // #21602
  57492. D=M
  57493. // #21603
  57494. @0
  57495. // #21604
  57496. A=D+A
  57497. // #21605
  57498. D=M
  57499. //^^ push_d_to_stack
  57500. // #21606
  57501. @SP
  57502. // #21607
  57503. A=M
  57504. // #21608
  57505. M=D
  57506. // #21609
  57507. @SP
  57508. // #21610
  57509. M=M+1
  57510. //vv push_d_to_stack
  57511. //vv push_from_ram(LCL, 0)
  57512. //
  57513. //// add
  57514. //^^ arith_binary_op(+)
  57515. //^^ pop_stack_to_d
  57516. // #21611
  57517. @SP
  57518. // #21612
  57519. M=M-1
  57520. // #21613
  57521. A=M
  57522. // #21614
  57523. D=M
  57524. //vv pop_stack_to_d
  57525. //^^ arith_d_with_stack_top(D+M)
  57526. // #21615
  57527. @R13
  57528. // #21616
  57529. M=D
  57530. //^^ pop_stack_to_d
  57531. // #21617
  57532. @SP
  57533. // #21618
  57534. M=M-1
  57535. // #21619
  57536. A=M
  57537. // #21620
  57538. D=M
  57539. //vv pop_stack_to_d
  57540. // #21621
  57541. @R13
  57542. // #21622
  57543. D=D+M
  57544. // #21623
  57545. @R13
  57546. // #21624
  57547. M=0
  57548. //vv arith_d_with_stack_top(D+M)
  57549. //^^ push_d_to_stack
  57550. // #21625
  57551. @SP
  57552. // #21626
  57553. A=M
  57554. // #21627
  57555. M=D
  57556. // #21628
  57557. @SP
  57558. // #21629
  57559. M=M+1
  57560. //vv push_d_to_stack
  57561. //vv arith_binary_op(+)
  57562. //
  57563. //// push argument 5
  57564. //^^ push_from_ram(ARG, 5)
  57565. // #21630
  57566. @ARG
  57567. // #21631
  57568. D=M
  57569. // #21632
  57570. @5
  57571. // #21633
  57572. A=D+A
  57573. // #21634
  57574. D=M
  57575. //^^ push_d_to_stack
  57576. // #21635
  57577. @SP
  57578. // #21636
  57579. A=M
  57580. // #21637
  57581. M=D
  57582. // #21638
  57583. @SP
  57584. // #21639
  57585. M=M+1
  57586. //vv push_d_to_stack
  57587. //vv push_from_ram(ARG, 5)
  57588. //
  57589. //// pop temp 0
  57590. //^^ pop_to_loc{5)
  57591. //^^ pop_stack_to_d
  57592. // #21640
  57593. @SP
  57594. // #21641
  57595. M=M-1
  57596. // #21642
  57597. A=M
  57598. // #21643
  57599. D=M
  57600. //vv pop_stack_to_d
  57601. // #21644
  57602. @5
  57603. // #21645
  57604. M=D
  57605. //vv pop_to_loc{5)
  57606. //
  57607. //// pop pointer 1
  57608. //^^ pop_to_loc{4)
  57609. //^^ pop_stack_to_d
  57610. // #21646
  57611. @SP
  57612. // #21647
  57613. M=M-1
  57614. // #21648
  57615. A=M
  57616. // #21649
  57617. D=M
  57618. //vv pop_stack_to_d
  57619. // #21650
  57620. @4
  57621. // #21651
  57622. M=D
  57623. //vv pop_to_loc{4)
  57624. //
  57625. //// push temp 0
  57626. //^^ push_from_loc(5)
  57627. // #21652
  57628. @5
  57629. // #21653
  57630. D=M
  57631. //^^ push_d_to_stack
  57632. // #21654
  57633. @SP
  57634. // #21655
  57635. A=M
  57636. // #21656
  57637. M=D
  57638. // #21657
  57639. @SP
  57640. // #21658
  57641. M=M+1
  57642. //vv push_d_to_stack
  57643. //vv push_from_loc(5)
  57644. //
  57645. //// pop that 0
  57646. //^^ pop_to_ram(THAT, 0)
  57647. // #21659
  57648. @THAT
  57649. // #21660
  57650. D=M
  57651. // #21661
  57652. @0
  57653. // #21662
  57654. D=D+A
  57655. // #21663
  57656. @R13
  57657. // #21664
  57658. M=D
  57659. //^^ pop_stack_to_d
  57660. // #21665
  57661. @SP
  57662. // #21666
  57663. M=M-1
  57664. // #21667
  57665. A=M
  57666. // #21668
  57667. D=M
  57668. //vv pop_stack_to_d
  57669. // #21669
  57670. @R13
  57671. // #21670
  57672. A=M
  57673. // #21671
  57674. M=D
  57675. // #21672
  57676. @R13
  57677. // #21673
  57678. M=0
  57679. //vv pop_to_ram(THAT, 0)
  57680. //
  57681. //// push constant 5
  57682. //^^ push_constant(5)
  57683. // #21674
  57684. @5
  57685. // #21675
  57686. D=A
  57687. //^^ push_d_to_stack
  57688. // #21676
  57689. @SP
  57690. // #21677
  57691. A=M
  57692. // #21678
  57693. M=D
  57694. // #21679
  57695. @SP
  57696. // #21680
  57697. M=M+1
  57698. //vv push_d_to_stack
  57699. //vv push_constant(5)
  57700. //
  57701. //// push local 0
  57702. //^^ push_from_ram(LCL, 0)
  57703. // #21681
  57704. @LCL
  57705. // #21682
  57706. D=M
  57707. // #21683
  57708. @0
  57709. // #21684
  57710. A=D+A
  57711. // #21685
  57712. D=M
  57713. //^^ push_d_to_stack
  57714. // #21686
  57715. @SP
  57716. // #21687
  57717. A=M
  57718. // #21688
  57719. M=D
  57720. // #21689
  57721. @SP
  57722. // #21690
  57723. M=M+1
  57724. //vv push_d_to_stack
  57725. //vv push_from_ram(LCL, 0)
  57726. //
  57727. //// add
  57728. //^^ arith_binary_op(+)
  57729. //^^ pop_stack_to_d
  57730. // #21691
  57731. @SP
  57732. // #21692
  57733. M=M-1
  57734. // #21693
  57735. A=M
  57736. // #21694
  57737. D=M
  57738. //vv pop_stack_to_d
  57739. //^^ arith_d_with_stack_top(D+M)
  57740. // #21695
  57741. @R13
  57742. // #21696
  57743. M=D
  57744. //^^ pop_stack_to_d
  57745. // #21697
  57746. @SP
  57747. // #21698
  57748. M=M-1
  57749. // #21699
  57750. A=M
  57751. // #21700
  57752. D=M
  57753. //vv pop_stack_to_d
  57754. // #21701
  57755. @R13
  57756. // #21702
  57757. D=D+M
  57758. // #21703
  57759. @R13
  57760. // #21704
  57761. M=0
  57762. //vv arith_d_with_stack_top(D+M)
  57763. //^^ push_d_to_stack
  57764. // #21705
  57765. @SP
  57766. // #21706
  57767. A=M
  57768. // #21707
  57769. M=D
  57770. // #21708
  57771. @SP
  57772. // #21709
  57773. M=M+1
  57774. //vv push_d_to_stack
  57775. //vv arith_binary_op(+)
  57776. //
  57777. //// push argument 6
  57778. //^^ push_from_ram(ARG, 6)
  57779. // #21710
  57780. @ARG
  57781. // #21711
  57782. D=M
  57783. // #21712
  57784. @6
  57785. // #21713
  57786. A=D+A
  57787. // #21714
  57788. D=M
  57789. //^^ push_d_to_stack
  57790. // #21715
  57791. @SP
  57792. // #21716
  57793. A=M
  57794. // #21717
  57795. M=D
  57796. // #21718
  57797. @SP
  57798. // #21719
  57799. M=M+1
  57800. //vv push_d_to_stack
  57801. //vv push_from_ram(ARG, 6)
  57802. //
  57803. //// pop temp 0
  57804. //^^ pop_to_loc{5)
  57805. //^^ pop_stack_to_d
  57806. // #21720
  57807. @SP
  57808. // #21721
  57809. M=M-1
  57810. // #21722
  57811. A=M
  57812. // #21723
  57813. D=M
  57814. //vv pop_stack_to_d
  57815. // #21724
  57816. @5
  57817. // #21725
  57818. M=D
  57819. //vv pop_to_loc{5)
  57820. //
  57821. //// pop pointer 1
  57822. //^^ pop_to_loc{4)
  57823. //^^ pop_stack_to_d
  57824. // #21726
  57825. @SP
  57826. // #21727
  57827. M=M-1
  57828. // #21728
  57829. A=M
  57830. // #21729
  57831. D=M
  57832. //vv pop_stack_to_d
  57833. // #21730
  57834. @4
  57835. // #21731
  57836. M=D
  57837. //vv pop_to_loc{4)
  57838. //
  57839. //// push temp 0
  57840. //^^ push_from_loc(5)
  57841. // #21732
  57842. @5
  57843. // #21733
  57844. D=M
  57845. //^^ push_d_to_stack
  57846. // #21734
  57847. @SP
  57848. // #21735
  57849. A=M
  57850. // #21736
  57851. M=D
  57852. // #21737
  57853. @SP
  57854. // #21738
  57855. M=M+1
  57856. //vv push_d_to_stack
  57857. //vv push_from_loc(5)
  57858. //
  57859. //// pop that 0
  57860. //^^ pop_to_ram(THAT, 0)
  57861. // #21739
  57862. @THAT
  57863. // #21740
  57864. D=M
  57865. // #21741
  57866. @0
  57867. // #21742
  57868. D=D+A
  57869. // #21743
  57870. @R13
  57871. // #21744
  57872. M=D
  57873. //^^ pop_stack_to_d
  57874. // #21745
  57875. @SP
  57876. // #21746
  57877. M=M-1
  57878. // #21747
  57879. A=M
  57880. // #21748
  57881. D=M
  57882. //vv pop_stack_to_d
  57883. // #21749
  57884. @R13
  57885. // #21750
  57886. A=M
  57887. // #21751
  57888. M=D
  57889. // #21752
  57890. @R13
  57891. // #21753
  57892. M=0
  57893. //vv pop_to_ram(THAT, 0)
  57894. //
  57895. //// push constant 6
  57896. //^^ push_constant(6)
  57897. // #21754
  57898. @6
  57899. // #21755
  57900. D=A
  57901. //^^ push_d_to_stack
  57902. // #21756
  57903. @SP
  57904. // #21757
  57905. A=M
  57906. // #21758
  57907. M=D
  57908. // #21759
  57909. @SP
  57910. // #21760
  57911. M=M+1
  57912. //vv push_d_to_stack
  57913. //vv push_constant(6)
  57914. //
  57915. //// push local 0
  57916. //^^ push_from_ram(LCL, 0)
  57917. // #21761
  57918. @LCL
  57919. // #21762
  57920. D=M
  57921. // #21763
  57922. @0
  57923. // #21764
  57924. A=D+A
  57925. // #21765
  57926. D=M
  57927. //^^ push_d_to_stack
  57928. // #21766
  57929. @SP
  57930. // #21767
  57931. A=M
  57932. // #21768
  57933. M=D
  57934. // #21769
  57935. @SP
  57936. // #21770
  57937. M=M+1
  57938. //vv push_d_to_stack
  57939. //vv push_from_ram(LCL, 0)
  57940. //
  57941. //// add
  57942. //^^ arith_binary_op(+)
  57943. //^^ pop_stack_to_d
  57944. // #21771
  57945. @SP
  57946. // #21772
  57947. M=M-1
  57948. // #21773
  57949. A=M
  57950. // #21774
  57951. D=M
  57952. //vv pop_stack_to_d
  57953. //^^ arith_d_with_stack_top(D+M)
  57954. // #21775
  57955. @R13
  57956. // #21776
  57957. M=D
  57958. //^^ pop_stack_to_d
  57959. // #21777
  57960. @SP
  57961. // #21778
  57962. M=M-1
  57963. // #21779
  57964. A=M
  57965. // #21780
  57966. D=M
  57967. //vv pop_stack_to_d
  57968. // #21781
  57969. @R13
  57970. // #21782
  57971. D=D+M
  57972. // #21783
  57973. @R13
  57974. // #21784
  57975. M=0
  57976. //vv arith_d_with_stack_top(D+M)
  57977. //^^ push_d_to_stack
  57978. // #21785
  57979. @SP
  57980. // #21786
  57981. A=M
  57982. // #21787
  57983. M=D
  57984. // #21788
  57985. @SP
  57986. // #21789
  57987. M=M+1
  57988. //vv push_d_to_stack
  57989. //vv arith_binary_op(+)
  57990. //
  57991. //// push argument 7
  57992. //^^ push_from_ram(ARG, 7)
  57993. // #21790
  57994. @ARG
  57995. // #21791
  57996. D=M
  57997. // #21792
  57998. @7
  57999. // #21793
  58000. A=D+A
  58001. // #21794
  58002. D=M
  58003. //^^ push_d_to_stack
  58004. // #21795
  58005. @SP
  58006. // #21796
  58007. A=M
  58008. // #21797
  58009. M=D
  58010. // #21798
  58011. @SP
  58012. // #21799
  58013. M=M+1
  58014. //vv push_d_to_stack
  58015. //vv push_from_ram(ARG, 7)
  58016. //
  58017. //// pop temp 0
  58018. //^^ pop_to_loc{5)
  58019. //^^ pop_stack_to_d
  58020. // #21800
  58021. @SP
  58022. // #21801
  58023. M=M-1
  58024. // #21802
  58025. A=M
  58026. // #21803
  58027. D=M
  58028. //vv pop_stack_to_d
  58029. // #21804
  58030. @5
  58031. // #21805
  58032. M=D
  58033. //vv pop_to_loc{5)
  58034. //
  58035. //// pop pointer 1
  58036. //^^ pop_to_loc{4)
  58037. //^^ pop_stack_to_d
  58038. // #21806
  58039. @SP
  58040. // #21807
  58041. M=M-1
  58042. // #21808
  58043. A=M
  58044. // #21809
  58045. D=M
  58046. //vv pop_stack_to_d
  58047. // #21810
  58048. @4
  58049. // #21811
  58050. M=D
  58051. //vv pop_to_loc{4)
  58052. //
  58053. //// push temp 0
  58054. //^^ push_from_loc(5)
  58055. // #21812
  58056. @5
  58057. // #21813
  58058. D=M
  58059. //^^ push_d_to_stack
  58060. // #21814
  58061. @SP
  58062. // #21815
  58063. A=M
  58064. // #21816
  58065. M=D
  58066. // #21817
  58067. @SP
  58068. // #21818
  58069. M=M+1
  58070. //vv push_d_to_stack
  58071. //vv push_from_loc(5)
  58072. //
  58073. //// pop that 0
  58074. //^^ pop_to_ram(THAT, 0)
  58075. // #21819
  58076. @THAT
  58077. // #21820
  58078. D=M
  58079. // #21821
  58080. @0
  58081. // #21822
  58082. D=D+A
  58083. // #21823
  58084. @R13
  58085. // #21824
  58086. M=D
  58087. //^^ pop_stack_to_d
  58088. // #21825
  58089. @SP
  58090. // #21826
  58091. M=M-1
  58092. // #21827
  58093. A=M
  58094. // #21828
  58095. D=M
  58096. //vv pop_stack_to_d
  58097. // #21829
  58098. @R13
  58099. // #21830
  58100. A=M
  58101. // #21831
  58102. M=D
  58103. // #21832
  58104. @R13
  58105. // #21833
  58106. M=0
  58107. //vv pop_to_ram(THAT, 0)
  58108. //
  58109. //// push constant 7
  58110. //^^ push_constant(7)
  58111. // #21834
  58112. @7
  58113. // #21835
  58114. D=A
  58115. //^^ push_d_to_stack
  58116. // #21836
  58117. @SP
  58118. // #21837
  58119. A=M
  58120. // #21838
  58121. M=D
  58122. // #21839
  58123. @SP
  58124. // #21840
  58125. M=M+1
  58126. //vv push_d_to_stack
  58127. //vv push_constant(7)
  58128. //
  58129. //// push local 0
  58130. //^^ push_from_ram(LCL, 0)
  58131. // #21841
  58132. @LCL
  58133. // #21842
  58134. D=M
  58135. // #21843
  58136. @0
  58137. // #21844
  58138. A=D+A
  58139. // #21845
  58140. D=M
  58141. //^^ push_d_to_stack
  58142. // #21846
  58143. @SP
  58144. // #21847
  58145. A=M
  58146. // #21848
  58147. M=D
  58148. // #21849
  58149. @SP
  58150. // #21850
  58151. M=M+1
  58152. //vv push_d_to_stack
  58153. //vv push_from_ram(LCL, 0)
  58154. //
  58155. //// add
  58156. //^^ arith_binary_op(+)
  58157. //^^ pop_stack_to_d
  58158. // #21851
  58159. @SP
  58160. // #21852
  58161. M=M-1
  58162. // #21853
  58163. A=M
  58164. // #21854
  58165. D=M
  58166. //vv pop_stack_to_d
  58167. //^^ arith_d_with_stack_top(D+M)
  58168. // #21855
  58169. @R13
  58170. // #21856
  58171. M=D
  58172. //^^ pop_stack_to_d
  58173. // #21857
  58174. @SP
  58175. // #21858
  58176. M=M-1
  58177. // #21859
  58178. A=M
  58179. // #21860
  58180. D=M
  58181. //vv pop_stack_to_d
  58182. // #21861
  58183. @R13
  58184. // #21862
  58185. D=D+M
  58186. // #21863
  58187. @R13
  58188. // #21864
  58189. M=0
  58190. //vv arith_d_with_stack_top(D+M)
  58191. //^^ push_d_to_stack
  58192. // #21865
  58193. @SP
  58194. // #21866
  58195. A=M
  58196. // #21867
  58197. M=D
  58198. // #21868
  58199. @SP
  58200. // #21869
  58201. M=M+1
  58202. //vv push_d_to_stack
  58203. //vv arith_binary_op(+)
  58204. //
  58205. //// push argument 8
  58206. //^^ push_from_ram(ARG, 8)
  58207. // #21870
  58208. @ARG
  58209. // #21871
  58210. D=M
  58211. // #21872
  58212. @8
  58213. // #21873
  58214. A=D+A
  58215. // #21874
  58216. D=M
  58217. //^^ push_d_to_stack
  58218. // #21875
  58219. @SP
  58220. // #21876
  58221. A=M
  58222. // #21877
  58223. M=D
  58224. // #21878
  58225. @SP
  58226. // #21879
  58227. M=M+1
  58228. //vv push_d_to_stack
  58229. //vv push_from_ram(ARG, 8)
  58230. //
  58231. //// pop temp 0
  58232. //^^ pop_to_loc{5)
  58233. //^^ pop_stack_to_d
  58234. // #21880
  58235. @SP
  58236. // #21881
  58237. M=M-1
  58238. // #21882
  58239. A=M
  58240. // #21883
  58241. D=M
  58242. //vv pop_stack_to_d
  58243. // #21884
  58244. @5
  58245. // #21885
  58246. M=D
  58247. //vv pop_to_loc{5)
  58248. //
  58249. //// pop pointer 1
  58250. //^^ pop_to_loc{4)
  58251. //^^ pop_stack_to_d
  58252. // #21886
  58253. @SP
  58254. // #21887
  58255. M=M-1
  58256. // #21888
  58257. A=M
  58258. // #21889
  58259. D=M
  58260. //vv pop_stack_to_d
  58261. // #21890
  58262. @4
  58263. // #21891
  58264. M=D
  58265. //vv pop_to_loc{4)
  58266. //
  58267. //// push temp 0
  58268. //^^ push_from_loc(5)
  58269. // #21892
  58270. @5
  58271. // #21893
  58272. D=M
  58273. //^^ push_d_to_stack
  58274. // #21894
  58275. @SP
  58276. // #21895
  58277. A=M
  58278. // #21896
  58279. M=D
  58280. // #21897
  58281. @SP
  58282. // #21898
  58283. M=M+1
  58284. //vv push_d_to_stack
  58285. //vv push_from_loc(5)
  58286. //
  58287. //// pop that 0
  58288. //^^ pop_to_ram(THAT, 0)
  58289. // #21899
  58290. @THAT
  58291. // #21900
  58292. D=M
  58293. // #21901
  58294. @0
  58295. // #21902
  58296. D=D+A
  58297. // #21903
  58298. @R13
  58299. // #21904
  58300. M=D
  58301. //^^ pop_stack_to_d
  58302. // #21905
  58303. @SP
  58304. // #21906
  58305. M=M-1
  58306. // #21907
  58307. A=M
  58308. // #21908
  58309. D=M
  58310. //vv pop_stack_to_d
  58311. // #21909
  58312. @R13
  58313. // #21910
  58314. A=M
  58315. // #21911
  58316. M=D
  58317. // #21912
  58318. @R13
  58319. // #21913
  58320. M=0
  58321. //vv pop_to_ram(THAT, 0)
  58322. //
  58323. //// push constant 8
  58324. //^^ push_constant(8)
  58325. // #21914
  58326. @8
  58327. // #21915
  58328. D=A
  58329. //^^ push_d_to_stack
  58330. // #21916
  58331. @SP
  58332. // #21917
  58333. A=M
  58334. // #21918
  58335. M=D
  58336. // #21919
  58337. @SP
  58338. // #21920
  58339. M=M+1
  58340. //vv push_d_to_stack
  58341. //vv push_constant(8)
  58342. //
  58343. //// push local 0
  58344. //^^ push_from_ram(LCL, 0)
  58345. // #21921
  58346. @LCL
  58347. // #21922
  58348. D=M
  58349. // #21923
  58350. @0
  58351. // #21924
  58352. A=D+A
  58353. // #21925
  58354. D=M
  58355. //^^ push_d_to_stack
  58356. // #21926
  58357. @SP
  58358. // #21927
  58359. A=M
  58360. // #21928
  58361. M=D
  58362. // #21929
  58363. @SP
  58364. // #21930
  58365. M=M+1
  58366. //vv push_d_to_stack
  58367. //vv push_from_ram(LCL, 0)
  58368. //
  58369. //// add
  58370. //^^ arith_binary_op(+)
  58371. //^^ pop_stack_to_d
  58372. // #21931
  58373. @SP
  58374. // #21932
  58375. M=M-1
  58376. // #21933
  58377. A=M
  58378. // #21934
  58379. D=M
  58380. //vv pop_stack_to_d
  58381. //^^ arith_d_with_stack_top(D+M)
  58382. // #21935
  58383. @R13
  58384. // #21936
  58385. M=D
  58386. //^^ pop_stack_to_d
  58387. // #21937
  58388. @SP
  58389. // #21938
  58390. M=M-1
  58391. // #21939
  58392. A=M
  58393. // #21940
  58394. D=M
  58395. //vv pop_stack_to_d
  58396. // #21941
  58397. @R13
  58398. // #21942
  58399. D=D+M
  58400. // #21943
  58401. @R13
  58402. // #21944
  58403. M=0
  58404. //vv arith_d_with_stack_top(D+M)
  58405. //^^ push_d_to_stack
  58406. // #21945
  58407. @SP
  58408. // #21946
  58409. A=M
  58410. // #21947
  58411. M=D
  58412. // #21948
  58413. @SP
  58414. // #21949
  58415. M=M+1
  58416. //vv push_d_to_stack
  58417. //vv arith_binary_op(+)
  58418. //
  58419. //// push argument 9
  58420. //^^ push_from_ram(ARG, 9)
  58421. // #21950
  58422. @ARG
  58423. // #21951
  58424. D=M
  58425. // #21952
  58426. @9
  58427. // #21953
  58428. A=D+A
  58429. // #21954
  58430. D=M
  58431. //^^ push_d_to_stack
  58432. // #21955
  58433. @SP
  58434. // #21956
  58435. A=M
  58436. // #21957
  58437. M=D
  58438. // #21958
  58439. @SP
  58440. // #21959
  58441. M=M+1
  58442. //vv push_d_to_stack
  58443. //vv push_from_ram(ARG, 9)
  58444. //
  58445. //// pop temp 0
  58446. //^^ pop_to_loc{5)
  58447. //^^ pop_stack_to_d
  58448. // #21960
  58449. @SP
  58450. // #21961
  58451. M=M-1
  58452. // #21962
  58453. A=M
  58454. // #21963
  58455. D=M
  58456. //vv pop_stack_to_d
  58457. // #21964
  58458. @5
  58459. // #21965
  58460. M=D
  58461. //vv pop_to_loc{5)
  58462. //
  58463. //// pop pointer 1
  58464. //^^ pop_to_loc{4)
  58465. //^^ pop_stack_to_d
  58466. // #21966
  58467. @SP
  58468. // #21967
  58469. M=M-1
  58470. // #21968
  58471. A=M
  58472. // #21969
  58473. D=M
  58474. //vv pop_stack_to_d
  58475. // #21970
  58476. @4
  58477. // #21971
  58478. M=D
  58479. //vv pop_to_loc{4)
  58480. //
  58481. //// push temp 0
  58482. //^^ push_from_loc(5)
  58483. // #21972
  58484. @5
  58485. // #21973
  58486. D=M
  58487. //^^ push_d_to_stack
  58488. // #21974
  58489. @SP
  58490. // #21975
  58491. A=M
  58492. // #21976
  58493. M=D
  58494. // #21977
  58495. @SP
  58496. // #21978
  58497. M=M+1
  58498. //vv push_d_to_stack
  58499. //vv push_from_loc(5)
  58500. //
  58501. //// pop that 0
  58502. //^^ pop_to_ram(THAT, 0)
  58503. // #21979
  58504. @THAT
  58505. // #21980
  58506. D=M
  58507. // #21981
  58508. @0
  58509. // #21982
  58510. D=D+A
  58511. // #21983
  58512. @R13
  58513. // #21984
  58514. M=D
  58515. //^^ pop_stack_to_d
  58516. // #21985
  58517. @SP
  58518. // #21986
  58519. M=M-1
  58520. // #21987
  58521. A=M
  58522. // #21988
  58523. D=M
  58524. //vv pop_stack_to_d
  58525. // #21989
  58526. @R13
  58527. // #21990
  58528. A=M
  58529. // #21991
  58530. M=D
  58531. // #21992
  58532. @R13
  58533. // #21993
  58534. M=0
  58535. //vv pop_to_ram(THAT, 0)
  58536. //
  58537. //// push constant 9
  58538. //^^ push_constant(9)
  58539. // #21994
  58540. @9
  58541. // #21995
  58542. D=A
  58543. //^^ push_d_to_stack
  58544. // #21996
  58545. @SP
  58546. // #21997
  58547. A=M
  58548. // #21998
  58549. M=D
  58550. // #21999
  58551. @SP
  58552. // #22000
  58553. M=M+1
  58554. //vv push_d_to_stack
  58555. //vv push_constant(9)
  58556. //
  58557. //// push local 0
  58558. //^^ push_from_ram(LCL, 0)
  58559. // #22001
  58560. @LCL
  58561. // #22002
  58562. D=M
  58563. // #22003
  58564. @0
  58565. // #22004
  58566. A=D+A
  58567. // #22005
  58568. D=M
  58569. //^^ push_d_to_stack
  58570. // #22006
  58571. @SP
  58572. // #22007
  58573. A=M
  58574. // #22008
  58575. M=D
  58576. // #22009
  58577. @SP
  58578. // #22010
  58579. M=M+1
  58580. //vv push_d_to_stack
  58581. //vv push_from_ram(LCL, 0)
  58582. //
  58583. //// add
  58584. //^^ arith_binary_op(+)
  58585. //^^ pop_stack_to_d
  58586. // #22011
  58587. @SP
  58588. // #22012
  58589. M=M-1
  58590. // #22013
  58591. A=M
  58592. // #22014
  58593. D=M
  58594. //vv pop_stack_to_d
  58595. //^^ arith_d_with_stack_top(D+M)
  58596. // #22015
  58597. @R13
  58598. // #22016
  58599. M=D
  58600. //^^ pop_stack_to_d
  58601. // #22017
  58602. @SP
  58603. // #22018
  58604. M=M-1
  58605. // #22019
  58606. A=M
  58607. // #22020
  58608. D=M
  58609. //vv pop_stack_to_d
  58610. // #22021
  58611. @R13
  58612. // #22022
  58613. D=D+M
  58614. // #22023
  58615. @R13
  58616. // #22024
  58617. M=0
  58618. //vv arith_d_with_stack_top(D+M)
  58619. //^^ push_d_to_stack
  58620. // #22025
  58621. @SP
  58622. // #22026
  58623. A=M
  58624. // #22027
  58625. M=D
  58626. // #22028
  58627. @SP
  58628. // #22029
  58629. M=M+1
  58630. //vv push_d_to_stack
  58631. //vv arith_binary_op(+)
  58632. //
  58633. //// push argument 10
  58634. //^^ push_from_ram(ARG, 10)
  58635. // #22030
  58636. @ARG
  58637. // #22031
  58638. D=M
  58639. // #22032
  58640. @10
  58641. // #22033
  58642. A=D+A
  58643. // #22034
  58644. D=M
  58645. //^^ push_d_to_stack
  58646. // #22035
  58647. @SP
  58648. // #22036
  58649. A=M
  58650. // #22037
  58651. M=D
  58652. // #22038
  58653. @SP
  58654. // #22039
  58655. M=M+1
  58656. //vv push_d_to_stack
  58657. //vv push_from_ram(ARG, 10)
  58658. //
  58659. //// pop temp 0
  58660. //^^ pop_to_loc{5)
  58661. //^^ pop_stack_to_d
  58662. // #22040
  58663. @SP
  58664. // #22041
  58665. M=M-1
  58666. // #22042
  58667. A=M
  58668. // #22043
  58669. D=M
  58670. //vv pop_stack_to_d
  58671. // #22044
  58672. @5
  58673. // #22045
  58674. M=D
  58675. //vv pop_to_loc{5)
  58676. //
  58677. //// pop pointer 1
  58678. //^^ pop_to_loc{4)
  58679. //^^ pop_stack_to_d
  58680. // #22046
  58681. @SP
  58682. // #22047
  58683. M=M-1
  58684. // #22048
  58685. A=M
  58686. // #22049
  58687. D=M
  58688. //vv pop_stack_to_d
  58689. // #22050
  58690. @4
  58691. // #22051
  58692. M=D
  58693. //vv pop_to_loc{4)
  58694. //
  58695. //// push temp 0
  58696. //^^ push_from_loc(5)
  58697. // #22052
  58698. @5
  58699. // #22053
  58700. D=M
  58701. //^^ push_d_to_stack
  58702. // #22054
  58703. @SP
  58704. // #22055
  58705. A=M
  58706. // #22056
  58707. M=D
  58708. // #22057
  58709. @SP
  58710. // #22058
  58711. M=M+1
  58712. //vv push_d_to_stack
  58713. //vv push_from_loc(5)
  58714. //
  58715. //// pop that 0
  58716. //^^ pop_to_ram(THAT, 0)
  58717. // #22059
  58718. @THAT
  58719. // #22060
  58720. D=M
  58721. // #22061
  58722. @0
  58723. // #22062
  58724. D=D+A
  58725. // #22063
  58726. @R13
  58727. // #22064
  58728. M=D
  58729. //^^ pop_stack_to_d
  58730. // #22065
  58731. @SP
  58732. // #22066
  58733. M=M-1
  58734. // #22067
  58735. A=M
  58736. // #22068
  58737. D=M
  58738. //vv pop_stack_to_d
  58739. // #22069
  58740. @R13
  58741. // #22070
  58742. A=M
  58743. // #22071
  58744. M=D
  58745. // #22072
  58746. @R13
  58747. // #22073
  58748. M=0
  58749. //vv pop_to_ram(THAT, 0)
  58750. //
  58751. //// push constant 10
  58752. //^^ push_constant(10)
  58753. // #22074
  58754. @10
  58755. // #22075
  58756. D=A
  58757. //^^ push_d_to_stack
  58758. // #22076
  58759. @SP
  58760. // #22077
  58761. A=M
  58762. // #22078
  58763. M=D
  58764. // #22079
  58765. @SP
  58766. // #22080
  58767. M=M+1
  58768. //vv push_d_to_stack
  58769. //vv push_constant(10)
  58770. //
  58771. //// push local 0
  58772. //^^ push_from_ram(LCL, 0)
  58773. // #22081
  58774. @LCL
  58775. // #22082
  58776. D=M
  58777. // #22083
  58778. @0
  58779. // #22084
  58780. A=D+A
  58781. // #22085
  58782. D=M
  58783. //^^ push_d_to_stack
  58784. // #22086
  58785. @SP
  58786. // #22087
  58787. A=M
  58788. // #22088
  58789. M=D
  58790. // #22089
  58791. @SP
  58792. // #22090
  58793. M=M+1
  58794. //vv push_d_to_stack
  58795. //vv push_from_ram(LCL, 0)
  58796. //
  58797. //// add
  58798. //^^ arith_binary_op(+)
  58799. //^^ pop_stack_to_d
  58800. // #22091
  58801. @SP
  58802. // #22092
  58803. M=M-1
  58804. // #22093
  58805. A=M
  58806. // #22094
  58807. D=M
  58808. //vv pop_stack_to_d
  58809. //^^ arith_d_with_stack_top(D+M)
  58810. // #22095
  58811. @R13
  58812. // #22096
  58813. M=D
  58814. //^^ pop_stack_to_d
  58815. // #22097
  58816. @SP
  58817. // #22098
  58818. M=M-1
  58819. // #22099
  58820. A=M
  58821. // #22100
  58822. D=M
  58823. //vv pop_stack_to_d
  58824. // #22101
  58825. @R13
  58826. // #22102
  58827. D=D+M
  58828. // #22103
  58829. @R13
  58830. // #22104
  58831. M=0
  58832. //vv arith_d_with_stack_top(D+M)
  58833. //^^ push_d_to_stack
  58834. // #22105
  58835. @SP
  58836. // #22106
  58837. A=M
  58838. // #22107
  58839. M=D
  58840. // #22108
  58841. @SP
  58842. // #22109
  58843. M=M+1
  58844. //vv push_d_to_stack
  58845. //vv arith_binary_op(+)
  58846. //
  58847. //// push argument 11
  58848. //^^ push_from_ram(ARG, 11)
  58849. // #22110
  58850. @ARG
  58851. // #22111
  58852. D=M
  58853. // #22112
  58854. @11
  58855. // #22113
  58856. A=D+A
  58857. // #22114
  58858. D=M
  58859. //^^ push_d_to_stack
  58860. // #22115
  58861. @SP
  58862. // #22116
  58863. A=M
  58864. // #22117
  58865. M=D
  58866. // #22118
  58867. @SP
  58868. // #22119
  58869. M=M+1
  58870. //vv push_d_to_stack
  58871. //vv push_from_ram(ARG, 11)
  58872. //
  58873. //// pop temp 0
  58874. //^^ pop_to_loc{5)
  58875. //^^ pop_stack_to_d
  58876. // #22120
  58877. @SP
  58878. // #22121
  58879. M=M-1
  58880. // #22122
  58881. A=M
  58882. // #22123
  58883. D=M
  58884. //vv pop_stack_to_d
  58885. // #22124
  58886. @5
  58887. // #22125
  58888. M=D
  58889. //vv pop_to_loc{5)
  58890. //
  58891. //// pop pointer 1
  58892. //^^ pop_to_loc{4)
  58893. //^^ pop_stack_to_d
  58894. // #22126
  58895. @SP
  58896. // #22127
  58897. M=M-1
  58898. // #22128
  58899. A=M
  58900. // #22129
  58901. D=M
  58902. //vv pop_stack_to_d
  58903. // #22130
  58904. @4
  58905. // #22131
  58906. M=D
  58907. //vv pop_to_loc{4)
  58908. //
  58909. //// push temp 0
  58910. //^^ push_from_loc(5)
  58911. // #22132
  58912. @5
  58913. // #22133
  58914. D=M
  58915. //^^ push_d_to_stack
  58916. // #22134
  58917. @SP
  58918. // #22135
  58919. A=M
  58920. // #22136
  58921. M=D
  58922. // #22137
  58923. @SP
  58924. // #22138
  58925. M=M+1
  58926. //vv push_d_to_stack
  58927. //vv push_from_loc(5)
  58928. //
  58929. //// pop that 0
  58930. //^^ pop_to_ram(THAT, 0)
  58931. // #22139
  58932. @THAT
  58933. // #22140
  58934. D=M
  58935. // #22141
  58936. @0
  58937. // #22142
  58938. D=D+A
  58939. // #22143
  58940. @R13
  58941. // #22144
  58942. M=D
  58943. //^^ pop_stack_to_d
  58944. // #22145
  58945. @SP
  58946. // #22146
  58947. M=M-1
  58948. // #22147
  58949. A=M
  58950. // #22148
  58951. D=M
  58952. //vv pop_stack_to_d
  58953. // #22149
  58954. @R13
  58955. // #22150
  58956. A=M
  58957. // #22151
  58958. M=D
  58959. // #22152
  58960. @R13
  58961. // #22153
  58962. M=0
  58963. //vv pop_to_ram(THAT, 0)
  58964. //
  58965. //// push constant 0
  58966. //^^ push_constant(0)
  58967. // #22154
  58968. @0
  58969. // #22155
  58970. D=A
  58971. //^^ push_d_to_stack
  58972. // #22156
  58973. @SP
  58974. // #22157
  58975. A=M
  58976. // #22158
  58977. M=D
  58978. // #22159
  58979. @SP
  58980. // #22160
  58981. M=M+1
  58982. //vv push_d_to_stack
  58983. //vv push_constant(0)
  58984. //
  58985. //// return
  58986. // #22161
  58987. @LCL
  58988. // #22162
  58989. D=M
  58990. // #22163
  58991. @R14
  58992. // #22164
  58993. M=D //R14=LCL
  58994. // #22165
  58995. @5
  58996. // #22166
  58997. A=D-A
  58998. // #22167
  58999. D=M
  59000. // #22168
  59001. @R15
  59002. // #22169
  59003. M=D //R15=*(LCL-5)
  59004. //^^ pop_stack_to_d
  59005. // #22170
  59006. @SP
  59007. // #22171
  59008. M=M-1
  59009. // #22172
  59010. A=M
  59011. // #22173
  59012. D=M
  59013. //vv pop_stack_to_d
  59014. // #22174
  59015. @ARG
  59016. // #22175
  59017. A=M
  59018. // #22176
  59019. M=D //*ARG = pop()
  59020. // #22177
  59021. @ARG
  59022. // #22178
  59023. D=M
  59024. // #22179
  59025. @SP
  59026. // #22180
  59027. M=D+1 //SP=ARG+1
  59028. // #22181
  59029. @R14
  59030. // #22182
  59031. AM=M-1
  59032. // #22183
  59033. D=M
  59034. // #22184
  59035. @THAT
  59036. // #22185
  59037. M=D //THAT = *(--R14)
  59038. // #22186
  59039. @R14
  59040. // #22187
  59041. AM=M-1
  59042. // #22188
  59043. D=M
  59044. // #22189
  59045. @THIS
  59046. // #22190
  59047. M=D //THIS = *(--R14)
  59048. // #22191
  59049. @R14
  59050. // #22192
  59051. AM=M-1
  59052. // #22193
  59053. D=M
  59054. // #22194
  59055. @ARG
  59056. // #22195
  59057. M=D //ARG = *(--R14)
  59058. // #22196
  59059. @R14
  59060. // #22197
  59061. AM=M-1
  59062. // #22198
  59063. D=M
  59064. // #22199
  59065. @LCL
  59066. // #22200
  59067. M=D //LCL = *(--R14)
  59068. // #22201
  59069. @R15
  59070. // #22202
  59071. A=M
  59072. // #22203
  59073. 0;JMP //goto *R15
  59074. //
  59075. //// function Output.createShiftedMap 4
  59076. (Output.createShiftedMap)
  59077. // #22204
  59078. D=0
  59079. //^^ push_d_to_stack
  59080. // #22205
  59081. @SP
  59082. // #22206
  59083. A=M
  59084. // #22207
  59085. M=D
  59086. // #22208
  59087. @SP
  59088. // #22209
  59089. M=M+1
  59090. //vv push_d_to_stack
  59091. // #22210
  59092. D=0
  59093. //^^ push_d_to_stack
  59094. // #22211
  59095. @SP
  59096. // #22212
  59097. A=M
  59098. // #22213
  59099. M=D
  59100. // #22214
  59101. @SP
  59102. // #22215
  59103. M=M+1
  59104. //vv push_d_to_stack
  59105. // #22216
  59106. D=0
  59107. //^^ push_d_to_stack
  59108. // #22217
  59109. @SP
  59110. // #22218
  59111. A=M
  59112. // #22219
  59113. M=D
  59114. // #22220
  59115. @SP
  59116. // #22221
  59117. M=M+1
  59118. //vv push_d_to_stack
  59119. // #22222
  59120. D=0
  59121. //^^ push_d_to_stack
  59122. // #22223
  59123. @SP
  59124. // #22224
  59125. A=M
  59126. // #22225
  59127. M=D
  59128. // #22226
  59129. @SP
  59130. // #22227
  59131. M=M+1
  59132. //vv push_d_to_stack
  59133. //
  59134. //// push constant 127
  59135. //^^ push_constant(127)
  59136. // #22228
  59137. @127
  59138. // #22229
  59139. D=A
  59140. //^^ push_d_to_stack
  59141. // #22230
  59142. @SP
  59143. // #22231
  59144. A=M
  59145. // #22232
  59146. M=D
  59147. // #22233
  59148. @SP
  59149. // #22234
  59150. M=M+1
  59151. //vv push_d_to_stack
  59152. //vv push_constant(127)
  59153. //
  59154. //// call Array.new 1
  59155. //^^ push_constant(RET_ADDR_172)
  59156. // #22235
  59157. @RET_ADDR_172
  59158. // #22236
  59159. D=A
  59160. //^^ push_d_to_stack
  59161. // #22237
  59162. @SP
  59163. // #22238
  59164. A=M
  59165. // #22239
  59166. M=D
  59167. // #22240
  59168. @SP
  59169. // #22241
  59170. M=M+1
  59171. //vv push_d_to_stack
  59172. //vv push_constant(RET_ADDR_172)
  59173. //push return-address
  59174. // #22242
  59175. @LCL
  59176. // #22243
  59177. D=M
  59178. //^^ push_d_to_stack
  59179. // #22244
  59180. @SP
  59181. // #22245
  59182. A=M
  59183. // #22246
  59184. M=D
  59185. // #22247
  59186. @SP
  59187. // #22248
  59188. M=M+1
  59189. //vv push_d_to_stack
  59190. //push LCL
  59191. // #22249
  59192. @ARG
  59193. // #22250
  59194. D=M
  59195. //^^ push_d_to_stack
  59196. // #22251
  59197. @SP
  59198. // #22252
  59199. A=M
  59200. // #22253
  59201. M=D
  59202. // #22254
  59203. @SP
  59204. // #22255
  59205. M=M+1
  59206. //vv push_d_to_stack
  59207. //push ARG
  59208. // #22256
  59209. @THIS
  59210. // #22257
  59211. D=M
  59212. //^^ push_d_to_stack
  59213. // #22258
  59214. @SP
  59215. // #22259
  59216. A=M
  59217. // #22260
  59218. M=D
  59219. // #22261
  59220. @SP
  59221. // #22262
  59222. M=M+1
  59223. //vv push_d_to_stack
  59224. //push THIS
  59225. // #22263
  59226. @THAT
  59227. // #22264
  59228. D=M
  59229. //^^ push_d_to_stack
  59230. // #22265
  59231. @SP
  59232. // #22266
  59233. A=M
  59234. // #22267
  59235. M=D
  59236. // #22268
  59237. @SP
  59238. // #22269
  59239. M=M+1
  59240. //vv push_d_to_stack
  59241. //push THAT
  59242. // #22270
  59243. @SP
  59244. // #22271
  59245. D=M
  59246. // #22272
  59247. @ARG
  59248. // #22273
  59249. M=D
  59250. // #22274
  59251. @6
  59252. // #22275
  59253. D=A
  59254. // #22276
  59255. @ARG
  59256. // #22277
  59257. M=M-D // ARG = SP - args - 5
  59258. // #22278
  59259. @SP
  59260. // #22279
  59261. D=M
  59262. // #22280
  59263. @LCL
  59264. // #22281
  59265. M=D // LCL = SP
  59266. // #22282
  59267. @Array.new
  59268. // #22283
  59269. 0;JMP
  59270. (RET_ADDR_172)
  59271. //
  59272. //// pop static 6
  59273. //^^ pop_to_loc{Output.vm.6)
  59274. //^^ pop_stack_to_d
  59275. // #22284
  59276. @SP
  59277. // #22285
  59278. M=M-1
  59279. // #22286
  59280. A=M
  59281. // #22287
  59282. D=M
  59283. //vv pop_stack_to_d
  59284. // #22288
  59285. @Output.vm.6
  59286. // #22289
  59287. M=D
  59288. //vv pop_to_loc{Output.vm.6)
  59289. //
  59290. //// push constant 0
  59291. //^^ push_constant(0)
  59292. // #22290
  59293. @0
  59294. // #22291
  59295. D=A
  59296. //^^ push_d_to_stack
  59297. // #22292
  59298. @SP
  59299. // #22293
  59300. A=M
  59301. // #22294
  59302. M=D
  59303. // #22295
  59304. @SP
  59305. // #22296
  59306. M=M+1
  59307. //vv push_d_to_stack
  59308. //vv push_constant(0)
  59309. //
  59310. //// pop local 2
  59311. //^^ pop_to_ram(LCL, 2)
  59312. // #22297
  59313. @LCL
  59314. // #22298
  59315. D=M
  59316. // #22299
  59317. @2
  59318. // #22300
  59319. D=D+A
  59320. // #22301
  59321. @R13
  59322. // #22302
  59323. M=D
  59324. //^^ pop_stack_to_d
  59325. // #22303
  59326. @SP
  59327. // #22304
  59328. M=M-1
  59329. // #22305
  59330. A=M
  59331. // #22306
  59332. D=M
  59333. //vv pop_stack_to_d
  59334. // #22307
  59335. @R13
  59336. // #22308
  59337. A=M
  59338. // #22309
  59339. M=D
  59340. // #22310
  59341. @R13
  59342. // #22311
  59343. M=0
  59344. //vv pop_to_ram(LCL, 2)
  59345. //
  59346. //// label WHILE_EXP0
  59347. (Output.createShiftedMap$WHILE_EXP0)
  59348. //
  59349. //// push local 2
  59350. //^^ push_from_ram(LCL, 2)
  59351. // #22312
  59352. @LCL
  59353. // #22313
  59354. D=M
  59355. // #22314
  59356. @2
  59357. // #22315
  59358. A=D+A
  59359. // #22316
  59360. D=M
  59361. //^^ push_d_to_stack
  59362. // #22317
  59363. @SP
  59364. // #22318
  59365. A=M
  59366. // #22319
  59367. M=D
  59368. // #22320
  59369. @SP
  59370. // #22321
  59371. M=M+1
  59372. //vv push_d_to_stack
  59373. //vv push_from_ram(LCL, 2)
  59374. //
  59375. //// push constant 127
  59376. //^^ push_constant(127)
  59377. // #22322
  59378. @127
  59379. // #22323
  59380. D=A
  59381. //^^ push_d_to_stack
  59382. // #22324
  59383. @SP
  59384. // #22325
  59385. A=M
  59386. // #22326
  59387. M=D
  59388. // #22327
  59389. @SP
  59390. // #22328
  59391. M=M+1
  59392. //vv push_d_to_stack
  59393. //vv push_constant(127)
  59394. //
  59395. //// lt
  59396. //^^ arith_cmp_op(JLT)
  59397. //^^ pop_stack_to_d
  59398. // #22329
  59399. @SP
  59400. // #22330
  59401. M=M-1
  59402. // #22331
  59403. A=M
  59404. // #22332
  59405. D=M
  59406. //vv pop_stack_to_d
  59407. //^^ arith_d_with_stack_top(D-M)
  59408. // #22333
  59409. @R13
  59410. // #22334
  59411. M=D
  59412. //^^ pop_stack_to_d
  59413. // #22335
  59414. @SP
  59415. // #22336
  59416. M=M-1
  59417. // #22337
  59418. A=M
  59419. // #22338
  59420. D=M
  59421. //vv pop_stack_to_d
  59422. // #22339
  59423. @R13
  59424. // #22340
  59425. D=D-M
  59426. // #22341
  59427. @R13
  59428. // #22342
  59429. M=0
  59430. //vv arith_d_with_stack_top(D-M)
  59431. // #22343
  59432. @PUT_TRUE_173
  59433. // #22344
  59434. D;JLT
  59435. // #22345
  59436. @R13
  59437. // #22346
  59438. M=0
  59439. // #22347
  59440. @CONT_173
  59441. // #22348
  59442. 0;JMP
  59443. (PUT_TRUE_173)
  59444. // #22349
  59445. @R13
  59446. // #22350
  59447. M=-1
  59448. (CONT_173)
  59449. // #22351
  59450. @R13
  59451. // #22352
  59452. D=M
  59453. // #22353
  59454. @R13
  59455. // #22354
  59456. M=0
  59457. //^^ push_d_to_stack
  59458. // #22355
  59459. @SP
  59460. // #22356
  59461. A=M
  59462. // #22357
  59463. M=D
  59464. // #22358
  59465. @SP
  59466. // #22359
  59467. M=M+1
  59468. //vv push_d_to_stack
  59469. //vv arith_cmp_op(JLT)
  59470. //
  59471. //// not
  59472. //^^ arith_unary_op(!)
  59473. //^^ pop_stack_to_d
  59474. // #22360
  59475. @SP
  59476. // #22361
  59477. M=M-1
  59478. // #22362
  59479. A=M
  59480. // #22363
  59481. D=M
  59482. //vv pop_stack_to_d
  59483. // #22364
  59484. D=!D
  59485. //^^ push_d_to_stack
  59486. // #22365
  59487. @SP
  59488. // #22366
  59489. A=M
  59490. // #22367
  59491. M=D
  59492. // #22368
  59493. @SP
  59494. // #22369
  59495. M=M+1
  59496. //vv push_d_to_stack
  59497. //vv arith_unary_op(!)
  59498. //
  59499. //// if-goto WHILE_END0
  59500. //^^ pop_stack_to_d
  59501. // #22370
  59502. @SP
  59503. // #22371
  59504. M=M-1
  59505. // #22372
  59506. A=M
  59507. // #22373
  59508. D=M
  59509. //vv pop_stack_to_d
  59510. // #22374
  59511. @Output.createShiftedMap$WHILE_END0
  59512. // #22375
  59513. D;JNE
  59514. //
  59515. //// push local 2
  59516. //^^ push_from_ram(LCL, 2)
  59517. // #22376
  59518. @LCL
  59519. // #22377
  59520. D=M
  59521. // #22378
  59522. @2
  59523. // #22379
  59524. A=D+A
  59525. // #22380
  59526. D=M
  59527. //^^ push_d_to_stack
  59528. // #22381
  59529. @SP
  59530. // #22382
  59531. A=M
  59532. // #22383
  59533. M=D
  59534. // #22384
  59535. @SP
  59536. // #22385
  59537. M=M+1
  59538. //vv push_d_to_stack
  59539. //vv push_from_ram(LCL, 2)
  59540. //
  59541. //// push static 5
  59542. //^^ push_from_loc(Output.vm.5)
  59543. // #22386
  59544. @Output.vm.5
  59545. // #22387
  59546. D=M
  59547. //^^ push_d_to_stack
  59548. // #22388
  59549. @SP
  59550. // #22389
  59551. A=M
  59552. // #22390
  59553. M=D
  59554. // #22391
  59555. @SP
  59556. // #22392
  59557. M=M+1
  59558. //vv push_d_to_stack
  59559. //vv push_from_loc(Output.vm.5)
  59560. //
  59561. //// add
  59562. //^^ arith_binary_op(+)
  59563. //^^ pop_stack_to_d
  59564. // #22393
  59565. @SP
  59566. // #22394
  59567. M=M-1
  59568. // #22395
  59569. A=M
  59570. // #22396
  59571. D=M
  59572. //vv pop_stack_to_d
  59573. //^^ arith_d_with_stack_top(D+M)
  59574. // #22397
  59575. @R13
  59576. // #22398
  59577. M=D
  59578. //^^ pop_stack_to_d
  59579. // #22399
  59580. @SP
  59581. // #22400
  59582. M=M-1
  59583. // #22401
  59584. A=M
  59585. // #22402
  59586. D=M
  59587. //vv pop_stack_to_d
  59588. // #22403
  59589. @R13
  59590. // #22404
  59591. D=D+M
  59592. // #22405
  59593. @R13
  59594. // #22406
  59595. M=0
  59596. //vv arith_d_with_stack_top(D+M)
  59597. //^^ push_d_to_stack
  59598. // #22407
  59599. @SP
  59600. // #22408
  59601. A=M
  59602. // #22409
  59603. M=D
  59604. // #22410
  59605. @SP
  59606. // #22411
  59607. M=M+1
  59608. //vv push_d_to_stack
  59609. //vv arith_binary_op(+)
  59610. //
  59611. //// pop pointer 1
  59612. //^^ pop_to_loc{4)
  59613. //^^ pop_stack_to_d
  59614. // #22412
  59615. @SP
  59616. // #22413
  59617. M=M-1
  59618. // #22414
  59619. A=M
  59620. // #22415
  59621. D=M
  59622. //vv pop_stack_to_d
  59623. // #22416
  59624. @4
  59625. // #22417
  59626. M=D
  59627. //vv pop_to_loc{4)
  59628. //
  59629. //// push that 0
  59630. //^^ push_from_ram(THAT, 0)
  59631. // #22418
  59632. @THAT
  59633. // #22419
  59634. D=M
  59635. // #22420
  59636. @0
  59637. // #22421
  59638. A=D+A
  59639. // #22422
  59640. D=M
  59641. //^^ push_d_to_stack
  59642. // #22423
  59643. @SP
  59644. // #22424
  59645. A=M
  59646. // #22425
  59647. M=D
  59648. // #22426
  59649. @SP
  59650. // #22427
  59651. M=M+1
  59652. //vv push_d_to_stack
  59653. //vv push_from_ram(THAT, 0)
  59654. //
  59655. //// pop local 0
  59656. //^^ pop_to_ram(LCL, 0)
  59657. // #22428
  59658. @LCL
  59659. // #22429
  59660. D=M
  59661. // #22430
  59662. @0
  59663. // #22431
  59664. D=D+A
  59665. // #22432
  59666. @R13
  59667. // #22433
  59668. M=D
  59669. //^^ pop_stack_to_d
  59670. // #22434
  59671. @SP
  59672. // #22435
  59673. M=M-1
  59674. // #22436
  59675. A=M
  59676. // #22437
  59677. D=M
  59678. //vv pop_stack_to_d
  59679. // #22438
  59680. @R13
  59681. // #22439
  59682. A=M
  59683. // #22440
  59684. M=D
  59685. // #22441
  59686. @R13
  59687. // #22442
  59688. M=0
  59689. //vv pop_to_ram(LCL, 0)
  59690. //
  59691. //// push constant 11
  59692. //^^ push_constant(11)
  59693. // #22443
  59694. @11
  59695. // #22444
  59696. D=A
  59697. //^^ push_d_to_stack
  59698. // #22445
  59699. @SP
  59700. // #22446
  59701. A=M
  59702. // #22447
  59703. M=D
  59704. // #22448
  59705. @SP
  59706. // #22449
  59707. M=M+1
  59708. //vv push_d_to_stack
  59709. //vv push_constant(11)
  59710. //
  59711. //// call Array.new 1
  59712. //^^ push_constant(RET_ADDR_174)
  59713. // #22450
  59714. @RET_ADDR_174
  59715. // #22451
  59716. D=A
  59717. //^^ push_d_to_stack
  59718. // #22452
  59719. @SP
  59720. // #22453
  59721. A=M
  59722. // #22454
  59723. M=D
  59724. // #22455
  59725. @SP
  59726. // #22456
  59727. M=M+1
  59728. //vv push_d_to_stack
  59729. //vv push_constant(RET_ADDR_174)
  59730. //push return-address
  59731. // #22457
  59732. @LCL
  59733. // #22458
  59734. D=M
  59735. //^^ push_d_to_stack
  59736. // #22459
  59737. @SP
  59738. // #22460
  59739. A=M
  59740. // #22461
  59741. M=D
  59742. // #22462
  59743. @SP
  59744. // #22463
  59745. M=M+1
  59746. //vv push_d_to_stack
  59747. //push LCL
  59748. // #22464
  59749. @ARG
  59750. // #22465
  59751. D=M
  59752. //^^ push_d_to_stack
  59753. // #22466
  59754. @SP
  59755. // #22467
  59756. A=M
  59757. // #22468
  59758. M=D
  59759. // #22469
  59760. @SP
  59761. // #22470
  59762. M=M+1
  59763. //vv push_d_to_stack
  59764. //push ARG
  59765. // #22471
  59766. @THIS
  59767. // #22472
  59768. D=M
  59769. //^^ push_d_to_stack
  59770. // #22473
  59771. @SP
  59772. // #22474
  59773. A=M
  59774. // #22475
  59775. M=D
  59776. // #22476
  59777. @SP
  59778. // #22477
  59779. M=M+1
  59780. //vv push_d_to_stack
  59781. //push THIS
  59782. // #22478
  59783. @THAT
  59784. // #22479
  59785. D=M
  59786. //^^ push_d_to_stack
  59787. // #22480
  59788. @SP
  59789. // #22481
  59790. A=M
  59791. // #22482
  59792. M=D
  59793. // #22483
  59794. @SP
  59795. // #22484
  59796. M=M+1
  59797. //vv push_d_to_stack
  59798. //push THAT
  59799. // #22485
  59800. @SP
  59801. // #22486
  59802. D=M
  59803. // #22487
  59804. @ARG
  59805. // #22488
  59806. M=D
  59807. // #22489
  59808. @6
  59809. // #22490
  59810. D=A
  59811. // #22491
  59812. @ARG
  59813. // #22492
  59814. M=M-D // ARG = SP - args - 5
  59815. // #22493
  59816. @SP
  59817. // #22494
  59818. D=M
  59819. // #22495
  59820. @LCL
  59821. // #22496
  59822. M=D // LCL = SP
  59823. // #22497
  59824. @Array.new
  59825. // #22498
  59826. 0;JMP
  59827. (RET_ADDR_174)
  59828. //
  59829. //// pop local 1
  59830. //^^ pop_to_ram(LCL, 1)
  59831. // #22499
  59832. @LCL
  59833. // #22500
  59834. D=M
  59835. // #22501
  59836. @1
  59837. // #22502
  59838. D=D+A
  59839. // #22503
  59840. @R13
  59841. // #22504
  59842. M=D
  59843. //^^ pop_stack_to_d
  59844. // #22505
  59845. @SP
  59846. // #22506
  59847. M=M-1
  59848. // #22507
  59849. A=M
  59850. // #22508
  59851. D=M
  59852. //vv pop_stack_to_d
  59853. // #22509
  59854. @R13
  59855. // #22510
  59856. A=M
  59857. // #22511
  59858. M=D
  59859. // #22512
  59860. @R13
  59861. // #22513
  59862. M=0
  59863. //vv pop_to_ram(LCL, 1)
  59864. //
  59865. //// push local 2
  59866. //^^ push_from_ram(LCL, 2)
  59867. // #22514
  59868. @LCL
  59869. // #22515
  59870. D=M
  59871. // #22516
  59872. @2
  59873. // #22517
  59874. A=D+A
  59875. // #22518
  59876. D=M
  59877. //^^ push_d_to_stack
  59878. // #22519
  59879. @SP
  59880. // #22520
  59881. A=M
  59882. // #22521
  59883. M=D
  59884. // #22522
  59885. @SP
  59886. // #22523
  59887. M=M+1
  59888. //vv push_d_to_stack
  59889. //vv push_from_ram(LCL, 2)
  59890. //
  59891. //// push static 6
  59892. //^^ push_from_loc(Output.vm.6)
  59893. // #22524
  59894. @Output.vm.6
  59895. // #22525
  59896. D=M
  59897. //^^ push_d_to_stack
  59898. // #22526
  59899. @SP
  59900. // #22527
  59901. A=M
  59902. // #22528
  59903. M=D
  59904. // #22529
  59905. @SP
  59906. // #22530
  59907. M=M+1
  59908. //vv push_d_to_stack
  59909. //vv push_from_loc(Output.vm.6)
  59910. //
  59911. //// add
  59912. //^^ arith_binary_op(+)
  59913. //^^ pop_stack_to_d
  59914. // #22531
  59915. @SP
  59916. // #22532
  59917. M=M-1
  59918. // #22533
  59919. A=M
  59920. // #22534
  59921. D=M
  59922. //vv pop_stack_to_d
  59923. //^^ arith_d_with_stack_top(D+M)
  59924. // #22535
  59925. @R13
  59926. // #22536
  59927. M=D
  59928. //^^ pop_stack_to_d
  59929. // #22537
  59930. @SP
  59931. // #22538
  59932. M=M-1
  59933. // #22539
  59934. A=M
  59935. // #22540
  59936. D=M
  59937. //vv pop_stack_to_d
  59938. // #22541
  59939. @R13
  59940. // #22542
  59941. D=D+M
  59942. // #22543
  59943. @R13
  59944. // #22544
  59945. M=0
  59946. //vv arith_d_with_stack_top(D+M)
  59947. //^^ push_d_to_stack
  59948. // #22545
  59949. @SP
  59950. // #22546
  59951. A=M
  59952. // #22547
  59953. M=D
  59954. // #22548
  59955. @SP
  59956. // #22549
  59957. M=M+1
  59958. //vv push_d_to_stack
  59959. //vv arith_binary_op(+)
  59960. //
  59961. //// push local 1
  59962. //^^ push_from_ram(LCL, 1)
  59963. // #22550
  59964. @LCL
  59965. // #22551
  59966. D=M
  59967. // #22552
  59968. @1
  59969. // #22553
  59970. A=D+A
  59971. // #22554
  59972. D=M
  59973. //^^ push_d_to_stack
  59974. // #22555
  59975. @SP
  59976. // #22556
  59977. A=M
  59978. // #22557
  59979. M=D
  59980. // #22558
  59981. @SP
  59982. // #22559
  59983. M=M+1
  59984. //vv push_d_to_stack
  59985. //vv push_from_ram(LCL, 1)
  59986. //
  59987. //// pop temp 0
  59988. //^^ pop_to_loc{5)
  59989. //^^ pop_stack_to_d
  59990. // #22560
  59991. @SP
  59992. // #22561
  59993. M=M-1
  59994. // #22562
  59995. A=M
  59996. // #22563
  59997. D=M
  59998. //vv pop_stack_to_d
  59999. // #22564
  60000. @5
  60001. // #22565
  60002. M=D
  60003. //vv pop_to_loc{5)
  60004. //
  60005. //// pop pointer 1
  60006. //^^ pop_to_loc{4)
  60007. //^^ pop_stack_to_d
  60008. // #22566
  60009. @SP
  60010. // #22567
  60011. M=M-1
  60012. // #22568
  60013. A=M
  60014. // #22569
  60015. D=M
  60016. //vv pop_stack_to_d
  60017. // #22570
  60018. @4
  60019. // #22571
  60020. M=D
  60021. //vv pop_to_loc{4)
  60022. //
  60023. //// push temp 0
  60024. //^^ push_from_loc(5)
  60025. // #22572
  60026. @5
  60027. // #22573
  60028. D=M
  60029. //^^ push_d_to_stack
  60030. // #22574
  60031. @SP
  60032. // #22575
  60033. A=M
  60034. // #22576
  60035. M=D
  60036. // #22577
  60037. @SP
  60038. // #22578
  60039. M=M+1
  60040. //vv push_d_to_stack
  60041. //vv push_from_loc(5)
  60042. //
  60043. //// pop that 0
  60044. //^^ pop_to_ram(THAT, 0)
  60045. // #22579
  60046. @THAT
  60047. // #22580
  60048. D=M
  60049. // #22581
  60050. @0
  60051. // #22582
  60052. D=D+A
  60053. // #22583
  60054. @R13
  60055. // #22584
  60056. M=D
  60057. //^^ pop_stack_to_d
  60058. // #22585
  60059. @SP
  60060. // #22586
  60061. M=M-1
  60062. // #22587
  60063. A=M
  60064. // #22588
  60065. D=M
  60066. //vv pop_stack_to_d
  60067. // #22589
  60068. @R13
  60069. // #22590
  60070. A=M
  60071. // #22591
  60072. M=D
  60073. // #22592
  60074. @R13
  60075. // #22593
  60076. M=0
  60077. //vv pop_to_ram(THAT, 0)
  60078. //
  60079. //// push constant 0
  60080. //^^ push_constant(0)
  60081. // #22594
  60082. @0
  60083. // #22595
  60084. D=A
  60085. //^^ push_d_to_stack
  60086. // #22596
  60087. @SP
  60088. // #22597
  60089. A=M
  60090. // #22598
  60091. M=D
  60092. // #22599
  60093. @SP
  60094. // #22600
  60095. M=M+1
  60096. //vv push_d_to_stack
  60097. //vv push_constant(0)
  60098. //
  60099. //// pop local 3
  60100. //^^ pop_to_ram(LCL, 3)
  60101. // #22601
  60102. @LCL
  60103. // #22602
  60104. D=M
  60105. // #22603
  60106. @3
  60107. // #22604
  60108. D=D+A
  60109. // #22605
  60110. @R13
  60111. // #22606
  60112. M=D
  60113. //^^ pop_stack_to_d
  60114. // #22607
  60115. @SP
  60116. // #22608
  60117. M=M-1
  60118. // #22609
  60119. A=M
  60120. // #22610
  60121. D=M
  60122. //vv pop_stack_to_d
  60123. // #22611
  60124. @R13
  60125. // #22612
  60126. A=M
  60127. // #22613
  60128. M=D
  60129. // #22614
  60130. @R13
  60131. // #22615
  60132. M=0
  60133. //vv pop_to_ram(LCL, 3)
  60134. //
  60135. //// label WHILE_EXP1
  60136. (Output.createShiftedMap$WHILE_EXP1)
  60137. //
  60138. //// push local 3
  60139. //^^ push_from_ram(LCL, 3)
  60140. // #22616
  60141. @LCL
  60142. // #22617
  60143. D=M
  60144. // #22618
  60145. @3
  60146. // #22619
  60147. A=D+A
  60148. // #22620
  60149. D=M
  60150. //^^ push_d_to_stack
  60151. // #22621
  60152. @SP
  60153. // #22622
  60154. A=M
  60155. // #22623
  60156. M=D
  60157. // #22624
  60158. @SP
  60159. // #22625
  60160. M=M+1
  60161. //vv push_d_to_stack
  60162. //vv push_from_ram(LCL, 3)
  60163. //
  60164. //// push constant 11
  60165. //^^ push_constant(11)
  60166. // #22626
  60167. @11
  60168. // #22627
  60169. D=A
  60170. //^^ push_d_to_stack
  60171. // #22628
  60172. @SP
  60173. // #22629
  60174. A=M
  60175. // #22630
  60176. M=D
  60177. // #22631
  60178. @SP
  60179. // #22632
  60180. M=M+1
  60181. //vv push_d_to_stack
  60182. //vv push_constant(11)
  60183. //
  60184. //// lt
  60185. //^^ arith_cmp_op(JLT)
  60186. //^^ pop_stack_to_d
  60187. // #22633
  60188. @SP
  60189. // #22634
  60190. M=M-1
  60191. // #22635
  60192. A=M
  60193. // #22636
  60194. D=M
  60195. //vv pop_stack_to_d
  60196. //^^ arith_d_with_stack_top(D-M)
  60197. // #22637
  60198. @R13
  60199. // #22638
  60200. M=D
  60201. //^^ pop_stack_to_d
  60202. // #22639
  60203. @SP
  60204. // #22640
  60205. M=M-1
  60206. // #22641
  60207. A=M
  60208. // #22642
  60209. D=M
  60210. //vv pop_stack_to_d
  60211. // #22643
  60212. @R13
  60213. // #22644
  60214. D=D-M
  60215. // #22645
  60216. @R13
  60217. // #22646
  60218. M=0
  60219. //vv arith_d_with_stack_top(D-M)
  60220. // #22647
  60221. @PUT_TRUE_175
  60222. // #22648
  60223. D;JLT
  60224. // #22649
  60225. @R13
  60226. // #22650
  60227. M=0
  60228. // #22651
  60229. @CONT_175
  60230. // #22652
  60231. 0;JMP
  60232. (PUT_TRUE_175)
  60233. // #22653
  60234. @R13
  60235. // #22654
  60236. M=-1
  60237. (CONT_175)
  60238. // #22655
  60239. @R13
  60240. // #22656
  60241. D=M
  60242. // #22657
  60243. @R13
  60244. // #22658
  60245. M=0
  60246. //^^ push_d_to_stack
  60247. // #22659
  60248. @SP
  60249. // #22660
  60250. A=M
  60251. // #22661
  60252. M=D
  60253. // #22662
  60254. @SP
  60255. // #22663
  60256. M=M+1
  60257. //vv push_d_to_stack
  60258. //vv arith_cmp_op(JLT)
  60259. //
  60260. //// not
  60261. //^^ arith_unary_op(!)
  60262. //^^ pop_stack_to_d
  60263. // #22664
  60264. @SP
  60265. // #22665
  60266. M=M-1
  60267. // #22666
  60268. A=M
  60269. // #22667
  60270. D=M
  60271. //vv pop_stack_to_d
  60272. // #22668
  60273. D=!D
  60274. //^^ push_d_to_stack
  60275. // #22669
  60276. @SP
  60277. // #22670
  60278. A=M
  60279. // #22671
  60280. M=D
  60281. // #22672
  60282. @SP
  60283. // #22673
  60284. M=M+1
  60285. //vv push_d_to_stack
  60286. //vv arith_unary_op(!)
  60287. //
  60288. //// if-goto WHILE_END1
  60289. //^^ pop_stack_to_d
  60290. // #22674
  60291. @SP
  60292. // #22675
  60293. M=M-1
  60294. // #22676
  60295. A=M
  60296. // #22677
  60297. D=M
  60298. //vv pop_stack_to_d
  60299. // #22678
  60300. @Output.createShiftedMap$WHILE_END1
  60301. // #22679
  60302. D;JNE
  60303. //
  60304. //// push local 3
  60305. //^^ push_from_ram(LCL, 3)
  60306. // #22680
  60307. @LCL
  60308. // #22681
  60309. D=M
  60310. // #22682
  60311. @3
  60312. // #22683
  60313. A=D+A
  60314. // #22684
  60315. D=M
  60316. //^^ push_d_to_stack
  60317. // #22685
  60318. @SP
  60319. // #22686
  60320. A=M
  60321. // #22687
  60322. M=D
  60323. // #22688
  60324. @SP
  60325. // #22689
  60326. M=M+1
  60327. //vv push_d_to_stack
  60328. //vv push_from_ram(LCL, 3)
  60329. //
  60330. //// push local 1
  60331. //^^ push_from_ram(LCL, 1)
  60332. // #22690
  60333. @LCL
  60334. // #22691
  60335. D=M
  60336. // #22692
  60337. @1
  60338. // #22693
  60339. A=D+A
  60340. // #22694
  60341. D=M
  60342. //^^ push_d_to_stack
  60343. // #22695
  60344. @SP
  60345. // #22696
  60346. A=M
  60347. // #22697
  60348. M=D
  60349. // #22698
  60350. @SP
  60351. // #22699
  60352. M=M+1
  60353. //vv push_d_to_stack
  60354. //vv push_from_ram(LCL, 1)
  60355. //
  60356. //// add
  60357. //^^ arith_binary_op(+)
  60358. //^^ pop_stack_to_d
  60359. // #22700
  60360. @SP
  60361. // #22701
  60362. M=M-1
  60363. // #22702
  60364. A=M
  60365. // #22703
  60366. D=M
  60367. //vv pop_stack_to_d
  60368. //^^ arith_d_with_stack_top(D+M)
  60369. // #22704
  60370. @R13
  60371. // #22705
  60372. M=D
  60373. //^^ pop_stack_to_d
  60374. // #22706
  60375. @SP
  60376. // #22707
  60377. M=M-1
  60378. // #22708
  60379. A=M
  60380. // #22709
  60381. D=M
  60382. //vv pop_stack_to_d
  60383. // #22710
  60384. @R13
  60385. // #22711
  60386. D=D+M
  60387. // #22712
  60388. @R13
  60389. // #22713
  60390. M=0
  60391. //vv arith_d_with_stack_top(D+M)
  60392. //^^ push_d_to_stack
  60393. // #22714
  60394. @SP
  60395. // #22715
  60396. A=M
  60397. // #22716
  60398. M=D
  60399. // #22717
  60400. @SP
  60401. // #22718
  60402. M=M+1
  60403. //vv push_d_to_stack
  60404. //vv arith_binary_op(+)
  60405. //
  60406. //// push local 3
  60407. //^^ push_from_ram(LCL, 3)
  60408. // #22719
  60409. @LCL
  60410. // #22720
  60411. D=M
  60412. // #22721
  60413. @3
  60414. // #22722
  60415. A=D+A
  60416. // #22723
  60417. D=M
  60418. //^^ push_d_to_stack
  60419. // #22724
  60420. @SP
  60421. // #22725
  60422. A=M
  60423. // #22726
  60424. M=D
  60425. // #22727
  60426. @SP
  60427. // #22728
  60428. M=M+1
  60429. //vv push_d_to_stack
  60430. //vv push_from_ram(LCL, 3)
  60431. //
  60432. //// push local 0
  60433. //^^ push_from_ram(LCL, 0)
  60434. // #22729
  60435. @LCL
  60436. // #22730
  60437. D=M
  60438. // #22731
  60439. @0
  60440. // #22732
  60441. A=D+A
  60442. // #22733
  60443. D=M
  60444. //^^ push_d_to_stack
  60445. // #22734
  60446. @SP
  60447. // #22735
  60448. A=M
  60449. // #22736
  60450. M=D
  60451. // #22737
  60452. @SP
  60453. // #22738
  60454. M=M+1
  60455. //vv push_d_to_stack
  60456. //vv push_from_ram(LCL, 0)
  60457. //
  60458. //// add
  60459. //^^ arith_binary_op(+)
  60460. //^^ pop_stack_to_d
  60461. // #22739
  60462. @SP
  60463. // #22740
  60464. M=M-1
  60465. // #22741
  60466. A=M
  60467. // #22742
  60468. D=M
  60469. //vv pop_stack_to_d
  60470. //^^ arith_d_with_stack_top(D+M)
  60471. // #22743
  60472. @R13
  60473. // #22744
  60474. M=D
  60475. //^^ pop_stack_to_d
  60476. // #22745
  60477. @SP
  60478. // #22746
  60479. M=M-1
  60480. // #22747
  60481. A=M
  60482. // #22748
  60483. D=M
  60484. //vv pop_stack_to_d
  60485. // #22749
  60486. @R13
  60487. // #22750
  60488. D=D+M
  60489. // #22751
  60490. @R13
  60491. // #22752
  60492. M=0
  60493. //vv arith_d_with_stack_top(D+M)
  60494. //^^ push_d_to_stack
  60495. // #22753
  60496. @SP
  60497. // #22754
  60498. A=M
  60499. // #22755
  60500. M=D
  60501. // #22756
  60502. @SP
  60503. // #22757
  60504. M=M+1
  60505. //vv push_d_to_stack
  60506. //vv arith_binary_op(+)
  60507. //
  60508. //// pop pointer 1
  60509. //^^ pop_to_loc{4)
  60510. //^^ pop_stack_to_d
  60511. // #22758
  60512. @SP
  60513. // #22759
  60514. M=M-1
  60515. // #22760
  60516. A=M
  60517. // #22761
  60518. D=M
  60519. //vv pop_stack_to_d
  60520. // #22762
  60521. @4
  60522. // #22763
  60523. M=D
  60524. //vv pop_to_loc{4)
  60525. //
  60526. //// push that 0
  60527. //^^ push_from_ram(THAT, 0)
  60528. // #22764
  60529. @THAT
  60530. // #22765
  60531. D=M
  60532. // #22766
  60533. @0
  60534. // #22767
  60535. A=D+A
  60536. // #22768
  60537. D=M
  60538. //^^ push_d_to_stack
  60539. // #22769
  60540. @SP
  60541. // #22770
  60542. A=M
  60543. // #22771
  60544. M=D
  60545. // #22772
  60546. @SP
  60547. // #22773
  60548. M=M+1
  60549. //vv push_d_to_stack
  60550. //vv push_from_ram(THAT, 0)
  60551. //
  60552. //// push constant 256
  60553. //^^ push_constant(256)
  60554. // #22774
  60555. @256
  60556. // #22775
  60557. D=A
  60558. //^^ push_d_to_stack
  60559. // #22776
  60560. @SP
  60561. // #22777
  60562. A=M
  60563. // #22778
  60564. M=D
  60565. // #22779
  60566. @SP
  60567. // #22780
  60568. M=M+1
  60569. //vv push_d_to_stack
  60570. //vv push_constant(256)
  60571. //
  60572. //// call Math.multiply 2
  60573. //^^ push_constant(RET_ADDR_176)
  60574. // #22781
  60575. @RET_ADDR_176
  60576. // #22782
  60577. D=A
  60578. //^^ push_d_to_stack
  60579. // #22783
  60580. @SP
  60581. // #22784
  60582. A=M
  60583. // #22785
  60584. M=D
  60585. // #22786
  60586. @SP
  60587. // #22787
  60588. M=M+1
  60589. //vv push_d_to_stack
  60590. //vv push_constant(RET_ADDR_176)
  60591. //push return-address
  60592. // #22788
  60593. @LCL
  60594. // #22789
  60595. D=M
  60596. //^^ push_d_to_stack
  60597. // #22790
  60598. @SP
  60599. // #22791
  60600. A=M
  60601. // #22792
  60602. M=D
  60603. // #22793
  60604. @SP
  60605. // #22794
  60606. M=M+1
  60607. //vv push_d_to_stack
  60608. //push LCL
  60609. // #22795
  60610. @ARG
  60611. // #22796
  60612. D=M
  60613. //^^ push_d_to_stack
  60614. // #22797
  60615. @SP
  60616. // #22798
  60617. A=M
  60618. // #22799
  60619. M=D
  60620. // #22800
  60621. @SP
  60622. // #22801
  60623. M=M+1
  60624. //vv push_d_to_stack
  60625. //push ARG
  60626. // #22802
  60627. @THIS
  60628. // #22803
  60629. D=M
  60630. //^^ push_d_to_stack
  60631. // #22804
  60632. @SP
  60633. // #22805
  60634. A=M
  60635. // #22806
  60636. M=D
  60637. // #22807
  60638. @SP
  60639. // #22808
  60640. M=M+1
  60641. //vv push_d_to_stack
  60642. //push THIS
  60643. // #22809
  60644. @THAT
  60645. // #22810
  60646. D=M
  60647. //^^ push_d_to_stack
  60648. // #22811
  60649. @SP
  60650. // #22812
  60651. A=M
  60652. // #22813
  60653. M=D
  60654. // #22814
  60655. @SP
  60656. // #22815
  60657. M=M+1
  60658. //vv push_d_to_stack
  60659. //push THAT
  60660. // #22816
  60661. @SP
  60662. // #22817
  60663. D=M
  60664. // #22818
  60665. @ARG
  60666. // #22819
  60667. M=D
  60668. // #22820
  60669. @7
  60670. // #22821
  60671. D=A
  60672. // #22822
  60673. @ARG
  60674. // #22823
  60675. M=M-D // ARG = SP - args - 5
  60676. // #22824
  60677. @SP
  60678. // #22825
  60679. D=M
  60680. // #22826
  60681. @LCL
  60682. // #22827
  60683. M=D // LCL = SP
  60684. // #22828
  60685. @Math.multiply
  60686. // #22829
  60687. 0;JMP
  60688. (RET_ADDR_176)
  60689. //
  60690. //// pop temp 0
  60691. //^^ pop_to_loc{5)
  60692. //^^ pop_stack_to_d
  60693. // #22830
  60694. @SP
  60695. // #22831
  60696. M=M-1
  60697. // #22832
  60698. A=M
  60699. // #22833
  60700. D=M
  60701. //vv pop_stack_to_d
  60702. // #22834
  60703. @5
  60704. // #22835
  60705. M=D
  60706. //vv pop_to_loc{5)
  60707. //
  60708. //// pop pointer 1
  60709. //^^ pop_to_loc{4)
  60710. //^^ pop_stack_to_d
  60711. // #22836
  60712. @SP
  60713. // #22837
  60714. M=M-1
  60715. // #22838
  60716. A=M
  60717. // #22839
  60718. D=M
  60719. //vv pop_stack_to_d
  60720. // #22840
  60721. @4
  60722. // #22841
  60723. M=D
  60724. //vv pop_to_loc{4)
  60725. //
  60726. //// push temp 0
  60727. //^^ push_from_loc(5)
  60728. // #22842
  60729. @5
  60730. // #22843
  60731. D=M
  60732. //^^ push_d_to_stack
  60733. // #22844
  60734. @SP
  60735. // #22845
  60736. A=M
  60737. // #22846
  60738. M=D
  60739. // #22847
  60740. @SP
  60741. // #22848
  60742. M=M+1
  60743. //vv push_d_to_stack
  60744. //vv push_from_loc(5)
  60745. //
  60746. //// pop that 0
  60747. //^^ pop_to_ram(THAT, 0)
  60748. // #22849
  60749. @THAT
  60750. // #22850
  60751. D=M
  60752. // #22851
  60753. @0
  60754. // #22852
  60755. D=D+A
  60756. // #22853
  60757. @R13
  60758. // #22854
  60759. M=D
  60760. //^^ pop_stack_to_d
  60761. // #22855
  60762. @SP
  60763. // #22856
  60764. M=M-1
  60765. // #22857
  60766. A=M
  60767. // #22858
  60768. D=M
  60769. //vv pop_stack_to_d
  60770. // #22859
  60771. @R13
  60772. // #22860
  60773. A=M
  60774. // #22861
  60775. M=D
  60776. // #22862
  60777. @R13
  60778. // #22863
  60779. M=0
  60780. //vv pop_to_ram(THAT, 0)
  60781. //
  60782. //// push local 3
  60783. //^^ push_from_ram(LCL, 3)
  60784. // #22864
  60785. @LCL
  60786. // #22865
  60787. D=M
  60788. // #22866
  60789. @3
  60790. // #22867
  60791. A=D+A
  60792. // #22868
  60793. D=M
  60794. //^^ push_d_to_stack
  60795. // #22869
  60796. @SP
  60797. // #22870
  60798. A=M
  60799. // #22871
  60800. M=D
  60801. // #22872
  60802. @SP
  60803. // #22873
  60804. M=M+1
  60805. //vv push_d_to_stack
  60806. //vv push_from_ram(LCL, 3)
  60807. //
  60808. //// push constant 1
  60809. //^^ push_constant(1)
  60810. // #22874
  60811. @1
  60812. // #22875
  60813. D=A
  60814. //^^ push_d_to_stack
  60815. // #22876
  60816. @SP
  60817. // #22877
  60818. A=M
  60819. // #22878
  60820. M=D
  60821. // #22879
  60822. @SP
  60823. // #22880
  60824. M=M+1
  60825. //vv push_d_to_stack
  60826. //vv push_constant(1)
  60827. //
  60828. //// add
  60829. //^^ arith_binary_op(+)
  60830. //^^ pop_stack_to_d
  60831. // #22881
  60832. @SP
  60833. // #22882
  60834. M=M-1
  60835. // #22883
  60836. A=M
  60837. // #22884
  60838. D=M
  60839. //vv pop_stack_to_d
  60840. //^^ arith_d_with_stack_top(D+M)
  60841. // #22885
  60842. @R13
  60843. // #22886
  60844. M=D
  60845. //^^ pop_stack_to_d
  60846. // #22887
  60847. @SP
  60848. // #22888
  60849. M=M-1
  60850. // #22889
  60851. A=M
  60852. // #22890
  60853. D=M
  60854. //vv pop_stack_to_d
  60855. // #22891
  60856. @R13
  60857. // #22892
  60858. D=D+M
  60859. // #22893
  60860. @R13
  60861. // #22894
  60862. M=0
  60863. //vv arith_d_with_stack_top(D+M)
  60864. //^^ push_d_to_stack
  60865. // #22895
  60866. @SP
  60867. // #22896
  60868. A=M
  60869. // #22897
  60870. M=D
  60871. // #22898
  60872. @SP
  60873. // #22899
  60874. M=M+1
  60875. //vv push_d_to_stack
  60876. //vv arith_binary_op(+)
  60877. //
  60878. //// pop local 3
  60879. //^^ pop_to_ram(LCL, 3)
  60880. // #22900
  60881. @LCL
  60882. // #22901
  60883. D=M
  60884. // #22902
  60885. @3
  60886. // #22903
  60887. D=D+A
  60888. // #22904
  60889. @R13
  60890. // #22905
  60891. M=D
  60892. //^^ pop_stack_to_d
  60893. // #22906
  60894. @SP
  60895. // #22907
  60896. M=M-1
  60897. // #22908
  60898. A=M
  60899. // #22909
  60900. D=M
  60901. //vv pop_stack_to_d
  60902. // #22910
  60903. @R13
  60904. // #22911
  60905. A=M
  60906. // #22912
  60907. M=D
  60908. // #22913
  60909. @R13
  60910. // #22914
  60911. M=0
  60912. //vv pop_to_ram(LCL, 3)
  60913. //
  60914. //// goto WHILE_EXP1
  60915. // #22915
  60916. @Output.createShiftedMap$WHILE_EXP1
  60917. // #22916
  60918. 0;JMP
  60919. //
  60920. //// label WHILE_END1
  60921. (Output.createShiftedMap$WHILE_END1)
  60922. //
  60923. //// push local 2
  60924. //^^ push_from_ram(LCL, 2)
  60925. // #22917
  60926. @LCL
  60927. // #22918
  60928. D=M
  60929. // #22919
  60930. @2
  60931. // #22920
  60932. A=D+A
  60933. // #22921
  60934. D=M
  60935. //^^ push_d_to_stack
  60936. // #22922
  60937. @SP
  60938. // #22923
  60939. A=M
  60940. // #22924
  60941. M=D
  60942. // #22925
  60943. @SP
  60944. // #22926
  60945. M=M+1
  60946. //vv push_d_to_stack
  60947. //vv push_from_ram(LCL, 2)
  60948. //
  60949. //// push constant 0
  60950. //^^ push_constant(0)
  60951. // #22927
  60952. @0
  60953. // #22928
  60954. D=A
  60955. //^^ push_d_to_stack
  60956. // #22929
  60957. @SP
  60958. // #22930
  60959. A=M
  60960. // #22931
  60961. M=D
  60962. // #22932
  60963. @SP
  60964. // #22933
  60965. M=M+1
  60966. //vv push_d_to_stack
  60967. //vv push_constant(0)
  60968. //
  60969. //// eq
  60970. //^^ arith_cmp_op(JEQ)
  60971. //^^ pop_stack_to_d
  60972. // #22934
  60973. @SP
  60974. // #22935
  60975. M=M-1
  60976. // #22936
  60977. A=M
  60978. // #22937
  60979. D=M
  60980. //vv pop_stack_to_d
  60981. //^^ arith_d_with_stack_top(D-M)
  60982. // #22938
  60983. @R13
  60984. // #22939
  60985. M=D
  60986. //^^ pop_stack_to_d
  60987. // #22940
  60988. @SP
  60989. // #22941
  60990. M=M-1
  60991. // #22942
  60992. A=M
  60993. // #22943
  60994. D=M
  60995. //vv pop_stack_to_d
  60996. // #22944
  60997. @R13
  60998. // #22945
  60999. D=D-M
  61000. // #22946
  61001. @R13
  61002. // #22947
  61003. M=0
  61004. //vv arith_d_with_stack_top(D-M)
  61005. // #22948
  61006. @PUT_TRUE_177
  61007. // #22949
  61008. D;JEQ
  61009. // #22950
  61010. @R13
  61011. // #22951
  61012. M=0
  61013. // #22952
  61014. @CONT_177
  61015. // #22953
  61016. 0;JMP
  61017. (PUT_TRUE_177)
  61018. // #22954
  61019. @R13
  61020. // #22955
  61021. M=-1
  61022. (CONT_177)
  61023. // #22956
  61024. @R13
  61025. // #22957
  61026. D=M
  61027. // #22958
  61028. @R13
  61029. // #22959
  61030. M=0
  61031. //^^ push_d_to_stack
  61032. // #22960
  61033. @SP
  61034. // #22961
  61035. A=M
  61036. // #22962
  61037. M=D
  61038. // #22963
  61039. @SP
  61040. // #22964
  61041. M=M+1
  61042. //vv push_d_to_stack
  61043. //vv arith_cmp_op(JEQ)
  61044. //
  61045. //// if-goto IF_TRUE0
  61046. //^^ pop_stack_to_d
  61047. // #22965
  61048. @SP
  61049. // #22966
  61050. M=M-1
  61051. // #22967
  61052. A=M
  61053. // #22968
  61054. D=M
  61055. //vv pop_stack_to_d
  61056. // #22969
  61057. @Output.createShiftedMap$IF_TRUE0
  61058. // #22970
  61059. D;JNE
  61060. //
  61061. //// goto IF_FALSE0
  61062. // #22971
  61063. @Output.createShiftedMap$IF_FALSE0
  61064. // #22972
  61065. 0;JMP
  61066. //
  61067. //// label IF_TRUE0
  61068. (Output.createShiftedMap$IF_TRUE0)
  61069. //
  61070. //// push constant 32
  61071. //^^ push_constant(32)
  61072. // #22973
  61073. @32
  61074. // #22974
  61075. D=A
  61076. //^^ push_d_to_stack
  61077. // #22975
  61078. @SP
  61079. // #22976
  61080. A=M
  61081. // #22977
  61082. M=D
  61083. // #22978
  61084. @SP
  61085. // #22979
  61086. M=M+1
  61087. //vv push_d_to_stack
  61088. //vv push_constant(32)
  61089. //
  61090. //// pop local 2
  61091. //^^ pop_to_ram(LCL, 2)
  61092. // #22980
  61093. @LCL
  61094. // #22981
  61095. D=M
  61096. // #22982
  61097. @2
  61098. // #22983
  61099. D=D+A
  61100. // #22984
  61101. @R13
  61102. // #22985
  61103. M=D
  61104. //^^ pop_stack_to_d
  61105. // #22986
  61106. @SP
  61107. // #22987
  61108. M=M-1
  61109. // #22988
  61110. A=M
  61111. // #22989
  61112. D=M
  61113. //vv pop_stack_to_d
  61114. // #22990
  61115. @R13
  61116. // #22991
  61117. A=M
  61118. // #22992
  61119. M=D
  61120. // #22993
  61121. @R13
  61122. // #22994
  61123. M=0
  61124. //vv pop_to_ram(LCL, 2)
  61125. //
  61126. //// goto IF_END0
  61127. // #22995
  61128. @Output.createShiftedMap$IF_END0
  61129. // #22996
  61130. 0;JMP
  61131. //
  61132. //// label IF_FALSE0
  61133. (Output.createShiftedMap$IF_FALSE0)
  61134. //
  61135. //// push local 2
  61136. //^^ push_from_ram(LCL, 2)
  61137. // #22997
  61138. @LCL
  61139. // #22998
  61140. D=M
  61141. // #22999
  61142. @2
  61143. // #23000
  61144. A=D+A
  61145. // #23001
  61146. D=M
  61147. //^^ push_d_to_stack
  61148. // #23002
  61149. @SP
  61150. // #23003
  61151. A=M
  61152. // #23004
  61153. M=D
  61154. // #23005
  61155. @SP
  61156. // #23006
  61157. M=M+1
  61158. //vv push_d_to_stack
  61159. //vv push_from_ram(LCL, 2)
  61160. //
  61161. //// push constant 1
  61162. //^^ push_constant(1)
  61163. // #23007
  61164. @1
  61165. // #23008
  61166. D=A
  61167. //^^ push_d_to_stack
  61168. // #23009
  61169. @SP
  61170. // #23010
  61171. A=M
  61172. // #23011
  61173. M=D
  61174. // #23012
  61175. @SP
  61176. // #23013
  61177. M=M+1
  61178. //vv push_d_to_stack
  61179. //vv push_constant(1)
  61180. //
  61181. //// add
  61182. //^^ arith_binary_op(+)
  61183. //^^ pop_stack_to_d
  61184. // #23014
  61185. @SP
  61186. // #23015
  61187. M=M-1
  61188. // #23016
  61189. A=M
  61190. // #23017
  61191. D=M
  61192. //vv pop_stack_to_d
  61193. //^^ arith_d_with_stack_top(D+M)
  61194. // #23018
  61195. @R13
  61196. // #23019
  61197. M=D
  61198. //^^ pop_stack_to_d
  61199. // #23020
  61200. @SP
  61201. // #23021
  61202. M=M-1
  61203. // #23022
  61204. A=M
  61205. // #23023
  61206. D=M
  61207. //vv pop_stack_to_d
  61208. // #23024
  61209. @R13
  61210. // #23025
  61211. D=D+M
  61212. // #23026
  61213. @R13
  61214. // #23027
  61215. M=0
  61216. //vv arith_d_with_stack_top(D+M)
  61217. //^^ push_d_to_stack
  61218. // #23028
  61219. @SP
  61220. // #23029
  61221. A=M
  61222. // #23030
  61223. M=D
  61224. // #23031
  61225. @SP
  61226. // #23032
  61227. M=M+1
  61228. //vv push_d_to_stack
  61229. //vv arith_binary_op(+)
  61230. //
  61231. //// pop local 2
  61232. //^^ pop_to_ram(LCL, 2)
  61233. // #23033
  61234. @LCL
  61235. // #23034
  61236. D=M
  61237. // #23035
  61238. @2
  61239. // #23036
  61240. D=D+A
  61241. // #23037
  61242. @R13
  61243. // #23038
  61244. M=D
  61245. //^^ pop_stack_to_d
  61246. // #23039
  61247. @SP
  61248. // #23040
  61249. M=M-1
  61250. // #23041
  61251. A=M
  61252. // #23042
  61253. D=M
  61254. //vv pop_stack_to_d
  61255. // #23043
  61256. @R13
  61257. // #23044
  61258. A=M
  61259. // #23045
  61260. M=D
  61261. // #23046
  61262. @R13
  61263. // #23047
  61264. M=0
  61265. //vv pop_to_ram(LCL, 2)
  61266. //
  61267. //// label IF_END0
  61268. (Output.createShiftedMap$IF_END0)
  61269. //
  61270. //// goto WHILE_EXP0
  61271. // #23048
  61272. @Output.createShiftedMap$WHILE_EXP0
  61273. // #23049
  61274. 0;JMP
  61275. //
  61276. //// label WHILE_END0
  61277. (Output.createShiftedMap$WHILE_END0)
  61278. //
  61279. //// push constant 0
  61280. //^^ push_constant(0)
  61281. // #23050
  61282. @0
  61283. // #23051
  61284. D=A
  61285. //^^ push_d_to_stack
  61286. // #23052
  61287. @SP
  61288. // #23053
  61289. A=M
  61290. // #23054
  61291. M=D
  61292. // #23055
  61293. @SP
  61294. // #23056
  61295. M=M+1
  61296. //vv push_d_to_stack
  61297. //vv push_constant(0)
  61298. //
  61299. //// return
  61300. // #23057
  61301. @LCL
  61302. // #23058
  61303. D=M
  61304. // #23059
  61305. @R14
  61306. // #23060
  61307. M=D //R14=LCL
  61308. // #23061
  61309. @5
  61310. // #23062
  61311. A=D-A
  61312. // #23063
  61313. D=M
  61314. // #23064
  61315. @R15
  61316. // #23065
  61317. M=D //R15=*(LCL-5)
  61318. //^^ pop_stack_to_d
  61319. // #23066
  61320. @SP
  61321. // #23067
  61322. M=M-1
  61323. // #23068
  61324. A=M
  61325. // #23069
  61326. D=M
  61327. //vv pop_stack_to_d
  61328. // #23070
  61329. @ARG
  61330. // #23071
  61331. A=M
  61332. // #23072
  61333. M=D //*ARG = pop()
  61334. // #23073
  61335. @ARG
  61336. // #23074
  61337. D=M
  61338. // #23075
  61339. @SP
  61340. // #23076
  61341. M=D+1 //SP=ARG+1
  61342. // #23077
  61343. @R14
  61344. // #23078
  61345. AM=M-1
  61346. // #23079
  61347. D=M
  61348. // #23080
  61349. @THAT
  61350. // #23081
  61351. M=D //THAT = *(--R14)
  61352. // #23082
  61353. @R14
  61354. // #23083
  61355. AM=M-1
  61356. // #23084
  61357. D=M
  61358. // #23085
  61359. @THIS
  61360. // #23086
  61361. M=D //THIS = *(--R14)
  61362. // #23087
  61363. @R14
  61364. // #23088
  61365. AM=M-1
  61366. // #23089
  61367. D=M
  61368. // #23090
  61369. @ARG
  61370. // #23091
  61371. M=D //ARG = *(--R14)
  61372. // #23092
  61373. @R14
  61374. // #23093
  61375. AM=M-1
  61376. // #23094
  61377. D=M
  61378. // #23095
  61379. @LCL
  61380. // #23096
  61381. M=D //LCL = *(--R14)
  61382. // #23097
  61383. @R15
  61384. // #23098
  61385. A=M
  61386. // #23099
  61387. 0;JMP //goto *R15
  61388. //
  61389. //// function Output.getMap 1
  61390. (Output.getMap)
  61391. // #23100
  61392. D=0
  61393. //^^ push_d_to_stack
  61394. // #23101
  61395. @SP
  61396. // #23102
  61397. A=M
  61398. // #23103
  61399. M=D
  61400. // #23104
  61401. @SP
  61402. // #23105
  61403. M=M+1
  61404. //vv push_d_to_stack
  61405. //
  61406. //// push argument 0
  61407. //^^ push_from_ram(ARG, 0)
  61408. // #23106
  61409. @ARG
  61410. // #23107
  61411. D=M
  61412. // #23108
  61413. @0
  61414. // #23109
  61415. A=D+A
  61416. // #23110
  61417. D=M
  61418. //^^ push_d_to_stack
  61419. // #23111
  61420. @SP
  61421. // #23112
  61422. A=M
  61423. // #23113
  61424. M=D
  61425. // #23114
  61426. @SP
  61427. // #23115
  61428. M=M+1
  61429. //vv push_d_to_stack
  61430. //vv push_from_ram(ARG, 0)
  61431. //
  61432. //// push constant 32
  61433. //^^ push_constant(32)
  61434. // #23116
  61435. @32
  61436. // #23117
  61437. D=A
  61438. //^^ push_d_to_stack
  61439. // #23118
  61440. @SP
  61441. // #23119
  61442. A=M
  61443. // #23120
  61444. M=D
  61445. // #23121
  61446. @SP
  61447. // #23122
  61448. M=M+1
  61449. //vv push_d_to_stack
  61450. //vv push_constant(32)
  61451. //
  61452. //// lt
  61453. //^^ arith_cmp_op(JLT)
  61454. //^^ pop_stack_to_d
  61455. // #23123
  61456. @SP
  61457. // #23124
  61458. M=M-1
  61459. // #23125
  61460. A=M
  61461. // #23126
  61462. D=M
  61463. //vv pop_stack_to_d
  61464. //^^ arith_d_with_stack_top(D-M)
  61465. // #23127
  61466. @R13
  61467. // #23128
  61468. M=D
  61469. //^^ pop_stack_to_d
  61470. // #23129
  61471. @SP
  61472. // #23130
  61473. M=M-1
  61474. // #23131
  61475. A=M
  61476. // #23132
  61477. D=M
  61478. //vv pop_stack_to_d
  61479. // #23133
  61480. @R13
  61481. // #23134
  61482. D=D-M
  61483. // #23135
  61484. @R13
  61485. // #23136
  61486. M=0
  61487. //vv arith_d_with_stack_top(D-M)
  61488. // #23137
  61489. @PUT_TRUE_178
  61490. // #23138
  61491. D;JLT
  61492. // #23139
  61493. @R13
  61494. // #23140
  61495. M=0
  61496. // #23141
  61497. @CONT_178
  61498. // #23142
  61499. 0;JMP
  61500. (PUT_TRUE_178)
  61501. // #23143
  61502. @R13
  61503. // #23144
  61504. M=-1
  61505. (CONT_178)
  61506. // #23145
  61507. @R13
  61508. // #23146
  61509. D=M
  61510. // #23147
  61511. @R13
  61512. // #23148
  61513. M=0
  61514. //^^ push_d_to_stack
  61515. // #23149
  61516. @SP
  61517. // #23150
  61518. A=M
  61519. // #23151
  61520. M=D
  61521. // #23152
  61522. @SP
  61523. // #23153
  61524. M=M+1
  61525. //vv push_d_to_stack
  61526. //vv arith_cmp_op(JLT)
  61527. //
  61528. //// push argument 0
  61529. //^^ push_from_ram(ARG, 0)
  61530. // #23154
  61531. @ARG
  61532. // #23155
  61533. D=M
  61534. // #23156
  61535. @0
  61536. // #23157
  61537. A=D+A
  61538. // #23158
  61539. D=M
  61540. //^^ push_d_to_stack
  61541. // #23159
  61542. @SP
  61543. // #23160
  61544. A=M
  61545. // #23161
  61546. M=D
  61547. // #23162
  61548. @SP
  61549. // #23163
  61550. M=M+1
  61551. //vv push_d_to_stack
  61552. //vv push_from_ram(ARG, 0)
  61553. //
  61554. //// push constant 126
  61555. //^^ push_constant(126)
  61556. // #23164
  61557. @126
  61558. // #23165
  61559. D=A
  61560. //^^ push_d_to_stack
  61561. // #23166
  61562. @SP
  61563. // #23167
  61564. A=M
  61565. // #23168
  61566. M=D
  61567. // #23169
  61568. @SP
  61569. // #23170
  61570. M=M+1
  61571. //vv push_d_to_stack
  61572. //vv push_constant(126)
  61573. //
  61574. //// gt
  61575. //^^ arith_cmp_op(JGT)
  61576. //^^ pop_stack_to_d
  61577. // #23171
  61578. @SP
  61579. // #23172
  61580. M=M-1
  61581. // #23173
  61582. A=M
  61583. // #23174
  61584. D=M
  61585. //vv pop_stack_to_d
  61586. //^^ arith_d_with_stack_top(D-M)
  61587. // #23175
  61588. @R13
  61589. // #23176
  61590. M=D
  61591. //^^ pop_stack_to_d
  61592. // #23177
  61593. @SP
  61594. // #23178
  61595. M=M-1
  61596. // #23179
  61597. A=M
  61598. // #23180
  61599. D=M
  61600. //vv pop_stack_to_d
  61601. // #23181
  61602. @R13
  61603. // #23182
  61604. D=D-M
  61605. // #23183
  61606. @R13
  61607. // #23184
  61608. M=0
  61609. //vv arith_d_with_stack_top(D-M)
  61610. // #23185
  61611. @PUT_TRUE_179
  61612. // #23186
  61613. D;JGT
  61614. // #23187
  61615. @R13
  61616. // #23188
  61617. M=0
  61618. // #23189
  61619. @CONT_179
  61620. // #23190
  61621. 0;JMP
  61622. (PUT_TRUE_179)
  61623. // #23191
  61624. @R13
  61625. // #23192
  61626. M=-1
  61627. (CONT_179)
  61628. // #23193
  61629. @R13
  61630. // #23194
  61631. D=M
  61632. // #23195
  61633. @R13
  61634. // #23196
  61635. M=0
  61636. //^^ push_d_to_stack
  61637. // #23197
  61638. @SP
  61639. // #23198
  61640. A=M
  61641. // #23199
  61642. M=D
  61643. // #23200
  61644. @SP
  61645. // #23201
  61646. M=M+1
  61647. //vv push_d_to_stack
  61648. //vv arith_cmp_op(JGT)
  61649. //
  61650. //// or
  61651. //^^ arith_binary_op(|)
  61652. //^^ pop_stack_to_d
  61653. // #23202
  61654. @SP
  61655. // #23203
  61656. M=M-1
  61657. // #23204
  61658. A=M
  61659. // #23205
  61660. D=M
  61661. //vv pop_stack_to_d
  61662. //^^ arith_d_with_stack_top(D|M)
  61663. // #23206
  61664. @R13
  61665. // #23207
  61666. M=D
  61667. //^^ pop_stack_to_d
  61668. // #23208
  61669. @SP
  61670. // #23209
  61671. M=M-1
  61672. // #23210
  61673. A=M
  61674. // #23211
  61675. D=M
  61676. //vv pop_stack_to_d
  61677. // #23212
  61678. @R13
  61679. // #23213
  61680. D=D|M
  61681. // #23214
  61682. @R13
  61683. // #23215
  61684. M=0
  61685. //vv arith_d_with_stack_top(D|M)
  61686. //^^ push_d_to_stack
  61687. // #23216
  61688. @SP
  61689. // #23217
  61690. A=M
  61691. // #23218
  61692. M=D
  61693. // #23219
  61694. @SP
  61695. // #23220
  61696. M=M+1
  61697. //vv push_d_to_stack
  61698. //vv arith_binary_op(|)
  61699. //
  61700. //// if-goto IF_TRUE0
  61701. //^^ pop_stack_to_d
  61702. // #23221
  61703. @SP
  61704. // #23222
  61705. M=M-1
  61706. // #23223
  61707. A=M
  61708. // #23224
  61709. D=M
  61710. //vv pop_stack_to_d
  61711. // #23225
  61712. @Output.getMap$IF_TRUE0
  61713. // #23226
  61714. D;JNE
  61715. //
  61716. //// goto IF_FALSE0
  61717. // #23227
  61718. @Output.getMap$IF_FALSE0
  61719. // #23228
  61720. 0;JMP
  61721. //
  61722. //// label IF_TRUE0
  61723. (Output.getMap$IF_TRUE0)
  61724. //
  61725. //// push constant 0
  61726. //^^ push_constant(0)
  61727. // #23229
  61728. @0
  61729. // #23230
  61730. D=A
  61731. //^^ push_d_to_stack
  61732. // #23231
  61733. @SP
  61734. // #23232
  61735. A=M
  61736. // #23233
  61737. M=D
  61738. // #23234
  61739. @SP
  61740. // #23235
  61741. M=M+1
  61742. //vv push_d_to_stack
  61743. //vv push_constant(0)
  61744. //
  61745. //// pop argument 0
  61746. //^^ pop_to_ram(ARG, 0)
  61747. // #23236
  61748. @ARG
  61749. // #23237
  61750. D=M
  61751. // #23238
  61752. @0
  61753. // #23239
  61754. D=D+A
  61755. // #23240
  61756. @R13
  61757. // #23241
  61758. M=D
  61759. //^^ pop_stack_to_d
  61760. // #23242
  61761. @SP
  61762. // #23243
  61763. M=M-1
  61764. // #23244
  61765. A=M
  61766. // #23245
  61767. D=M
  61768. //vv pop_stack_to_d
  61769. // #23246
  61770. @R13
  61771. // #23247
  61772. A=M
  61773. // #23248
  61774. M=D
  61775. // #23249
  61776. @R13
  61777. // #23250
  61778. M=0
  61779. //vv pop_to_ram(ARG, 0)
  61780. //
  61781. //// label IF_FALSE0
  61782. (Output.getMap$IF_FALSE0)
  61783. //
  61784. //// push static 2
  61785. //^^ push_from_loc(Output.vm.2)
  61786. // #23251
  61787. @Output.vm.2
  61788. // #23252
  61789. D=M
  61790. //^^ push_d_to_stack
  61791. // #23253
  61792. @SP
  61793. // #23254
  61794. A=M
  61795. // #23255
  61796. M=D
  61797. // #23256
  61798. @SP
  61799. // #23257
  61800. M=M+1
  61801. //vv push_d_to_stack
  61802. //vv push_from_loc(Output.vm.2)
  61803. //
  61804. //// if-goto IF_TRUE1
  61805. //^^ pop_stack_to_d
  61806. // #23258
  61807. @SP
  61808. // #23259
  61809. M=M-1
  61810. // #23260
  61811. A=M
  61812. // #23261
  61813. D=M
  61814. //vv pop_stack_to_d
  61815. // #23262
  61816. @Output.getMap$IF_TRUE1
  61817. // #23263
  61818. D;JNE
  61819. //
  61820. //// goto IF_FALSE1
  61821. // #23264
  61822. @Output.getMap$IF_FALSE1
  61823. // #23265
  61824. 0;JMP
  61825. //
  61826. //// label IF_TRUE1
  61827. (Output.getMap$IF_TRUE1)
  61828. //
  61829. //// push argument 0
  61830. //^^ push_from_ram(ARG, 0)
  61831. // #23266
  61832. @ARG
  61833. // #23267
  61834. D=M
  61835. // #23268
  61836. @0
  61837. // #23269
  61838. A=D+A
  61839. // #23270
  61840. D=M
  61841. //^^ push_d_to_stack
  61842. // #23271
  61843. @SP
  61844. // #23272
  61845. A=M
  61846. // #23273
  61847. M=D
  61848. // #23274
  61849. @SP
  61850. // #23275
  61851. M=M+1
  61852. //vv push_d_to_stack
  61853. //vv push_from_ram(ARG, 0)
  61854. //
  61855. //// push static 5
  61856. //^^ push_from_loc(Output.vm.5)
  61857. // #23276
  61858. @Output.vm.5
  61859. // #23277
  61860. D=M
  61861. //^^ push_d_to_stack
  61862. // #23278
  61863. @SP
  61864. // #23279
  61865. A=M
  61866. // #23280
  61867. M=D
  61868. // #23281
  61869. @SP
  61870. // #23282
  61871. M=M+1
  61872. //vv push_d_to_stack
  61873. //vv push_from_loc(Output.vm.5)
  61874. //
  61875. //// add
  61876. //^^ arith_binary_op(+)
  61877. //^^ pop_stack_to_d
  61878. // #23283
  61879. @SP
  61880. // #23284
  61881. M=M-1
  61882. // #23285
  61883. A=M
  61884. // #23286
  61885. D=M
  61886. //vv pop_stack_to_d
  61887. //^^ arith_d_with_stack_top(D+M)
  61888. // #23287
  61889. @R13
  61890. // #23288
  61891. M=D
  61892. //^^ pop_stack_to_d
  61893. // #23289
  61894. @SP
  61895. // #23290
  61896. M=M-1
  61897. // #23291
  61898. A=M
  61899. // #23292
  61900. D=M
  61901. //vv pop_stack_to_d
  61902. // #23293
  61903. @R13
  61904. // #23294
  61905. D=D+M
  61906. // #23295
  61907. @R13
  61908. // #23296
  61909. M=0
  61910. //vv arith_d_with_stack_top(D+M)
  61911. //^^ push_d_to_stack
  61912. // #23297
  61913. @SP
  61914. // #23298
  61915. A=M
  61916. // #23299
  61917. M=D
  61918. // #23300
  61919. @SP
  61920. // #23301
  61921. M=M+1
  61922. //vv push_d_to_stack
  61923. //vv arith_binary_op(+)
  61924. //
  61925. //// pop pointer 1
  61926. //^^ pop_to_loc{4)
  61927. //^^ pop_stack_to_d
  61928. // #23302
  61929. @SP
  61930. // #23303
  61931. M=M-1
  61932. // #23304
  61933. A=M
  61934. // #23305
  61935. D=M
  61936. //vv pop_stack_to_d
  61937. // #23306
  61938. @4
  61939. // #23307
  61940. M=D
  61941. //vv pop_to_loc{4)
  61942. //
  61943. //// push that 0
  61944. //^^ push_from_ram(THAT, 0)
  61945. // #23308
  61946. @THAT
  61947. // #23309
  61948. D=M
  61949. // #23310
  61950. @0
  61951. // #23311
  61952. A=D+A
  61953. // #23312
  61954. D=M
  61955. //^^ push_d_to_stack
  61956. // #23313
  61957. @SP
  61958. // #23314
  61959. A=M
  61960. // #23315
  61961. M=D
  61962. // #23316
  61963. @SP
  61964. // #23317
  61965. M=M+1
  61966. //vv push_d_to_stack
  61967. //vv push_from_ram(THAT, 0)
  61968. //
  61969. //// pop local 0
  61970. //^^ pop_to_ram(LCL, 0)
  61971. // #23318
  61972. @LCL
  61973. // #23319
  61974. D=M
  61975. // #23320
  61976. @0
  61977. // #23321
  61978. D=D+A
  61979. // #23322
  61980. @R13
  61981. // #23323
  61982. M=D
  61983. //^^ pop_stack_to_d
  61984. // #23324
  61985. @SP
  61986. // #23325
  61987. M=M-1
  61988. // #23326
  61989. A=M
  61990. // #23327
  61991. D=M
  61992. //vv pop_stack_to_d
  61993. // #23328
  61994. @R13
  61995. // #23329
  61996. A=M
  61997. // #23330
  61998. M=D
  61999. // #23331
  62000. @R13
  62001. // #23332
  62002. M=0
  62003. //vv pop_to_ram(LCL, 0)
  62004. //
  62005. //// goto IF_END1
  62006. // #23333
  62007. @Output.getMap$IF_END1
  62008. // #23334
  62009. 0;JMP
  62010. //
  62011. //// label IF_FALSE1
  62012. (Output.getMap$IF_FALSE1)
  62013. //
  62014. //// push argument 0
  62015. //^^ push_from_ram(ARG, 0)
  62016. // #23335
  62017. @ARG
  62018. // #23336
  62019. D=M
  62020. // #23337
  62021. @0
  62022. // #23338
  62023. A=D+A
  62024. // #23339
  62025. D=M
  62026. //^^ push_d_to_stack
  62027. // #23340
  62028. @SP
  62029. // #23341
  62030. A=M
  62031. // #23342
  62032. M=D
  62033. // #23343
  62034. @SP
  62035. // #23344
  62036. M=M+1
  62037. //vv push_d_to_stack
  62038. //vv push_from_ram(ARG, 0)
  62039. //
  62040. //// push static 6
  62041. //^^ push_from_loc(Output.vm.6)
  62042. // #23345
  62043. @Output.vm.6
  62044. // #23346
  62045. D=M
  62046. //^^ push_d_to_stack
  62047. // #23347
  62048. @SP
  62049. // #23348
  62050. A=M
  62051. // #23349
  62052. M=D
  62053. // #23350
  62054. @SP
  62055. // #23351
  62056. M=M+1
  62057. //vv push_d_to_stack
  62058. //vv push_from_loc(Output.vm.6)
  62059. //
  62060. //// add
  62061. //^^ arith_binary_op(+)
  62062. //^^ pop_stack_to_d
  62063. // #23352
  62064. @SP
  62065. // #23353
  62066. M=M-1
  62067. // #23354
  62068. A=M
  62069. // #23355
  62070. D=M
  62071. //vv pop_stack_to_d
  62072. //^^ arith_d_with_stack_top(D+M)
  62073. // #23356
  62074. @R13
  62075. // #23357
  62076. M=D
  62077. //^^ pop_stack_to_d
  62078. // #23358
  62079. @SP
  62080. // #23359
  62081. M=M-1
  62082. // #23360
  62083. A=M
  62084. // #23361
  62085. D=M
  62086. //vv pop_stack_to_d
  62087. // #23362
  62088. @R13
  62089. // #23363
  62090. D=D+M
  62091. // #23364
  62092. @R13
  62093. // #23365
  62094. M=0
  62095. //vv arith_d_with_stack_top(D+M)
  62096. //^^ push_d_to_stack
  62097. // #23366
  62098. @SP
  62099. // #23367
  62100. A=M
  62101. // #23368
  62102. M=D
  62103. // #23369
  62104. @SP
  62105. // #23370
  62106. M=M+1
  62107. //vv push_d_to_stack
  62108. //vv arith_binary_op(+)
  62109. //
  62110. //// pop pointer 1
  62111. //^^ pop_to_loc{4)
  62112. //^^ pop_stack_to_d
  62113. // #23371
  62114. @SP
  62115. // #23372
  62116. M=M-1
  62117. // #23373
  62118. A=M
  62119. // #23374
  62120. D=M
  62121. //vv pop_stack_to_d
  62122. // #23375
  62123. @4
  62124. // #23376
  62125. M=D
  62126. //vv pop_to_loc{4)
  62127. //
  62128. //// push that 0
  62129. //^^ push_from_ram(THAT, 0)
  62130. // #23377
  62131. @THAT
  62132. // #23378
  62133. D=M
  62134. // #23379
  62135. @0
  62136. // #23380
  62137. A=D+A
  62138. // #23381
  62139. D=M
  62140. //^^ push_d_to_stack
  62141. // #23382
  62142. @SP
  62143. // #23383
  62144. A=M
  62145. // #23384
  62146. M=D
  62147. // #23385
  62148. @SP
  62149. // #23386
  62150. M=M+1
  62151. //vv push_d_to_stack
  62152. //vv push_from_ram(THAT, 0)
  62153. //
  62154. //// pop local 0
  62155. //^^ pop_to_ram(LCL, 0)
  62156. // #23387
  62157. @LCL
  62158. // #23388
  62159. D=M
  62160. // #23389
  62161. @0
  62162. // #23390
  62163. D=D+A
  62164. // #23391
  62165. @R13
  62166. // #23392
  62167. M=D
  62168. //^^ pop_stack_to_d
  62169. // #23393
  62170. @SP
  62171. // #23394
  62172. M=M-1
  62173. // #23395
  62174. A=M
  62175. // #23396
  62176. D=M
  62177. //vv pop_stack_to_d
  62178. // #23397
  62179. @R13
  62180. // #23398
  62181. A=M
  62182. // #23399
  62183. M=D
  62184. // #23400
  62185. @R13
  62186. // #23401
  62187. M=0
  62188. //vv pop_to_ram(LCL, 0)
  62189. //
  62190. //// label IF_END1
  62191. (Output.getMap$IF_END1)
  62192. //
  62193. //// push local 0
  62194. //^^ push_from_ram(LCL, 0)
  62195. // #23402
  62196. @LCL
  62197. // #23403
  62198. D=M
  62199. // #23404
  62200. @0
  62201. // #23405
  62202. A=D+A
  62203. // #23406
  62204. D=M
  62205. //^^ push_d_to_stack
  62206. // #23407
  62207. @SP
  62208. // #23408
  62209. A=M
  62210. // #23409
  62211. M=D
  62212. // #23410
  62213. @SP
  62214. // #23411
  62215. M=M+1
  62216. //vv push_d_to_stack
  62217. //vv push_from_ram(LCL, 0)
  62218. //
  62219. //// return
  62220. // #23412
  62221. @LCL
  62222. // #23413
  62223. D=M
  62224. // #23414
  62225. @R14
  62226. // #23415
  62227. M=D //R14=LCL
  62228. // #23416
  62229. @5
  62230. // #23417
  62231. A=D-A
  62232. // #23418
  62233. D=M
  62234. // #23419
  62235. @R15
  62236. // #23420
  62237. M=D //R15=*(LCL-5)
  62238. //^^ pop_stack_to_d
  62239. // #23421
  62240. @SP
  62241. // #23422
  62242. M=M-1
  62243. // #23423
  62244. A=M
  62245. // #23424
  62246. D=M
  62247. //vv pop_stack_to_d
  62248. // #23425
  62249. @ARG
  62250. // #23426
  62251. A=M
  62252. // #23427
  62253. M=D //*ARG = pop()
  62254. // #23428
  62255. @ARG
  62256. // #23429
  62257. D=M
  62258. // #23430
  62259. @SP
  62260. // #23431
  62261. M=D+1 //SP=ARG+1
  62262. // #23432
  62263. @R14
  62264. // #23433
  62265. AM=M-1
  62266. // #23434
  62267. D=M
  62268. // #23435
  62269. @THAT
  62270. // #23436
  62271. M=D //THAT = *(--R14)
  62272. // #23437
  62273. @R14
  62274. // #23438
  62275. AM=M-1
  62276. // #23439
  62277. D=M
  62278. // #23440
  62279. @THIS
  62280. // #23441
  62281. M=D //THIS = *(--R14)
  62282. // #23442
  62283. @R14
  62284. // #23443
  62285. AM=M-1
  62286. // #23444
  62287. D=M
  62288. // #23445
  62289. @ARG
  62290. // #23446
  62291. M=D //ARG = *(--R14)
  62292. // #23447
  62293. @R14
  62294. // #23448
  62295. AM=M-1
  62296. // #23449
  62297. D=M
  62298. // #23450
  62299. @LCL
  62300. // #23451
  62301. M=D //LCL = *(--R14)
  62302. // #23452
  62303. @R15
  62304. // #23453
  62305. A=M
  62306. // #23454
  62307. 0;JMP //goto *R15
  62308. //
  62309. //// function Output.drawChar 4
  62310. (Output.drawChar)
  62311. // #23455
  62312. D=0
  62313. //^^ push_d_to_stack
  62314. // #23456
  62315. @SP
  62316. // #23457
  62317. A=M
  62318. // #23458
  62319. M=D
  62320. // #23459
  62321. @SP
  62322. // #23460
  62323. M=M+1
  62324. //vv push_d_to_stack
  62325. // #23461
  62326. D=0
  62327. //^^ push_d_to_stack
  62328. // #23462
  62329. @SP
  62330. // #23463
  62331. A=M
  62332. // #23464
  62333. M=D
  62334. // #23465
  62335. @SP
  62336. // #23466
  62337. M=M+1
  62338. //vv push_d_to_stack
  62339. // #23467
  62340. D=0
  62341. //^^ push_d_to_stack
  62342. // #23468
  62343. @SP
  62344. // #23469
  62345. A=M
  62346. // #23470
  62347. M=D
  62348. // #23471
  62349. @SP
  62350. // #23472
  62351. M=M+1
  62352. //vv push_d_to_stack
  62353. // #23473
  62354. D=0
  62355. //^^ push_d_to_stack
  62356. // #23474
  62357. @SP
  62358. // #23475
  62359. A=M
  62360. // #23476
  62361. M=D
  62362. // #23477
  62363. @SP
  62364. // #23478
  62365. M=M+1
  62366. //vv push_d_to_stack
  62367. //
  62368. //// push argument 0
  62369. //^^ push_from_ram(ARG, 0)
  62370. // #23479
  62371. @ARG
  62372. // #23480
  62373. D=M
  62374. // #23481
  62375. @0
  62376. // #23482
  62377. A=D+A
  62378. // #23483
  62379. D=M
  62380. //^^ push_d_to_stack
  62381. // #23484
  62382. @SP
  62383. // #23485
  62384. A=M
  62385. // #23486
  62386. M=D
  62387. // #23487
  62388. @SP
  62389. // #23488
  62390. M=M+1
  62391. //vv push_d_to_stack
  62392. //vv push_from_ram(ARG, 0)
  62393. //
  62394. //// call Output.getMap 1
  62395. //^^ push_constant(RET_ADDR_180)
  62396. // #23489
  62397. @RET_ADDR_180
  62398. // #23490
  62399. D=A
  62400. //^^ push_d_to_stack
  62401. // #23491
  62402. @SP
  62403. // #23492
  62404. A=M
  62405. // #23493
  62406. M=D
  62407. // #23494
  62408. @SP
  62409. // #23495
  62410. M=M+1
  62411. //vv push_d_to_stack
  62412. //vv push_constant(RET_ADDR_180)
  62413. //push return-address
  62414. // #23496
  62415. @LCL
  62416. // #23497
  62417. D=M
  62418. //^^ push_d_to_stack
  62419. // #23498
  62420. @SP
  62421. // #23499
  62422. A=M
  62423. // #23500
  62424. M=D
  62425. // #23501
  62426. @SP
  62427. // #23502
  62428. M=M+1
  62429. //vv push_d_to_stack
  62430. //push LCL
  62431. // #23503
  62432. @ARG
  62433. // #23504
  62434. D=M
  62435. //^^ push_d_to_stack
  62436. // #23505
  62437. @SP
  62438. // #23506
  62439. A=M
  62440. // #23507
  62441. M=D
  62442. // #23508
  62443. @SP
  62444. // #23509
  62445. M=M+1
  62446. //vv push_d_to_stack
  62447. //push ARG
  62448. // #23510
  62449. @THIS
  62450. // #23511
  62451. D=M
  62452. //^^ push_d_to_stack
  62453. // #23512
  62454. @SP
  62455. // #23513
  62456. A=M
  62457. // #23514
  62458. M=D
  62459. // #23515
  62460. @SP
  62461. // #23516
  62462. M=M+1
  62463. //vv push_d_to_stack
  62464. //push THIS
  62465. // #23517
  62466. @THAT
  62467. // #23518
  62468. D=M
  62469. //^^ push_d_to_stack
  62470. // #23519
  62471. @SP
  62472. // #23520
  62473. A=M
  62474. // #23521
  62475. M=D
  62476. // #23522
  62477. @SP
  62478. // #23523
  62479. M=M+1
  62480. //vv push_d_to_stack
  62481. //push THAT
  62482. // #23524
  62483. @SP
  62484. // #23525
  62485. D=M
  62486. // #23526
  62487. @ARG
  62488. // #23527
  62489. M=D
  62490. // #23528
  62491. @6
  62492. // #23529
  62493. D=A
  62494. // #23530
  62495. @ARG
  62496. // #23531
  62497. M=M-D // ARG = SP - args - 5
  62498. // #23532
  62499. @SP
  62500. // #23533
  62501. D=M
  62502. // #23534
  62503. @LCL
  62504. // #23535
  62505. M=D // LCL = SP
  62506. // #23536
  62507. @Output.getMap
  62508. // #23537
  62509. 0;JMP
  62510. (RET_ADDR_180)
  62511. //
  62512. //// pop local 2
  62513. //^^ pop_to_ram(LCL, 2)
  62514. // #23538
  62515. @LCL
  62516. // #23539
  62517. D=M
  62518. // #23540
  62519. @2
  62520. // #23541
  62521. D=D+A
  62522. // #23542
  62523. @R13
  62524. // #23543
  62525. M=D
  62526. //^^ pop_stack_to_d
  62527. // #23544
  62528. @SP
  62529. // #23545
  62530. M=M-1
  62531. // #23546
  62532. A=M
  62533. // #23547
  62534. D=M
  62535. //vv pop_stack_to_d
  62536. // #23548
  62537. @R13
  62538. // #23549
  62539. A=M
  62540. // #23550
  62541. M=D
  62542. // #23551
  62543. @R13
  62544. // #23552
  62545. M=0
  62546. //vv pop_to_ram(LCL, 2)
  62547. //
  62548. //// push static 1
  62549. //^^ push_from_loc(Output.vm.1)
  62550. // #23553
  62551. @Output.vm.1
  62552. // #23554
  62553. D=M
  62554. //^^ push_d_to_stack
  62555. // #23555
  62556. @SP
  62557. // #23556
  62558. A=M
  62559. // #23557
  62560. M=D
  62561. // #23558
  62562. @SP
  62563. // #23559
  62564. M=M+1
  62565. //vv push_d_to_stack
  62566. //vv push_from_loc(Output.vm.1)
  62567. //
  62568. //// pop local 0
  62569. //^^ pop_to_ram(LCL, 0)
  62570. // #23560
  62571. @LCL
  62572. // #23561
  62573. D=M
  62574. // #23562
  62575. @0
  62576. // #23563
  62577. D=D+A
  62578. // #23564
  62579. @R13
  62580. // #23565
  62581. M=D
  62582. //^^ pop_stack_to_d
  62583. // #23566
  62584. @SP
  62585. // #23567
  62586. M=M-1
  62587. // #23568
  62588. A=M
  62589. // #23569
  62590. D=M
  62591. //vv pop_stack_to_d
  62592. // #23570
  62593. @R13
  62594. // #23571
  62595. A=M
  62596. // #23572
  62597. M=D
  62598. // #23573
  62599. @R13
  62600. // #23574
  62601. M=0
  62602. //vv pop_to_ram(LCL, 0)
  62603. //
  62604. //// label WHILE_EXP0
  62605. (Output.drawChar$WHILE_EXP0)
  62606. //
  62607. //// push local 1
  62608. //^^ push_from_ram(LCL, 1)
  62609. // #23575
  62610. @LCL
  62611. // #23576
  62612. D=M
  62613. // #23577
  62614. @1
  62615. // #23578
  62616. A=D+A
  62617. // #23579
  62618. D=M
  62619. //^^ push_d_to_stack
  62620. // #23580
  62621. @SP
  62622. // #23581
  62623. A=M
  62624. // #23582
  62625. M=D
  62626. // #23583
  62627. @SP
  62628. // #23584
  62629. M=M+1
  62630. //vv push_d_to_stack
  62631. //vv push_from_ram(LCL, 1)
  62632. //
  62633. //// push constant 11
  62634. //^^ push_constant(11)
  62635. // #23585
  62636. @11
  62637. // #23586
  62638. D=A
  62639. //^^ push_d_to_stack
  62640. // #23587
  62641. @SP
  62642. // #23588
  62643. A=M
  62644. // #23589
  62645. M=D
  62646. // #23590
  62647. @SP
  62648. // #23591
  62649. M=M+1
  62650. //vv push_d_to_stack
  62651. //vv push_constant(11)
  62652. //
  62653. //// lt
  62654. //^^ arith_cmp_op(JLT)
  62655. //^^ pop_stack_to_d
  62656. // #23592
  62657. @SP
  62658. // #23593
  62659. M=M-1
  62660. // #23594
  62661. A=M
  62662. // #23595
  62663. D=M
  62664. //vv pop_stack_to_d
  62665. //^^ arith_d_with_stack_top(D-M)
  62666. // #23596
  62667. @R13
  62668. // #23597
  62669. M=D
  62670. //^^ pop_stack_to_d
  62671. // #23598
  62672. @SP
  62673. // #23599
  62674. M=M-1
  62675. // #23600
  62676. A=M
  62677. // #23601
  62678. D=M
  62679. //vv pop_stack_to_d
  62680. // #23602
  62681. @R13
  62682. // #23603
  62683. D=D-M
  62684. // #23604
  62685. @R13
  62686. // #23605
  62687. M=0
  62688. //vv arith_d_with_stack_top(D-M)
  62689. // #23606
  62690. @PUT_TRUE_181
  62691. // #23607
  62692. D;JLT
  62693. // #23608
  62694. @R13
  62695. // #23609
  62696. M=0
  62697. // #23610
  62698. @CONT_181
  62699. // #23611
  62700. 0;JMP
  62701. (PUT_TRUE_181)
  62702. // #23612
  62703. @R13
  62704. // #23613
  62705. M=-1
  62706. (CONT_181)
  62707. // #23614
  62708. @R13
  62709. // #23615
  62710. D=M
  62711. // #23616
  62712. @R13
  62713. // #23617
  62714. M=0
  62715. //^^ push_d_to_stack
  62716. // #23618
  62717. @SP
  62718. // #23619
  62719. A=M
  62720. // #23620
  62721. M=D
  62722. // #23621
  62723. @SP
  62724. // #23622
  62725. M=M+1
  62726. //vv push_d_to_stack
  62727. //vv arith_cmp_op(JLT)
  62728. //
  62729. //// not
  62730. //^^ arith_unary_op(!)
  62731. //^^ pop_stack_to_d
  62732. // #23623
  62733. @SP
  62734. // #23624
  62735. M=M-1
  62736. // #23625
  62737. A=M
  62738. // #23626
  62739. D=M
  62740. //vv pop_stack_to_d
  62741. // #23627
  62742. D=!D
  62743. //^^ push_d_to_stack
  62744. // #23628
  62745. @SP
  62746. // #23629
  62747. A=M
  62748. // #23630
  62749. M=D
  62750. // #23631
  62751. @SP
  62752. // #23632
  62753. M=M+1
  62754. //vv push_d_to_stack
  62755. //vv arith_unary_op(!)
  62756. //
  62757. //// if-goto WHILE_END0
  62758. //^^ pop_stack_to_d
  62759. // #23633
  62760. @SP
  62761. // #23634
  62762. M=M-1
  62763. // #23635
  62764. A=M
  62765. // #23636
  62766. D=M
  62767. //vv pop_stack_to_d
  62768. // #23637
  62769. @Output.drawChar$WHILE_END0
  62770. // #23638
  62771. D;JNE
  62772. //
  62773. //// push static 2
  62774. //^^ push_from_loc(Output.vm.2)
  62775. // #23639
  62776. @Output.vm.2
  62777. // #23640
  62778. D=M
  62779. //^^ push_d_to_stack
  62780. // #23641
  62781. @SP
  62782. // #23642
  62783. A=M
  62784. // #23643
  62785. M=D
  62786. // #23644
  62787. @SP
  62788. // #23645
  62789. M=M+1
  62790. //vv push_d_to_stack
  62791. //vv push_from_loc(Output.vm.2)
  62792. //
  62793. //// if-goto IF_TRUE0
  62794. //^^ pop_stack_to_d
  62795. // #23646
  62796. @SP
  62797. // #23647
  62798. M=M-1
  62799. // #23648
  62800. A=M
  62801. // #23649
  62802. D=M
  62803. //vv pop_stack_to_d
  62804. // #23650
  62805. @Output.drawChar$IF_TRUE0
  62806. // #23651
  62807. D;JNE
  62808. //
  62809. //// goto IF_FALSE0
  62810. // #23652
  62811. @Output.drawChar$IF_FALSE0
  62812. // #23653
  62813. 0;JMP
  62814. //
  62815. //// label IF_TRUE0
  62816. (Output.drawChar$IF_TRUE0)
  62817. //
  62818. //// push local 0
  62819. //^^ push_from_ram(LCL, 0)
  62820. // #23654
  62821. @LCL
  62822. // #23655
  62823. D=M
  62824. // #23656
  62825. @0
  62826. // #23657
  62827. A=D+A
  62828. // #23658
  62829. D=M
  62830. //^^ push_d_to_stack
  62831. // #23659
  62832. @SP
  62833. // #23660
  62834. A=M
  62835. // #23661
  62836. M=D
  62837. // #23662
  62838. @SP
  62839. // #23663
  62840. M=M+1
  62841. //vv push_d_to_stack
  62842. //vv push_from_ram(LCL, 0)
  62843. //
  62844. //// push static 4
  62845. //^^ push_from_loc(Output.vm.4)
  62846. // #23664
  62847. @Output.vm.4
  62848. // #23665
  62849. D=M
  62850. //^^ push_d_to_stack
  62851. // #23666
  62852. @SP
  62853. // #23667
  62854. A=M
  62855. // #23668
  62856. M=D
  62857. // #23669
  62858. @SP
  62859. // #23670
  62860. M=M+1
  62861. //vv push_d_to_stack
  62862. //vv push_from_loc(Output.vm.4)
  62863. //
  62864. //// add
  62865. //^^ arith_binary_op(+)
  62866. //^^ pop_stack_to_d
  62867. // #23671
  62868. @SP
  62869. // #23672
  62870. M=M-1
  62871. // #23673
  62872. A=M
  62873. // #23674
  62874. D=M
  62875. //vv pop_stack_to_d
  62876. //^^ arith_d_with_stack_top(D+M)
  62877. // #23675
  62878. @R13
  62879. // #23676
  62880. M=D
  62881. //^^ pop_stack_to_d
  62882. // #23677
  62883. @SP
  62884. // #23678
  62885. M=M-1
  62886. // #23679
  62887. A=M
  62888. // #23680
  62889. D=M
  62890. //vv pop_stack_to_d
  62891. // #23681
  62892. @R13
  62893. // #23682
  62894. D=D+M
  62895. // #23683
  62896. @R13
  62897. // #23684
  62898. M=0
  62899. //vv arith_d_with_stack_top(D+M)
  62900. //^^ push_d_to_stack
  62901. // #23685
  62902. @SP
  62903. // #23686
  62904. A=M
  62905. // #23687
  62906. M=D
  62907. // #23688
  62908. @SP
  62909. // #23689
  62910. M=M+1
  62911. //vv push_d_to_stack
  62912. //vv arith_binary_op(+)
  62913. //
  62914. //// pop pointer 1
  62915. //^^ pop_to_loc{4)
  62916. //^^ pop_stack_to_d
  62917. // #23690
  62918. @SP
  62919. // #23691
  62920. M=M-1
  62921. // #23692
  62922. A=M
  62923. // #23693
  62924. D=M
  62925. //vv pop_stack_to_d
  62926. // #23694
  62927. @4
  62928. // #23695
  62929. M=D
  62930. //vv pop_to_loc{4)
  62931. //
  62932. //// push that 0
  62933. //^^ push_from_ram(THAT, 0)
  62934. // #23696
  62935. @THAT
  62936. // #23697
  62937. D=M
  62938. // #23698
  62939. @0
  62940. // #23699
  62941. A=D+A
  62942. // #23700
  62943. D=M
  62944. //^^ push_d_to_stack
  62945. // #23701
  62946. @SP
  62947. // #23702
  62948. A=M
  62949. // #23703
  62950. M=D
  62951. // #23704
  62952. @SP
  62953. // #23705
  62954. M=M+1
  62955. //vv push_d_to_stack
  62956. //vv push_from_ram(THAT, 0)
  62957. //
  62958. //// push constant 256
  62959. //^^ push_constant(256)
  62960. // #23706
  62961. @256
  62962. // #23707
  62963. D=A
  62964. //^^ push_d_to_stack
  62965. // #23708
  62966. @SP
  62967. // #23709
  62968. A=M
  62969. // #23710
  62970. M=D
  62971. // #23711
  62972. @SP
  62973. // #23712
  62974. M=M+1
  62975. //vv push_d_to_stack
  62976. //vv push_constant(256)
  62977. //
  62978. //// neg
  62979. //^^ arith_unary_op(-)
  62980. //^^ pop_stack_to_d
  62981. // #23713
  62982. @SP
  62983. // #23714
  62984. M=M-1
  62985. // #23715
  62986. A=M
  62987. // #23716
  62988. D=M
  62989. //vv pop_stack_to_d
  62990. // #23717
  62991. D=-D
  62992. //^^ push_d_to_stack
  62993. // #23718
  62994. @SP
  62995. // #23719
  62996. A=M
  62997. // #23720
  62998. M=D
  62999. // #23721
  63000. @SP
  63001. // #23722
  63002. M=M+1
  63003. //vv push_d_to_stack
  63004. //vv arith_unary_op(-)
  63005. //
  63006. //// and
  63007. //^^ arith_binary_op(&)
  63008. //^^ pop_stack_to_d
  63009. // #23723
  63010. @SP
  63011. // #23724
  63012. M=M-1
  63013. // #23725
  63014. A=M
  63015. // #23726
  63016. D=M
  63017. //vv pop_stack_to_d
  63018. //^^ arith_d_with_stack_top(D&M)
  63019. // #23727
  63020. @R13
  63021. // #23728
  63022. M=D
  63023. //^^ pop_stack_to_d
  63024. // #23729
  63025. @SP
  63026. // #23730
  63027. M=M-1
  63028. // #23731
  63029. A=M
  63030. // #23732
  63031. D=M
  63032. //vv pop_stack_to_d
  63033. // #23733
  63034. @R13
  63035. // #23734
  63036. D=D&M
  63037. // #23735
  63038. @R13
  63039. // #23736
  63040. M=0
  63041. //vv arith_d_with_stack_top(D&M)
  63042. //^^ push_d_to_stack
  63043. // #23737
  63044. @SP
  63045. // #23738
  63046. A=M
  63047. // #23739
  63048. M=D
  63049. // #23740
  63050. @SP
  63051. // #23741
  63052. M=M+1
  63053. //vv push_d_to_stack
  63054. //vv arith_binary_op(&)
  63055. //
  63056. //// pop local 3
  63057. //^^ pop_to_ram(LCL, 3)
  63058. // #23742
  63059. @LCL
  63060. // #23743
  63061. D=M
  63062. // #23744
  63063. @3
  63064. // #23745
  63065. D=D+A
  63066. // #23746
  63067. @R13
  63068. // #23747
  63069. M=D
  63070. //^^ pop_stack_to_d
  63071. // #23748
  63072. @SP
  63073. // #23749
  63074. M=M-1
  63075. // #23750
  63076. A=M
  63077. // #23751
  63078. D=M
  63079. //vv pop_stack_to_d
  63080. // #23752
  63081. @R13
  63082. // #23753
  63083. A=M
  63084. // #23754
  63085. M=D
  63086. // #23755
  63087. @R13
  63088. // #23756
  63089. M=0
  63090. //vv pop_to_ram(LCL, 3)
  63091. //
  63092. //// goto IF_END0
  63093. // #23757
  63094. @Output.drawChar$IF_END0
  63095. // #23758
  63096. 0;JMP
  63097. //
  63098. //// label IF_FALSE0
  63099. (Output.drawChar$IF_FALSE0)
  63100. //
  63101. //// push local 0
  63102. //^^ push_from_ram(LCL, 0)
  63103. // #23759
  63104. @LCL
  63105. // #23760
  63106. D=M
  63107. // #23761
  63108. @0
  63109. // #23762
  63110. A=D+A
  63111. // #23763
  63112. D=M
  63113. //^^ push_d_to_stack
  63114. // #23764
  63115. @SP
  63116. // #23765
  63117. A=M
  63118. // #23766
  63119. M=D
  63120. // #23767
  63121. @SP
  63122. // #23768
  63123. M=M+1
  63124. //vv push_d_to_stack
  63125. //vv push_from_ram(LCL, 0)
  63126. //
  63127. //// push static 4
  63128. //^^ push_from_loc(Output.vm.4)
  63129. // #23769
  63130. @Output.vm.4
  63131. // #23770
  63132. D=M
  63133. //^^ push_d_to_stack
  63134. // #23771
  63135. @SP
  63136. // #23772
  63137. A=M
  63138. // #23773
  63139. M=D
  63140. // #23774
  63141. @SP
  63142. // #23775
  63143. M=M+1
  63144. //vv push_d_to_stack
  63145. //vv push_from_loc(Output.vm.4)
  63146. //
  63147. //// add
  63148. //^^ arith_binary_op(+)
  63149. //^^ pop_stack_to_d
  63150. // #23776
  63151. @SP
  63152. // #23777
  63153. M=M-1
  63154. // #23778
  63155. A=M
  63156. // #23779
  63157. D=M
  63158. //vv pop_stack_to_d
  63159. //^^ arith_d_with_stack_top(D+M)
  63160. // #23780
  63161. @R13
  63162. // #23781
  63163. M=D
  63164. //^^ pop_stack_to_d
  63165. // #23782
  63166. @SP
  63167. // #23783
  63168. M=M-1
  63169. // #23784
  63170. A=M
  63171. // #23785
  63172. D=M
  63173. //vv pop_stack_to_d
  63174. // #23786
  63175. @R13
  63176. // #23787
  63177. D=D+M
  63178. // #23788
  63179. @R13
  63180. // #23789
  63181. M=0
  63182. //vv arith_d_with_stack_top(D+M)
  63183. //^^ push_d_to_stack
  63184. // #23790
  63185. @SP
  63186. // #23791
  63187. A=M
  63188. // #23792
  63189. M=D
  63190. // #23793
  63191. @SP
  63192. // #23794
  63193. M=M+1
  63194. //vv push_d_to_stack
  63195. //vv arith_binary_op(+)
  63196. //
  63197. //// pop pointer 1
  63198. //^^ pop_to_loc{4)
  63199. //^^ pop_stack_to_d
  63200. // #23795
  63201. @SP
  63202. // #23796
  63203. M=M-1
  63204. // #23797
  63205. A=M
  63206. // #23798
  63207. D=M
  63208. //vv pop_stack_to_d
  63209. // #23799
  63210. @4
  63211. // #23800
  63212. M=D
  63213. //vv pop_to_loc{4)
  63214. //
  63215. //// push that 0
  63216. //^^ push_from_ram(THAT, 0)
  63217. // #23801
  63218. @THAT
  63219. // #23802
  63220. D=M
  63221. // #23803
  63222. @0
  63223. // #23804
  63224. A=D+A
  63225. // #23805
  63226. D=M
  63227. //^^ push_d_to_stack
  63228. // #23806
  63229. @SP
  63230. // #23807
  63231. A=M
  63232. // #23808
  63233. M=D
  63234. // #23809
  63235. @SP
  63236. // #23810
  63237. M=M+1
  63238. //vv push_d_to_stack
  63239. //vv push_from_ram(THAT, 0)
  63240. //
  63241. //// push constant 255
  63242. //^^ push_constant(255)
  63243. // #23811
  63244. @255
  63245. // #23812
  63246. D=A
  63247. //^^ push_d_to_stack
  63248. // #23813
  63249. @SP
  63250. // #23814
  63251. A=M
  63252. // #23815
  63253. M=D
  63254. // #23816
  63255. @SP
  63256. // #23817
  63257. M=M+1
  63258. //vv push_d_to_stack
  63259. //vv push_constant(255)
  63260. //
  63261. //// and
  63262. //^^ arith_binary_op(&)
  63263. //^^ pop_stack_to_d
  63264. // #23818
  63265. @SP
  63266. // #23819
  63267. M=M-1
  63268. // #23820
  63269. A=M
  63270. // #23821
  63271. D=M
  63272. //vv pop_stack_to_d
  63273. //^^ arith_d_with_stack_top(D&M)
  63274. // #23822
  63275. @R13
  63276. // #23823
  63277. M=D
  63278. //^^ pop_stack_to_d
  63279. // #23824
  63280. @SP
  63281. // #23825
  63282. M=M-1
  63283. // #23826
  63284. A=M
  63285. // #23827
  63286. D=M
  63287. //vv pop_stack_to_d
  63288. // #23828
  63289. @R13
  63290. // #23829
  63291. D=D&M
  63292. // #23830
  63293. @R13
  63294. // #23831
  63295. M=0
  63296. //vv arith_d_with_stack_top(D&M)
  63297. //^^ push_d_to_stack
  63298. // #23832
  63299. @SP
  63300. // #23833
  63301. A=M
  63302. // #23834
  63303. M=D
  63304. // #23835
  63305. @SP
  63306. // #23836
  63307. M=M+1
  63308. //vv push_d_to_stack
  63309. //vv arith_binary_op(&)
  63310. //
  63311. //// pop local 3
  63312. //^^ pop_to_ram(LCL, 3)
  63313. // #23837
  63314. @LCL
  63315. // #23838
  63316. D=M
  63317. // #23839
  63318. @3
  63319. // #23840
  63320. D=D+A
  63321. // #23841
  63322. @R13
  63323. // #23842
  63324. M=D
  63325. //^^ pop_stack_to_d
  63326. // #23843
  63327. @SP
  63328. // #23844
  63329. M=M-1
  63330. // #23845
  63331. A=M
  63332. // #23846
  63333. D=M
  63334. //vv pop_stack_to_d
  63335. // #23847
  63336. @R13
  63337. // #23848
  63338. A=M
  63339. // #23849
  63340. M=D
  63341. // #23850
  63342. @R13
  63343. // #23851
  63344. M=0
  63345. //vv pop_to_ram(LCL, 3)
  63346. //
  63347. //// label IF_END0
  63348. (Output.drawChar$IF_END0)
  63349. //
  63350. //// push local 0
  63351. //^^ push_from_ram(LCL, 0)
  63352. // #23852
  63353. @LCL
  63354. // #23853
  63355. D=M
  63356. // #23854
  63357. @0
  63358. // #23855
  63359. A=D+A
  63360. // #23856
  63361. D=M
  63362. //^^ push_d_to_stack
  63363. // #23857
  63364. @SP
  63365. // #23858
  63366. A=M
  63367. // #23859
  63368. M=D
  63369. // #23860
  63370. @SP
  63371. // #23861
  63372. M=M+1
  63373. //vv push_d_to_stack
  63374. //vv push_from_ram(LCL, 0)
  63375. //
  63376. //// push static 4
  63377. //^^ push_from_loc(Output.vm.4)
  63378. // #23862
  63379. @Output.vm.4
  63380. // #23863
  63381. D=M
  63382. //^^ push_d_to_stack
  63383. // #23864
  63384. @SP
  63385. // #23865
  63386. A=M
  63387. // #23866
  63388. M=D
  63389. // #23867
  63390. @SP
  63391. // #23868
  63392. M=M+1
  63393. //vv push_d_to_stack
  63394. //vv push_from_loc(Output.vm.4)
  63395. //
  63396. //// add
  63397. //^^ arith_binary_op(+)
  63398. //^^ pop_stack_to_d
  63399. // #23869
  63400. @SP
  63401. // #23870
  63402. M=M-1
  63403. // #23871
  63404. A=M
  63405. // #23872
  63406. D=M
  63407. //vv pop_stack_to_d
  63408. //^^ arith_d_with_stack_top(D+M)
  63409. // #23873
  63410. @R13
  63411. // #23874
  63412. M=D
  63413. //^^ pop_stack_to_d
  63414. // #23875
  63415. @SP
  63416. // #23876
  63417. M=M-1
  63418. // #23877
  63419. A=M
  63420. // #23878
  63421. D=M
  63422. //vv pop_stack_to_d
  63423. // #23879
  63424. @R13
  63425. // #23880
  63426. D=D+M
  63427. // #23881
  63428. @R13
  63429. // #23882
  63430. M=0
  63431. //vv arith_d_with_stack_top(D+M)
  63432. //^^ push_d_to_stack
  63433. // #23883
  63434. @SP
  63435. // #23884
  63436. A=M
  63437. // #23885
  63438. M=D
  63439. // #23886
  63440. @SP
  63441. // #23887
  63442. M=M+1
  63443. //vv push_d_to_stack
  63444. //vv arith_binary_op(+)
  63445. //
  63446. //// push local 1
  63447. //^^ push_from_ram(LCL, 1)
  63448. // #23888
  63449. @LCL
  63450. // #23889
  63451. D=M
  63452. // #23890
  63453. @1
  63454. // #23891
  63455. A=D+A
  63456. // #23892
  63457. D=M
  63458. //^^ push_d_to_stack
  63459. // #23893
  63460. @SP
  63461. // #23894
  63462. A=M
  63463. // #23895
  63464. M=D
  63465. // #23896
  63466. @SP
  63467. // #23897
  63468. M=M+1
  63469. //vv push_d_to_stack
  63470. //vv push_from_ram(LCL, 1)
  63471. //
  63472. //// push local 2
  63473. //^^ push_from_ram(LCL, 2)
  63474. // #23898
  63475. @LCL
  63476. // #23899
  63477. D=M
  63478. // #23900
  63479. @2
  63480. // #23901
  63481. A=D+A
  63482. // #23902
  63483. D=M
  63484. //^^ push_d_to_stack
  63485. // #23903
  63486. @SP
  63487. // #23904
  63488. A=M
  63489. // #23905
  63490. M=D
  63491. // #23906
  63492. @SP
  63493. // #23907
  63494. M=M+1
  63495. //vv push_d_to_stack
  63496. //vv push_from_ram(LCL, 2)
  63497. //
  63498. //// add
  63499. //^^ arith_binary_op(+)
  63500. //^^ pop_stack_to_d
  63501. // #23908
  63502. @SP
  63503. // #23909
  63504. M=M-1
  63505. // #23910
  63506. A=M
  63507. // #23911
  63508. D=M
  63509. //vv pop_stack_to_d
  63510. //^^ arith_d_with_stack_top(D+M)
  63511. // #23912
  63512. @R13
  63513. // #23913
  63514. M=D
  63515. //^^ pop_stack_to_d
  63516. // #23914
  63517. @SP
  63518. // #23915
  63519. M=M-1
  63520. // #23916
  63521. A=M
  63522. // #23917
  63523. D=M
  63524. //vv pop_stack_to_d
  63525. // #23918
  63526. @R13
  63527. // #23919
  63528. D=D+M
  63529. // #23920
  63530. @R13
  63531. // #23921
  63532. M=0
  63533. //vv arith_d_with_stack_top(D+M)
  63534. //^^ push_d_to_stack
  63535. // #23922
  63536. @SP
  63537. // #23923
  63538. A=M
  63539. // #23924
  63540. M=D
  63541. // #23925
  63542. @SP
  63543. // #23926
  63544. M=M+1
  63545. //vv push_d_to_stack
  63546. //vv arith_binary_op(+)
  63547. //
  63548. //// pop pointer 1
  63549. //^^ pop_to_loc{4)
  63550. //^^ pop_stack_to_d
  63551. // #23927
  63552. @SP
  63553. // #23928
  63554. M=M-1
  63555. // #23929
  63556. A=M
  63557. // #23930
  63558. D=M
  63559. //vv pop_stack_to_d
  63560. // #23931
  63561. @4
  63562. // #23932
  63563. M=D
  63564. //vv pop_to_loc{4)
  63565. //
  63566. //// push that 0
  63567. //^^ push_from_ram(THAT, 0)
  63568. // #23933
  63569. @THAT
  63570. // #23934
  63571. D=M
  63572. // #23935
  63573. @0
  63574. // #23936
  63575. A=D+A
  63576. // #23937
  63577. D=M
  63578. //^^ push_d_to_stack
  63579. // #23938
  63580. @SP
  63581. // #23939
  63582. A=M
  63583. // #23940
  63584. M=D
  63585. // #23941
  63586. @SP
  63587. // #23942
  63588. M=M+1
  63589. //vv push_d_to_stack
  63590. //vv push_from_ram(THAT, 0)
  63591. //
  63592. //// push local 3
  63593. //^^ push_from_ram(LCL, 3)
  63594. // #23943
  63595. @LCL
  63596. // #23944
  63597. D=M
  63598. // #23945
  63599. @3
  63600. // #23946
  63601. A=D+A
  63602. // #23947
  63603. D=M
  63604. //^^ push_d_to_stack
  63605. // #23948
  63606. @SP
  63607. // #23949
  63608. A=M
  63609. // #23950
  63610. M=D
  63611. // #23951
  63612. @SP
  63613. // #23952
  63614. M=M+1
  63615. //vv push_d_to_stack
  63616. //vv push_from_ram(LCL, 3)
  63617. //
  63618. //// or
  63619. //^^ arith_binary_op(|)
  63620. //^^ pop_stack_to_d
  63621. // #23953
  63622. @SP
  63623. // #23954
  63624. M=M-1
  63625. // #23955
  63626. A=M
  63627. // #23956
  63628. D=M
  63629. //vv pop_stack_to_d
  63630. //^^ arith_d_with_stack_top(D|M)
  63631. // #23957
  63632. @R13
  63633. // #23958
  63634. M=D
  63635. //^^ pop_stack_to_d
  63636. // #23959
  63637. @SP
  63638. // #23960
  63639. M=M-1
  63640. // #23961
  63641. A=M
  63642. // #23962
  63643. D=M
  63644. //vv pop_stack_to_d
  63645. // #23963
  63646. @R13
  63647. // #23964
  63648. D=D|M
  63649. // #23965
  63650. @R13
  63651. // #23966
  63652. M=0
  63653. //vv arith_d_with_stack_top(D|M)
  63654. //^^ push_d_to_stack
  63655. // #23967
  63656. @SP
  63657. // #23968
  63658. A=M
  63659. // #23969
  63660. M=D
  63661. // #23970
  63662. @SP
  63663. // #23971
  63664. M=M+1
  63665. //vv push_d_to_stack
  63666. //vv arith_binary_op(|)
  63667. //
  63668. //// pop temp 0
  63669. //^^ pop_to_loc{5)
  63670. //^^ pop_stack_to_d
  63671. // #23972
  63672. @SP
  63673. // #23973
  63674. M=M-1
  63675. // #23974
  63676. A=M
  63677. // #23975
  63678. D=M
  63679. //vv pop_stack_to_d
  63680. // #23976
  63681. @5
  63682. // #23977
  63683. M=D
  63684. //vv pop_to_loc{5)
  63685. //
  63686. //// pop pointer 1
  63687. //^^ pop_to_loc{4)
  63688. //^^ pop_stack_to_d
  63689. // #23978
  63690. @SP
  63691. // #23979
  63692. M=M-1
  63693. // #23980
  63694. A=M
  63695. // #23981
  63696. D=M
  63697. //vv pop_stack_to_d
  63698. // #23982
  63699. @4
  63700. // #23983
  63701. M=D
  63702. //vv pop_to_loc{4)
  63703. //
  63704. //// push temp 0
  63705. //^^ push_from_loc(5)
  63706. // #23984
  63707. @5
  63708. // #23985
  63709. D=M
  63710. //^^ push_d_to_stack
  63711. // #23986
  63712. @SP
  63713. // #23987
  63714. A=M
  63715. // #23988
  63716. M=D
  63717. // #23989
  63718. @SP
  63719. // #23990
  63720. M=M+1
  63721. //vv push_d_to_stack
  63722. //vv push_from_loc(5)
  63723. //
  63724. //// pop that 0
  63725. //^^ pop_to_ram(THAT, 0)
  63726. // #23991
  63727. @THAT
  63728. // #23992
  63729. D=M
  63730. // #23993
  63731. @0
  63732. // #23994
  63733. D=D+A
  63734. // #23995
  63735. @R13
  63736. // #23996
  63737. M=D
  63738. //^^ pop_stack_to_d
  63739. // #23997
  63740. @SP
  63741. // #23998
  63742. M=M-1
  63743. // #23999
  63744. A=M
  63745. // #24000
  63746. D=M
  63747. //vv pop_stack_to_d
  63748. // #24001
  63749. @R13
  63750. // #24002
  63751. A=M
  63752. // #24003
  63753. M=D
  63754. // #24004
  63755. @R13
  63756. // #24005
  63757. M=0
  63758. //vv pop_to_ram(THAT, 0)
  63759. //
  63760. //// push local 0
  63761. //^^ push_from_ram(LCL, 0)
  63762. // #24006
  63763. @LCL
  63764. // #24007
  63765. D=M
  63766. // #24008
  63767. @0
  63768. // #24009
  63769. A=D+A
  63770. // #24010
  63771. D=M
  63772. //^^ push_d_to_stack
  63773. // #24011
  63774. @SP
  63775. // #24012
  63776. A=M
  63777. // #24013
  63778. M=D
  63779. // #24014
  63780. @SP
  63781. // #24015
  63782. M=M+1
  63783. //vv push_d_to_stack
  63784. //vv push_from_ram(LCL, 0)
  63785. //
  63786. //// push constant 32
  63787. //^^ push_constant(32)
  63788. // #24016
  63789. @32
  63790. // #24017
  63791. D=A
  63792. //^^ push_d_to_stack
  63793. // #24018
  63794. @SP
  63795. // #24019
  63796. A=M
  63797. // #24020
  63798. M=D
  63799. // #24021
  63800. @SP
  63801. // #24022
  63802. M=M+1
  63803. //vv push_d_to_stack
  63804. //vv push_constant(32)
  63805. //
  63806. //// add
  63807. //^^ arith_binary_op(+)
  63808. //^^ pop_stack_to_d
  63809. // #24023
  63810. @SP
  63811. // #24024
  63812. M=M-1
  63813. // #24025
  63814. A=M
  63815. // #24026
  63816. D=M
  63817. //vv pop_stack_to_d
  63818. //^^ arith_d_with_stack_top(D+M)
  63819. // #24027
  63820. @R13
  63821. // #24028
  63822. M=D
  63823. //^^ pop_stack_to_d
  63824. // #24029
  63825. @SP
  63826. // #24030
  63827. M=M-1
  63828. // #24031
  63829. A=M
  63830. // #24032
  63831. D=M
  63832. //vv pop_stack_to_d
  63833. // #24033
  63834. @R13
  63835. // #24034
  63836. D=D+M
  63837. // #24035
  63838. @R13
  63839. // #24036
  63840. M=0
  63841. //vv arith_d_with_stack_top(D+M)
  63842. //^^ push_d_to_stack
  63843. // #24037
  63844. @SP
  63845. // #24038
  63846. A=M
  63847. // #24039
  63848. M=D
  63849. // #24040
  63850. @SP
  63851. // #24041
  63852. M=M+1
  63853. //vv push_d_to_stack
  63854. //vv arith_binary_op(+)
  63855. //
  63856. //// pop local 0
  63857. //^^ pop_to_ram(LCL, 0)
  63858. // #24042
  63859. @LCL
  63860. // #24043
  63861. D=M
  63862. // #24044
  63863. @0
  63864. // #24045
  63865. D=D+A
  63866. // #24046
  63867. @R13
  63868. // #24047
  63869. M=D
  63870. //^^ pop_stack_to_d
  63871. // #24048
  63872. @SP
  63873. // #24049
  63874. M=M-1
  63875. // #24050
  63876. A=M
  63877. // #24051
  63878. D=M
  63879. //vv pop_stack_to_d
  63880. // #24052
  63881. @R13
  63882. // #24053
  63883. A=M
  63884. // #24054
  63885. M=D
  63886. // #24055
  63887. @R13
  63888. // #24056
  63889. M=0
  63890. //vv pop_to_ram(LCL, 0)
  63891. //
  63892. //// push local 1
  63893. //^^ push_from_ram(LCL, 1)
  63894. // #24057
  63895. @LCL
  63896. // #24058
  63897. D=M
  63898. // #24059
  63899. @1
  63900. // #24060
  63901. A=D+A
  63902. // #24061
  63903. D=M
  63904. //^^ push_d_to_stack
  63905. // #24062
  63906. @SP
  63907. // #24063
  63908. A=M
  63909. // #24064
  63910. M=D
  63911. // #24065
  63912. @SP
  63913. // #24066
  63914. M=M+1
  63915. //vv push_d_to_stack
  63916. //vv push_from_ram(LCL, 1)
  63917. //
  63918. //// push constant 1
  63919. //^^ push_constant(1)
  63920. // #24067
  63921. @1
  63922. // #24068
  63923. D=A
  63924. //^^ push_d_to_stack
  63925. // #24069
  63926. @SP
  63927. // #24070
  63928. A=M
  63929. // #24071
  63930. M=D
  63931. // #24072
  63932. @SP
  63933. // #24073
  63934. M=M+1
  63935. //vv push_d_to_stack
  63936. //vv push_constant(1)
  63937. //
  63938. //// add
  63939. //^^ arith_binary_op(+)
  63940. //^^ pop_stack_to_d
  63941. // #24074
  63942. @SP
  63943. // #24075
  63944. M=M-1
  63945. // #24076
  63946. A=M
  63947. // #24077
  63948. D=M
  63949. //vv pop_stack_to_d
  63950. //^^ arith_d_with_stack_top(D+M)
  63951. // #24078
  63952. @R13
  63953. // #24079
  63954. M=D
  63955. //^^ pop_stack_to_d
  63956. // #24080
  63957. @SP
  63958. // #24081
  63959. M=M-1
  63960. // #24082
  63961. A=M
  63962. // #24083
  63963. D=M
  63964. //vv pop_stack_to_d
  63965. // #24084
  63966. @R13
  63967. // #24085
  63968. D=D+M
  63969. // #24086
  63970. @R13
  63971. // #24087
  63972. M=0
  63973. //vv arith_d_with_stack_top(D+M)
  63974. //^^ push_d_to_stack
  63975. // #24088
  63976. @SP
  63977. // #24089
  63978. A=M
  63979. // #24090
  63980. M=D
  63981. // #24091
  63982. @SP
  63983. // #24092
  63984. M=M+1
  63985. //vv push_d_to_stack
  63986. //vv arith_binary_op(+)
  63987. //
  63988. //// pop local 1
  63989. //^^ pop_to_ram(LCL, 1)
  63990. // #24093
  63991. @LCL
  63992. // #24094
  63993. D=M
  63994. // #24095
  63995. @1
  63996. // #24096
  63997. D=D+A
  63998. // #24097
  63999. @R13
  64000. // #24098
  64001. M=D
  64002. //^^ pop_stack_to_d
  64003. // #24099
  64004. @SP
  64005. // #24100
  64006. M=M-1
  64007. // #24101
  64008. A=M
  64009. // #24102
  64010. D=M
  64011. //vv pop_stack_to_d
  64012. // #24103
  64013. @R13
  64014. // #24104
  64015. A=M
  64016. // #24105
  64017. M=D
  64018. // #24106
  64019. @R13
  64020. // #24107
  64021. M=0
  64022. //vv pop_to_ram(LCL, 1)
  64023. //
  64024. //// goto WHILE_EXP0
  64025. // #24108
  64026. @Output.drawChar$WHILE_EXP0
  64027. // #24109
  64028. 0;JMP
  64029. //
  64030. //// label WHILE_END0
  64031. (Output.drawChar$WHILE_END0)
  64032. //
  64033. //// push constant 0
  64034. //^^ push_constant(0)
  64035. // #24110
  64036. @0
  64037. // #24111
  64038. D=A
  64039. //^^ push_d_to_stack
  64040. // #24112
  64041. @SP
  64042. // #24113
  64043. A=M
  64044. // #24114
  64045. M=D
  64046. // #24115
  64047. @SP
  64048. // #24116
  64049. M=M+1
  64050. //vv push_d_to_stack
  64051. //vv push_constant(0)
  64052. //
  64053. //// return
  64054. // #24117
  64055. @LCL
  64056. // #24118
  64057. D=M
  64058. // #24119
  64059. @R14
  64060. // #24120
  64061. M=D //R14=LCL
  64062. // #24121
  64063. @5
  64064. // #24122
  64065. A=D-A
  64066. // #24123
  64067. D=M
  64068. // #24124
  64069. @R15
  64070. // #24125
  64071. M=D //R15=*(LCL-5)
  64072. //^^ pop_stack_to_d
  64073. // #24126
  64074. @SP
  64075. // #24127
  64076. M=M-1
  64077. // #24128
  64078. A=M
  64079. // #24129
  64080. D=M
  64081. //vv pop_stack_to_d
  64082. // #24130
  64083. @ARG
  64084. // #24131
  64085. A=M
  64086. // #24132
  64087. M=D //*ARG = pop()
  64088. // #24133
  64089. @ARG
  64090. // #24134
  64091. D=M
  64092. // #24135
  64093. @SP
  64094. // #24136
  64095. M=D+1 //SP=ARG+1
  64096. // #24137
  64097. @R14
  64098. // #24138
  64099. AM=M-1
  64100. // #24139
  64101. D=M
  64102. // #24140
  64103. @THAT
  64104. // #24141
  64105. M=D //THAT = *(--R14)
  64106. // #24142
  64107. @R14
  64108. // #24143
  64109. AM=M-1
  64110. // #24144
  64111. D=M
  64112. // #24145
  64113. @THIS
  64114. // #24146
  64115. M=D //THIS = *(--R14)
  64116. // #24147
  64117. @R14
  64118. // #24148
  64119. AM=M-1
  64120. // #24149
  64121. D=M
  64122. // #24150
  64123. @ARG
  64124. // #24151
  64125. M=D //ARG = *(--R14)
  64126. // #24152
  64127. @R14
  64128. // #24153
  64129. AM=M-1
  64130. // #24154
  64131. D=M
  64132. // #24155
  64133. @LCL
  64134. // #24156
  64135. M=D //LCL = *(--R14)
  64136. // #24157
  64137. @R15
  64138. // #24158
  64139. A=M
  64140. // #24159
  64141. 0;JMP //goto *R15
  64142. //
  64143. //// function Output.moveCursor 0
  64144. (Output.moveCursor)
  64145. //
  64146. //// push argument 0
  64147. //^^ push_from_ram(ARG, 0)
  64148. // #24160
  64149. @ARG
  64150. // #24161
  64151. D=M
  64152. // #24162
  64153. @0
  64154. // #24163
  64155. A=D+A
  64156. // #24164
  64157. D=M
  64158. //^^ push_d_to_stack
  64159. // #24165
  64160. @SP
  64161. // #24166
  64162. A=M
  64163. // #24167
  64164. M=D
  64165. // #24168
  64166. @SP
  64167. // #24169
  64168. M=M+1
  64169. //vv push_d_to_stack
  64170. //vv push_from_ram(ARG, 0)
  64171. //
  64172. //// call String.newLine 0
  64173. //^^ push_constant(RET_ADDR_192)
  64174. // #24170
  64175. @RET_ADDR_192
  64176. // #24171
  64177. D=A
  64178. //^^ push_d_to_stack
  64179. // #24172
  64180. @SP
  64181. // #24173
  64182. A=M
  64183. // #24174
  64184. M=D
  64185. // #24175
  64186. @SP
  64187. // #24176
  64188. M=M+1
  64189. //vv push_d_to_stack
  64190. //vv push_constant(RET_ADDR_192)
  64191. //push return-address
  64192. // #24177
  64193. @LCL
  64194. // #24178
  64195. D=M
  64196. //^^ push_d_to_stack
  64197. // #24179
  64198. @SP
  64199. // #24180
  64200. A=M
  64201. // #24181
  64202. M=D
  64203. // #24182
  64204. @SP
  64205. // #24183
  64206. M=M+1
  64207. //vv push_d_to_stack
  64208. //push LCL
  64209. // #24184
  64210. @ARG
  64211. // #24185
  64212. D=M
  64213. //^^ push_d_to_stack
  64214. // #24186
  64215. @SP
  64216. // #24187
  64217. A=M
  64218. // #24188
  64219. M=D
  64220. // #24189
  64221. @SP
  64222. // #24190
  64223. M=M+1
  64224. //vv push_d_to_stack
  64225. //push ARG
  64226. // #24191
  64227. @THIS
  64228. // #24192
  64229. D=M
  64230. //^^ push_d_to_stack
  64231. // #24193
  64232. @SP
  64233. // #24194
  64234. A=M
  64235. // #24195
  64236. M=D
  64237. // #24196
  64238. @SP
  64239. // #24197
  64240. M=M+1
  64241. //vv push_d_to_stack
  64242. //push THIS
  64243. // #24198
  64244. @THAT
  64245. // #24199
  64246. D=M
  64247. //^^ push_d_to_stack
  64248. // #24200
  64249. @SP
  64250. // #24201
  64251. A=M
  64252. // #24202
  64253. M=D
  64254. // #24203
  64255. @SP
  64256. // #24204
  64257. M=M+1
  64258. //vv push_d_to_stack
  64259. //push THAT
  64260. // #24205
  64261. @SP
  64262. // #24206
  64263. D=M
  64264. // #24207
  64265. @ARG
  64266. // #24208
  64267. M=D
  64268. // #24209
  64269. @5
  64270. // #24210
  64271. D=A
  64272. // #24211
  64273. @ARG
  64274. // #24212
  64275. M=M-D // ARG = SP - args - 5
  64276. // #24213
  64277. @SP
  64278. // #24214
  64279. D=M
  64280. // #24215
  64281. @LCL
  64282. // #24216
  64283. M=D // LCL = SP
  64284. // #24217
  64285. @String.newLine
  64286. // #24218
  64287. 0;JMP
  64288. (RET_ADDR_192)
  64289. //
  64290. //// eq
  64291. //^^ arith_cmp_op(JEQ)
  64292. //^^ pop_stack_to_d
  64293. // #24219
  64294. @SP
  64295. // #24220
  64296. M=M-1
  64297. // #24221
  64298. A=M
  64299. // #24222
  64300. D=M
  64301. //vv pop_stack_to_d
  64302. //^^ arith_d_with_stack_top(D-M)
  64303. // #24223
  64304. @R13
  64305. // #24224
  64306. M=D
  64307. //^^ pop_stack_to_d
  64308. // #24225
  64309. @SP
  64310. // #24226
  64311. M=M-1
  64312. // #24227
  64313. A=M
  64314. // #24228
  64315. D=M
  64316. //vv pop_stack_to_d
  64317. // #24229
  64318. @R13
  64319. // #24230
  64320. D=D-M
  64321. // #24231
  64322. @R13
  64323. // #24232
  64324. M=0
  64325. //vv arith_d_with_stack_top(D-M)
  64326. // #24233
  64327. @PUT_TRUE_193
  64328. // #24234
  64329. D;JEQ
  64330. // #24235
  64331. @R13
  64332. // #24236
  64333. M=0
  64334. // #24237
  64335. @CONT_193
  64336. // #24238
  64337. 0;JMP
  64338. (PUT_TRUE_193)
  64339. // #24239
  64340. @R13
  64341. // #24240
  64342. M=-1
  64343. (CONT_193)
  64344. // #24241
  64345. @R13
  64346. // #24242
  64347. D=M
  64348. // #24243
  64349. @R13
  64350. // #24244
  64351. M=0
  64352. //^^ push_d_to_stack
  64353. // #24245
  64354. @SP
  64355. // #24246
  64356. A=M
  64357. // #24247
  64358. M=D
  64359. // #24248
  64360. @SP
  64361. // #24249
  64362. M=M+1
  64363. //vv push_d_to_stack
  64364. //vv arith_cmp_op(JEQ)
  64365. //
  64366. //// if-goto IF_TRUE0
  64367. //^^ pop_stack_to_d
  64368. // #24250
  64369. @SP
  64370. // #24251
  64371. M=M-1
  64372. // #24252
  64373. A=M
  64374. // #24253
  64375. D=M
  64376. //vv pop_stack_to_d
  64377. // #24254
  64378. @Output.printChar$IF_TRUE0
  64379. // #24255
  64380. D;JNE
  64381. //
  64382. //// goto IF_FALSE0
  64383. // #24256
  64384. @Output.printChar$IF_FALSE0
  64385. // #24257
  64386. 0;JMP
  64387. //
  64388. //// label IF_TRUE0
  64389. (Output.printChar$IF_TRUE0)
  64390. //
  64391. //// call Output.println 0
  64392. //^^ push_constant(RET_ADDR_194)
  64393. // #24258
  64394. @RET_ADDR_194
  64395. // #24259
  64396. D=A
  64397. //^^ push_d_to_stack
  64398. // #24260
  64399. @SP
  64400. // #24261
  64401. A=M
  64402. // #24262
  64403. M=D
  64404. // #24263
  64405. @SP
  64406. // #24264
  64407. M=M+1
  64408. //vv push_d_to_stack
  64409. //vv push_constant(RET_ADDR_194)
  64410. //push return-address
  64411. // #24265
  64412. @LCL
  64413. // #24266
  64414. D=M
  64415. //^^ push_d_to_stack
  64416. // #24267
  64417. @SP
  64418. // #24268
  64419. A=M
  64420. // #24269
  64421. M=D
  64422. // #24270
  64423. @SP
  64424. // #24271
  64425. M=M+1
  64426. //vv push_d_to_stack
  64427. //push LCL
  64428. // #24272
  64429. @ARG
  64430. // #24273
  64431. D=M
  64432. //^^ push_d_to_stack
  64433. // #24274
  64434. @SP
  64435. // #24275
  64436. A=M
  64437. // #24276
  64438. M=D
  64439. // #24277
  64440. @SP
  64441. // #24278
  64442. M=M+1
  64443. //vv push_d_to_stack
  64444. //push ARG
  64445. // #24279
  64446. @THIS
  64447. // #24280
  64448. D=M
  64449. //^^ push_d_to_stack
  64450. // #24281
  64451. @SP
  64452. // #24282
  64453. A=M
  64454. // #24283
  64455. M=D
  64456. // #24284
  64457. @SP
  64458. // #24285
  64459. M=M+1
  64460. //vv push_d_to_stack
  64461. //push THIS
  64462. // #24286
  64463. @THAT
  64464. // #24287
  64465. D=M
  64466. //^^ push_d_to_stack
  64467. // #24288
  64468. @SP
  64469. // #24289
  64470. A=M
  64471. // #24290
  64472. M=D
  64473. // #24291
  64474. @SP
  64475. // #24292
  64476. M=M+1
  64477. //vv push_d_to_stack
  64478. //push THAT
  64479. // #24293
  64480. @SP
  64481. // #24294
  64482. D=M
  64483. // #24295
  64484. @ARG
  64485. // #24296
  64486. M=D
  64487. // #24297
  64488. @5
  64489. // #24298
  64490. D=A
  64491. // #24299
  64492. @ARG
  64493. // #24300
  64494. M=M-D // ARG = SP - args - 5
  64495. // #24301
  64496. @SP
  64497. // #24302
  64498. D=M
  64499. // #24303
  64500. @LCL
  64501. // #24304
  64502. M=D // LCL = SP
  64503. // #24305
  64504. @Output.println
  64505. // #24306
  64506. 0;JMP
  64507. (RET_ADDR_194)
  64508. //
  64509. //// pop temp 0
  64510. //^^ pop_to_loc{5)
  64511. //^^ pop_stack_to_d
  64512. // #24307
  64513. @SP
  64514. // #24308
  64515. M=M-1
  64516. // #24309
  64517. A=M
  64518. // #24310
  64519. D=M
  64520. //vv pop_stack_to_d
  64521. // #24311
  64522. @5
  64523. // #24312
  64524. M=D
  64525. //vv pop_to_loc{5)
  64526. //
  64527. //// goto IF_END0
  64528. // #24313
  64529. @Output.printChar$IF_END0
  64530. // #24314
  64531. 0;JMP
  64532. //
  64533. //// label IF_FALSE0
  64534. (Output.printChar$IF_FALSE0)
  64535. //
  64536. //// push argument 0
  64537. //^^ push_from_ram(ARG, 0)
  64538. // #24315
  64539. @ARG
  64540. // #24316
  64541. D=M
  64542. // #24317
  64543. @0
  64544. // #24318
  64545. A=D+A
  64546. // #24319
  64547. D=M
  64548. //^^ push_d_to_stack
  64549. // #24320
  64550. @SP
  64551. // #24321
  64552. A=M
  64553. // #24322
  64554. M=D
  64555. // #24323
  64556. @SP
  64557. // #24324
  64558. M=M+1
  64559. //vv push_d_to_stack
  64560. //vv push_from_ram(ARG, 0)
  64561. //
  64562. //// call String.backSpace 0
  64563. //^^ push_constant(RET_ADDR_195)
  64564. // #24325
  64565. @RET_ADDR_195
  64566. // #24326
  64567. D=A
  64568. //^^ push_d_to_stack
  64569. // #24327
  64570. @SP
  64571. // #24328
  64572. A=M
  64573. // #24329
  64574. M=D
  64575. // #24330
  64576. @SP
  64577. // #24331
  64578. M=M+1
  64579. //vv push_d_to_stack
  64580. //vv push_constant(RET_ADDR_195)
  64581. //push return-address
  64582. // #24332
  64583. @LCL
  64584. // #24333
  64585. D=M
  64586. //^^ push_d_to_stack
  64587. // #24334
  64588. @SP
  64589. // #24335
  64590. A=M
  64591. // #24336
  64592. M=D
  64593. // #24337
  64594. @SP
  64595. // #24338
  64596. M=M+1
  64597. //vv push_d_to_stack
  64598. //push LCL
  64599. // #24339
  64600. @ARG
  64601. // #24340
  64602. D=M
  64603. //^^ push_d_to_stack
  64604. // #24341
  64605. @SP
  64606. // #24342
  64607. A=M
  64608. // #24343
  64609. M=D
  64610. // #24344
  64611. @SP
  64612. // #24345
  64613. M=M+1
  64614. //vv push_d_to_stack
  64615. //push ARG
  64616. // #24346
  64617. @THIS
  64618. // #24347
  64619. D=M
  64620. //^^ push_d_to_stack
  64621. // #24348
  64622. @SP
  64623. // #24349
  64624. A=M
  64625. // #24350
  64626. M=D
  64627. // #24351
  64628. @SP
  64629. // #24352
  64630. M=M+1
  64631. //vv push_d_to_stack
  64632. //push THIS
  64633. // #24353
  64634. @THAT
  64635. // #24354
  64636. D=M
  64637. //^^ push_d_to_stack
  64638. // #24355
  64639. @SP
  64640. // #24356
  64641. A=M
  64642. // #24357
  64643. M=D
  64644. // #24358
  64645. @SP
  64646. // #24359
  64647. M=M+1
  64648. //vv push_d_to_stack
  64649. //push THAT
  64650. // #24360
  64651. @SP
  64652. // #24361
  64653. D=M
  64654. // #24362
  64655. @ARG
  64656. // #24363
  64657. M=D
  64658. // #24364
  64659. @5
  64660. // #24365
  64661. D=A
  64662. // #24366
  64663. @ARG
  64664. // #24367
  64665. M=M-D // ARG = SP - args - 5
  64666. // #24368
  64667. @SP
  64668. // #24369
  64669. D=M
  64670. // #24370
  64671. @LCL
  64672. // #24371
  64673. M=D // LCL = SP
  64674. // #24372
  64675. @String.backSpace
  64676. // #24373
  64677. 0;JMP
  64678. (RET_ADDR_195)
  64679. //
  64680. //// eq
  64681. //^^ arith_cmp_op(JEQ)
  64682. //^^ pop_stack_to_d
  64683. // #24374
  64684. @SP
  64685. // #24375
  64686. M=M-1
  64687. // #24376
  64688. A=M
  64689. // #24377
  64690. D=M
  64691. //vv pop_stack_to_d
  64692. //^^ arith_d_with_stack_top(D-M)
  64693. // #24378
  64694. @R13
  64695. // #24379
  64696. M=D
  64697. //^^ pop_stack_to_d
  64698. // #24380
  64699. @SP
  64700. // #24381
  64701. M=M-1
  64702. // #24382
  64703. A=M
  64704. // #24383
  64705. D=M
  64706. //vv pop_stack_to_d
  64707. // #24384
  64708. @R13
  64709. // #24385
  64710. D=D-M
  64711. // #24386
  64712. @R13
  64713. // #24387
  64714. M=0
  64715. //vv arith_d_with_stack_top(D-M)
  64716. // #24388
  64717. @PUT_TRUE_196
  64718. // #24389
  64719. D;JEQ
  64720. // #24390
  64721. @R13
  64722. // #24391
  64723. M=0
  64724. // #24392
  64725. @CONT_196
  64726. // #24393
  64727. 0;JMP
  64728. (PUT_TRUE_196)
  64729. // #24394
  64730. @R13
  64731. // #24395
  64732. M=-1
  64733. (CONT_196)
  64734. // #24396
  64735. @R13
  64736. // #24397
  64737. D=M
  64738. // #24398
  64739. @R13
  64740. // #24399
  64741. M=0
  64742. //^^ push_d_to_stack
  64743. // #24400
  64744. @SP
  64745. // #24401
  64746. A=M
  64747. // #24402
  64748. M=D
  64749. // #24403
  64750. @SP
  64751. // #24404
  64752. M=M+1
  64753. //vv push_d_to_stack
  64754. //vv arith_cmp_op(JEQ)
  64755. //
  64756. //// if-goto IF_TRUE1
  64757. //^^ pop_stack_to_d
  64758. // #24405
  64759. @SP
  64760. // #24406
  64761. M=M-1
  64762. // #24407
  64763. A=M
  64764. // #24408
  64765. D=M
  64766. //vv pop_stack_to_d
  64767. // #24409
  64768. @Output.printChar$IF_TRUE1
  64769. // #24410
  64770. D;JNE
  64771. //
  64772. //// goto IF_FALSE1
  64773. // #24411
  64774. @Output.printChar$IF_FALSE1
  64775. // #24412
  64776. 0;JMP
  64777. //
  64778. //// label IF_TRUE1
  64779. (Output.printChar$IF_TRUE1)
  64780. //
  64781. //// call Output.backSpace 0
  64782. //^^ push_constant(RET_ADDR_197)
  64783. // #24413
  64784. @RET_ADDR_197
  64785. // #24414
  64786. D=A
  64787. //^^ push_d_to_stack
  64788. // #24415
  64789. @SP
  64790. // #24416
  64791. A=M
  64792. // #24417
  64793. M=D
  64794. // #24418
  64795. @SP
  64796. // #24419
  64797. M=M+1
  64798. //vv push_d_to_stack
  64799. //vv push_constant(RET_ADDR_197)
  64800. //push return-address
  64801. // #24420
  64802. @LCL
  64803. // #24421
  64804. D=M
  64805. //^^ push_d_to_stack
  64806. // #24422
  64807. @SP
  64808. // #24423
  64809. A=M
  64810. // #24424
  64811. M=D
  64812. // #24425
  64813. @SP
  64814. // #24426
  64815. M=M+1
  64816. //vv push_d_to_stack
  64817. //push LCL
  64818. // #24427
  64819. @ARG
  64820. // #24428
  64821. D=M
  64822. //^^ push_d_to_stack
  64823. // #24429
  64824. @SP
  64825. // #24430
  64826. A=M
  64827. // #24431
  64828. M=D
  64829. // #24432
  64830. @SP
  64831. // #24433
  64832. M=M+1
  64833. //vv push_d_to_stack
  64834. //push ARG
  64835. // #24434
  64836. @THIS
  64837. // #24435
  64838. D=M
  64839. //^^ push_d_to_stack
  64840. // #24436
  64841. @SP
  64842. // #24437
  64843. A=M
  64844. // #24438
  64845. M=D
  64846. // #24439
  64847. @SP
  64848. // #24440
  64849. M=M+1
  64850. //vv push_d_to_stack
  64851. //push THIS
  64852. // #24441
  64853. @THAT
  64854. // #24442
  64855. D=M
  64856. //^^ push_d_to_stack
  64857. // #24443
  64858. @SP
  64859. // #24444
  64860. A=M
  64861. // #24445
  64862. M=D
  64863. // #24446
  64864. @SP
  64865. // #24447
  64866. M=M+1
  64867. //vv push_d_to_stack
  64868. //push THAT
  64869. // #24448
  64870. @SP
  64871. // #24449
  64872. D=M
  64873. // #24450
  64874. @ARG
  64875. // #24451
  64876. M=D
  64877. // #24452
  64878. @5
  64879. // #24453
  64880. D=A
  64881. // #24454
  64882. @ARG
  64883. // #24455
  64884. M=M-D // ARG = SP - args - 5
  64885. // #24456
  64886. @SP
  64887. // #24457
  64888. D=M
  64889. // #24458
  64890. @LCL
  64891. // #24459
  64892. M=D // LCL = SP
  64893. // #24460
  64894. @Output.backSpace
  64895. // #24461
  64896. 0;JMP
  64897. (RET_ADDR_197)
  64898. //
  64899. //// pop temp 0
  64900. //^^ pop_to_loc{5)
  64901. //^^ pop_stack_to_d
  64902. // #24462
  64903. @SP
  64904. // #24463
  64905. M=M-1
  64906. // #24464
  64907. A=M
  64908. // #24465
  64909. D=M
  64910. //vv pop_stack_to_d
  64911. // #24466
  64912. @5
  64913. // #24467
  64914. M=D
  64915. //vv pop_to_loc{5)
  64916. //
  64917. //// goto IF_END1
  64918. // #24468
  64919. @Output.printChar$IF_END1
  64920. // #24469
  64921. 0;JMP
  64922. //
  64923. //// label IF_FALSE1
  64924. (Output.printChar$IF_FALSE1)
  64925. //
  64926. //// push argument 0
  64927. //^^ push_from_ram(ARG, 0)
  64928. // #24470
  64929. @ARG
  64930. // #24471
  64931. D=M
  64932. // #24472
  64933. @0
  64934. // #24473
  64935. A=D+A
  64936. // #24474
  64937. D=M
  64938. //^^ push_d_to_stack
  64939. // #24475
  64940. @SP
  64941. // #24476
  64942. A=M
  64943. // #24477
  64944. M=D
  64945. // #24478
  64946. @SP
  64947. // #24479
  64948. M=M+1
  64949. //vv push_d_to_stack
  64950. //vv push_from_ram(ARG, 0)
  64951. //
  64952. //// call Output.drawChar 1
  64953. //^^ push_constant(RET_ADDR_198)
  64954. // #24480
  64955. @RET_ADDR_198
  64956. // #24481
  64957. D=A
  64958. //^^ push_d_to_stack
  64959. // #24482
  64960. @SP
  64961. // #24483
  64962. A=M
  64963. // #24484
  64964. M=D
  64965. // #24485
  64966. @SP
  64967. // #24486
  64968. M=M+1
  64969. //vv push_d_to_stack
  64970. //vv push_constant(RET_ADDR_198)
  64971. //push return-address
  64972. // #24487
  64973. @LCL
  64974. // #24488
  64975. D=M
  64976. //^^ push_d_to_stack
  64977. // #24489
  64978. @SP
  64979. // #24490
  64980. A=M
  64981. // #24491
  64982. M=D
  64983. // #24492
  64984. @SP
  64985. // #24493
  64986. M=M+1
  64987. //vv push_d_to_stack
  64988. //push LCL
  64989. // #24494
  64990. @ARG
  64991. // #24495
  64992. D=M
  64993. //^^ push_d_to_stack
  64994. // #24496
  64995. @SP
  64996. // #24497
  64997. A=M
  64998. // #24498
  64999. M=D
  65000. // #24499
  65001. @SP
  65002. // #24500
  65003. M=M+1
  65004. //vv push_d_to_stack
  65005. //push ARG
  65006. // #24501
  65007. @THIS
  65008. // #24502
  65009. D=M
  65010. //^^ push_d_to_stack
  65011. // #24503
  65012. @SP
  65013. // #24504
  65014. A=M
  65015. // #24505
  65016. M=D
  65017. // #24506
  65018. @SP
  65019. // #24507
  65020. M=M+1
  65021. //vv push_d_to_stack
  65022. //push THIS
  65023. // #24508
  65024. @THAT
  65025. // #24509
  65026. D=M
  65027. //^^ push_d_to_stack
  65028. // #24510
  65029. @SP
  65030. // #24511
  65031. A=M
  65032. // #24512
  65033. M=D
  65034. // #24513
  65035. @SP
  65036. // #24514
  65037. M=M+1
  65038. //vv push_d_to_stack
  65039. //push THAT
  65040. // #24515
  65041. @SP
  65042. // #24516
  65043. D=M
  65044. // #24517
  65045. @ARG
  65046. // #24518
  65047. M=D
  65048. // #24519
  65049. @6
  65050. // #24520
  65051. D=A
  65052. // #24521
  65053. @ARG
  65054. // #24522
  65055. M=M-D // ARG = SP - args - 5
  65056. // #24523
  65057. @SP
  65058. // #24524
  65059. D=M
  65060. // #24525
  65061. @LCL
  65062. // #24526
  65063. M=D // LCL = SP
  65064. // #24527
  65065. @Output.drawChar
  65066. // #24528
  65067. 0;JMP
  65068. (RET_ADDR_198)
  65069. //
  65070. //// pop temp 0
  65071. //^^ pop_to_loc{5)
  65072. //^^ pop_stack_to_d
  65073. // #24529
  65074. @SP
  65075. // #24530
  65076. M=M-1
  65077. // #24531
  65078. A=M
  65079. // #24532
  65080. D=M
  65081. //vv pop_stack_to_d
  65082. // #24533
  65083. @5
  65084. // #24534
  65085. M=D
  65086. //vv pop_to_loc{5)
  65087. //
  65088. //// push static 2
  65089. //^^ push_from_loc(Output.vm.2)
  65090. // #24535
  65091. @Output.vm.2
  65092. // #24536
  65093. D=M
  65094. //^^ push_d_to_stack
  65095. // #24537
  65096. @SP
  65097. // #24538
  65098. A=M
  65099. // #24539
  65100. M=D
  65101. // #24540
  65102. @SP
  65103. // #24541
  65104. M=M+1
  65105. //vv push_d_to_stack
  65106. //vv push_from_loc(Output.vm.2)
  65107. //
  65108. //// not
  65109. //^^ arith_unary_op(!)
  65110. //^^ pop_stack_to_d
  65111. // #24542
  65112. @SP
  65113. // #24543
  65114. M=M-1
  65115. // #24544
  65116. A=M
  65117. // #24545
  65118. D=M
  65119. //vv pop_stack_to_d
  65120. // #24546
  65121. D=!D
  65122. //^^ push_d_to_stack
  65123. // #24547
  65124. @SP
  65125. // #24548
  65126. A=M
  65127. // #24549
  65128. M=D
  65129. // #24550
  65130. @SP
  65131. // #24551
  65132. M=M+1
  65133. //vv push_d_to_stack
  65134. //vv arith_unary_op(!)
  65135. //
  65136. //// if-goto IF_TRUE2
  65137. //^^ pop_stack_to_d
  65138. // #24552
  65139. @SP
  65140. // #24553
  65141. M=M-1
  65142. // #24554
  65143. A=M
  65144. // #24555
  65145. D=M
  65146. //vv pop_stack_to_d
  65147. // #24556
  65148. @Output.printChar$IF_TRUE2
  65149. // #24557
  65150. D;JNE
  65151. //
  65152. //// goto IF_FALSE2
  65153. // #24558
  65154. @Output.printChar$IF_FALSE2
  65155. // #24559
  65156. 0;JMP
  65157. //
  65158. //// label IF_TRUE2
  65159. (Output.printChar$IF_TRUE2)
  65160. //
  65161. //// push static 0
  65162. //^^ push_from_loc(Output.vm.0)
  65163. // #24560
  65164. @Output.vm.0
  65165. // #24561
  65166. D=M
  65167. //^^ push_d_to_stack
  65168. // #24562
  65169. @SP
  65170. // #24563
  65171. A=M
  65172. // #24564
  65173. M=D
  65174. // #24565
  65175. @SP
  65176. // #24566
  65177. M=M+1
  65178. //vv push_d_to_stack
  65179. //vv push_from_loc(Output.vm.0)
  65180. //
  65181. //// push constant 1
  65182. //^^ push_constant(1)
  65183. // #24567
  65184. @1
  65185. // #24568
  65186. D=A
  65187. //^^ push_d_to_stack
  65188. // #24569
  65189. @SP
  65190. // #24570
  65191. A=M
  65192. // #24571
  65193. M=D
  65194. // #24572
  65195. @SP
  65196. // #24573
  65197. M=M+1
  65198. //vv push_d_to_stack
  65199. //vv push_constant(1)
  65200. //
  65201. //// add
  65202. //^^ arith_binary_op(+)
  65203. //^^ pop_stack_to_d
  65204. // #24574
  65205. @SP
  65206. // #24575
  65207. M=M-1
  65208. // #24576
  65209. A=M
  65210. // #24577
  65211. D=M
  65212. //vv pop_stack_to_d
  65213. //^^ arith_d_with_stack_top(D+M)
  65214. // #24578
  65215. @R13
  65216. // #24579
  65217. M=D
  65218. //^^ pop_stack_to_d
  65219. // #24580
  65220. @SP
  65221. // #24581
  65222. M=M-1
  65223. // #24582
  65224. A=M
  65225. // #24583
  65226. D=M
  65227. //vv pop_stack_to_d
  65228. // #24584
  65229. @R13
  65230. // #24585
  65231. D=D+M
  65232. // #24586
  65233. @R13
  65234. // #24587
  65235. M=0
  65236. //vv arith_d_with_stack_top(D+M)
  65237. //^^ push_d_to_stack
  65238. // #24588
  65239. @SP
  65240. // #24589
  65241. A=M
  65242. // #24590
  65243. M=D
  65244. // #24591
  65245. @SP
  65246. // #24592
  65247. M=M+1
  65248. //vv push_d_to_stack
  65249. //vv arith_binary_op(+)
  65250. //
  65251. //// pop static 0
  65252. //^^ pop_to_loc{Output.vm.0)
  65253. //^^ pop_stack_to_d
  65254. // #24593
  65255. @SP
  65256. // #24594
  65257. M=M-1
  65258. // #24595
  65259. A=M
  65260. // #24596
  65261. D=M
  65262. //vv pop_stack_to_d
  65263. // #24597
  65264. @Output.vm.0
  65265. // #24598
  65266. M=D
  65267. //vv pop_to_loc{Output.vm.0)
  65268. //
  65269. //// push static 1
  65270. //^^ push_from_loc(Output.vm.1)
  65271. // #24599
  65272. @Output.vm.1
  65273. // #24600
  65274. D=M
  65275. //^^ push_d_to_stack
  65276. // #24601
  65277. @SP
  65278. // #24602
  65279. A=M
  65280. // #24603
  65281. M=D
  65282. // #24604
  65283. @SP
  65284. // #24605
  65285. M=M+1
  65286. //vv push_d_to_stack
  65287. //vv push_from_loc(Output.vm.1)
  65288. //
  65289. //// push constant 1
  65290. //^^ push_constant(1)
  65291. // #24606
  65292. @1
  65293. // #24607
  65294. D=A
  65295. //^^ push_d_to_stack
  65296. // #24608
  65297. @SP
  65298. // #24609
  65299. A=M
  65300. // #24610
  65301. M=D
  65302. // #24611
  65303. @SP
  65304. // #24612
  65305. M=M+1
  65306. //vv push_d_to_stack
  65307. //vv push_constant(1)
  65308. //
  65309. //// add
  65310. //^^ arith_binary_op(+)
  65311. //^^ pop_stack_to_d
  65312. // #24613
  65313. @SP
  65314. // #24614
  65315. M=M-1
  65316. // #24615
  65317. A=M
  65318. // #24616
  65319. D=M
  65320. //vv pop_stack_to_d
  65321. //^^ arith_d_with_stack_top(D+M)
  65322. // #24617
  65323. @R13
  65324. // #24618
  65325. M=D
  65326. //^^ pop_stack_to_d
  65327. // #24619
  65328. @SP
  65329. // #24620
  65330. M=M-1
  65331. // #24621
  65332. A=M
  65333. // #24622
  65334. D=M
  65335. //vv pop_stack_to_d
  65336. // #24623
  65337. @R13
  65338. // #24624
  65339. D=D+M
  65340. // #24625
  65341. @R13
  65342. // #24626
  65343. M=0
  65344. //vv arith_d_with_stack_top(D+M)
  65345. //^^ push_d_to_stack
  65346. // #24627
  65347. @SP
  65348. // #24628
  65349. A=M
  65350. // #24629
  65351. M=D
  65352. // #24630
  65353. @SP
  65354. // #24631
  65355. M=M+1
  65356. //vv push_d_to_stack
  65357. //vv arith_binary_op(+)
  65358. //
  65359. //// pop static 1
  65360. //^^ pop_to_loc{Output.vm.1)
  65361. //^^ pop_stack_to_d
  65362. // #24632
  65363. @SP
  65364. // #24633
  65365. M=M-1
  65366. // #24634
  65367. A=M
  65368. // #24635
  65369. D=M
  65370. //vv pop_stack_to_d
  65371. // #24636
  65372. @Output.vm.1
  65373. // #24637
  65374. M=D
  65375. //vv pop_to_loc{Output.vm.1)
  65376. //
  65377. //// label IF_FALSE2
  65378. (Output.printChar$IF_FALSE2)
  65379. //
  65380. //// push static 0
  65381. //^^ push_from_loc(Output.vm.0)
  65382. // #24638
  65383. @Output.vm.0
  65384. // #24639
  65385. D=M
  65386. //^^ push_d_to_stack
  65387. // #24640
  65388. @SP
  65389. // #24641
  65390. A=M
  65391. // #24642
  65392. M=D
  65393. // #24643
  65394. @SP
  65395. // #24644
  65396. M=M+1
  65397. //vv push_d_to_stack
  65398. //vv push_from_loc(Output.vm.0)
  65399. //
  65400. //// push constant 32
  65401. //^^ push_constant(32)
  65402. // #24645
  65403. @32
  65404. // #24646
  65405. D=A
  65406. //^^ push_d_to_stack
  65407. // #24647
  65408. @SP
  65409. // #24648
  65410. A=M
  65411. // #24649
  65412. M=D
  65413. // #24650
  65414. @SP
  65415. // #24651
  65416. M=M+1
  65417. //vv push_d_to_stack
  65418. //vv push_constant(32)
  65419. //
  65420. //// eq
  65421. //^^ arith_cmp_op(JEQ)
  65422. //^^ pop_stack_to_d
  65423. // #24652
  65424. @SP
  65425. // #24653
  65426. M=M-1
  65427. // #24654
  65428. A=M
  65429. // #24655
  65430. D=M
  65431. //vv pop_stack_to_d
  65432. //^^ arith_d_with_stack_top(D-M)
  65433. // #24656
  65434. @R13
  65435. // #24657
  65436. M=D
  65437. //^^ pop_stack_to_d
  65438. // #24658
  65439. @SP
  65440. // #24659
  65441. M=M-1
  65442. // #24660
  65443. A=M
  65444. // #24661
  65445. D=M
  65446. //vv pop_stack_to_d
  65447. // #24662
  65448. @R13
  65449. // #24663
  65450. D=D-M
  65451. // #24664
  65452. @R13
  65453. // #24665
  65454. M=0
  65455. //vv arith_d_with_stack_top(D-M)
  65456. // #24666
  65457. @PUT_TRUE_199
  65458. // #24667
  65459. D;JEQ
  65460. // #24668
  65461. @R13
  65462. // #24669
  65463. M=0
  65464. // #24670
  65465. @CONT_199
  65466. // #24671
  65467. 0;JMP
  65468. (PUT_TRUE_199)
  65469. // #24672
  65470. @R13
  65471. // #24673
  65472. M=-1
  65473. (CONT_199)
  65474. // #24674
  65475. @R13
  65476. // #24675
  65477. D=M
  65478. // #24676
  65479. @R13
  65480. // #24677
  65481. M=0
  65482. //^^ push_d_to_stack
  65483. // #24678
  65484. @SP
  65485. // #24679
  65486. A=M
  65487. // #24680
  65488. M=D
  65489. // #24681
  65490. @SP
  65491. // #24682
  65492. M=M+1
  65493. //vv push_d_to_stack
  65494. //vv arith_cmp_op(JEQ)
  65495. //
  65496. //// if-goto IF_TRUE3
  65497. //^^ pop_stack_to_d
  65498. // #24683
  65499. @SP
  65500. // #24684
  65501. M=M-1
  65502. // #24685
  65503. A=M
  65504. // #24686
  65505. D=M
  65506. //vv pop_stack_to_d
  65507. // #24687
  65508. @Output.printChar$IF_TRUE3
  65509. // #24688
  65510. D;JNE
  65511. //
  65512. //// goto IF_FALSE3
  65513. // #24689
  65514. @Output.printChar$IF_FALSE3
  65515. // #24690
  65516. 0;JMP
  65517. //
  65518. //// label IF_TRUE3
  65519. (Output.printChar$IF_TRUE3)
  65520. //
  65521. //// call Output.println 0
  65522. //^^ push_constant(RET_ADDR_200)
  65523. // #24691
  65524. @RET_ADDR_200
  65525. // #24692
  65526. D=A
  65527. //^^ push_d_to_stack
  65528. // #24693
  65529. @SP
  65530. // #24694
  65531. A=M
  65532. // #24695
  65533. M=D
  65534. // #24696
  65535. @SP
  65536. // #24697
  65537. M=M+1
  65538. //vv push_d_to_stack
  65539. //vv push_constant(RET_ADDR_200)
  65540. //push return-address
  65541. // #24698
  65542. @LCL
  65543. // #24699
  65544. D=M
  65545. //^^ push_d_to_stack
  65546. // #24700
  65547. @SP
  65548. // #24701
  65549. A=M
  65550. // #24702
  65551. M=D
  65552. // #24703
  65553. @SP
  65554. // #24704
  65555. M=M+1
  65556. //vv push_d_to_stack
  65557. //push LCL
  65558. // #24705
  65559. @ARG
  65560. // #24706
  65561. D=M
  65562. //^^ push_d_to_stack
  65563. // #24707
  65564. @SP
  65565. // #24708
  65566. A=M
  65567. // #24709
  65568. M=D
  65569. // #24710
  65570. @SP
  65571. // #24711
  65572. M=M+1
  65573. //vv push_d_to_stack
  65574. //push ARG
  65575. // #24712
  65576. @THIS
  65577. // #24713
  65578. D=M
  65579. //^^ push_d_to_stack
  65580. // #24714
  65581. @SP
  65582. // #24715
  65583. A=M
  65584. // #24716
  65585. M=D
  65586. // #24717
  65587. @SP
  65588. // #24718
  65589. M=M+1
  65590. //vv push_d_to_stack
  65591. //push THIS
  65592. // #24719
  65593. @THAT
  65594. // #24720
  65595. D=M
  65596. //^^ push_d_to_stack
  65597. // #24721
  65598. @SP
  65599. // #24722
  65600. A=M
  65601. // #24723
  65602. M=D
  65603. // #24724
  65604. @SP
  65605. // #24725
  65606. M=M+1
  65607. //vv push_d_to_stack
  65608. //push THAT
  65609. // #24726
  65610. @SP
  65611. // #24727
  65612. D=M
  65613. // #24728
  65614. @ARG
  65615. // #24729
  65616. M=D
  65617. // #24730
  65618. @5
  65619. // #24731
  65620. D=A
  65621. // #24732
  65622. @ARG
  65623. // #24733
  65624. M=M-D // ARG = SP - args - 5
  65625. // #24734
  65626. @SP
  65627. // #24735
  65628. D=M
  65629. // #24736
  65630. @LCL
  65631. // #24737
  65632. M=D // LCL = SP
  65633. // #24738
  65634. @Output.println
  65635. // #24739
  65636. 0;JMP
  65637. (RET_ADDR_200)
  65638. //
  65639. //// pop temp 0
  65640. //^^ pop_to_loc{5)
  65641. //^^ pop_stack_to_d
  65642. // #24740
  65643. @SP
  65644. // #24741
  65645. M=M-1
  65646. // #24742
  65647. A=M
  65648. // #24743
  65649. D=M
  65650. //vv pop_stack_to_d
  65651. // #24744
  65652. @5
  65653. // #24745
  65654. M=D
  65655. //vv pop_to_loc{5)
  65656. //
  65657. //// goto IF_END3
  65658. // #24746
  65659. @Output.printChar$IF_END3
  65660. // #24747
  65661. 0;JMP
  65662. //
  65663. //// label IF_FALSE3
  65664. (Output.printChar$IF_FALSE3)
  65665. //
  65666. //// push static 2
  65667. //^^ push_from_loc(Output.vm.2)
  65668. // #24748
  65669. @Output.vm.2
  65670. // #24749
  65671. D=M
  65672. //^^ push_d_to_stack
  65673. // #24750
  65674. @SP
  65675. // #24751
  65676. A=M
  65677. // #24752
  65678. M=D
  65679. // #24753
  65680. @SP
  65681. // #24754
  65682. M=M+1
  65683. //vv push_d_to_stack
  65684. //vv push_from_loc(Output.vm.2)
  65685. //
  65686. //// not
  65687. //^^ arith_unary_op(!)
  65688. //^^ pop_stack_to_d
  65689. // #24755
  65690. @SP
  65691. // #24756
  65692. M=M-1
  65693. // #24757
  65694. A=M
  65695. // #24758
  65696. D=M
  65697. //vv pop_stack_to_d
  65698. // #24759
  65699. D=!D
  65700. //^^ push_d_to_stack
  65701. // #24760
  65702. @SP
  65703. // #24761
  65704. A=M
  65705. // #24762
  65706. M=D
  65707. // #24763
  65708. @SP
  65709. // #24764
  65710. M=M+1
  65711. //vv push_d_to_stack
  65712. //vv arith_unary_op(!)
  65713. //
  65714. //// pop static 2
  65715. //^^ pop_to_loc{Output.vm.2)
  65716. //^^ pop_stack_to_d
  65717. // #24765
  65718. @SP
  65719. // #24766
  65720. M=M-1
  65721. // #24767
  65722. A=M
  65723. // #24768
  65724. D=M
  65725. //vv pop_stack_to_d
  65726. // #24769
  65727. @Output.vm.2
  65728. // #24770
  65729. M=D
  65730. //vv pop_to_loc{Output.vm.2)
  65731. //
  65732. //// label IF_END3
  65733. (Output.printChar$IF_END3)
  65734. //
  65735. //// label IF_END1
  65736. (Output.printChar$IF_END1)
  65737. //
  65738. //// label IF_END0
  65739. (Output.printChar$IF_END0)
  65740. //
  65741. //// push constant 0
  65742. //^^ push_constant(0)
  65743. // #24771
  65744. @0
  65745. // #24772
  65746. D=A
  65747. //^^ push_d_to_stack
  65748. // #24773
  65749. @SP
  65750. // #24774
  65751. A=M
  65752. // #24775
  65753. M=D
  65754. // #24776
  65755. @SP
  65756. // #24777
  65757. M=M+1
  65758. //vv push_d_to_stack
  65759. //vv push_constant(0)
  65760. //
  65761. //// return
  65762. // #24778
  65763. @LCL
  65764. // #24779
  65765. D=M
  65766. // #24780
  65767. @R14
  65768. // #24781
  65769. M=D //R14=LCL
  65770. // #24782
  65771. @5
  65772. // #24783
  65773. A=D-A
  65774. // #24784
  65775. D=M
  65776. // #24785
  65777. @R15
  65778. // #24786
  65779. M=D //R15=*(LCL-5)
  65780. //^^ pop_stack_to_d
  65781. // #24787
  65782. @SP
  65783. // #24788
  65784. M=M-1
  65785. // #24789
  65786. A=M
  65787. // #24790
  65788. D=M
  65789. //vv pop_stack_to_d
  65790. // #24791
  65791. @ARG
  65792. // #24792
  65793. A=M
  65794. // #24793
  65795. M=D //*ARG = pop()
  65796. // #24794
  65797. @ARG
  65798. // #24795
  65799. D=M
  65800. // #24796
  65801. @SP
  65802. // #24797
  65803. M=D+1 //SP=ARG+1
  65804. // #24798
  65805. @R14
  65806. // #24799
  65807. AM=M-1
  65808. // #24800
  65809. D=M
  65810. // #24801
  65811. @THAT
  65812. // #24802
  65813. M=D //THAT = *(--R14)
  65814. // #24803
  65815. @R14
  65816. // #24804
  65817. AM=M-1
  65818. // #24805
  65819. D=M
  65820. // #24806
  65821. @THIS
  65822. // #24807
  65823. M=D //THIS = *(--R14)
  65824. // #24808
  65825. @R14
  65826. // #24809
  65827. AM=M-1
  65828. // #24810
  65829. D=M
  65830. // #24811
  65831. @ARG
  65832. // #24812
  65833. M=D //ARG = *(--R14)
  65834. // #24813
  65835. @R14
  65836. // #24814
  65837. AM=M-1
  65838. // #24815
  65839. D=M
  65840. // #24816
  65841. @LCL
  65842. // #24817
  65843. M=D //LCL = *(--R14)
  65844. // #24818
  65845. @R15
  65846. // #24819
  65847. A=M
  65848. // #24820
  65849. 0;JMP //goto *R15
  65850. //
  65851. //// function Output.printString 2
  65852. (Output.printString)
  65853. // #24821
  65854. D=0
  65855. //^^ push_d_to_stack
  65856. // #24822
  65857. @SP
  65858. // #24823
  65859. A=M
  65860. // #24824
  65861. M=D
  65862. // #24825
  65863. @SP
  65864. // #24826
  65865. M=M+1
  65866. //vv push_d_to_stack
  65867. // #24827
  65868. D=0
  65869. //^^ push_d_to_stack
  65870. // #24828
  65871. @SP
  65872. // #24829
  65873. A=M
  65874. // #24830
  65875. M=D
  65876. // #24831
  65877. @SP
  65878. // #24832
  65879. M=M+1
  65880. //vv push_d_to_stack
  65881. //
  65882. //// push argument 0
  65883. //^^ push_from_ram(ARG, 0)
  65884. // #24833
  65885. @ARG
  65886. // #24834
  65887. D=M
  65888. // #24835
  65889. @0
  65890. // #24836
  65891. A=D+A
  65892. // #24837
  65893. D=M
  65894. //^^ push_d_to_stack
  65895. // #24838
  65896. @SP
  65897. // #24839
  65898. A=M
  65899. // #24840
  65900. M=D
  65901. // #24841
  65902. @SP
  65903. // #24842
  65904. M=M+1
  65905. //vv push_d_to_stack
  65906. //vv push_from_ram(ARG, 0)
  65907. //
  65908. //// call String.length 1
  65909. //^^ push_constant(RET_ADDR_201)
  65910. // #24843
  65911. @RET_ADDR_201
  65912. // #24844
  65913. D=A
  65914. //^^ push_d_to_stack
  65915. // #24845
  65916. @SP
  65917. // #24846
  65918. A=M
  65919. // #24847
  65920. M=D
  65921. // #24848
  65922. @SP
  65923. // #24849
  65924. M=M+1
  65925. //vv push_d_to_stack
  65926. //vv push_constant(RET_ADDR_201)
  65927. //push return-address
  65928. // #24850
  65929. @LCL
  65930. // #24851
  65931. D=M
  65932. //^^ push_d_to_stack
  65933. // #24852
  65934. @SP
  65935. // #24853
  65936. A=M
  65937. // #24854
  65938. M=D
  65939. // #24855
  65940. @SP
  65941. // #24856
  65942. M=M+1
  65943. //vv push_d_to_stack
  65944. //push LCL
  65945. // #24857
  65946. @ARG
  65947. // #24858
  65948. D=M
  65949. //^^ push_d_to_stack
  65950. // #24859
  65951. @SP
  65952. // #24860
  65953. A=M
  65954. // #24861
  65955. M=D
  65956. // #24862
  65957. @SP
  65958. // #24863
  65959. M=M+1
  65960. //vv push_d_to_stack
  65961. //push ARG
  65962. // #24864
  65963. @THIS
  65964. // #24865
  65965. D=M
  65966. //^^ push_d_to_stack
  65967. // #24866
  65968. @SP
  65969. // #24867
  65970. A=M
  65971. // #24868
  65972. M=D
  65973. // #24869
  65974. @SP
  65975. // #24870
  65976. M=M+1
  65977. //vv push_d_to_stack
  65978. //push THIS
  65979. // #24871
  65980. @THAT
  65981. // #24872
  65982. D=M
  65983. //^^ push_d_to_stack
  65984. // #24873
  65985. @SP
  65986. // #24874
  65987. A=M
  65988. // #24875
  65989. M=D
  65990. // #24876
  65991. @SP
  65992. // #24877
  65993. M=M+1
  65994. //vv push_d_to_stack
  65995. //push THAT
  65996. // #24878
  65997. @SP
  65998. // #24879
  65999. D=M
  66000. // #24880
  66001. @ARG
  66002. // #24881
  66003. M=D
  66004. // #24882
  66005. @6
  66006. // #24883
  66007. D=A
  66008. // #24884
  66009. @ARG
  66010. // #24885
  66011. M=M-D // ARG = SP - args - 5
  66012. // #24886
  66013. @SP
  66014. // #24887
  66015. D=M
  66016. // #24888
  66017. @LCL
  66018. // #24889
  66019. M=D // LCL = SP
  66020. // #24890
  66021. @String.length
  66022. // #24891
  66023. 0;JMP
  66024. (RET_ADDR_201)
  66025. //
  66026. //// pop local 1
  66027. //^^ pop_to_ram(LCL, 1)
  66028. // #24892
  66029. @LCL
  66030. // #24893
  66031. D=M
  66032. // #24894
  66033. @1
  66034. // #24895
  66035. D=D+A
  66036. // #24896
  66037. @R13
  66038. // #24897
  66039. M=D
  66040. //^^ pop_stack_to_d
  66041. // #24898
  66042. @SP
  66043. // #24899
  66044. M=M-1
  66045. // #24900
  66046. A=M
  66047. // #24901
  66048. D=M
  66049. //vv pop_stack_to_d
  66050. // #24902
  66051. @R13
  66052. // #24903
  66053. A=M
  66054. // #24904
  66055. M=D
  66056. // #24905
  66057. @R13
  66058. // #24906
  66059. M=0
  66060. //vv pop_to_ram(LCL, 1)
  66061. //
  66062. //// label WHILE_EXP0
  66063. (Output.printString$WHILE_EXP0)
  66064. //
  66065. //// push local 0
  66066. //^^ push_from_ram(LCL, 0)
  66067. // #24907
  66068. @LCL
  66069. // #24908
  66070. D=M
  66071. // #24909
  66072. @0
  66073. // #24910
  66074. A=D+A
  66075. // #24911
  66076. D=M
  66077. //^^ push_d_to_stack
  66078. // #24912
  66079. @SP
  66080. // #24913
  66081. A=M
  66082. // #24914
  66083. M=D
  66084. // #24915
  66085. @SP
  66086. // #24916
  66087. M=M+1
  66088. //vv push_d_to_stack
  66089. //vv push_from_ram(LCL, 0)
  66090. //
  66091. //// push local 1
  66092. //^^ push_from_ram(LCL, 1)
  66093. // #24917
  66094. @LCL
  66095. // #24918
  66096. D=M
  66097. // #24919
  66098. @1
  66099. // #24920
  66100. A=D+A
  66101. // #24921
  66102. D=M
  66103. //^^ push_d_to_stack
  66104. // #24922
  66105. @SP
  66106. // #24923
  66107. A=M
  66108. // #24924
  66109. M=D
  66110. // #24925
  66111. @SP
  66112. // #24926
  66113. M=M+1
  66114. //vv push_d_to_stack
  66115. //vv push_from_ram(LCL, 1)
  66116. //
  66117. //// lt
  66118. //^^ arith_cmp_op(JLT)
  66119. //^^ pop_stack_to_d
  66120. // #24927
  66121. @SP
  66122. // #24928
  66123. M=M-1
  66124. // #24929
  66125. A=M
  66126. // #24930
  66127. D=M
  66128. //vv pop_stack_to_d
  66129. //^^ arith_d_with_stack_top(D-M)
  66130. // #24931
  66131. @R13
  66132. // #24932
  66133. M=D
  66134. //^^ pop_stack_to_d
  66135. // #24933
  66136. @SP
  66137. // #24934
  66138. M=M-1
  66139. // #24935
  66140. A=M
  66141. // #24936
  66142. D=M
  66143. //vv pop_stack_to_d
  66144. // #24937
  66145. @R13
  66146. // #24938
  66147. D=D-M
  66148. // #24939
  66149. @R13
  66150. // #24940
  66151. M=0
  66152. //vv arith_d_with_stack_top(D-M)
  66153. // #24941
  66154. @PUT_TRUE_202
  66155. // #24942
  66156. D;JLT
  66157. // #24943
  66158. @R13
  66159. // #24944
  66160. M=0
  66161. // #24945
  66162. @CONT_202
  66163. // #24946
  66164. 0;JMP
  66165. (PUT_TRUE_202)
  66166. // #24947
  66167. @R13
  66168. // #24948
  66169. M=-1
  66170. (CONT_202)
  66171. // #24949
  66172. @R13
  66173. // #24950
  66174. D=M
  66175. // #24951
  66176. @R13
  66177. // #24952
  66178. M=0
  66179. //^^ push_d_to_stack
  66180. // #24953
  66181. @SP
  66182. // #24954
  66183. A=M
  66184. // #24955
  66185. M=D
  66186. // #24956
  66187. @SP
  66188. // #24957
  66189. M=M+1
  66190. //vv push_d_to_stack
  66191. //vv arith_cmp_op(JLT)
  66192. //
  66193. //// not
  66194. //^^ arith_unary_op(!)
  66195. //^^ pop_stack_to_d
  66196. // #24958
  66197. @SP
  66198. // #24959
  66199. M=M-1
  66200. // #24960
  66201. A=M
  66202. // #24961
  66203. D=M
  66204. //vv pop_stack_to_d
  66205. // #24962
  66206. D=!D
  66207. //^^ push_d_to_stack
  66208. // #24963
  66209. @SP
  66210. // #24964
  66211. A=M
  66212. // #24965
  66213. M=D
  66214. // #24966
  66215. @SP
  66216. // #24967
  66217. M=M+1
  66218. //vv push_d_to_stack
  66219. //vv arith_unary_op(!)
  66220. //
  66221. //// if-goto WHILE_END0
  66222. //^^ pop_stack_to_d
  66223. // #24968
  66224. @SP
  66225. // #24969
  66226. M=M-1
  66227. // #24970
  66228. A=M
  66229. // #24971
  66230. D=M
  66231. //vv pop_stack_to_d
  66232. // #24972
  66233. @Output.printString$WHILE_END0
  66234. // #24973
  66235. D;JNE
  66236. //
  66237. //// push argument 0
  66238. //^^ push_from_ram(ARG, 0)
  66239. // #24974
  66240. @ARG
  66241. // #24975
  66242. D=M
  66243. // #24976
  66244. @0
  66245. // #24977
  66246. A=D+A
  66247. // #24978
  66248. D=M
  66249. //^^ push_d_to_stack
  66250. // #24979
  66251. @SP
  66252. // #24980
  66253. A=M
  66254. // #24981
  66255. M=D
  66256. // #24982
  66257. @SP
  66258. // #24983
  66259. M=M+1
  66260. //vv push_d_to_stack
  66261. //vv push_from_ram(ARG, 0)
  66262. //
  66263. //// push local 0
  66264. //^^ push_from_ram(LCL, 0)
  66265. // #24984
  66266. @LCL
  66267. // #24985
  66268. D=M
  66269. // #24986
  66270. @0
  66271. // #24987
  66272. A=D+A
  66273. // #24988
  66274. D=M
  66275. //^^ push_d_to_stack
  66276. // #24989
  66277. @SP
  66278. // #24990
  66279. A=M
  66280. // #24991
  66281. M=D
  66282. // #24992
  66283. @SP
  66284. // #24993
  66285. M=M+1
  66286. //vv push_d_to_stack
  66287. //vv push_from_ram(LCL, 0)
  66288. //
  66289. //// call String.charAt 2
  66290. //^^ push_constant(RET_ADDR_203)
  66291. // #24994
  66292. @RET_ADDR_203
  66293. // #24995
  66294. D=A
  66295. //^^ push_d_to_stack
  66296. // #24996
  66297. @SP
  66298. // #24997
  66299. A=M
  66300. // #24998
  66301. M=D
  66302. // #24999
  66303. @SP
  66304. // #25000
  66305. M=M+1
  66306. //vv push_d_to_stack
  66307. //vv push_constant(RET_ADDR_203)
  66308. //push return-address
  66309. // #25001
  66310. @LCL
  66311. // #25002
  66312. D=M
  66313. //^^ push_d_to_stack
  66314. // #25003
  66315. @SP
  66316. // #25004
  66317. A=M
  66318. // #25005
  66319. M=D
  66320. // #25006
  66321. @SP
  66322. // #25007
  66323. M=M+1
  66324. //vv push_d_to_stack
  66325. //push LCL
  66326. // #25008
  66327. @ARG
  66328. // #25009
  66329. D=M
  66330. //^^ push_d_to_stack
  66331. // #25010
  66332. @SP
  66333. // #25011
  66334. A=M
  66335. // #25012
  66336. M=D
  66337. // #25013
  66338. @SP
  66339. // #25014
  66340. M=M+1
  66341. //vv push_d_to_stack
  66342. //push ARG
  66343. // #25015
  66344. @THIS
  66345. // #25016
  66346. D=M
  66347. //^^ push_d_to_stack
  66348. // #25017
  66349. @SP
  66350. // #25018
  66351. A=M
  66352. // #25019
  66353. M=D
  66354. // #25020
  66355. @SP
  66356. // #25021
  66357. M=M+1
  66358. //vv push_d_to_stack
  66359. //push THIS
  66360. // #25022
  66361. @THAT
  66362. // #25023
  66363. D=M
  66364. //^^ push_d_to_stack
  66365. // #25024
  66366. @SP
  66367. // #25025
  66368. A=M
  66369. // #25026
  66370. M=D
  66371. // #25027
  66372. @SP
  66373. // #25028
  66374. M=M+1
  66375. //vv push_d_to_stack
  66376. //push THAT
  66377. // #25029
  66378. @SP
  66379. // #25030
  66380. D=M
  66381. // #25031
  66382. @ARG
  66383. // #25032
  66384. M=D
  66385. // #25033
  66386. @7
  66387. // #25034
  66388. D=A
  66389. // #25035
  66390. @ARG
  66391. // #25036
  66392. M=M-D // ARG = SP - args - 5
  66393. // #25037
  66394. @SP
  66395. // #25038
  66396. D=M
  66397. // #25039
  66398. @LCL
  66399. // #25040
  66400. M=D // LCL = SP
  66401. // #25041
  66402. @String.charAt
  66403. // #25042
  66404. 0;JMP
  66405. (RET_ADDR_203)
  66406. //
  66407. //// call Output.printChar 1
  66408. //^^ push_constant(RET_ADDR_204)
  66409. // #25043
  66410. @RET_ADDR_204
  66411. // #25044
  66412. D=A
  66413. //^^ push_d_to_stack
  66414. // #25045
  66415. @SP
  66416. // #25046
  66417. A=M
  66418. // #25047
  66419. M=D
  66420. // #25048
  66421. @SP
  66422. // #25049
  66423. M=M+1
  66424. //vv push_d_to_stack
  66425. //vv push_constant(RET_ADDR_204)
  66426. //push return-address
  66427. // #25050
  66428. @LCL
  66429. // #25051
  66430. D=M
  66431. //^^ push_d_to_stack
  66432. // #25052
  66433. @SP
  66434. // #25053
  66435. A=M
  66436. // #25054
  66437. M=D
  66438. // #25055
  66439. @SP
  66440. // #25056
  66441. M=M+1
  66442. //vv push_d_to_stack
  66443. //push LCL
  66444. // #25057
  66445. @ARG
  66446. // #25058
  66447. D=M
  66448. //^^ push_d_to_stack
  66449. // #25059
  66450. @SP
  66451. // #25060
  66452. A=M
  66453. // #25061
  66454. M=D
  66455. // #25062
  66456. @SP
  66457. // #25063
  66458. M=M+1
  66459. //vv push_d_to_stack
  66460. //push ARG
  66461. // #25064
  66462. @THIS
  66463. // #25065
  66464. D=M
  66465. //^^ push_d_to_stack
  66466. // #25066
  66467. @SP
  66468. // #25067
  66469. A=M
  66470. // #25068
  66471. M=D
  66472. // #25069
  66473. @SP
  66474. // #25070
  66475. M=M+1
  66476. //vv push_d_to_stack
  66477. //push THIS
  66478. // #25071
  66479. @THAT
  66480. // #25072
  66481. D=M
  66482. //^^ push_d_to_stack
  66483. // #25073
  66484. @SP
  66485. // #25074
  66486. A=M
  66487. // #25075
  66488. M=D
  66489. // #25076
  66490. @SP
  66491. // #25077
  66492. M=M+1
  66493. //vv push_d_to_stack
  66494. //push THAT
  66495. // #25078
  66496. @SP
  66497. // #25079
  66498. D=M
  66499. // #25080
  66500. @ARG
  66501. // #25081
  66502. M=D
  66503. // #25082
  66504. @6
  66505. // #25083
  66506. D=A
  66507. // #25084
  66508. @ARG
  66509. // #25085
  66510. M=M-D // ARG = SP - args - 5
  66511. // #25086
  66512. @SP
  66513. // #25087
  66514. D=M
  66515. // #25088
  66516. @LCL
  66517. // #25089
  66518. M=D // LCL = SP
  66519. // #25090
  66520. @Output.printChar
  66521. // #25091
  66522. 0;JMP
  66523. (RET_ADDR_204)
  66524. //
  66525. //// pop temp 0
  66526. //^^ pop_to_loc{5)
  66527. //^^ pop_stack_to_d
  66528. // #25092
  66529. @SP
  66530. // #25093
  66531. M=M-1
  66532. // #25094
  66533. A=M
  66534. // #25095
  66535. D=M
  66536. //vv pop_stack_to_d
  66537. // #25096
  66538. @5
  66539. // #25097
  66540. M=D
  66541. //vv pop_to_loc{5)
  66542. //
  66543. //// push local 0
  66544. //^^ push_from_ram(LCL, 0)
  66545. // #25098
  66546. @LCL
  66547. // #25099
  66548. D=M
  66549. // #25100
  66550. @0
  66551. // #25101
  66552. A=D+A
  66553. // #25102
  66554. D=M
  66555. //^^ push_d_to_stack
  66556. // #25103
  66557. @SP
  66558. // #25104
  66559. A=M
  66560. // #25105
  66561. M=D
  66562. // #25106
  66563. @SP
  66564. // #25107
  66565. M=M+1
  66566. //vv push_d_to_stack
  66567. //vv push_from_ram(LCL, 0)
  66568. //
  66569. //// push constant 1
  66570. //^^ push_constant(1)
  66571. // #25108
  66572. @1
  66573. // #25109
  66574. D=A
  66575. //^^ push_d_to_stack
  66576. // #25110
  66577. @SP
  66578. // #25111
  66579. A=M
  66580. // #25112
  66581. M=D
  66582. // #25113
  66583. @SP
  66584. // #25114
  66585. M=M+1
  66586. //vv push_d_to_stack
  66587. //vv push_constant(1)
  66588. //
  66589. //// add
  66590. //^^ arith_binary_op(+)
  66591. //^^ pop_stack_to_d
  66592. // #25115
  66593. @SP
  66594. // #25116
  66595. M=M-1
  66596. // #25117
  66597. A=M
  66598. // #25118
  66599. D=M
  66600. //vv pop_stack_to_d
  66601. //^^ arith_d_with_stack_top(D+M)
  66602. // #25119
  66603. @R13
  66604. // #25120
  66605. M=D
  66606. //^^ pop_stack_to_d
  66607. // #25121
  66608. @SP
  66609. // #25122
  66610. M=M-1
  66611. // #25123
  66612. A=M
  66613. // #25124
  66614. D=M
  66615. //vv pop_stack_to_d
  66616. // #25125
  66617. @R13
  66618. // #25126
  66619. D=D+M
  66620. // #25127
  66621. @R13
  66622. // #25128
  66623. M=0
  66624. //vv arith_d_with_stack_top(D+M)
  66625. //^^ push_d_to_stack
  66626. // #25129
  66627. @SP
  66628. // #25130
  66629. A=M
  66630. // #25131
  66631. M=D
  66632. // #25132
  66633. @SP
  66634. // #25133
  66635. M=M+1
  66636. //vv push_d_to_stack
  66637. //vv arith_binary_op(+)
  66638. //
  66639. //// pop local 0
  66640. //^^ pop_to_ram(LCL, 0)
  66641. // #25134
  66642. @LCL
  66643. // #25135
  66644. D=M
  66645. // #25136
  66646. @0
  66647. // #25137
  66648. D=D+A
  66649. // #25138
  66650. @R13
  66651. // #25139
  66652. M=D
  66653. //^^ pop_stack_to_d
  66654. // #25140
  66655. @SP
  66656. // #25141
  66657. M=M-1
  66658. // #25142
  66659. A=M
  66660. // #25143
  66661. D=M
  66662. //vv pop_stack_to_d
  66663. // #25144
  66664. @R13
  66665. // #25145
  66666. A=M
  66667. // #25146
  66668. M=D
  66669. // #25147
  66670. @R13
  66671. // #25148
  66672. M=0
  66673. //vv pop_to_ram(LCL, 0)
  66674. //
  66675. //// goto WHILE_EXP0
  66676. // #25149
  66677. @Output.printString$WHILE_EXP0
  66678. // #25150
  66679. 0;JMP
  66680. //
  66681. //// label WHILE_END0
  66682. (Output.printString$WHILE_END0)
  66683. //
  66684. //// push constant 0
  66685. //^^ push_constant(0)
  66686. // #25151
  66687. @0
  66688. // #25152
  66689. D=A
  66690. //^^ push_d_to_stack
  66691. // #25153
  66692. @SP
  66693. // #25154
  66694. A=M
  66695. // #25155
  66696. M=D
  66697. // #25156
  66698. @SP
  66699. // #25157
  66700. M=M+1
  66701. //vv push_d_to_stack
  66702. //vv push_constant(0)
  66703. //
  66704. //// return
  66705. // #25158
  66706. @LCL
  66707. // #25159
  66708. D=M
  66709. // #25160
  66710. @R14
  66711. // #25161
  66712. M=D //R14=LCL
  66713. // #25162
  66714. @5
  66715. // #25163
  66716. A=D-A
  66717. // #25164
  66718. D=M
  66719. // #25165
  66720. @R15
  66721. // #25166
  66722. M=D //R15=*(LCL-5)
  66723. //^^ pop_stack_to_d
  66724. // #25167
  66725. @SP
  66726. // #25168
  66727. M=M-1
  66728. // #25169
  66729. A=M
  66730. // #25170
  66731. D=M
  66732. //vv pop_stack_to_d
  66733. // #25171
  66734. @ARG
  66735. // #25172
  66736. A=M
  66737. // #25173
  66738. M=D //*ARG = pop()
  66739. // #25174
  66740. @ARG
  66741. // #25175
  66742. D=M
  66743. // #25176
  66744. @SP
  66745. // #25177
  66746. M=D+1 //SP=ARG+1
  66747. // #25178
  66748. @R14
  66749. // #25179
  66750. AM=M-1
  66751. // #25180
  66752. D=M
  66753. // #25181
  66754. @THAT
  66755. // #25182
  66756. M=D //THAT = *(--R14)
  66757. // #25183
  66758. @R14
  66759. // #25184
  66760. AM=M-1
  66761. // #25185
  66762. D=M
  66763. // #25186
  66764. @THIS
  66765. // #25187
  66766. M=D //THIS = *(--R14)
  66767. // #25188
  66768. @R14
  66769. // #25189
  66770. AM=M-1
  66771. // #25190
  66772. D=M
  66773. // #25191
  66774. @ARG
  66775. // #25192
  66776. M=D //ARG = *(--R14)
  66777. // #25193
  66778. @R14
  66779. // #25194
  66780. AM=M-1
  66781. // #25195
  66782. D=M
  66783. // #25196
  66784. @LCL
  66785. // #25197
  66786. M=D //LCL = *(--R14)
  66787. // #25198
  66788. @R15
  66789. // #25199
  66790. A=M
  66791. // #25200
  66792. 0;JMP //goto *R15
  66793. //
  66794. //// function Output.printInt 0
  66795. (Output.printInt)
  66796. //
  66797. //// push static 3
  66798. //^^ push_from_loc(Output.vm.3)
  66799. // #25201
  66800. @Output.vm.3
  66801. // #25202
  66802. D=M
  66803. //^^ push_d_to_stack
  66804. // #25203
  66805. @SP
  66806. // #25204
  66807. A=M
  66808. // #25205
  66809. M=D
  66810. // #25206
  66811. @SP
  66812. // #25207
  66813. M=M+1
  66814. //vv push_d_to_stack
  66815. //vv push_from_loc(Output.vm.3)
  66816. //
  66817. //// push argument 0
  66818. //^^ push_from_ram(ARG, 0)
  66819. // #25208
  66820. @ARG
  66821. // #25209
  66822. D=M
  66823. // #25210
  66824. @0
  66825. // #25211
  66826. A=D+A
  66827. // #25212
  66828. D=M
  66829. //^^ push_d_to_stack
  66830. // #25213
  66831. @SP
  66832. // #25214
  66833. A=M
  66834. // #25215
  66835. M=D
  66836. // #25216
  66837. @SP
  66838. // #25217
  66839. M=M+1
  66840. //vv push_d_to_stack
  66841. //vv push_from_ram(ARG, 0)
  66842. //
  66843. //// call String.setInt 2
  66844. //^^ push_constant(RET_ADDR_205)
  66845. // #25218
  66846. @RET_ADDR_205
  66847. // #25219
  66848. D=A
  66849. //^^ push_d_to_stack
  66850. // #25220
  66851. @SP
  66852. // #25221
  66853. A=M
  66854. // #25222
  66855. M=D
  66856. // #25223
  66857. @SP
  66858. // #25224
  66859. M=M+1
  66860. //vv push_d_to_stack
  66861. //vv push_constant(RET_ADDR_205)
  66862. //push return-address
  66863. // #25225
  66864. @LCL
  66865. // #25226
  66866. D=M
  66867. //^^ push_d_to_stack
  66868. // #25227
  66869. @SP
  66870. // #25228
  66871. A=M
  66872. // #25229
  66873. M=D
  66874. // #25230
  66875. @SP
  66876. // #25231
  66877. M=M+1
  66878. //vv push_d_to_stack
  66879. //push LCL
  66880. // #25232
  66881. @ARG
  66882. // #25233
  66883. D=M
  66884. //^^ push_d_to_stack
  66885. // #25234
  66886. @SP
  66887. // #25235
  66888. A=M
  66889. // #25236
  66890. M=D
  66891. // #25237
  66892. @SP
  66893. // #25238
  66894. M=M+1
  66895. //vv push_d_to_stack
  66896. //push ARG
  66897. // #25239
  66898. @THIS
  66899. // #25240
  66900. D=M
  66901. //^^ push_d_to_stack
  66902. // #25241
  66903. @SP
  66904. // #25242
  66905. A=M
  66906. // #25243
  66907. M=D
  66908. // #25244
  66909. @SP
  66910. // #25245
  66911. M=M+1
  66912. //vv push_d_to_stack
  66913. //push THIS
  66914. // #25246
  66915. @THAT
  66916. // #25247
  66917. D=M
  66918. //^^ push_d_to_stack
  66919. // #25248
  66920. @SP
  66921. // #25249
  66922. A=M
  66923. // #25250
  66924. M=D
  66925. // #25251
  66926. @SP
  66927. // #25252
  66928. M=M+1
  66929. //vv push_d_to_stack
  66930. //push THAT
  66931. // #25253
  66932. @SP
  66933. // #25254
  66934. D=M
  66935. // #25255
  66936. @ARG
  66937. // #25256
  66938. M=D
  66939. // #25257
  66940. @7
  66941. // #25258
  66942. D=A
  66943. // #25259
  66944. @ARG
  66945. // #25260
  66946. M=M-D // ARG = SP - args - 5
  66947. // #25261
  66948. @SP
  66949. // #25262
  66950. D=M
  66951. // #25263
  66952. @LCL
  66953. // #25264
  66954. M=D // LCL = SP
  66955. // #25265
  66956. @String.setInt
  66957. // #25266
  66958. 0;JMP
  66959. (RET_ADDR_205)
  66960. //
  66961. //// pop temp 0
  66962. //^^ pop_to_loc{5)
  66963. //^^ pop_stack_to_d
  66964. // #25267
  66965. @SP
  66966. // #25268
  66967. M=M-1
  66968. // #25269
  66969. A=M
  66970. // #25270
  66971. D=M
  66972. //vv pop_stack_to_d
  66973. // #25271
  66974. @5
  66975. // #25272
  66976. M=D
  66977. //vv pop_to_loc{5)
  66978. //
  66979. //// push static 3
  66980. //^^ push_from_loc(Output.vm.3)
  66981. // #25273
  66982. @Output.vm.3
  66983. // #25274
  66984. D=M
  66985. //^^ push_d_to_stack
  66986. // #25275
  66987. @SP
  66988. // #25276
  66989. A=M
  66990. // #25277
  66991. M=D
  66992. // #25278
  66993. @SP
  66994. // #25279
  66995. M=M+1
  66996. //vv push_d_to_stack
  66997. //vv push_from_loc(Output.vm.3)
  66998. //
  66999. //// call Output.printString 1
  67000. //^^ push_constant(RET_ADDR_206)
  67001. // #25280
  67002. @RET_ADDR_206
  67003. // #25281
  67004. D=A
  67005. //^^ push_d_to_stack
  67006. // #25282
  67007. @SP
  67008. // #25283
  67009. A=M
  67010. // #25284
  67011. M=D
  67012. // #25285
  67013. @SP
  67014. // #25286
  67015. M=M+1
  67016. //vv push_d_to_stack
  67017. //vv push_constant(RET_ADDR_206)
  67018. //push return-address
  67019. // #25287
  67020. @LCL
  67021. // #25288
  67022. D=M
  67023. //^^ push_d_to_stack
  67024. // #25289
  67025. @SP
  67026. // #25290
  67027. A=M
  67028. // #25291
  67029. M=D
  67030. // #25292
  67031. @SP
  67032. // #25293
  67033. M=M+1
  67034. //vv push_d_to_stack
  67035. //push LCL
  67036. // #25294
  67037. @ARG
  67038. // #25295
  67039. D=M
  67040. //^^ push_d_to_stack
  67041. // #25296
  67042. @SP
  67043. // #25297
  67044. A=M
  67045. // #25298
  67046. M=D
  67047. // #25299
  67048. @SP
  67049. // #25300
  67050. M=M+1
  67051. //vv push_d_to_stack
  67052. //push ARG
  67053. // #25301
  67054. @THIS
  67055. // #25302
  67056. D=M
  67057. //^^ push_d_to_stack
  67058. // #25303
  67059. @SP
  67060. // #25304
  67061. A=M
  67062. // #25305
  67063. M=D
  67064. // #25306
  67065. @SP
  67066. // #25307
  67067. M=M+1
  67068. //vv push_d_to_stack
  67069. //push THIS
  67070. // #25308
  67071. @THAT
  67072. // #25309
  67073. D=M
  67074. //^^ push_d_to_stack
  67075. // #25310
  67076. @SP
  67077. // #25311
  67078. A=M
  67079. // #25312
  67080. M=D
  67081. // #25313
  67082. @SP
  67083. // #25314
  67084. M=M+1
  67085. //vv push_d_to_stack
  67086. //push THAT
  67087. // #25315
  67088. @SP
  67089. // #25316
  67090. D=M
  67091. // #25317
  67092. @ARG
  67093. // #25318
  67094. M=D
  67095. // #25319
  67096. @6
  67097. // #25320
  67098. D=A
  67099. // #25321
  67100. @ARG
  67101. // #25322
  67102. M=M-D // ARG = SP - args - 5
  67103. // #25323
  67104. @SP
  67105. // #25324
  67106. D=M
  67107. // #25325
  67108. @LCL
  67109. // #25326
  67110. M=D // LCL = SP
  67111. // #25327
  67112. @Output.printString
  67113. // #25328
  67114. 0;JMP
  67115. (RET_ADDR_206)
  67116. //
  67117. //// pop temp 0
  67118. //^^ pop_to_loc{5)
  67119. //^^ pop_stack_to_d
  67120. // #25329
  67121. @SP
  67122. // #25330
  67123. M=M-1
  67124. // #25331
  67125. A=M
  67126. // #25332
  67127. D=M
  67128. //vv pop_stack_to_d
  67129. // #25333
  67130. @5
  67131. // #25334
  67132. M=D
  67133. //vv pop_to_loc{5)
  67134. //
  67135. //// push constant 0
  67136. //^^ push_constant(0)
  67137. // #25335
  67138. @0
  67139. // #25336
  67140. D=A
  67141. //^^ push_d_to_stack
  67142. // #25337
  67143. @SP
  67144. // #25338
  67145. A=M
  67146. // #25339
  67147. M=D
  67148. // #25340
  67149. @SP
  67150. // #25341
  67151. M=M+1
  67152. //vv push_d_to_stack
  67153. //vv push_constant(0)
  67154. //
  67155. //// return
  67156. // #25342
  67157. @LCL
  67158. // #25343
  67159. D=M
  67160. // #25344
  67161. @R14
  67162. // #25345
  67163. M=D //R14=LCL
  67164. // #25346
  67165. @5
  67166. // #25347
  67167. A=D-A
  67168. // #25348
  67169. D=M
  67170. // #25349
  67171. @R15
  67172. // #25350
  67173. M=D //R15=*(LCL-5)
  67174. //^^ pop_stack_to_d
  67175. // #25351
  67176. @SP
  67177. // #25352
  67178. M=M-1
  67179. // #25353
  67180. A=M
  67181. // #25354
  67182. D=M
  67183. //vv pop_stack_to_d
  67184. // #25355
  67185. @ARG
  67186. // #25356
  67187. A=M
  67188. // #25357
  67189. M=D //*ARG = pop()
  67190. // #25358
  67191. @ARG
  67192. // #25359
  67193. D=M
  67194. // #25360
  67195. @SP
  67196. // #25361
  67197. M=D+1 //SP=ARG+1
  67198. // #25362
  67199. @R14
  67200. // #25363
  67201. AM=M-1
  67202. // #25364
  67203. D=M
  67204. // #25365
  67205. @THAT
  67206. // #25366
  67207. M=D //THAT = *(--R14)
  67208. // #25367
  67209. @R14
  67210. // #25368
  67211. AM=M-1
  67212. // #25369
  67213. D=M
  67214. // #25370
  67215. @THIS
  67216. // #25371
  67217. M=D //THIS = *(--R14)
  67218. // #25372
  67219. @R14
  67220. // #25373
  67221. AM=M-1
  67222. // #25374
  67223. D=M
  67224. // #25375
  67225. @ARG
  67226. // #25376
  67227. M=D //ARG = *(--R14)
  67228. // #25377
  67229. @R14
  67230. // #25378
  67231. AM=M-1
  67232. // #25379
  67233. D=M
  67234. // #25380
  67235. @LCL
  67236. // #25381
  67237. M=D //LCL = *(--R14)
  67238. // #25382
  67239. @R15
  67240. // #25383
  67241. A=M
  67242. // #25384
  67243. 0;JMP //goto *R15
  67244. //
  67245. //// function Output.println 0
  67246. (Output.println)
  67247. //
  67248. //// push static 1
  67249. //^^ push_from_loc(Output.vm.1)
  67250. // #25385
  67251. @Output.vm.1
  67252. // #25386
  67253. D=M
  67254. //^^ push_d_to_stack
  67255. // #25387
  67256. @SP
  67257. // #25388
  67258. A=M
  67259. // #25389
  67260. M=D
  67261. // #25390
  67262. @SP
  67263. // #25391
  67264. M=M+1
  67265. //vv push_d_to_stack
  67266. //vv push_from_loc(Output.vm.1)
  67267. //
  67268. //// push constant 352
  67269. //^^ push_constant(352)
  67270. // #25392
  67271. @352
  67272. // #25393
  67273. D=A
  67274. //^^ push_d_to_stack
  67275. // #25394
  67276. @SP
  67277. // #25395
  67278. A=M
  67279. // #25396
  67280. M=D
  67281. // #25397
  67282. @SP
  67283. // #25398
  67284. M=M+1
  67285. //vv push_d_to_stack
  67286. //vv push_constant(352)
  67287. //
  67288. //// add
  67289. //^^ arith_binary_op(+)
  67290. //^^ pop_stack_to_d
  67291. // #25399
  67292. @SP
  67293. // #25400
  67294. M=M-1
  67295. // #25401
  67296. A=M
  67297. // #25402
  67298. D=M
  67299. //vv pop_stack_to_d
  67300. //^^ arith_d_with_stack_top(D+M)
  67301. // #25403
  67302. @R13
  67303. // #25404
  67304. M=D
  67305. //^^ pop_stack_to_d
  67306. // #25405
  67307. @SP
  67308. // #25406
  67309. M=M-1
  67310. // #25407
  67311. A=M
  67312. // #25408
  67313. D=M
  67314. //vv pop_stack_to_d
  67315. // #25409
  67316. @R13
  67317. // #25410
  67318. D=D+M
  67319. // #25411
  67320. @R13
  67321. // #25412
  67322. M=0
  67323. //vv arith_d_with_stack_top(D+M)
  67324. //^^ push_d_to_stack
  67325. // #25413
  67326. @SP
  67327. // #25414
  67328. A=M
  67329. // #25415
  67330. M=D
  67331. // #25416
  67332. @SP
  67333. // #25417
  67334. M=M+1
  67335. //vv push_d_to_stack
  67336. //vv arith_binary_op(+)
  67337. //
  67338. //// push static 0
  67339. //^^ push_from_loc(Output.vm.0)
  67340. // #25418
  67341. @Output.vm.0
  67342. // #25419
  67343. D=M
  67344. //^^ push_d_to_stack
  67345. // #25420
  67346. @SP
  67347. // #25421
  67348. A=M
  67349. // #25422
  67350. M=D
  67351. // #25423
  67352. @SP
  67353. // #25424
  67354. M=M+1
  67355. //vv push_d_to_stack
  67356. //vv push_from_loc(Output.vm.0)
  67357. //
  67358. //// sub
  67359. //^^ arith_binary_op(-)
  67360. //^^ pop_stack_to_d
  67361. // #25425
  67362. @SP
  67363. // #25426
  67364. M=M-1
  67365. // #25427
  67366. A=M
  67367. // #25428
  67368. D=M
  67369. //vv pop_stack_to_d
  67370. //^^ arith_d_with_stack_top(D-M)
  67371. // #25429
  67372. @R13
  67373. // #25430
  67374. M=D
  67375. //^^ pop_stack_to_d
  67376. // #25431
  67377. @SP
  67378. // #25432
  67379. M=M-1
  67380. // #25433
  67381. A=M
  67382. // #25434
  67383. D=M
  67384. //vv pop_stack_to_d
  67385. // #25435
  67386. @R13
  67387. // #25436
  67388. D=D-M
  67389. // #25437
  67390. @R13
  67391. // #25438
  67392. M=0
  67393. //vv arith_d_with_stack_top(D-M)
  67394. //^^ push_d_to_stack
  67395. // #25439
  67396. @SP
  67397. // #25440
  67398. A=M
  67399. // #25441
  67400. M=D
  67401. // #25442
  67402. @SP
  67403. // #25443
  67404. M=M+1
  67405. //vv push_d_to_stack
  67406. //vv arith_binary_op(-)
  67407. //
  67408. //// pop static 1
  67409. //^^ pop_to_loc{Output.vm.1)
  67410. //^^ pop_stack_to_d
  67411. // #25444
  67412. @SP
  67413. // #25445
  67414. M=M-1
  67415. // #25446
  67416. A=M
  67417. // #25447
  67418. D=M
  67419. //vv pop_stack_to_d
  67420. // #25448
  67421. @Output.vm.1
  67422. // #25449
  67423. M=D
  67424. //vv pop_to_loc{Output.vm.1)
  67425. //
  67426. //// push constant 0
  67427. //^^ push_constant(0)
  67428. // #25450
  67429. @0
  67430. // #25451
  67431. D=A
  67432. //^^ push_d_to_stack
  67433. // #25452
  67434. @SP
  67435. // #25453
  67436. A=M
  67437. // #25454
  67438. M=D
  67439. // #25455
  67440. @SP
  67441. // #25456
  67442. M=M+1
  67443. //vv push_d_to_stack
  67444. //vv push_constant(0)
  67445. //
  67446. //// pop static 0
  67447. //^^ pop_to_loc{Output.vm.0)
  67448. //^^ pop_stack_to_d
  67449. // #25457
  67450. @SP
  67451. // #25458
  67452. M=M-1
  67453. // #25459
  67454. A=M
  67455. // #25460
  67456. D=M
  67457. //vv pop_stack_to_d
  67458. // #25461
  67459. @Output.vm.0
  67460. // #25462
  67461. M=D
  67462. //vv pop_to_loc{Output.vm.0)
  67463. //
  67464. //// push constant 0
  67465. //^^ push_constant(0)
  67466. // #25463
  67467. @0
  67468. // #25464
  67469. D=A
  67470. //^^ push_d_to_stack
  67471. // #25465
  67472. @SP
  67473. // #25466
  67474. A=M
  67475. // #25467
  67476. M=D
  67477. // #25468
  67478. @SP
  67479. // #25469
  67480. M=M+1
  67481. //vv push_d_to_stack
  67482. //vv push_constant(0)
  67483. //
  67484. //// not
  67485. //^^ arith_unary_op(!)
  67486. //^^ pop_stack_to_d
  67487. // #25470
  67488. @SP
  67489. // #25471
  67490. M=M-1
  67491. // #25472
  67492. A=M
  67493. // #25473
  67494. D=M
  67495. //vv pop_stack_to_d
  67496. // #25474
  67497. D=!D
  67498. //^^ push_d_to_stack
  67499. // #25475
  67500. @SP
  67501. // #25476
  67502. A=M
  67503. // #25477
  67504. M=D
  67505. // #25478
  67506. @SP
  67507. // #25479
  67508. M=M+1
  67509. //vv push_d_to_stack
  67510. //vv arith_unary_op(!)
  67511. //
  67512. //// pop static 2
  67513. //^^ pop_to_loc{Output.vm.2)
  67514. //^^ pop_stack_to_d
  67515. // #25480
  67516. @SP
  67517. // #25481
  67518. M=M-1
  67519. // #25482
  67520. A=M
  67521. // #25483
  67522. D=M
  67523. //vv pop_stack_to_d
  67524. // #25484
  67525. @Output.vm.2
  67526. // #25485
  67527. M=D
  67528. //vv pop_to_loc{Output.vm.2)
  67529. //
  67530. //// push static 1
  67531. //^^ push_from_loc(Output.vm.1)
  67532. // #25486
  67533. @Output.vm.1
  67534. // #25487
  67535. D=M
  67536. //^^ push_d_to_stack
  67537. // #25488
  67538. @SP
  67539. // #25489
  67540. A=M
  67541. // #25490
  67542. M=D
  67543. // #25491
  67544. @SP
  67545. // #25492
  67546. M=M+1
  67547. //vv push_d_to_stack
  67548. //vv push_from_loc(Output.vm.1)
  67549. //
  67550. //// push constant 8128
  67551. //^^ push_constant(8128)
  67552. // #25493
  67553. @8128
  67554. // #25494
  67555. D=A
  67556. //^^ push_d_to_stack
  67557. // #25495
  67558. @SP
  67559. // #25496
  67560. A=M
  67561. // #25497
  67562. M=D
  67563. // #25498
  67564. @SP
  67565. // #25499
  67566. M=M+1
  67567. //vv push_d_to_stack
  67568. //vv push_constant(8128)
  67569. //
  67570. //// eq
  67571. //^^ arith_cmp_op(JEQ)
  67572. //^^ pop_stack_to_d
  67573. // #25500
  67574. @SP
  67575. // #25501
  67576. M=M-1
  67577. // #25502
  67578. A=M
  67579. // #25503
  67580. D=M
  67581. //vv pop_stack_to_d
  67582. //^^ arith_d_with_stack_top(D-M)
  67583. // #25504
  67584. @R13
  67585. // #25505
  67586. M=D
  67587. //^^ pop_stack_to_d
  67588. // #25506
  67589. @SP
  67590. // #25507
  67591. M=M-1
  67592. // #25508
  67593. A=M
  67594. // #25509
  67595. D=M
  67596. //vv pop_stack_to_d
  67597. // #25510
  67598. @R13
  67599. // #25511
  67600. D=D-M
  67601. // #25512
  67602. @R13
  67603. // #25513
  67604. M=0
  67605. //vv arith_d_with_stack_top(D-M)
  67606. // #25514
  67607. @PUT_TRUE_207
  67608. // #25515
  67609. D;JEQ
  67610. // #25516
  67611. @R13
  67612. // #25517
  67613. M=0
  67614. // #25518
  67615. @CONT_207
  67616. // #25519
  67617. 0;JMP
  67618. (PUT_TRUE_207)
  67619. // #25520
  67620. @R13
  67621. // #25521
  67622. M=-1
  67623. (CONT_207)
  67624. // #25522
  67625. @R13
  67626. // #25523
  67627. D=M
  67628. // #25524
  67629. @R13
  67630. // #25525
  67631. M=0
  67632. //^^ push_d_to_stack
  67633. // #25526
  67634. @SP
  67635. // #25527
  67636. A=M
  67637. // #25528
  67638. M=D
  67639. // #25529
  67640. @SP
  67641. // #25530
  67642. M=M+1
  67643. //vv push_d_to_stack
  67644. //vv arith_cmp_op(JEQ)
  67645. //
  67646. //// if-goto IF_TRUE0
  67647. //^^ pop_stack_to_d
  67648. // #25531
  67649. @SP
  67650. // #25532
  67651. M=M-1
  67652. // #25533
  67653. A=M
  67654. // #25534
  67655. D=M
  67656. //vv pop_stack_to_d
  67657. // #25535
  67658. @Output.println$IF_TRUE0
  67659. // #25536
  67660. D;JNE
  67661. //
  67662. //// goto IF_FALSE0
  67663. // #25537
  67664. @Output.println$IF_FALSE0
  67665. // #25538
  67666. 0;JMP
  67667. //
  67668. //// label IF_TRUE0
  67669. (Output.println$IF_TRUE0)
  67670. //
  67671. //// push constant 32
  67672. //^^ push_constant(32)
  67673. // #25539
  67674. @32
  67675. // #25540
  67676. D=A
  67677. //^^ push_d_to_stack
  67678. // #25541
  67679. @SP
  67680. // #25542
  67681. A=M
  67682. // #25543
  67683. M=D
  67684. // #25544
  67685. @SP
  67686. // #25545
  67687. M=M+1
  67688. //vv push_d_to_stack
  67689. //vv push_constant(32)
  67690. //
  67691. //// pop static 1
  67692. //^^ pop_to_loc{Output.vm.1)
  67693. //^^ pop_stack_to_d
  67694. // #25546
  67695. @SP
  67696. // #25547
  67697. M=M-1
  67698. // #25548
  67699. A=M
  67700. // #25549
  67701. D=M
  67702. //vv pop_stack_to_d
  67703. // #25550
  67704. @Output.vm.1
  67705. // #25551
  67706. M=D
  67707. //vv pop_to_loc{Output.vm.1)
  67708. //
  67709. //// label IF_FALSE0
  67710. (Output.println$IF_FALSE0)
  67711. //
  67712. //// push constant 0
  67713. //^^ push_constant(0)
  67714. // #25552
  67715. @0
  67716. // #25553
  67717. D=A
  67718. //^^ push_d_to_stack
  67719. // #25554
  67720. @SP
  67721. // #25555
  67722. A=M
  67723. // #25556
  67724. M=D
  67725. // #25557
  67726. @SP
  67727. // #25558
  67728. M=M+1
  67729. //vv push_d_to_stack
  67730. //vv push_constant(0)
  67731. //
  67732. //// return
  67733. // #25559
  67734. @LCL
  67735. // #25560
  67736. D=M
  67737. // #25561
  67738. @R14
  67739. // #25562
  67740. M=D //R14=LCL
  67741. // #25563
  67742. @5
  67743. // #25564
  67744. A=D-A
  67745. // #25565
  67746. D=M
  67747. // #25566
  67748. @R15
  67749. // #25567
  67750. M=D //R15=*(LCL-5)
  67751. //^^ pop_stack_to_d
  67752. // #25568
  67753. @SP
  67754. // #25569
  67755. M=M-1
  67756. // #25570
  67757. A=M
  67758. // #25571
  67759. D=M
  67760. //vv pop_stack_to_d
  67761. // #25572
  67762. @ARG
  67763. // #25573
  67764. A=M
  67765. // #25574
  67766. M=D //*ARG = pop()
  67767. // #25575
  67768. @ARG
  67769. // #25576
  67770. D=M
  67771. // #25577
  67772. @SP
  67773. // #25578
  67774. M=D+1 //SP=ARG+1
  67775. // #25579
  67776. @R14
  67777. // #25580
  67778. AM=M-1
  67779. // #25581
  67780. D=M
  67781. // #25582
  67782. @THAT
  67783. // #25583
  67784. M=D //THAT = *(--R14)
  67785. // #25584
  67786. @R14
  67787. // #25585
  67788. AM=M-1
  67789. // #25586
  67790. D=M
  67791. // #25587
  67792. @THIS
  67793. // #25588
  67794. M=D //THIS = *(--R14)
  67795. // #25589
  67796. @R14
  67797. // #25590
  67798. AM=M-1
  67799. // #25591
  67800. D=M
  67801. // #25592
  67802. @ARG
  67803. // #25593
  67804. M=D //ARG = *(--R14)
  67805. // #25594
  67806. @R14
  67807. // #25595
  67808. AM=M-1
  67809. // #25596
  67810. D=M
  67811. // #25597
  67812. @LCL
  67813. // #25598
  67814. M=D //LCL = *(--R14)
  67815. // #25599
  67816. @R15
  67817. // #25600
  67818. A=M
  67819. // #25601
  67820. 0;JMP //goto *R15
  67821. //
  67822. //// function Output.backSpace 0
  67823. (Output.backSpace)
  67824. //
  67825. //// push static 2
  67826. //^^ push_from_loc(Output.vm.2)
  67827. // #25602
  67828. @Output.vm.2
  67829. // #25603
  67830. D=M
  67831. //^^ push_d_to_stack
  67832. // #25604
  67833. @SP
  67834. // #25605
  67835. A=M
  67836. // #25606
  67837. M=D
  67838. // #25607
  67839. @SP
  67840. // #25608
  67841. M=M+1
  67842. //vv push_d_to_stack
  67843. //vv push_from_loc(Output.vm.2)
  67844. //
  67845. //// if-goto IF_TRUE0
  67846. //^^ pop_stack_to_d
  67847. // #25609
  67848. @SP
  67849. // #25610
  67850. M=M-1
  67851. // #25611
  67852. A=M
  67853. // #25612
  67854. D=M
  67855. //vv pop_stack_to_d
  67856. // #25613
  67857. @Output.backSpace$IF_TRUE0
  67858. // #25614
  67859. D;JNE
  67860. //
  67861. //// goto IF_FALSE0
  67862. // #25615
  67863. @Output.backSpace$IF_FALSE0
  67864. // #25616
  67865. 0;JMP
  67866. //
  67867. //// label IF_TRUE0
  67868. (Output.backSpace$IF_TRUE0)
  67869. //
  67870. //// push static 0
  67871. //^^ push_from_loc(Output.vm.0)
  67872. // #25617
  67873. @Output.vm.0
  67874. // #25618
  67875. D=M
  67876. //^^ push_d_to_stack
  67877. // #25619
  67878. @SP
  67879. // #25620
  67880. A=M
  67881. // #25621
  67882. M=D
  67883. // #25622
  67884. @SP
  67885. // #25623
  67886. M=M+1
  67887. //vv push_d_to_stack
  67888. //vv push_from_loc(Output.vm.0)
  67889. //
  67890. //// push constant 0
  67891. //^^ push_constant(0)
  67892. // #25624
  67893. @0
  67894. // #25625
  67895. D=A
  67896. //^^ push_d_to_stack
  67897. // #25626
  67898. @SP
  67899. // #25627
  67900. A=M
  67901. // #25628
  67902. M=D
  67903. // #25629
  67904. @SP
  67905. // #25630
  67906. M=M+1
  67907. //vv push_d_to_stack
  67908. //vv push_constant(0)
  67909. //
  67910. //// gt
  67911. //^^ arith_cmp_op(JGT)
  67912. //^^ pop_stack_to_d
  67913. // #25631
  67914. @SP
  67915. // #25632
  67916. M=M-1
  67917. // #25633
  67918. A=M
  67919. // #25634
  67920. D=M
  67921. //vv pop_stack_to_d
  67922. //^^ arith_d_with_stack_top(D-M)
  67923. // #25635
  67924. @R13
  67925. // #25636
  67926. M=D
  67927. //^^ pop_stack_to_d
  67928. // #25637
  67929. @SP
  67930. // #25638
  67931. M=M-1
  67932. // #25639
  67933. A=M
  67934. // #25640
  67935. D=M
  67936. //vv pop_stack_to_d
  67937. // #25641
  67938. @R13
  67939. // #25642
  67940. D=D-M
  67941. // #25643
  67942. @R13
  67943. // #25644
  67944. M=0
  67945. //vv arith_d_with_stack_top(D-M)
  67946. // #25645
  67947. @PUT_TRUE_208
  67948. // #25646
  67949. D;JGT
  67950. // #25647
  67951. @R13
  67952. // #25648
  67953. M=0
  67954. // #25649
  67955. @CONT_208
  67956. // #25650
  67957. 0;JMP
  67958. (PUT_TRUE_208)
  67959. // #25651
  67960. @R13
  67961. // #25652
  67962. M=-1
  67963. (CONT_208)
  67964. // #25653
  67965. @R13
  67966. // #25654
  67967. D=M
  67968. // #25655
  67969. @R13
  67970. // #25656
  67971. M=0
  67972. //^^ push_d_to_stack
  67973. // #25657
  67974. @SP
  67975. // #25658
  67976. A=M
  67977. // #25659
  67978. M=D
  67979. // #25660
  67980. @SP
  67981. // #25661
  67982. M=M+1
  67983. //vv push_d_to_stack
  67984. //vv arith_cmp_op(JGT)
  67985. //
  67986. //// if-goto IF_TRUE1
  67987. //^^ pop_stack_to_d
  67988. // #25662
  67989. @SP
  67990. // #25663
  67991. M=M-1
  67992. // #25664
  67993. A=M
  67994. // #25665
  67995. D=M
  67996. //vv pop_stack_to_d
  67997. // #25666
  67998. @Output.backSpace$IF_TRUE1
  67999. // #25667
  68000. D;JNE
  68001. //
  68002. //// goto IF_FALSE1
  68003. // #25668
  68004. @Output.backSpace$IF_FALSE1
  68005. // #25669
  68006. 0;JMP
  68007. //
  68008. //// label IF_TRUE1
  68009. (Output.backSpace$IF_TRUE1)
  68010. //
  68011. //// push static 0
  68012. //^^ push_from_loc(Output.vm.0)
  68013. // #25670
  68014. @Output.vm.0
  68015. // #25671
  68016. D=M
  68017. //^^ push_d_to_stack
  68018. // #25672
  68019. @SP
  68020. // #25673
  68021. A=M
  68022. // #25674
  68023. M=D
  68024. // #25675
  68025. @SP
  68026. // #25676
  68027. M=M+1
  68028. //vv push_d_to_stack
  68029. //vv push_from_loc(Output.vm.0)
  68030. //
  68031. //// push constant 1
  68032. //^^ push_constant(1)
  68033. // #25677
  68034. @1
  68035. // #25678
  68036. D=A
  68037. //^^ push_d_to_stack
  68038. // #25679
  68039. @SP
  68040. // #25680
  68041. A=M
  68042. // #25681
  68043. M=D
  68044. // #25682
  68045. @SP
  68046. // #25683
  68047. M=M+1
  68048. //vv push_d_to_stack
  68049. //vv push_constant(1)
  68050. //
  68051. //// sub
  68052. //^^ arith_binary_op(-)
  68053. //^^ pop_stack_to_d
  68054. // #25684
  68055. @SP
  68056. // #25685
  68057. M=M-1
  68058. // #25686
  68059. A=M
  68060. // #25687
  68061. D=M
  68062. //vv pop_stack_to_d
  68063. //^^ arith_d_with_stack_top(D-M)
  68064. // #25688
  68065. @R13
  68066. // #25689
  68067. M=D
  68068. //^^ pop_stack_to_d
  68069. // #25690
  68070. @SP
  68071. // #25691
  68072. M=M-1
  68073. // #25692
  68074. A=M
  68075. // #25693
  68076. D=M
  68077. //vv pop_stack_to_d
  68078. // #25694
  68079. @R13
  68080. // #25695
  68081. D=D-M
  68082. // #25696
  68083. @R13
  68084. // #25697
  68085. M=0
  68086. //vv arith_d_with_stack_top(D-M)
  68087. //^^ push_d_to_stack
  68088. // #25698
  68089. @SP
  68090. // #25699
  68091. A=M
  68092. // #25700
  68093. M=D
  68094. // #25701
  68095. @SP
  68096. // #25702
  68097. M=M+1
  68098. //vv push_d_to_stack
  68099. //vv arith_binary_op(-)
  68100. //
  68101. //// pop static 0
  68102. //^^ pop_to_loc{Output.vm.0)
  68103. //^^ pop_stack_to_d
  68104. // #25703
  68105. @SP
  68106. // #25704
  68107. M=M-1
  68108. // #25705
  68109. A=M
  68110. // #25706
  68111. D=M
  68112. //vv pop_stack_to_d
  68113. // #25707
  68114. @Output.vm.0
  68115. // #25708
  68116. M=D
  68117. //vv pop_to_loc{Output.vm.0)
  68118. //
  68119. //// push static 1
  68120. //^^ push_from_loc(Output.vm.1)
  68121. // #25709
  68122. @Output.vm.1
  68123. // #25710
  68124. D=M
  68125. //^^ push_d_to_stack
  68126. // #25711
  68127. @SP
  68128. // #25712
  68129. A=M
  68130. // #25713
  68131. M=D
  68132. // #25714
  68133. @SP
  68134. // #25715
  68135. M=M+1
  68136. //vv push_d_to_stack
  68137. //vv push_from_loc(Output.vm.1)
  68138. //
  68139. //// push constant 1
  68140. //^^ push_constant(1)
  68141. // #25716
  68142. @1
  68143. // #25717
  68144. D=A
  68145. //^^ push_d_to_stack
  68146. // #25718
  68147. @SP
  68148. // #25719
  68149. A=M
  68150. // #25720
  68151. M=D
  68152. // #25721
  68153. @SP
  68154. // #25722
  68155. M=M+1
  68156. //vv push_d_to_stack
  68157. //vv push_constant(1)
  68158. //
  68159. //// sub
  68160. //^^ arith_binary_op(-)
  68161. //^^ pop_stack_to_d
  68162. // #25723
  68163. @SP
  68164. // #25724
  68165. M=M-1
  68166. // #25725
  68167. A=M
  68168. // #25726
  68169. D=M
  68170. //vv pop_stack_to_d
  68171. //^^ arith_d_with_stack_top(D-M)
  68172. // #25727
  68173. @R13
  68174. // #25728
  68175. M=D
  68176. //^^ pop_stack_to_d
  68177. // #25729
  68178. @SP
  68179. // #25730
  68180. M=M-1
  68181. // #25731
  68182. A=M
  68183. // #25732
  68184. D=M
  68185. //vv pop_stack_to_d
  68186. // #25733
  68187. @R13
  68188. // #25734
  68189. D=D-M
  68190. // #25735
  68191. @R13
  68192. // #25736
  68193. M=0
  68194. //vv arith_d_with_stack_top(D-M)
  68195. //^^ push_d_to_stack
  68196. // #25737
  68197. @SP
  68198. // #25738
  68199. A=M
  68200. // #25739
  68201. M=D
  68202. // #25740
  68203. @SP
  68204. // #25741
  68205. M=M+1
  68206. //vv push_d_to_stack
  68207. //vv arith_binary_op(-)
  68208. //
  68209. //// pop static 1
  68210. //^^ pop_to_loc{Output.vm.1)
  68211. //^^ pop_stack_to_d
  68212. // #25742
  68213. @SP
  68214. // #25743
  68215. M=M-1
  68216. // #25744
  68217. A=M
  68218. // #25745
  68219. D=M
  68220. //vv pop_stack_to_d
  68221. // #25746
  68222. @Output.vm.1
  68223. // #25747
  68224. M=D
  68225. //vv pop_to_loc{Output.vm.1)
  68226. //
  68227. //// goto IF_END1
  68228. // #25748
  68229. @Output.backSpace$IF_END1
  68230. // #25749
  68231. 0;JMP
  68232. //
  68233. //// label IF_FALSE1
  68234. (Output.backSpace$IF_FALSE1)
  68235. //
  68236. //// push constant 31
  68237. //^^ push_constant(31)
  68238. // #25750
  68239. @31
  68240. // #25751
  68241. D=A
  68242. //^^ push_d_to_stack
  68243. // #25752
  68244. @SP
  68245. // #25753
  68246. A=M
  68247. // #25754
  68248. M=D
  68249. // #25755
  68250. @SP
  68251. // #25756
  68252. M=M+1
  68253. //vv push_d_to_stack
  68254. //vv push_constant(31)
  68255. //
  68256. //// pop static 0
  68257. //^^ pop_to_loc{Output.vm.0)
  68258. //^^ pop_stack_to_d
  68259. // #25757
  68260. @SP
  68261. // #25758
  68262. M=M-1
  68263. // #25759
  68264. A=M
  68265. // #25760
  68266. D=M
  68267. //vv pop_stack_to_d
  68268. // #25761
  68269. @Output.vm.0
  68270. // #25762
  68271. M=D
  68272. //vv pop_to_loc{Output.vm.0)
  68273. //
  68274. //// push static 1
  68275. //^^ push_from_loc(Output.vm.1)
  68276. // #25763
  68277. @Output.vm.1
  68278. // #25764
  68279. D=M
  68280. //^^ push_d_to_stack
  68281. // #25765
  68282. @SP
  68283. // #25766
  68284. A=M
  68285. // #25767
  68286. M=D
  68287. // #25768
  68288. @SP
  68289. // #25769
  68290. M=M+1
  68291. //vv push_d_to_stack
  68292. //vv push_from_loc(Output.vm.1)
  68293. //
  68294. //// push constant 32
  68295. //^^ push_constant(32)
  68296. // #25770
  68297. @32
  68298. // #25771
  68299. D=A
  68300. //^^ push_d_to_stack
  68301. // #25772
  68302. @SP
  68303. // #25773
  68304. A=M
  68305. // #25774
  68306. M=D
  68307. // #25775
  68308. @SP
  68309. // #25776
  68310. M=M+1
  68311. //vv push_d_to_stack
  68312. //vv push_constant(32)
  68313. //
  68314. //// eq
  68315. //^^ arith_cmp_op(JEQ)
  68316. //^^ pop_stack_to_d
  68317. // #25777
  68318. @SP
  68319. // #25778
  68320. M=M-1
  68321. // #25779
  68322. A=M
  68323. // #25780
  68324. D=M
  68325. //vv pop_stack_to_d
  68326. //^^ arith_d_with_stack_top(D-M)
  68327. // #25781
  68328. @R13
  68329. // #25782
  68330. M=D
  68331. //^^ pop_stack_to_d
  68332. // #25783
  68333. @SP
  68334. // #25784
  68335. M=M-1
  68336. // #25785
  68337. A=M
  68338. // #25786
  68339. D=M
  68340. //vv pop_stack_to_d
  68341. // #25787
  68342. @R13
  68343. // #25788
  68344. D=D-M
  68345. // #25789
  68346. @R13
  68347. // #25790
  68348. M=0
  68349. //vv arith_d_with_stack_top(D-M)
  68350. // #25791
  68351. @PUT_TRUE_209
  68352. // #25792
  68353. D;JEQ
  68354. // #25793
  68355. @R13
  68356. // #25794
  68357. M=0
  68358. // #25795
  68359. @CONT_209
  68360. // #25796
  68361. 0;JMP
  68362. (PUT_TRUE_209)
  68363. // #25797
  68364. @R13
  68365. // #25798
  68366. M=-1
  68367. (CONT_209)
  68368. // #25799
  68369. @R13
  68370. // #25800
  68371. D=M
  68372. // #25801
  68373. @R13
  68374. // #25802
  68375. M=0
  68376. //^^ push_d_to_stack
  68377. // #25803
  68378. @SP
  68379. // #25804
  68380. A=M
  68381. // #25805
  68382. M=D
  68383. // #25806
  68384. @SP
  68385. // #25807
  68386. M=M+1
  68387. //vv push_d_to_stack
  68388. //vv arith_cmp_op(JEQ)
  68389. //
  68390. //// if-goto IF_TRUE2
  68391. //^^ pop_stack_to_d
  68392. // #25808
  68393. @SP
  68394. // #25809
  68395. M=M-1
  68396. // #25810
  68397. A=M
  68398. // #25811
  68399. D=M
  68400. //vv pop_stack_to_d
  68401. // #25812
  68402. @Output.backSpace$IF_TRUE2
  68403. // #25813
  68404. D;JNE
  68405. //
  68406. //// goto IF_FALSE2
  68407. // #25814
  68408. @Output.backSpace$IF_FALSE2
  68409. // #25815
  68410. 0;JMP
  68411. //
  68412. //// label IF_TRUE2
  68413. (Output.backSpace$IF_TRUE2)
  68414. //
  68415. //// push constant 8128
  68416. //^^ push_constant(8128)
  68417. // #25816
  68418. @8128
  68419. // #25817
  68420. D=A
  68421. //^^ push_d_to_stack
  68422. // #25818
  68423. @SP
  68424. // #25819
  68425. A=M
  68426. // #25820
  68427. M=D
  68428. // #25821
  68429. @SP
  68430. // #25822
  68431. M=M+1
  68432. //vv push_d_to_stack
  68433. //vv push_constant(8128)
  68434. //
  68435. //// pop static 1
  68436. //^^ pop_to_loc{Output.vm.1)
  68437. //^^ pop_stack_to_d
  68438. // #25823
  68439. @SP
  68440. // #25824
  68441. M=M-1
  68442. // #25825
  68443. A=M
  68444. // #25826
  68445. D=M
  68446. //vv pop_stack_to_d
  68447. // #25827
  68448. @Output.vm.1
  68449. // #25828
  68450. M=D
  68451. //vv pop_to_loc{Output.vm.1)
  68452. //
  68453. //// label IF_FALSE2
  68454. (Output.backSpace$IF_FALSE2)
  68455. //
  68456. //// push static 1
  68457. //^^ push_from_loc(Output.vm.1)
  68458. // #25829
  68459. @Output.vm.1
  68460. // #25830
  68461. D=M
  68462. //^^ push_d_to_stack
  68463. // #25831
  68464. @SP
  68465. // #25832
  68466. A=M
  68467. // #25833
  68468. M=D
  68469. // #25834
  68470. @SP
  68471. // #25835
  68472. M=M+1
  68473. //vv push_d_to_stack
  68474. //vv push_from_loc(Output.vm.1)
  68475. //
  68476. //// push constant 321
  68477. //^^ push_constant(321)
  68478. // #25836
  68479. @321
  68480. // #25837
  68481. D=A
  68482. //^^ push_d_to_stack
  68483. // #25838
  68484. @SP
  68485. // #25839
  68486. A=M
  68487. // #25840
  68488. M=D
  68489. // #25841
  68490. @SP
  68491. // #25842
  68492. M=M+1
  68493. //vv push_d_to_stack
  68494. //vv push_constant(321)
  68495. //
  68496. //// sub
  68497. //^^ arith_binary_op(-)
  68498. //^^ pop_stack_to_d
  68499. // #25843
  68500. @SP
  68501. // #25844
  68502. M=M-1
  68503. // #25845
  68504. A=M
  68505. // #25846
  68506. D=M
  68507. //vv pop_stack_to_d
  68508. //^^ arith_d_with_stack_top(D-M)
  68509. // #25847
  68510. @R13
  68511. // #25848
  68512. M=D
  68513. //^^ pop_stack_to_d
  68514. // #25849
  68515. @SP
  68516. // #25850
  68517. M=M-1
  68518. // #25851
  68519. A=M
  68520. // #25852
  68521. D=M
  68522. //vv pop_stack_to_d
  68523. // #25853
  68524. @R13
  68525. // #25854
  68526. D=D-M
  68527. // #25855
  68528. @R13
  68529. // #25856
  68530. M=0
  68531. //vv arith_d_with_stack_top(D-M)
  68532. //^^ push_d_to_stack
  68533. // #25857
  68534. @SP
  68535. // #25858
  68536. A=M
  68537. // #25859
  68538. M=D
  68539. // #25860
  68540. @SP
  68541. // #25861
  68542. M=M+1
  68543. //vv push_d_to_stack
  68544. //vv arith_binary_op(-)
  68545. //
  68546. //// pop static 1
  68547. //^^ pop_to_loc{Output.vm.1)
  68548. //^^ pop_stack_to_d
  68549. // #25862
  68550. @SP
  68551. // #25863
  68552. M=M-1
  68553. // #25864
  68554. A=M
  68555. // #25865
  68556. D=M
  68557. //vv pop_stack_to_d
  68558. // #25866
  68559. @Output.vm.1
  68560. // #25867
  68561. M=D
  68562. //vv pop_to_loc{Output.vm.1)
  68563. //
  68564. //// label IF_END1
  68565. (Output.backSpace$IF_END1)
  68566. //
  68567. //// push constant 0
  68568. //^^ push_constant(0)
  68569. // #25868
  68570. @0
  68571. // #25869
  68572. D=A
  68573. //^^ push_d_to_stack
  68574. // #25870
  68575. @SP
  68576. // #25871
  68577. A=M
  68578. // #25872
  68579. M=D
  68580. // #25873
  68581. @SP
  68582. // #25874
  68583. M=M+1
  68584. //vv push_d_to_stack
  68585. //vv push_constant(0)
  68586. //
  68587. //// pop static 2
  68588. //^^ pop_to_loc{Output.vm.2)
  68589. //^^ pop_stack_to_d
  68590. // #25875
  68591. @SP
  68592. // #25876
  68593. M=M-1
  68594. // #25877
  68595. A=M
  68596. // #25878
  68597. D=M
  68598. //vv pop_stack_to_d
  68599. // #25879
  68600. @Output.vm.2
  68601. // #25880
  68602. M=D
  68603. //vv pop_to_loc{Output.vm.2)
  68604. //
  68605. //// goto IF_END0
  68606. // #25881
  68607. @Output.backSpace$IF_END0
  68608. // #25882
  68609. 0;JMP
  68610. //
  68611. //// label IF_FALSE0
  68612. (Output.backSpace$IF_FALSE0)
  68613. //
  68614. //// push constant 0
  68615. //^^ push_constant(0)
  68616. // #25883
  68617. @0
  68618. // #25884
  68619. D=A
  68620. //^^ push_d_to_stack
  68621. // #25885
  68622. @SP
  68623. // #25886
  68624. A=M
  68625. // #25887
  68626. M=D
  68627. // #25888
  68628. @SP
  68629. // #25889
  68630. M=M+1
  68631. //vv push_d_to_stack
  68632. //vv push_constant(0)
  68633. //
  68634. //// not
  68635. //^^ arith_unary_op(!)
  68636. //^^ pop_stack_to_d
  68637. // #25890
  68638. @SP
  68639. // #25891
  68640. M=M-1
  68641. // #25892
  68642. A=M
  68643. // #25893
  68644. D=M
  68645. //vv pop_stack_to_d
  68646. // #25894
  68647. D=!D
  68648. //^^ push_d_to_stack
  68649. // #25895
  68650. @SP
  68651. // #25896
  68652. A=M
  68653. // #25897
  68654. M=D
  68655. // #25898
  68656. @SP
  68657. // #25899
  68658. M=M+1
  68659. //vv push_d_to_stack
  68660. //vv arith_unary_op(!)
  68661. //
  68662. //// pop static 2
  68663. //^^ pop_to_loc{Output.vm.2)
  68664. //^^ pop_stack_to_d
  68665. // #25900
  68666. @SP
  68667. // #25901
  68668. M=M-1
  68669. // #25902
  68670. A=M
  68671. // #25903
  68672. D=M
  68673. //vv pop_stack_to_d
  68674. // #25904
  68675. @Output.vm.2
  68676. // #25905
  68677. M=D
  68678. //vv pop_to_loc{Output.vm.2)
  68679. //
  68680. //// label IF_END0
  68681. (Output.backSpace$IF_END0)
  68682. //
  68683. //// push constant 32
  68684. //^^ push_constant(32)
  68685. // #25906
  68686. @32
  68687. // #25907
  68688. D=A
  68689. //^^ push_d_to_stack
  68690. // #25908
  68691. @SP
  68692. // #25909
  68693. A=M
  68694. // #25910
  68695. M=D
  68696. // #25911
  68697. @SP
  68698. // #25912
  68699. M=M+1
  68700. //vv push_d_to_stack
  68701. //vv push_constant(32)
  68702. //
  68703. //// call Output.drawChar 1
  68704. //^^ push_constant(RET_ADDR_210)
  68705. // #25913
  68706. @RET_ADDR_210
  68707. // #25914
  68708. D=A
  68709. //^^ push_d_to_stack
  68710. // #25915
  68711. @SP
  68712. // #25916
  68713. A=M
  68714. // #25917
  68715. M=D
  68716. // #25918
  68717. @SP
  68718. // #25919
  68719. M=M+1
  68720. //vv push_d_to_stack
  68721. //vv push_constant(RET_ADDR_210)
  68722. //push return-address
  68723. // #25920
  68724. @LCL
  68725. // #25921
  68726. D=M
  68727. //^^ push_d_to_stack
  68728. // #25922
  68729. @SP
  68730. // #25923
  68731. A=M
  68732. // #25924
  68733. M=D
  68734. // #25925
  68735. @SP
  68736. // #25926
  68737. M=M+1
  68738. //vv push_d_to_stack
  68739. //push LCL
  68740. // #25927
  68741. @ARG
  68742. // #25928
  68743. D=M
  68744. //^^ push_d_to_stack
  68745. // #25929
  68746. @SP
  68747. // #25930
  68748. A=M
  68749. // #25931
  68750. M=D
  68751. // #25932
  68752. @SP
  68753. // #25933
  68754. M=M+1
  68755. //vv push_d_to_stack
  68756. //push ARG
  68757. // #25934
  68758. @THIS
  68759. // #25935
  68760. D=M
  68761. //^^ push_d_to_stack
  68762. // #25936
  68763. @SP
  68764. // #25937
  68765. A=M
  68766. // #25938
  68767. M=D
  68768. // #25939
  68769. @SP
  68770. // #25940
  68771. M=M+1
  68772. //vv push_d_to_stack
  68773. //push THIS
  68774. // #25941
  68775. @THAT
  68776. // #25942
  68777. D=M
  68778. //^^ push_d_to_stack
  68779. // #25943
  68780. @SP
  68781. // #25944
  68782. A=M
  68783. // #25945
  68784. M=D
  68785. // #25946
  68786. @SP
  68787. // #25947
  68788. M=M+1
  68789. //vv push_d_to_stack
  68790. //push THAT
  68791. // #25948
  68792. @SP
  68793. // #25949
  68794. D=M
  68795. // #25950
  68796. @ARG
  68797. // #25951
  68798. M=D
  68799. // #25952
  68800. @6
  68801. // #25953
  68802. D=A
  68803. // #25954
  68804. @ARG
  68805. // #25955
  68806. M=M-D // ARG = SP - args - 5
  68807. // #25956
  68808. @SP
  68809. // #25957
  68810. D=M
  68811. // #25958
  68812. @LCL
  68813. // #25959
  68814. M=D // LCL = SP
  68815. // #25960
  68816. @Output.drawChar
  68817. // #25961
  68818. 0;JMP
  68819. (RET_ADDR_210)
  68820. //
  68821. //// pop temp 0
  68822. //^^ pop_to_loc{5)
  68823. //^^ pop_stack_to_d
  68824. // #25962
  68825. @SP
  68826. // #25963
  68827. M=M-1
  68828. // #25964
  68829. A=M
  68830. // #25965
  68831. D=M
  68832. //vv pop_stack_to_d
  68833. // #25966
  68834. @5
  68835. // #25967
  68836. M=D
  68837. //vv pop_to_loc{5)
  68838. //
  68839. //// push constant 0
  68840. //^^ push_constant(0)
  68841. // #25968
  68842. @0
  68843. // #25969
  68844. D=A
  68845. //^^ push_d_to_stack
  68846. // #25970
  68847. @SP
  68848. // #25971
  68849. A=M
  68850. // #25972
  68851. M=D
  68852. // #25973
  68853. @SP
  68854. // #25974
  68855. M=M+1
  68856. //vv push_d_to_stack
  68857. //vv push_constant(0)
  68858. //
  68859. //// return
  68860. // #25975
  68861. @LCL
  68862. // #25976
  68863. D=M
  68864. // #25977
  68865. @R14
  68866. // #25978
  68867. M=D //R14=LCL
  68868. // #25979
  68869. @5
  68870. // #25980
  68871. A=D-A
  68872. // #25981
  68873. D=M
  68874. // #25982
  68875. @R15
  68876. // #25983
  68877. M=D //R15=*(LCL-5)
  68878. //^^ pop_stack_to_d
  68879. // #25984
  68880. @SP
  68881. // #25985
  68882. M=M-1
  68883. // #25986
  68884. A=M
  68885. // #25987
  68886. D=M
  68887. //vv pop_stack_to_d
  68888. // #25988
  68889. @ARG
  68890. // #25989
  68891. A=M
  68892. // #25990
  68893. M=D //*ARG = pop()
  68894. // #25991
  68895. @ARG
  68896. // #25992
  68897. D=M
  68898. // #25993
  68899. @SP
  68900. // #25994
  68901. M=D+1 //SP=ARG+1
  68902. // #25995
  68903. @R14
  68904. // #25996
  68905. AM=M-1
  68906. // #25997
  68907. D=M
  68908. // #25998
  68909. @THAT
  68910. // #25999
  68911. M=D //THAT = *(--R14)
  68912. // #26000
  68913. @R14
  68914. // #26001
  68915. AM=M-1
  68916. // #26002
  68917. D=M
  68918. // #26003
  68919. @THIS
  68920. // #26004
  68921. M=D //THIS = *(--R14)
  68922. // #26005
  68923. @R14
  68924. // #26006
  68925. AM=M-1
  68926. // #26007
  68927. D=M
  68928. // #26008
  68929. @ARG
  68930. // #26009
  68931. M=D //ARG = *(--R14)
  68932. // #26010
  68933. @R14
  68934. // #26011
  68935. AM=M-1
  68936. // #26012
  68937. D=M
  68938. // #26013
  68939. @LCL
  68940. // #26014
  68941. M=D //LCL = *(--R14)
  68942. // #26015
  68943. @R15
  68944. // #26016
  68945. A=M
  68946. // #26017
  68947. 0;JMP //goto *R15
  68948. //
  68949. //// function Screen.init 1
  68950. (Screen.init)
  68951. // #26018
  68952. D=0
  68953. //^^ push_d_to_stack
  68954. // #26019
  68955. @SP
  68956. // #26020
  68957. A=M
  68958. // #26021
  68959. M=D
  68960. // #26022
  68961. @SP
  68962. // #26023
  68963. M=M+1
  68964. //vv push_d_to_stack
  68965. //
  68966. //// push constant 16384
  68967. //^^ push_constant(16384)
  68968. // #26024
  68969. @16384
  68970. // #26025
  68971. D=A
  68972. //^^ push_d_to_stack
  68973. // #26026
  68974. @SP
  68975. // #26027
  68976. A=M
  68977. // #26028
  68978. M=D
  68979. // #26029
  68980. @SP
  68981. // #26030
  68982. M=M+1
  68983. //vv push_d_to_stack
  68984. //vv push_constant(16384)
  68985. //
  68986. //// pop static 1
  68987. //^^ pop_to_loc{Screen.vm.1)
  68988. //^^ pop_stack_to_d
  68989. // #26031
  68990. @SP
  68991. // #26032
  68992. M=M-1
  68993. // #26033
  68994. A=M
  68995. // #26034
  68996. D=M
  68997. //vv pop_stack_to_d
  68998. // #26035
  68999. @Screen.vm.1
  69000. // #26036
  69001. M=D
  69002. //vv pop_to_loc{Screen.vm.1)
  69003. //
  69004. //// push constant 0
  69005. //^^ push_constant(0)
  69006. // #26037
  69007. @0
  69008. // #26038
  69009. D=A
  69010. //^^ push_d_to_stack
  69011. // #26039
  69012. @SP
  69013. // #26040
  69014. A=M
  69015. // #26041
  69016. M=D
  69017. // #26042
  69018. @SP
  69019. // #26043
  69020. M=M+1
  69021. //vv push_d_to_stack
  69022. //vv push_constant(0)
  69023. //
  69024. //// not
  69025. //^^ arith_unary_op(!)
  69026. //^^ pop_stack_to_d
  69027. // #26044
  69028. @SP
  69029. // #26045
  69030. M=M-1
  69031. // #26046
  69032. A=M
  69033. // #26047
  69034. D=M
  69035. //vv pop_stack_to_d
  69036. // #26048
  69037. D=!D
  69038. //^^ push_d_to_stack
  69039. // #26049
  69040. @SP
  69041. // #26050
  69042. A=M
  69043. // #26051
  69044. M=D
  69045. // #26052
  69046. @SP
  69047. // #26053
  69048. M=M+1
  69049. //vv push_d_to_stack
  69050. //vv arith_unary_op(!)
  69051. //
  69052. //// pop static 2
  69053. //^^ pop_to_loc{Screen.vm.2)
  69054. //^^ pop_stack_to_d
  69055. // #26054
  69056. @SP
  69057. // #26055
  69058. M=M-1
  69059. // #26056
  69060. A=M
  69061. // #26057
  69062. D=M
  69063. //vv pop_stack_to_d
  69064. // #26058
  69065. @Screen.vm.2
  69066. // #26059
  69067. M=D
  69068. //vv pop_to_loc{Screen.vm.2)
  69069. //
  69070. //// push constant 17
  69071. //^^ push_constant(17)
  69072. // #26060
  69073. @17
  69074. // #26061
  69075. D=A
  69076. //^^ push_d_to_stack
  69077. // #26062
  69078. @SP
  69079. // #26063
  69080. A=M
  69081. // #26064
  69082. M=D
  69083. // #26065
  69084. @SP
  69085. // #26066
  69086. M=M+1
  69087. //vv push_d_to_stack
  69088. //vv push_constant(17)
  69089. //
  69090. //// call Array.new 1
  69091. //^^ push_constant(RET_ADDR_211)
  69092. // #26067
  69093. @RET_ADDR_211
  69094. // #26068
  69095. D=A
  69096. //^^ push_d_to_stack
  69097. // #26069
  69098. @SP
  69099. // #26070
  69100. A=M
  69101. // #26071
  69102. M=D
  69103. // #26072
  69104. @SP
  69105. // #26073
  69106. M=M+1
  69107. //vv push_d_to_stack
  69108. //vv push_constant(RET_ADDR_211)
  69109. //push return-address
  69110. // #26074
  69111. @LCL
  69112. // #26075
  69113. D=M
  69114. //^^ push_d_to_stack
  69115. // #26076
  69116. @SP
  69117. // #26077
  69118. A=M
  69119. // #26078
  69120. M=D
  69121. // #26079
  69122. @SP
  69123. // #26080
  69124. M=M+1
  69125. //vv push_d_to_stack
  69126. //push LCL
  69127. // #26081
  69128. @ARG
  69129. // #26082
  69130. D=M
  69131. //^^ push_d_to_stack
  69132. // #26083
  69133. @SP
  69134. // #26084
  69135. A=M
  69136. // #26085
  69137. M=D
  69138. // #26086
  69139. @SP
  69140. // #26087
  69141. M=M+1
  69142. //vv push_d_to_stack
  69143. //push ARG
  69144. // #26088
  69145. @THIS
  69146. // #26089
  69147. D=M
  69148. //^^ push_d_to_stack
  69149. // #26090
  69150. @SP
  69151. // #26091
  69152. A=M
  69153. // #26092
  69154. M=D
  69155. // #26093
  69156. @SP
  69157. // #26094
  69158. M=M+1
  69159. //vv push_d_to_stack
  69160. //push THIS
  69161. // #26095
  69162. @THAT
  69163. // #26096
  69164. D=M
  69165. //^^ push_d_to_stack
  69166. // #26097
  69167. @SP
  69168. // #26098
  69169. A=M
  69170. // #26099
  69171. M=D
  69172. // #26100
  69173. @SP
  69174. // #26101
  69175. M=M+1
  69176. //vv push_d_to_stack
  69177. //push THAT
  69178. // #26102
  69179. @SP
  69180. // #26103
  69181. D=M
  69182. // #26104
  69183. @ARG
  69184. // #26105
  69185. M=D
  69186. // #26106
  69187. @6
  69188. // #26107
  69189. D=A
  69190. // #26108
  69191. @ARG
  69192. // #26109
  69193. M=M-D // ARG = SP - args - 5
  69194. // #26110
  69195. @SP
  69196. // #26111
  69197. D=M
  69198. // #26112
  69199. @LCL
  69200. // #26113
  69201. M=D // LCL = SP
  69202. // #26114
  69203. @Array.new
  69204. // #26115
  69205. 0;JMP
  69206. (RET_ADDR_211)
  69207. //
  69208. //// pop static 0
  69209. //^^ pop_to_loc{Screen.vm.0)
  69210. //^^ pop_stack_to_d
  69211. // #26116
  69212. @SP
  69213. // #26117
  69214. M=M-1
  69215. // #26118
  69216. A=M
  69217. // #26119
  69218. D=M
  69219. //vv pop_stack_to_d
  69220. // #26120
  69221. @Screen.vm.0
  69222. // #26121
  69223. M=D
  69224. //vv pop_to_loc{Screen.vm.0)
  69225. //
  69226. //// push constant 0
  69227. //^^ push_constant(0)
  69228. // #26122
  69229. @0
  69230. // #26123
  69231. D=A
  69232. //^^ push_d_to_stack
  69233. // #26124
  69234. @SP
  69235. // #26125
  69236. A=M
  69237. // #26126
  69238. M=D
  69239. // #26127
  69240. @SP
  69241. // #26128
  69242. M=M+1
  69243. //vv push_d_to_stack
  69244. //vv push_constant(0)
  69245. //
  69246. //// push static 0
  69247. //^^ push_from_loc(Screen.vm.0)
  69248. // #26129
  69249. @Screen.vm.0
  69250. // #26130
  69251. D=M
  69252. //^^ push_d_to_stack
  69253. // #26131
  69254. @SP
  69255. // #26132
  69256. A=M
  69257. // #26133
  69258. M=D
  69259. // #26134
  69260. @SP
  69261. // #26135
  69262. M=M+1
  69263. //vv push_d_to_stack
  69264. //vv push_from_loc(Screen.vm.0)
  69265. //
  69266. //// add
  69267. //^^ arith_binary_op(+)
  69268. //^^ pop_stack_to_d
  69269. // #26136
  69270. @SP
  69271. // #26137
  69272. M=M-1
  69273. // #26138
  69274. A=M
  69275. // #26139
  69276. D=M
  69277. //vv pop_stack_to_d
  69278. //^^ arith_d_with_stack_top(D+M)
  69279. // #26140
  69280. @R13
  69281. // #26141
  69282. M=D
  69283. //^^ pop_stack_to_d
  69284. // #26142
  69285. @SP
  69286. // #26143
  69287. M=M-1
  69288. // #26144
  69289. A=M
  69290. // #26145
  69291. D=M
  69292. //vv pop_stack_to_d
  69293. // #26146
  69294. @R13
  69295. // #26147
  69296. D=D+M
  69297. // #26148
  69298. @R13
  69299. // #26149
  69300. M=0
  69301. //vv arith_d_with_stack_top(D+M)
  69302. //^^ push_d_to_stack
  69303. // #26150
  69304. @SP
  69305. // #26151
  69306. A=M
  69307. // #26152
  69308. M=D
  69309. // #26153
  69310. @SP
  69311. // #26154
  69312. M=M+1
  69313. //vv push_d_to_stack
  69314. //vv arith_binary_op(+)
  69315. //
  69316. //// push constant 1
  69317. //^^ push_constant(1)
  69318. // #26155
  69319. @1
  69320. // #26156
  69321. D=A
  69322. //^^ push_d_to_stack
  69323. // #26157
  69324. @SP
  69325. // #26158
  69326. A=M
  69327. // #26159
  69328. M=D
  69329. // #26160
  69330. @SP
  69331. // #26161
  69332. M=M+1
  69333. //vv push_d_to_stack
  69334. //vv push_constant(1)
  69335. //
  69336. //// pop temp 0
  69337. //^^ pop_to_loc{5)
  69338. //^^ pop_stack_to_d
  69339. // #26162
  69340. @SP
  69341. // #26163
  69342. M=M-1
  69343. // #26164
  69344. A=M
  69345. // #26165
  69346. D=M
  69347. //vv pop_stack_to_d
  69348. // #26166
  69349. @5
  69350. // #26167
  69351. M=D
  69352. //vv pop_to_loc{5)
  69353. //
  69354. //// pop pointer 1
  69355. //^^ pop_to_loc{4)
  69356. //^^ pop_stack_to_d
  69357. // #26168
  69358. @SP
  69359. // #26169
  69360. M=M-1
  69361. // #26170
  69362. A=M
  69363. // #26171
  69364. D=M
  69365. //vv pop_stack_to_d
  69366. // #26172
  69367. @4
  69368. // #26173
  69369. M=D
  69370. //vv pop_to_loc{4)
  69371. //
  69372. //// push temp 0
  69373. //^^ push_from_loc(5)
  69374. // #26174
  69375. @5
  69376. // #26175
  69377. D=M
  69378. //^^ push_d_to_stack
  69379. // #26176
  69380. @SP
  69381. // #26177
  69382. A=M
  69383. // #26178
  69384. M=D
  69385. // #26179
  69386. @SP
  69387. // #26180
  69388. M=M+1
  69389. //vv push_d_to_stack
  69390. //vv push_from_loc(5)
  69391. //
  69392. //// pop that 0
  69393. //^^ pop_to_ram(THAT, 0)
  69394. // #26181
  69395. @THAT
  69396. // #26182
  69397. D=M
  69398. // #26183
  69399. @0
  69400. // #26184
  69401. D=D+A
  69402. // #26185
  69403. @R13
  69404. // #26186
  69405. M=D
  69406. //^^ pop_stack_to_d
  69407. // #26187
  69408. @SP
  69409. // #26188
  69410. M=M-1
  69411. // #26189
  69412. A=M
  69413. // #26190
  69414. D=M
  69415. //vv pop_stack_to_d
  69416. // #26191
  69417. @R13
  69418. // #26192
  69419. A=M
  69420. // #26193
  69421. M=D
  69422. // #26194
  69423. @R13
  69424. // #26195
  69425. M=0
  69426. //vv pop_to_ram(THAT, 0)
  69427. //
  69428. //// label WHILE_EXP0
  69429. (Screen.init$WHILE_EXP0)
  69430. //
  69431. //// push local 0
  69432. //^^ push_from_ram(LCL, 0)
  69433. // #26196
  69434. @LCL
  69435. // #26197
  69436. D=M
  69437. // #26198
  69438. @0
  69439. // #26199
  69440. A=D+A
  69441. // #26200
  69442. D=M
  69443. //^^ push_d_to_stack
  69444. // #26201
  69445. @SP
  69446. // #26202
  69447. A=M
  69448. // #26203
  69449. M=D
  69450. // #26204
  69451. @SP
  69452. // #26205
  69453. M=M+1
  69454. //vv push_d_to_stack
  69455. //vv push_from_ram(LCL, 0)
  69456. //
  69457. //// push constant 16
  69458. //^^ push_constant(16)
  69459. // #26206
  69460. @16
  69461. // #26207
  69462. D=A
  69463. //^^ push_d_to_stack
  69464. // #26208
  69465. @SP
  69466. // #26209
  69467. A=M
  69468. // #26210
  69469. M=D
  69470. // #26211
  69471. @SP
  69472. // #26212
  69473. M=M+1
  69474. //vv push_d_to_stack
  69475. //vv push_constant(16)
  69476. //
  69477. //// lt
  69478. //^^ arith_cmp_op(JLT)
  69479. //^^ pop_stack_to_d
  69480. // #26213
  69481. @SP
  69482. // #26214
  69483. M=M-1
  69484. // #26215
  69485. A=M
  69486. // #26216
  69487. D=M
  69488. //vv pop_stack_to_d
  69489. //^^ arith_d_with_stack_top(D-M)
  69490. // #26217
  69491. @R13
  69492. // #26218
  69493. M=D
  69494. //^^ pop_stack_to_d
  69495. // #26219
  69496. @SP
  69497. // #26220
  69498. M=M-1
  69499. // #26221
  69500. A=M
  69501. // #26222
  69502. D=M
  69503. //vv pop_stack_to_d
  69504. // #26223
  69505. @R13
  69506. // #26224
  69507. D=D-M
  69508. // #26225
  69509. @R13
  69510. // #26226
  69511. M=0
  69512. //vv arith_d_with_stack_top(D-M)
  69513. // #26227
  69514. @PUT_TRUE_212
  69515. // #26228
  69516. D;JLT
  69517. // #26229
  69518. @R13
  69519. // #26230
  69520. M=0
  69521. // #26231
  69522. @CONT_212
  69523. // #26232
  69524. 0;JMP
  69525. (PUT_TRUE_212)
  69526. // #26233
  69527. @R13
  69528. // #26234
  69529. M=-1
  69530. (CONT_212)
  69531. // #26235
  69532. @R13
  69533. // #26236
  69534. D=M
  69535. // #26237
  69536. @R13
  69537. // #26238
  69538. M=0
  69539. //^^ push_d_to_stack
  69540. // #26239
  69541. @SP
  69542. // #26240
  69543. A=M
  69544. // #26241
  69545. M=D
  69546. // #26242
  69547. @SP
  69548. // #26243
  69549. M=M+1
  69550. //vv push_d_to_stack
  69551. //vv arith_cmp_op(JLT)
  69552. //
  69553. //// not
  69554. //^^ arith_unary_op(!)
  69555. //^^ pop_stack_to_d
  69556. // #26244
  69557. @SP
  69558. // #26245
  69559. M=M-1
  69560. // #26246
  69561. A=M
  69562. // #26247
  69563. D=M
  69564. //vv pop_stack_to_d
  69565. // #26248
  69566. D=!D
  69567. //^^ push_d_to_stack
  69568. // #26249
  69569. @SP
  69570. // #26250
  69571. A=M
  69572. // #26251
  69573. M=D
  69574. // #26252
  69575. @SP
  69576. // #26253
  69577. M=M+1
  69578. //vv push_d_to_stack
  69579. //vv arith_unary_op(!)
  69580. //
  69581. //// if-goto WHILE_END0
  69582. //^^ pop_stack_to_d
  69583. // #26254
  69584. @SP
  69585. // #26255
  69586. M=M-1
  69587. // #26256
  69588. A=M
  69589. // #26257
  69590. D=M
  69591. //vv pop_stack_to_d
  69592. // #26258
  69593. @Screen.init$WHILE_END0
  69594. // #26259
  69595. D;JNE
  69596. //
  69597. //// push local 0
  69598. //^^ push_from_ram(LCL, 0)
  69599. // #26260
  69600. @LCL
  69601. // #26261
  69602. D=M
  69603. // #26262
  69604. @0
  69605. // #26263
  69606. A=D+A
  69607. // #26264
  69608. D=M
  69609. //^^ push_d_to_stack
  69610. // #26265
  69611. @SP
  69612. // #26266
  69613. A=M
  69614. // #26267
  69615. M=D
  69616. // #26268
  69617. @SP
  69618. // #26269
  69619. M=M+1
  69620. //vv push_d_to_stack
  69621. //vv push_from_ram(LCL, 0)
  69622. //
  69623. //// push constant 1
  69624. //^^ push_constant(1)
  69625. // #26270
  69626. @1
  69627. // #26271
  69628. D=A
  69629. //^^ push_d_to_stack
  69630. // #26272
  69631. @SP
  69632. // #26273
  69633. A=M
  69634. // #26274
  69635. M=D
  69636. // #26275
  69637. @SP
  69638. // #26276
  69639. M=M+1
  69640. //vv push_d_to_stack
  69641. //vv push_constant(1)
  69642. //
  69643. //// add
  69644. //^^ arith_binary_op(+)
  69645. //^^ pop_stack_to_d
  69646. // #26277
  69647. @SP
  69648. // #26278
  69649. M=M-1
  69650. // #26279
  69651. A=M
  69652. // #26280
  69653. D=M
  69654. //vv pop_stack_to_d
  69655. //^^ arith_d_with_stack_top(D+M)
  69656. // #26281
  69657. @R13
  69658. // #26282
  69659. M=D
  69660. //^^ pop_stack_to_d
  69661. // #26283
  69662. @SP
  69663. // #26284
  69664. M=M-1
  69665. // #26285
  69666. A=M
  69667. // #26286
  69668. D=M
  69669. //vv pop_stack_to_d
  69670. // #26287
  69671. @R13
  69672. // #26288
  69673. D=D+M
  69674. // #26289
  69675. @R13
  69676. // #26290
  69677. M=0
  69678. //vv arith_d_with_stack_top(D+M)
  69679. //^^ push_d_to_stack
  69680. // #26291
  69681. @SP
  69682. // #26292
  69683. A=M
  69684. // #26293
  69685. M=D
  69686. // #26294
  69687. @SP
  69688. // #26295
  69689. M=M+1
  69690. //vv push_d_to_stack
  69691. //vv arith_binary_op(+)
  69692. //
  69693. //// pop local 0
  69694. //^^ pop_to_ram(LCL, 0)
  69695. // #26296
  69696. @LCL
  69697. // #26297
  69698. D=M
  69699. // #26298
  69700. @0
  69701. // #26299
  69702. D=D+A
  69703. // #26300
  69704. @R13
  69705. // #26301
  69706. M=D
  69707. //^^ pop_stack_to_d
  69708. // #26302
  69709. @SP
  69710. // #26303
  69711. M=M-1
  69712. // #26304
  69713. A=M
  69714. // #26305
  69715. D=M
  69716. //vv pop_stack_to_d
  69717. // #26306
  69718. @R13
  69719. // #26307
  69720. A=M
  69721. // #26308
  69722. M=D
  69723. // #26309
  69724. @R13
  69725. // #26310
  69726. M=0
  69727. //vv pop_to_ram(LCL, 0)
  69728. //
  69729. //// push local 0
  69730. //^^ push_from_ram(LCL, 0)
  69731. // #26311
  69732. @LCL
  69733. // #26312
  69734. D=M
  69735. // #26313
  69736. @0
  69737. // #26314
  69738. A=D+A
  69739. // #26315
  69740. D=M
  69741. //^^ push_d_to_stack
  69742. // #26316
  69743. @SP
  69744. // #26317
  69745. A=M
  69746. // #26318
  69747. M=D
  69748. // #26319
  69749. @SP
  69750. // #26320
  69751. M=M+1
  69752. //vv push_d_to_stack
  69753. //vv push_from_ram(LCL, 0)
  69754. //
  69755. //// push static 0
  69756. //^^ push_from_loc(Screen.vm.0)
  69757. // #26321
  69758. @Screen.vm.0
  69759. // #26322
  69760. D=M
  69761. //^^ push_d_to_stack
  69762. // #26323
  69763. @SP
  69764. // #26324
  69765. A=M
  69766. // #26325
  69767. M=D
  69768. // #26326
  69769. @SP
  69770. // #26327
  69771. M=M+1
  69772. //vv push_d_to_stack
  69773. //vv push_from_loc(Screen.vm.0)
  69774. //
  69775. //// add
  69776. //^^ arith_binary_op(+)
  69777. //^^ pop_stack_to_d
  69778. // #26328
  69779. @SP
  69780. // #26329
  69781. M=M-1
  69782. // #26330
  69783. A=M
  69784. // #26331
  69785. D=M
  69786. //vv pop_stack_to_d
  69787. //^^ arith_d_with_stack_top(D+M)
  69788. // #26332
  69789. @R13
  69790. // #26333
  69791. M=D
  69792. //^^ pop_stack_to_d
  69793. // #26334
  69794. @SP
  69795. // #26335
  69796. M=M-1
  69797. // #26336
  69798. A=M
  69799. // #26337
  69800. D=M
  69801. //vv pop_stack_to_d
  69802. // #26338
  69803. @R13
  69804. // #26339
  69805. D=D+M
  69806. // #26340
  69807. @R13
  69808. // #26341
  69809. M=0
  69810. //vv arith_d_with_stack_top(D+M)
  69811. //^^ push_d_to_stack
  69812. // #26342
  69813. @SP
  69814. // #26343
  69815. A=M
  69816. // #26344
  69817. M=D
  69818. // #26345
  69819. @SP
  69820. // #26346
  69821. M=M+1
  69822. //vv push_d_to_stack
  69823. //vv arith_binary_op(+)
  69824. //
  69825. //// push local 0
  69826. //^^ push_from_ram(LCL, 0)
  69827. // #26347
  69828. @LCL
  69829. // #26348
  69830. D=M
  69831. // #26349
  69832. @0
  69833. // #26350
  69834. A=D+A
  69835. // #26351
  69836. D=M
  69837. //^^ push_d_to_stack
  69838. // #26352
  69839. @SP
  69840. // #26353
  69841. A=M
  69842. // #26354
  69843. M=D
  69844. // #26355
  69845. @SP
  69846. // #26356
  69847. M=M+1
  69848. //vv push_d_to_stack
  69849. //vv push_from_ram(LCL, 0)
  69850. //
  69851. //// push constant 1
  69852. //^^ push_constant(1)
  69853. // #26357
  69854. @1
  69855. // #26358
  69856. D=A
  69857. //^^ push_d_to_stack
  69858. // #26359
  69859. @SP
  69860. // #26360
  69861. A=M
  69862. // #26361
  69863. M=D
  69864. // #26362
  69865. @SP
  69866. // #26363
  69867. M=M+1
  69868. //vv push_d_to_stack
  69869. //vv push_constant(1)
  69870. //
  69871. //// sub
  69872. //^^ arith_binary_op(-)
  69873. //^^ pop_stack_to_d
  69874. // #26364
  69875. @SP
  69876. // #26365
  69877. M=M-1
  69878. // #26366
  69879. A=M
  69880. // #26367
  69881. D=M
  69882. //vv pop_stack_to_d
  69883. //^^ arith_d_with_stack_top(D-M)
  69884. // #26368
  69885. @R13
  69886. // #26369
  69887. M=D
  69888. //^^ pop_stack_to_d
  69889. // #26370
  69890. @SP
  69891. // #26371
  69892. M=M-1
  69893. // #26372
  69894. A=M
  69895. // #26373
  69896. D=M
  69897. //vv pop_stack_to_d
  69898. // #26374
  69899. @R13
  69900. // #26375
  69901. D=D-M
  69902. // #26376
  69903. @R13
  69904. // #26377
  69905. M=0
  69906. //vv arith_d_with_stack_top(D-M)
  69907. //^^ push_d_to_stack
  69908. // #26378
  69909. @SP
  69910. // #26379
  69911. A=M
  69912. // #26380
  69913. M=D
  69914. // #26381
  69915. @SP
  69916. // #26382
  69917. M=M+1
  69918. //vv push_d_to_stack
  69919. //vv arith_binary_op(-)
  69920. //
  69921. //// push static 0
  69922. //^^ push_from_loc(Screen.vm.0)
  69923. // #26383
  69924. @Screen.vm.0
  69925. // #26384
  69926. D=M
  69927. //^^ push_d_to_stack
  69928. // #26385
  69929. @SP
  69930. // #26386
  69931. A=M
  69932. // #26387
  69933. M=D
  69934. // #26388
  69935. @SP
  69936. // #26389
  69937. M=M+1
  69938. //vv push_d_to_stack
  69939. //vv push_from_loc(Screen.vm.0)
  69940. //
  69941. //// add
  69942. //^^ arith_binary_op(+)
  69943. //^^ pop_stack_to_d
  69944. // #26390
  69945. @SP
  69946. // #26391
  69947. M=M-1
  69948. // #26392
  69949. A=M
  69950. // #26393
  69951. D=M
  69952. //vv pop_stack_to_d
  69953. //^^ arith_d_with_stack_top(D+M)
  69954. // #26394
  69955. @R13
  69956. // #26395
  69957. M=D
  69958. //^^ pop_stack_to_d
  69959. // #26396
  69960. @SP
  69961. // #26397
  69962. M=M-1
  69963. // #26398
  69964. A=M
  69965. // #26399
  69966. D=M
  69967. //vv pop_stack_to_d
  69968. // #26400
  69969. @R13
  69970. // #26401
  69971. D=D+M
  69972. // #26402
  69973. @R13
  69974. // #26403
  69975. M=0
  69976. //vv arith_d_with_stack_top(D+M)
  69977. //^^ push_d_to_stack
  69978. // #26404
  69979. @SP
  69980. // #26405
  69981. A=M
  69982. // #26406
  69983. M=D
  69984. // #26407
  69985. @SP
  69986. // #26408
  69987. M=M+1
  69988. //vv push_d_to_stack
  69989. //vv arith_binary_op(+)
  69990. //
  69991. //// pop pointer 1
  69992. //^^ pop_to_loc{4)
  69993. //^^ pop_stack_to_d
  69994. // #26409
  69995. @SP
  69996. // #26410
  69997. M=M-1
  69998. // #26411
  69999. A=M
  70000. // #26412
  70001. D=M
  70002. //vv pop_stack_to_d
  70003. // #26413
  70004. @4
  70005. // #26414
  70006. M=D
  70007. //vv pop_to_loc{4)
  70008. //
  70009. //// push that 0
  70010. //^^ push_from_ram(THAT, 0)
  70011. // #26415
  70012. @THAT
  70013. // #26416
  70014. D=M
  70015. // #26417
  70016. @0
  70017. // #26418
  70018. A=D+A
  70019. // #26419
  70020. D=M
  70021. //^^ push_d_to_stack
  70022. // #26420
  70023. @SP
  70024. // #26421
  70025. A=M
  70026. // #26422
  70027. M=D
  70028. // #26423
  70029. @SP
  70030. // #26424
  70031. M=M+1
  70032. //vv push_d_to_stack
  70033. //vv push_from_ram(THAT, 0)
  70034. //
  70035. //// push local 0
  70036. //^^ push_from_ram(LCL, 0)
  70037. // #26425
  70038. @LCL
  70039. // #26426
  70040. D=M
  70041. // #26427
  70042. @0
  70043. // #26428
  70044. A=D+A
  70045. // #26429
  70046. D=M
  70047. //^^ push_d_to_stack
  70048. // #26430
  70049. @SP
  70050. // #26431
  70051. A=M
  70052. // #26432
  70053. M=D
  70054. // #26433
  70055. @SP
  70056. // #26434
  70057. M=M+1
  70058. //vv push_d_to_stack
  70059. //vv push_from_ram(LCL, 0)
  70060. //
  70061. //// push constant 1
  70062. //^^ push_constant(1)
  70063. // #26435
  70064. @1
  70065. // #26436
  70066. D=A
  70067. //^^ push_d_to_stack
  70068. // #26437
  70069. @SP
  70070. // #26438
  70071. A=M
  70072. // #26439
  70073. M=D
  70074. // #26440
  70075. @SP
  70076. // #26441
  70077. M=M+1
  70078. //vv push_d_to_stack
  70079. //vv push_constant(1)
  70080. //
  70081. //// sub
  70082. //^^ arith_binary_op(-)
  70083. //^^ pop_stack_to_d
  70084. // #26442
  70085. @SP
  70086. // #26443
  70087. M=M-1
  70088. // #26444
  70089. A=M
  70090. // #26445
  70091. D=M
  70092. //vv pop_stack_to_d
  70093. //^^ arith_d_with_stack_top(D-M)
  70094. // #26446
  70095. @R13
  70096. // #26447
  70097. M=D
  70098. //^^ pop_stack_to_d
  70099. // #26448
  70100. @SP
  70101. // #26449
  70102. M=M-1
  70103. // #26450
  70104. A=M
  70105. // #26451
  70106. D=M
  70107. //vv pop_stack_to_d
  70108. // #26452
  70109. @R13
  70110. // #26453
  70111. D=D-M
  70112. // #26454
  70113. @R13
  70114. // #26455
  70115. M=0
  70116. //vv arith_d_with_stack_top(D-M)
  70117. //^^ push_d_to_stack
  70118. // #26456
  70119. @SP
  70120. // #26457
  70121. A=M
  70122. // #26458
  70123. M=D
  70124. // #26459
  70125. @SP
  70126. // #26460
  70127. M=M+1
  70128. //vv push_d_to_stack
  70129. //vv arith_binary_op(-)
  70130. //
  70131. //// push static 0
  70132. //^^ push_from_loc(Screen.vm.0)
  70133. // #26461
  70134. @Screen.vm.0
  70135. // #26462
  70136. D=M
  70137. //^^ push_d_to_stack
  70138. // #26463
  70139. @SP
  70140. // #26464
  70141. A=M
  70142. // #26465
  70143. M=D
  70144. // #26466
  70145. @SP
  70146. // #26467
  70147. M=M+1
  70148. //vv push_d_to_stack
  70149. //vv push_from_loc(Screen.vm.0)
  70150. //
  70151. //// add
  70152. //^^ arith_binary_op(+)
  70153. //^^ pop_stack_to_d
  70154. // #26468
  70155. @SP
  70156. // #26469
  70157. M=M-1
  70158. // #26470
  70159. A=M
  70160. // #26471
  70161. D=M
  70162. //vv pop_stack_to_d
  70163. //^^ arith_d_with_stack_top(D+M)
  70164. // #26472
  70165. @R13
  70166. // #26473
  70167. M=D
  70168. //^^ pop_stack_to_d
  70169. // #26474
  70170. @SP
  70171. // #26475
  70172. M=M-1
  70173. // #26476
  70174. A=M
  70175. // #26477
  70176. D=M
  70177. //vv pop_stack_to_d
  70178. // #26478
  70179. @R13
  70180. // #26479
  70181. D=D+M
  70182. // #26480
  70183. @R13
  70184. // #26481
  70185. M=0
  70186. //vv arith_d_with_stack_top(D+M)
  70187. //^^ push_d_to_stack
  70188. // #26482
  70189. @SP
  70190. // #26483
  70191. A=M
  70192. // #26484
  70193. M=D
  70194. // #26485
  70195. @SP
  70196. // #26486
  70197. M=M+1
  70198. //vv push_d_to_stack
  70199. //vv arith_binary_op(+)
  70200. //
  70201. //// pop pointer 1
  70202. //^^ pop_to_loc{4)
  70203. //^^ pop_stack_to_d
  70204. // #26487
  70205. @SP
  70206. // #26488
  70207. M=M-1
  70208. // #26489
  70209. A=M
  70210. // #26490
  70211. D=M
  70212. //vv pop_stack_to_d
  70213. // #26491
  70214. @4
  70215. // #26492
  70216. M=D
  70217. //vv pop_to_loc{4)
  70218. //
  70219. //// push that 0
  70220. //^^ push_from_ram(THAT, 0)
  70221. // #26493
  70222. @THAT
  70223. // #26494
  70224. D=M
  70225. // #26495
  70226. @0
  70227. // #26496
  70228. A=D+A
  70229. // #26497
  70230. D=M
  70231. //^^ push_d_to_stack
  70232. // #26498
  70233. @SP
  70234. // #26499
  70235. A=M
  70236. // #26500
  70237. M=D
  70238. // #26501
  70239. @SP
  70240. // #26502
  70241. M=M+1
  70242. //vv push_d_to_stack
  70243. //vv push_from_ram(THAT, 0)
  70244. //
  70245. //// add
  70246. //^^ arith_binary_op(+)
  70247. //^^ pop_stack_to_d
  70248. // #26503
  70249. @SP
  70250. // #26504
  70251. M=M-1
  70252. // #26505
  70253. A=M
  70254. // #26506
  70255. D=M
  70256. //vv pop_stack_to_d
  70257. //^^ arith_d_with_stack_top(D+M)
  70258. // #26507
  70259. @R13
  70260. // #26508
  70261. M=D
  70262. //^^ pop_stack_to_d
  70263. // #26509
  70264. @SP
  70265. // #26510
  70266. M=M-1
  70267. // #26511
  70268. A=M
  70269. // #26512
  70270. D=M
  70271. //vv pop_stack_to_d
  70272. // #26513
  70273. @R13
  70274. // #26514
  70275. D=D+M
  70276. // #26515
  70277. @R13
  70278. // #26516
  70279. M=0
  70280. //vv arith_d_with_stack_top(D+M)
  70281. //^^ push_d_to_stack
  70282. // #26517
  70283. @SP
  70284. // #26518
  70285. A=M
  70286. // #26519
  70287. M=D
  70288. // #26520
  70289. @SP
  70290. // #26521
  70291. M=M+1
  70292. //vv push_d_to_stack
  70293. //vv arith_binary_op(+)
  70294. //
  70295. //// pop temp 0
  70296. //^^ pop_to_loc{5)
  70297. //^^ pop_stack_to_d
  70298. // #26522
  70299. @SP
  70300. // #26523
  70301. M=M-1
  70302. // #26524
  70303. A=M
  70304. // #26525
  70305. D=M
  70306. //vv pop_stack_to_d
  70307. // #26526
  70308. @5
  70309. // #26527
  70310. M=D
  70311. //vv pop_to_loc{5)
  70312. //
  70313. //// pop pointer 1
  70314. //^^ pop_to_loc{4)
  70315. //^^ pop_stack_to_d
  70316. // #26528
  70317. @SP
  70318. // #26529
  70319. M=M-1
  70320. // #26530
  70321. A=M
  70322. // #26531
  70323. D=M
  70324. //vv pop_stack_to_d
  70325. // #26532
  70326. @4
  70327. // #26533
  70328. M=D
  70329. //vv pop_to_loc{4)
  70330. //
  70331. //// push temp 0
  70332. //^^ push_from_loc(5)
  70333. // #26534
  70334. @5
  70335. // #26535
  70336. D=M
  70337. //^^ push_d_to_stack
  70338. // #26536
  70339. @SP
  70340. // #26537
  70341. A=M
  70342. // #26538
  70343. M=D
  70344. // #26539
  70345. @SP
  70346. // #26540
  70347. M=M+1
  70348. //vv push_d_to_stack
  70349. //vv push_from_loc(5)
  70350. //
  70351. //// pop that 0
  70352. //^^ pop_to_ram(THAT, 0)
  70353. // #26541
  70354. @THAT
  70355. // #26542
  70356. D=M
  70357. // #26543
  70358. @0
  70359. // #26544
  70360. D=D+A
  70361. // #26545
  70362. @R13
  70363. // #26546
  70364. M=D
  70365. //^^ pop_stack_to_d
  70366. // #26547
  70367. @SP
  70368. // #26548
  70369. M=M-1
  70370. // #26549
  70371. A=M
  70372. // #26550
  70373. D=M
  70374. //vv pop_stack_to_d
  70375. // #26551
  70376. @R13
  70377. // #26552
  70378. A=M
  70379. // #26553
  70380. M=D
  70381. // #26554
  70382. @R13
  70383. // #26555
  70384. M=0
  70385. //vv pop_to_ram(THAT, 0)
  70386. //
  70387. //// goto WHILE_EXP0
  70388. // #26556
  70389. @Screen.init$WHILE_EXP0
  70390. // #26557
  70391. 0;JMP
  70392. //
  70393. //// label WHILE_END0
  70394. (Screen.init$WHILE_END0)
  70395. //
  70396. //// push constant 0
  70397. //^^ push_constant(0)
  70398. // #26558
  70399. @0
  70400. // #26559
  70401. D=A
  70402. //^^ push_d_to_stack
  70403. // #26560
  70404. @SP
  70405. // #26561
  70406. A=M
  70407. // #26562
  70408. M=D
  70409. // #26563
  70410. @SP
  70411. // #26564
  70412. M=M+1
  70413. //vv push_d_to_stack
  70414. //vv push_constant(0)
  70415. //
  70416. //// return
  70417. // #26565
  70418. @LCL
  70419. // #26566
  70420. D=M
  70421. // #26567
  70422. @R14
  70423. // #26568
  70424. M=D //R14=LCL
  70425. // #26569
  70426. @5
  70427. // #26570
  70428. A=D-A
  70429. // #26571
  70430. D=M
  70431. // #26572
  70432. @R15
  70433. // #26573
  70434. M=D //R15=*(LCL-5)
  70435. //^^ pop_stack_to_d
  70436. // #26574
  70437. @SP
  70438. // #26575
  70439. M=M-1
  70440. // #26576
  70441. A=M
  70442. // #26577
  70443. D=M
  70444. //vv pop_stack_to_d
  70445. // #26578
  70446. @ARG
  70447. // #26579
  70448. A=M
  70449. // #26580
  70450. M=D //*ARG = pop()
  70451. // #26581
  70452. @ARG
  70453. // #26582
  70454. D=M
  70455. // #26583
  70456. @SP
  70457. // #26584
  70458. M=D+1 //SP=ARG+1
  70459. // #26585
  70460. @R14
  70461. // #26586
  70462. AM=M-1
  70463. // #26587
  70464. D=M
  70465. // #26588
  70466. @THAT
  70467. // #26589
  70468. M=D //THAT = *(--R14)
  70469. // #26590
  70470. @R14
  70471. // #26591
  70472. AM=M-1
  70473. // #26592
  70474. D=M
  70475. // #26593
  70476. @THIS
  70477. // #26594
  70478. M=D //THIS = *(--R14)
  70479. // #26595
  70480. @R14
  70481. // #26596
  70482. AM=M-1
  70483. // #26597
  70484. D=M
  70485. // #26598
  70486. @ARG
  70487. // #26599
  70488. M=D //ARG = *(--R14)
  70489. // #26600
  70490. @R14
  70491. // #26601
  70492. AM=M-1
  70493. // #26602
  70494. D=M
  70495. // #26603
  70496. @LCL
  70497. // #26604
  70498. M=D //LCL = *(--R14)
  70499. // #26605
  70500. @R15
  70501. // #26606
  70502. A=M
  70503. // #26607
  70504. 0;JMP //goto *R15
  70505. //
  70506. //// function Screen.clearScreen 1
  70507. (Screen.clearScreen)
  70508. // #26608
  70509. D=0
  70510. //^^ push_d_to_stack
  70511. // #26609
  70512. @SP
  70513. // #26610
  70514. A=M
  70515. // #26611
  70516. M=D
  70517. // #26612
  70518. @SP
  70519. // #26613
  70520. M=M+1
  70521. //vv push_d_to_stack
  70522. //
  70523. //// push static 2
  70524. //^^ push_from_loc(Screen.vm.2)
  70525. // #26614
  70526. @Screen.vm.2
  70527. // #26615
  70528. D=M
  70529. //^^ push_d_to_stack
  70530. // #26616
  70531. @SP
  70532. // #26617
  70533. A=M
  70534. // #26618
  70535. M=D
  70536. // #26619
  70537. @SP
  70538. // #26620
  70539. M=M+1
  70540. //vv push_d_to_stack
  70541. //vv push_from_loc(Screen.vm.2)
  70542. //
  70543. //// if-goto IF_TRUE0
  70544. //^^ pop_stack_to_d
  70545. // #26621
  70546. @SP
  70547. // #26622
  70548. M=M-1
  70549. // #26623
  70550. A=M
  70551. // #26624
  70552. D=M
  70553. //vv pop_stack_to_d
  70554. // #26625
  70555. @Screen.updateLocation$IF_TRUE0
  70556. // #26626
  70557. D;JNE
  70558. //
  70559. //// goto IF_FALSE0
  70560. // #26627
  70561. @Screen.updateLocation$IF_FALSE0
  70562. // #26628
  70563. 0;JMP
  70564. //
  70565. //// label IF_TRUE0
  70566. (Screen.updateLocation$IF_TRUE0)
  70567. //
  70568. //// push argument 0
  70569. //^^ push_from_ram(ARG, 0)
  70570. // #26629
  70571. @ARG
  70572. // #26630
  70573. D=M
  70574. // #26631
  70575. @0
  70576. // #26632
  70577. A=D+A
  70578. // #26633
  70579. D=M
  70580. //^^ push_d_to_stack
  70581. // #26634
  70582. @SP
  70583. // #26635
  70584. A=M
  70585. // #26636
  70586. M=D
  70587. // #26637
  70588. @SP
  70589. // #26638
  70590. M=M+1
  70591. //vv push_d_to_stack
  70592. //vv push_from_ram(ARG, 0)
  70593. //
  70594. //// push static 1
  70595. //^^ push_from_loc(Screen.vm.1)
  70596. // #26639
  70597. @Screen.vm.1
  70598. // #26640
  70599. D=M
  70600. //^^ push_d_to_stack
  70601. // #26641
  70602. @SP
  70603. // #26642
  70604. A=M
  70605. // #26643
  70606. M=D
  70607. // #26644
  70608. @SP
  70609. // #26645
  70610. M=M+1
  70611. //vv push_d_to_stack
  70612. //vv push_from_loc(Screen.vm.1)
  70613. //
  70614. //// add
  70615. //^^ arith_binary_op(+)
  70616. //^^ pop_stack_to_d
  70617. // #26646
  70618. @SP
  70619. // #26647
  70620. M=M-1
  70621. // #26648
  70622. A=M
  70623. // #26649
  70624. D=M
  70625. //vv pop_stack_to_d
  70626. //^^ arith_d_with_stack_top(D+M)
  70627. // #26650
  70628. @R13
  70629. // #26651
  70630. M=D
  70631. //^^ pop_stack_to_d
  70632. // #26652
  70633. @SP
  70634. // #26653
  70635. M=M-1
  70636. // #26654
  70637. A=M
  70638. // #26655
  70639. D=M
  70640. //vv pop_stack_to_d
  70641. // #26656
  70642. @R13
  70643. // #26657
  70644. D=D+M
  70645. // #26658
  70646. @R13
  70647. // #26659
  70648. M=0
  70649. //vv arith_d_with_stack_top(D+M)
  70650. //^^ push_d_to_stack
  70651. // #26660
  70652. @SP
  70653. // #26661
  70654. A=M
  70655. // #26662
  70656. M=D
  70657. // #26663
  70658. @SP
  70659. // #26664
  70660. M=M+1
  70661. //vv push_d_to_stack
  70662. //vv arith_binary_op(+)
  70663. //
  70664. //// push argument 0
  70665. //^^ push_from_ram(ARG, 0)
  70666. // #26665
  70667. @ARG
  70668. // #26666
  70669. D=M
  70670. // #26667
  70671. @0
  70672. // #26668
  70673. A=D+A
  70674. // #26669
  70675. D=M
  70676. //^^ push_d_to_stack
  70677. // #26670
  70678. @SP
  70679. // #26671
  70680. A=M
  70681. // #26672
  70682. M=D
  70683. // #26673
  70684. @SP
  70685. // #26674
  70686. M=M+1
  70687. //vv push_d_to_stack
  70688. //vv push_from_ram(ARG, 0)
  70689. //
  70690. //// push static 1
  70691. //^^ push_from_loc(Screen.vm.1)
  70692. // #26675
  70693. @Screen.vm.1
  70694. // #26676
  70695. D=M
  70696. //^^ push_d_to_stack
  70697. // #26677
  70698. @SP
  70699. // #26678
  70700. A=M
  70701. // #26679
  70702. M=D
  70703. // #26680
  70704. @SP
  70705. // #26681
  70706. M=M+1
  70707. //vv push_d_to_stack
  70708. //vv push_from_loc(Screen.vm.1)
  70709. //
  70710. //// add
  70711. //^^ arith_binary_op(+)
  70712. //^^ pop_stack_to_d
  70713. // #26682
  70714. @SP
  70715. // #26683
  70716. M=M-1
  70717. // #26684
  70718. A=M
  70719. // #26685
  70720. D=M
  70721. //vv pop_stack_to_d
  70722. //^^ arith_d_with_stack_top(D+M)
  70723. // #26686
  70724. @R13
  70725. // #26687
  70726. M=D
  70727. //^^ pop_stack_to_d
  70728. // #26688
  70729. @SP
  70730. // #26689
  70731. M=M-1
  70732. // #26690
  70733. A=M
  70734. // #26691
  70735. D=M
  70736. //vv pop_stack_to_d
  70737. // #26692
  70738. @R13
  70739. // #26693
  70740. D=D+M
  70741. // #26694
  70742. @R13
  70743. // #26695
  70744. M=0
  70745. //vv arith_d_with_stack_top(D+M)
  70746. //^^ push_d_to_stack
  70747. // #26696
  70748. @SP
  70749. // #26697
  70750. A=M
  70751. // #26698
  70752. M=D
  70753. // #26699
  70754. @SP
  70755. // #26700
  70756. M=M+1
  70757. //vv push_d_to_stack
  70758. //vv arith_binary_op(+)
  70759. //
  70760. //// pop pointer 1
  70761. //^^ pop_to_loc{4)
  70762. //^^ pop_stack_to_d
  70763. // #26701
  70764. @SP
  70765. // #26702
  70766. M=M-1
  70767. // #26703
  70768. A=M
  70769. // #26704
  70770. D=M
  70771. //vv pop_stack_to_d
  70772. // #26705
  70773. @4
  70774. // #26706
  70775. M=D
  70776. //vv pop_to_loc{4)
  70777. //
  70778. //// push that 0
  70779. //^^ push_from_ram(THAT, 0)
  70780. // #26707
  70781. @THAT
  70782. // #26708
  70783. D=M
  70784. // #26709
  70785. @0
  70786. // #26710
  70787. A=D+A
  70788. // #26711
  70789. D=M
  70790. //^^ push_d_to_stack
  70791. // #26712
  70792. @SP
  70793. // #26713
  70794. A=M
  70795. // #26714
  70796. M=D
  70797. // #26715
  70798. @SP
  70799. // #26716
  70800. M=M+1
  70801. //vv push_d_to_stack
  70802. //vv push_from_ram(THAT, 0)
  70803. //
  70804. //// push argument 1
  70805. //^^ push_from_ram(ARG, 1)
  70806. // #26717
  70807. @ARG
  70808. // #26718
  70809. D=M
  70810. // #26719
  70811. @1
  70812. // #26720
  70813. A=D+A
  70814. // #26721
  70815. D=M
  70816. //^^ push_d_to_stack
  70817. // #26722
  70818. @SP
  70819. // #26723
  70820. A=M
  70821. // #26724
  70822. M=D
  70823. // #26725
  70824. @SP
  70825. // #26726
  70826. M=M+1
  70827. //vv push_d_to_stack
  70828. //vv push_from_ram(ARG, 1)
  70829. //
  70830. //// or
  70831. //^^ arith_binary_op(|)
  70832. //^^ pop_stack_to_d
  70833. // #26727
  70834. @SP
  70835. // #26728
  70836. M=M-1
  70837. // #26729
  70838. A=M
  70839. // #26730
  70840. D=M
  70841. //vv pop_stack_to_d
  70842. //^^ arith_d_with_stack_top(D|M)
  70843. // #26731
  70844. @R13
  70845. // #26732
  70846. M=D
  70847. //^^ pop_stack_to_d
  70848. // #26733
  70849. @SP
  70850. // #26734
  70851. M=M-1
  70852. // #26735
  70853. A=M
  70854. // #26736
  70855. D=M
  70856. //vv pop_stack_to_d
  70857. // #26737
  70858. @R13
  70859. // #26738
  70860. D=D|M
  70861. // #26739
  70862. @R13
  70863. // #26740
  70864. M=0
  70865. //vv arith_d_with_stack_top(D|M)
  70866. //^^ push_d_to_stack
  70867. // #26741
  70868. @SP
  70869. // #26742
  70870. A=M
  70871. // #26743
  70872. M=D
  70873. // #26744
  70874. @SP
  70875. // #26745
  70876. M=M+1
  70877. //vv push_d_to_stack
  70878. //vv arith_binary_op(|)
  70879. //
  70880. //// pop temp 0
  70881. //^^ pop_to_loc{5)
  70882. //^^ pop_stack_to_d
  70883. // #26746
  70884. @SP
  70885. // #26747
  70886. M=M-1
  70887. // #26748
  70888. A=M
  70889. // #26749
  70890. D=M
  70891. //vv pop_stack_to_d
  70892. // #26750
  70893. @5
  70894. // #26751
  70895. M=D
  70896. //vv pop_to_loc{5)
  70897. //
  70898. //// pop pointer 1
  70899. //^^ pop_to_loc{4)
  70900. //^^ pop_stack_to_d
  70901. // #26752
  70902. @SP
  70903. // #26753
  70904. M=M-1
  70905. // #26754
  70906. A=M
  70907. // #26755
  70908. D=M
  70909. //vv pop_stack_to_d
  70910. // #26756
  70911. @4
  70912. // #26757
  70913. M=D
  70914. //vv pop_to_loc{4)
  70915. //
  70916. //// push temp 0
  70917. //^^ push_from_loc(5)
  70918. // #26758
  70919. @5
  70920. // #26759
  70921. D=M
  70922. //^^ push_d_to_stack
  70923. // #26760
  70924. @SP
  70925. // #26761
  70926. A=M
  70927. // #26762
  70928. M=D
  70929. // #26763
  70930. @SP
  70931. // #26764
  70932. M=M+1
  70933. //vv push_d_to_stack
  70934. //vv push_from_loc(5)
  70935. //
  70936. //// pop that 0
  70937. //^^ pop_to_ram(THAT, 0)
  70938. // #26765
  70939. @THAT
  70940. // #26766
  70941. D=M
  70942. // #26767
  70943. @0
  70944. // #26768
  70945. D=D+A
  70946. // #26769
  70947. @R13
  70948. // #26770
  70949. M=D
  70950. //^^ pop_stack_to_d
  70951. // #26771
  70952. @SP
  70953. // #26772
  70954. M=M-1
  70955. // #26773
  70956. A=M
  70957. // #26774
  70958. D=M
  70959. //vv pop_stack_to_d
  70960. // #26775
  70961. @R13
  70962. // #26776
  70963. A=M
  70964. // #26777
  70965. M=D
  70966. // #26778
  70967. @R13
  70968. // #26779
  70969. M=0
  70970. //vv pop_to_ram(THAT, 0)
  70971. //
  70972. //// goto IF_END0
  70973. // #26780
  70974. @Screen.updateLocation$IF_END0
  70975. // #26781
  70976. 0;JMP
  70977. //
  70978. //// label IF_FALSE0
  70979. (Screen.updateLocation$IF_FALSE0)
  70980. //
  70981. //// push argument 0
  70982. //^^ push_from_ram(ARG, 0)
  70983. // #26782
  70984. @ARG
  70985. // #26783
  70986. D=M
  70987. // #26784
  70988. @0
  70989. // #26785
  70990. A=D+A
  70991. // #26786
  70992. D=M
  70993. //^^ push_d_to_stack
  70994. // #26787
  70995. @SP
  70996. // #26788
  70997. A=M
  70998. // #26789
  70999. M=D
  71000. // #26790
  71001. @SP
  71002. // #26791
  71003. M=M+1
  71004. //vv push_d_to_stack
  71005. //vv push_from_ram(ARG, 0)
  71006. //
  71007. //// push static 1
  71008. //^^ push_from_loc(Screen.vm.1)
  71009. // #26792
  71010. @Screen.vm.1
  71011. // #26793
  71012. D=M
  71013. //^^ push_d_to_stack
  71014. // #26794
  71015. @SP
  71016. // #26795
  71017. A=M
  71018. // #26796
  71019. M=D
  71020. // #26797
  71021. @SP
  71022. // #26798
  71023. M=M+1
  71024. //vv push_d_to_stack
  71025. //vv push_from_loc(Screen.vm.1)
  71026. //
  71027. //// add
  71028. //^^ arith_binary_op(+)
  71029. //^^ pop_stack_to_d
  71030. // #26799
  71031. @SP
  71032. // #26800
  71033. M=M-1
  71034. // #26801
  71035. A=M
  71036. // #26802
  71037. D=M
  71038. //vv pop_stack_to_d
  71039. //^^ arith_d_with_stack_top(D+M)
  71040. // #26803
  71041. @R13
  71042. // #26804
  71043. M=D
  71044. //^^ pop_stack_to_d
  71045. // #26805
  71046. @SP
  71047. // #26806
  71048. M=M-1
  71049. // #26807
  71050. A=M
  71051. // #26808
  71052. D=M
  71053. //vv pop_stack_to_d
  71054. // #26809
  71055. @R13
  71056. // #26810
  71057. D=D+M
  71058. // #26811
  71059. @R13
  71060. // #26812
  71061. M=0
  71062. //vv arith_d_with_stack_top(D+M)
  71063. //^^ push_d_to_stack
  71064. // #26813
  71065. @SP
  71066. // #26814
  71067. A=M
  71068. // #26815
  71069. M=D
  71070. // #26816
  71071. @SP
  71072. // #26817
  71073. M=M+1
  71074. //vv push_d_to_stack
  71075. //vv arith_binary_op(+)
  71076. //
  71077. //// push argument 0
  71078. //^^ push_from_ram(ARG, 0)
  71079. // #26818
  71080. @ARG
  71081. // #26819
  71082. D=M
  71083. // #26820
  71084. @0
  71085. // #26821
  71086. A=D+A
  71087. // #26822
  71088. D=M
  71089. //^^ push_d_to_stack
  71090. // #26823
  71091. @SP
  71092. // #26824
  71093. A=M
  71094. // #26825
  71095. M=D
  71096. // #26826
  71097. @SP
  71098. // #26827
  71099. M=M+1
  71100. //vv push_d_to_stack
  71101. //vv push_from_ram(ARG, 0)
  71102. //
  71103. //// push static 1
  71104. //^^ push_from_loc(Screen.vm.1)
  71105. // #26828
  71106. @Screen.vm.1
  71107. // #26829
  71108. D=M
  71109. //^^ push_d_to_stack
  71110. // #26830
  71111. @SP
  71112. // #26831
  71113. A=M
  71114. // #26832
  71115. M=D
  71116. // #26833
  71117. @SP
  71118. // #26834
  71119. M=M+1
  71120. //vv push_d_to_stack
  71121. //vv push_from_loc(Screen.vm.1)
  71122. //
  71123. //// add
  71124. //^^ arith_binary_op(+)
  71125. //^^ pop_stack_to_d
  71126. // #26835
  71127. @SP
  71128. // #26836
  71129. M=M-1
  71130. // #26837
  71131. A=M
  71132. // #26838
  71133. D=M
  71134. //vv pop_stack_to_d
  71135. //^^ arith_d_with_stack_top(D+M)
  71136. // #26839
  71137. @R13
  71138. // #26840
  71139. M=D
  71140. //^^ pop_stack_to_d
  71141. // #26841
  71142. @SP
  71143. // #26842
  71144. M=M-1
  71145. // #26843
  71146. A=M
  71147. // #26844
  71148. D=M
  71149. //vv pop_stack_to_d
  71150. // #26845
  71151. @R13
  71152. // #26846
  71153. D=D+M
  71154. // #26847
  71155. @R13
  71156. // #26848
  71157. M=0
  71158. //vv arith_d_with_stack_top(D+M)
  71159. //^^ push_d_to_stack
  71160. // #26849
  71161. @SP
  71162. // #26850
  71163. A=M
  71164. // #26851
  71165. M=D
  71166. // #26852
  71167. @SP
  71168. // #26853
  71169. M=M+1
  71170. //vv push_d_to_stack
  71171. //vv arith_binary_op(+)
  71172. //
  71173. //// pop pointer 1
  71174. //^^ pop_to_loc{4)
  71175. //^^ pop_stack_to_d
  71176. // #26854
  71177. @SP
  71178. // #26855
  71179. M=M-1
  71180. // #26856
  71181. A=M
  71182. // #26857
  71183. D=M
  71184. //vv pop_stack_to_d
  71185. // #26858
  71186. @4
  71187. // #26859
  71188. M=D
  71189. //vv pop_to_loc{4)
  71190. //
  71191. //// push that 0
  71192. //^^ push_from_ram(THAT, 0)
  71193. // #26860
  71194. @THAT
  71195. // #26861
  71196. D=M
  71197. // #26862
  71198. @0
  71199. // #26863
  71200. A=D+A
  71201. // #26864
  71202. D=M
  71203. //^^ push_d_to_stack
  71204. // #26865
  71205. @SP
  71206. // #26866
  71207. A=M
  71208. // #26867
  71209. M=D
  71210. // #26868
  71211. @SP
  71212. // #26869
  71213. M=M+1
  71214. //vv push_d_to_stack
  71215. //vv push_from_ram(THAT, 0)
  71216. //
  71217. //// push argument 1
  71218. //^^ push_from_ram(ARG, 1)
  71219. // #26870
  71220. @ARG
  71221. // #26871
  71222. D=M
  71223. // #26872
  71224. @1
  71225. // #26873
  71226. A=D+A
  71227. // #26874
  71228. D=M
  71229. //^^ push_d_to_stack
  71230. // #26875
  71231. @SP
  71232. // #26876
  71233. A=M
  71234. // #26877
  71235. M=D
  71236. // #26878
  71237. @SP
  71238. // #26879
  71239. M=M+1
  71240. //vv push_d_to_stack
  71241. //vv push_from_ram(ARG, 1)
  71242. //
  71243. //// not
  71244. //^^ arith_unary_op(!)
  71245. //^^ pop_stack_to_d
  71246. // #26880
  71247. @SP
  71248. // #26881
  71249. M=M-1
  71250. // #26882
  71251. A=M
  71252. // #26883
  71253. D=M
  71254. //vv pop_stack_to_d
  71255. // #26884
  71256. D=!D
  71257. //^^ push_d_to_stack
  71258. // #26885
  71259. @SP
  71260. // #26886
  71261. A=M
  71262. // #26887
  71263. M=D
  71264. // #26888
  71265. @SP
  71266. // #26889
  71267. M=M+1
  71268. //vv push_d_to_stack
  71269. //vv arith_unary_op(!)
  71270. //
  71271. //// and
  71272. //^^ arith_binary_op(&)
  71273. //^^ pop_stack_to_d
  71274. // #26890
  71275. @SP
  71276. // #26891
  71277. M=M-1
  71278. // #26892
  71279. A=M
  71280. // #26893
  71281. D=M
  71282. //vv pop_stack_to_d
  71283. //^^ arith_d_with_stack_top(D&M)
  71284. // #26894
  71285. @R13
  71286. // #26895
  71287. M=D
  71288. //^^ pop_stack_to_d
  71289. // #26896
  71290. @SP
  71291. // #26897
  71292. M=M-1
  71293. // #26898
  71294. A=M
  71295. // #26899
  71296. D=M
  71297. //vv pop_stack_to_d
  71298. // #26900
  71299. @R13
  71300. // #26901
  71301. D=D&M
  71302. // #26902
  71303. @R13
  71304. // #26903
  71305. M=0
  71306. //vv arith_d_with_stack_top(D&M)
  71307. //^^ push_d_to_stack
  71308. // #26904
  71309. @SP
  71310. // #26905
  71311. A=M
  71312. // #26906
  71313. M=D
  71314. // #26907
  71315. @SP
  71316. // #26908
  71317. M=M+1
  71318. //vv push_d_to_stack
  71319. //vv arith_binary_op(&)
  71320. //
  71321. //// pop temp 0
  71322. //^^ pop_to_loc{5)
  71323. //^^ pop_stack_to_d
  71324. // #26909
  71325. @SP
  71326. // #26910
  71327. M=M-1
  71328. // #26911
  71329. A=M
  71330. // #26912
  71331. D=M
  71332. //vv pop_stack_to_d
  71333. // #26913
  71334. @5
  71335. // #26914
  71336. M=D
  71337. //vv pop_to_loc{5)
  71338. //
  71339. //// pop pointer 1
  71340. //^^ pop_to_loc{4)
  71341. //^^ pop_stack_to_d
  71342. // #26915
  71343. @SP
  71344. // #26916
  71345. M=M-1
  71346. // #26917
  71347. A=M
  71348. // #26918
  71349. D=M
  71350. //vv pop_stack_to_d
  71351. // #26919
  71352. @4
  71353. // #26920
  71354. M=D
  71355. //vv pop_to_loc{4)
  71356. //
  71357. //// push temp 0
  71358. //^^ push_from_loc(5)
  71359. // #26921
  71360. @5
  71361. // #26922
  71362. D=M
  71363. //^^ push_d_to_stack
  71364. // #26923
  71365. @SP
  71366. // #26924
  71367. A=M
  71368. // #26925
  71369. M=D
  71370. // #26926
  71371. @SP
  71372. // #26927
  71373. M=M+1
  71374. //vv push_d_to_stack
  71375. //vv push_from_loc(5)
  71376. //
  71377. //// pop that 0
  71378. //^^ pop_to_ram(THAT, 0)
  71379. // #26928
  71380. @THAT
  71381. // #26929
  71382. D=M
  71383. // #26930
  71384. @0
  71385. // #26931
  71386. D=D+A
  71387. // #26932
  71388. @R13
  71389. // #26933
  71390. M=D
  71391. //^^ pop_stack_to_d
  71392. // #26934
  71393. @SP
  71394. // #26935
  71395. M=M-1
  71396. // #26936
  71397. A=M
  71398. // #26937
  71399. D=M
  71400. //vv pop_stack_to_d
  71401. // #26938
  71402. @R13
  71403. // #26939
  71404. A=M
  71405. // #26940
  71406. M=D
  71407. // #26941
  71408. @R13
  71409. // #26942
  71410. M=0
  71411. //vv pop_to_ram(THAT, 0)
  71412. //
  71413. //// label IF_END0
  71414. (Screen.updateLocation$IF_END0)
  71415. //
  71416. //// push constant 0
  71417. //^^ push_constant(0)
  71418. // #26943
  71419. @0
  71420. // #26944
  71421. D=A
  71422. //^^ push_d_to_stack
  71423. // #26945
  71424. @SP
  71425. // #26946
  71426. A=M
  71427. // #26947
  71428. M=D
  71429. // #26948
  71430. @SP
  71431. // #26949
  71432. M=M+1
  71433. //vv push_d_to_stack
  71434. //vv push_constant(0)
  71435. //
  71436. //// return
  71437. // #26950
  71438. @LCL
  71439. // #26951
  71440. D=M
  71441. // #26952
  71442. @R14
  71443. // #26953
  71444. M=D //R14=LCL
  71445. // #26954
  71446. @5
  71447. // #26955
  71448. A=D-A
  71449. // #26956
  71450. D=M
  71451. // #26957
  71452. @R15
  71453. // #26958
  71454. M=D //R15=*(LCL-5)
  71455. //^^ pop_stack_to_d
  71456. // #26959
  71457. @SP
  71458. // #26960
  71459. M=M-1
  71460. // #26961
  71461. A=M
  71462. // #26962
  71463. D=M
  71464. //vv pop_stack_to_d
  71465. // #26963
  71466. @ARG
  71467. // #26964
  71468. A=M
  71469. // #26965
  71470. M=D //*ARG = pop()
  71471. // #26966
  71472. @ARG
  71473. // #26967
  71474. D=M
  71475. // #26968
  71476. @SP
  71477. // #26969
  71478. M=D+1 //SP=ARG+1
  71479. // #26970
  71480. @R14
  71481. // #26971
  71482. AM=M-1
  71483. // #26972
  71484. D=M
  71485. // #26973
  71486. @THAT
  71487. // #26974
  71488. M=D //THAT = *(--R14)
  71489. // #26975
  71490. @R14
  71491. // #26976
  71492. AM=M-1
  71493. // #26977
  71494. D=M
  71495. // #26978
  71496. @THIS
  71497. // #26979
  71498. M=D //THIS = *(--R14)
  71499. // #26980
  71500. @R14
  71501. // #26981
  71502. AM=M-1
  71503. // #26982
  71504. D=M
  71505. // #26983
  71506. @ARG
  71507. // #26984
  71508. M=D //ARG = *(--R14)
  71509. // #26985
  71510. @R14
  71511. // #26986
  71512. AM=M-1
  71513. // #26987
  71514. D=M
  71515. // #26988
  71516. @LCL
  71517. // #26989
  71518. M=D //LCL = *(--R14)
  71519. // #26990
  71520. @R15
  71521. // #26991
  71522. A=M
  71523. // #26992
  71524. 0;JMP //goto *R15
  71525. //
  71526. //// function Screen.setColor 0
  71527. (Screen.setColor)
  71528. //
  71529. //// push argument 0
  71530. //^^ push_from_ram(ARG, 0)
  71531. // #26993
  71532. @ARG
  71533. // #26994
  71534. D=M
  71535. // #26995
  71536. @0
  71537. // #26996
  71538. A=D+A
  71539. // #26997
  71540. D=M
  71541. //^^ push_d_to_stack
  71542. // #26998
  71543. @SP
  71544. // #26999
  71545. A=M
  71546. // #27000
  71547. M=D
  71548. // #27001
  71549. @SP
  71550. // #27002
  71551. M=M+1
  71552. //vv push_d_to_stack
  71553. //vv push_from_ram(ARG, 0)
  71554. //
  71555. //// pop static 2
  71556. //^^ pop_to_loc{Screen.vm.2)
  71557. //^^ pop_stack_to_d
  71558. // #27003
  71559. @SP
  71560. // #27004
  71561. M=M-1
  71562. // #27005
  71563. A=M
  71564. // #27006
  71565. D=M
  71566. //vv pop_stack_to_d
  71567. // #27007
  71568. @Screen.vm.2
  71569. // #27008
  71570. M=D
  71571. //vv pop_to_loc{Screen.vm.2)
  71572. //
  71573. //// push constant 0
  71574. //^^ push_constant(0)
  71575. // #27009
  71576. @0
  71577. // #27010
  71578. D=A
  71579. //^^ push_d_to_stack
  71580. // #27011
  71581. @SP
  71582. // #27012
  71583. A=M
  71584. // #27013
  71585. M=D
  71586. // #27014
  71587. @SP
  71588. // #27015
  71589. M=M+1
  71590. //vv push_d_to_stack
  71591. //vv push_constant(0)
  71592. //
  71593. //// return
  71594. // #27016
  71595. @LCL
  71596. // #27017
  71597. D=M
  71598. // #27018
  71599. @R14
  71600. // #27019
  71601. M=D //R14=LCL
  71602. // #27020
  71603. @5
  71604. // #27021
  71605. A=D-A
  71606. // #27022
  71607. D=M
  71608. // #27023
  71609. @R15
  71610. // #27024
  71611. M=D //R15=*(LCL-5)
  71612. //^^ pop_stack_to_d
  71613. // #27025
  71614. @SP
  71615. // #27026
  71616. M=M-1
  71617. // #27027
  71618. A=M
  71619. // #27028
  71620. D=M
  71621. //vv pop_stack_to_d
  71622. // #27029
  71623. @ARG
  71624. // #27030
  71625. A=M
  71626. // #27031
  71627. M=D //*ARG = pop()
  71628. // #27032
  71629. @ARG
  71630. // #27033
  71631. D=M
  71632. // #27034
  71633. @SP
  71634. // #27035
  71635. M=D+1 //SP=ARG+1
  71636. // #27036
  71637. @R14
  71638. // #27037
  71639. AM=M-1
  71640. // #27038
  71641. D=M
  71642. // #27039
  71643. @THAT
  71644. // #27040
  71645. M=D //THAT = *(--R14)
  71646. // #27041
  71647. @R14
  71648. // #27042
  71649. AM=M-1
  71650. // #27043
  71651. D=M
  71652. // #27044
  71653. @THIS
  71654. // #27045
  71655. M=D //THIS = *(--R14)
  71656. // #27046
  71657. @R14
  71658. // #27047
  71659. AM=M-1
  71660. // #27048
  71661. D=M
  71662. // #27049
  71663. @ARG
  71664. // #27050
  71665. M=D //ARG = *(--R14)
  71666. // #27051
  71667. @R14
  71668. // #27052
  71669. AM=M-1
  71670. // #27053
  71671. D=M
  71672. // #27054
  71673. @LCL
  71674. // #27055
  71675. M=D //LCL = *(--R14)
  71676. // #27056
  71677. @R15
  71678. // #27057
  71679. A=M
  71680. // #27058
  71681. 0;JMP //goto *R15
  71682. //
  71683. //// function Screen.drawPixel 3
  71684. (Screen.drawPixel)
  71685. // #27059
  71686. D=0
  71687. //^^ push_d_to_stack
  71688. // #27060
  71689. @SP
  71690. // #27061
  71691. A=M
  71692. // #27062
  71693. M=D
  71694. // #27063
  71695. @SP
  71696. // #27064
  71697. M=M+1
  71698. //vv push_d_to_stack
  71699. // #27065
  71700. D=0
  71701. //^^ push_d_to_stack
  71702. // #27066
  71703. @SP
  71704. // #27067
  71705. A=M
  71706. // #27068
  71707. M=D
  71708. // #27069
  71709. @SP
  71710. // #27070
  71711. M=M+1
  71712. //vv push_d_to_stack
  71713. // #27071
  71714. D=0
  71715. //^^ push_d_to_stack
  71716. // #27072
  71717. @SP
  71718. // #27073
  71719. A=M
  71720. // #27074
  71721. M=D
  71722. // #27075
  71723. @SP
  71724. // #27076
  71725. M=M+1
  71726. //vv push_d_to_stack
  71727. //
  71728. //// push argument 0
  71729. //^^ push_from_ram(ARG, 0)
  71730. // #27077
  71731. @ARG
  71732. // #27078
  71733. D=M
  71734. // #27079
  71735. @0
  71736. // #27080
  71737. A=D+A
  71738. // #27081
  71739. D=M
  71740. //^^ push_d_to_stack
  71741. // #27082
  71742. @SP
  71743. // #27083
  71744. A=M
  71745. // #27084
  71746. M=D
  71747. // #27085
  71748. @SP
  71749. // #27086
  71750. M=M+1
  71751. //vv push_d_to_stack
  71752. //vv push_from_ram(ARG, 0)
  71753. //
  71754. //// push argument 2
  71755. //^^ push_from_ram(ARG, 2)
  71756. // #27087
  71757. @ARG
  71758. // #27088
  71759. D=M
  71760. // #27089
  71761. @2
  71762. // #27090
  71763. A=D+A
  71764. // #27091
  71765. D=M
  71766. //^^ push_d_to_stack
  71767. // #27092
  71768. @SP
  71769. // #27093
  71770. A=M
  71771. // #27094
  71772. M=D
  71773. // #27095
  71774. @SP
  71775. // #27096
  71776. M=M+1
  71777. //vv push_d_to_stack
  71778. //vv push_from_ram(ARG, 2)
  71779. //
  71780. //// gt
  71781. //^^ arith_cmp_op(JGT)
  71782. //^^ pop_stack_to_d
  71783. // #27097
  71784. @SP
  71785. // #27098
  71786. M=M-1
  71787. // #27099
  71788. A=M
  71789. // #27100
  71790. D=M
  71791. //vv pop_stack_to_d
  71792. //^^ arith_d_with_stack_top(D-M)
  71793. // #27101
  71794. @R13
  71795. // #27102
  71796. M=D
  71797. //^^ pop_stack_to_d
  71798. // #27103
  71799. @SP
  71800. // #27104
  71801. M=M-1
  71802. // #27105
  71803. A=M
  71804. // #27106
  71805. D=M
  71806. //vv pop_stack_to_d
  71807. // #27107
  71808. @R13
  71809. // #27108
  71810. D=D-M
  71811. // #27109
  71812. @R13
  71813. // #27110
  71814. M=0
  71815. //vv arith_d_with_stack_top(D-M)
  71816. // #27111
  71817. @PUT_TRUE_244
  71818. // #27112
  71819. D;JGT
  71820. // #27113
  71821. @R13
  71822. // #27114
  71823. M=0
  71824. // #27115
  71825. @CONT_244
  71826. // #27116
  71827. 0;JMP
  71828. (PUT_TRUE_244)
  71829. // #27117
  71830. @R13
  71831. // #27118
  71832. M=-1
  71833. (CONT_244)
  71834. // #27119
  71835. @R13
  71836. // #27120
  71837. D=M
  71838. // #27121
  71839. @R13
  71840. // #27122
  71841. M=0
  71842. //^^ push_d_to_stack
  71843. // #27123
  71844. @SP
  71845. // #27124
  71846. A=M
  71847. // #27125
  71848. M=D
  71849. // #27126
  71850. @SP
  71851. // #27127
  71852. M=M+1
  71853. //vv push_d_to_stack
  71854. //vv arith_cmp_op(JGT)
  71855. //
  71856. //// push argument 1
  71857. //^^ push_from_ram(ARG, 1)
  71858. // #27128
  71859. @ARG
  71860. // #27129
  71861. D=M
  71862. // #27130
  71863. @1
  71864. // #27131
  71865. A=D+A
  71866. // #27132
  71867. D=M
  71868. //^^ push_d_to_stack
  71869. // #27133
  71870. @SP
  71871. // #27134
  71872. A=M
  71873. // #27135
  71874. M=D
  71875. // #27136
  71876. @SP
  71877. // #27137
  71878. M=M+1
  71879. //vv push_d_to_stack
  71880. //vv push_from_ram(ARG, 1)
  71881. //
  71882. //// push argument 3
  71883. //^^ push_from_ram(ARG, 3)
  71884. // #27138
  71885. @ARG
  71886. // #27139
  71887. D=M
  71888. // #27140
  71889. @3
  71890. // #27141
  71891. A=D+A
  71892. // #27142
  71893. D=M
  71894. //^^ push_d_to_stack
  71895. // #27143
  71896. @SP
  71897. // #27144
  71898. A=M
  71899. // #27145
  71900. M=D
  71901. // #27146
  71902. @SP
  71903. // #27147
  71904. M=M+1
  71905. //vv push_d_to_stack
  71906. //vv push_from_ram(ARG, 3)
  71907. //
  71908. //// gt
  71909. //^^ arith_cmp_op(JGT)
  71910. //^^ pop_stack_to_d
  71911. // #27148
  71912. @SP
  71913. // #27149
  71914. M=M-1
  71915. // #27150
  71916. A=M
  71917. // #27151
  71918. D=M
  71919. //vv pop_stack_to_d
  71920. //^^ arith_d_with_stack_top(D-M)
  71921. // #27152
  71922. @R13
  71923. // #27153
  71924. M=D
  71925. //^^ pop_stack_to_d
  71926. // #27154
  71927. @SP
  71928. // #27155
  71929. M=M-1
  71930. // #27156
  71931. A=M
  71932. // #27157
  71933. D=M
  71934. //vv pop_stack_to_d
  71935. // #27158
  71936. @R13
  71937. // #27159
  71938. D=D-M
  71939. // #27160
  71940. @R13
  71941. // #27161
  71942. M=0
  71943. //vv arith_d_with_stack_top(D-M)
  71944. // #27162
  71945. @PUT_TRUE_245
  71946. // #27163
  71947. D;JGT
  71948. // #27164
  71949. @R13
  71950. // #27165
  71951. M=0
  71952. // #27166
  71953. @CONT_245
  71954. // #27167
  71955. 0;JMP
  71956. (PUT_TRUE_245)
  71957. // #27168
  71958. @R13
  71959. // #27169
  71960. M=-1
  71961. (CONT_245)
  71962. // #27170
  71963. @R13
  71964. // #27171
  71965. D=M
  71966. // #27172
  71967. @R13
  71968. // #27173
  71969. M=0
  71970. //^^ push_d_to_stack
  71971. // #27174
  71972. @SP
  71973. // #27175
  71974. A=M
  71975. // #27176
  71976. M=D
  71977. // #27177
  71978. @SP
  71979. // #27178
  71980. M=M+1
  71981. //vv push_d_to_stack
  71982. //vv arith_cmp_op(JGT)
  71983. //
  71984. //// or
  71985. //^^ arith_binary_op(|)
  71986. //^^ pop_stack_to_d
  71987. // #27179
  71988. @SP
  71989. // #27180
  71990. M=M-1
  71991. // #27181
  71992. A=M
  71993. // #27182
  71994. D=M
  71995. //vv pop_stack_to_d
  71996. //^^ arith_d_with_stack_top(D|M)
  71997. // #27183
  71998. @R13
  71999. // #27184
  72000. M=D
  72001. //^^ pop_stack_to_d
  72002. // #27185
  72003. @SP
  72004. // #27186
  72005. M=M-1
  72006. // #27187
  72007. A=M
  72008. // #27188
  72009. D=M
  72010. //vv pop_stack_to_d
  72011. // #27189
  72012. @R13
  72013. // #27190
  72014. D=D|M
  72015. // #27191
  72016. @R13
  72017. // #27192
  72018. M=0
  72019. //vv arith_d_with_stack_top(D|M)
  72020. //^^ push_d_to_stack
  72021. // #27193
  72022. @SP
  72023. // #27194
  72024. A=M
  72025. // #27195
  72026. M=D
  72027. // #27196
  72028. @SP
  72029. // #27197
  72030. M=M+1
  72031. //vv push_d_to_stack
  72032. //vv arith_binary_op(|)
  72033. //
  72034. //// push argument 0
  72035. //^^ push_from_ram(ARG, 0)
  72036. // #27198
  72037. @ARG
  72038. // #27199
  72039. D=M
  72040. // #27200
  72041. @0
  72042. // #27201
  72043. A=D+A
  72044. // #27202
  72045. D=M
  72046. //^^ push_d_to_stack
  72047. // #27203
  72048. @SP
  72049. // #27204
  72050. A=M
  72051. // #27205
  72052. M=D
  72053. // #27206
  72054. @SP
  72055. // #27207
  72056. M=M+1
  72057. //vv push_d_to_stack
  72058. //vv push_from_ram(ARG, 0)
  72059. //
  72060. //// push constant 0
  72061. //^^ push_constant(0)
  72062. // #27208
  72063. @0
  72064. // #27209
  72065. D=A
  72066. //^^ push_d_to_stack
  72067. // #27210
  72068. @SP
  72069. // #27211
  72070. A=M
  72071. // #27212
  72072. M=D
  72073. // #27213
  72074. @SP
  72075. // #27214
  72076. M=M+1
  72077. //vv push_d_to_stack
  72078. //vv push_constant(0)
  72079. //
  72080. //// lt
  72081. //^^ arith_cmp_op(JLT)
  72082. //^^ pop_stack_to_d
  72083. // #27215
  72084. @SP
  72085. // #27216
  72086. M=M-1
  72087. // #27217
  72088. A=M
  72089. // #27218
  72090. D=M
  72091. //vv pop_stack_to_d
  72092. //^^ arith_d_with_stack_top(D-M)
  72093. // #27219
  72094. @R13
  72095. // #27220
  72096. M=D
  72097. //^^ pop_stack_to_d
  72098. // #27221
  72099. @SP
  72100. // #27222
  72101. M=M-1
  72102. // #27223
  72103. A=M
  72104. // #27224
  72105. D=M
  72106. //vv pop_stack_to_d
  72107. // #27225
  72108. @R13
  72109. // #27226
  72110. D=D-M
  72111. // #27227
  72112. @R13
  72113. // #27228
  72114. M=0
  72115. //vv arith_d_with_stack_top(D-M)
  72116. // #27229
  72117. @PUT_TRUE_246
  72118. // #27230
  72119. D;JLT
  72120. // #27231
  72121. @R13
  72122. // #27232
  72123. M=0
  72124. // #27233
  72125. @CONT_246
  72126. // #27234
  72127. 0;JMP
  72128. (PUT_TRUE_246)
  72129. // #27235
  72130. @R13
  72131. // #27236
  72132. M=-1
  72133. (CONT_246)
  72134. // #27237
  72135. @R13
  72136. // #27238
  72137. D=M
  72138. // #27239
  72139. @R13
  72140. // #27240
  72141. M=0
  72142. //^^ push_d_to_stack
  72143. // #27241
  72144. @SP
  72145. // #27242
  72146. A=M
  72147. // #27243
  72148. M=D
  72149. // #27244
  72150. @SP
  72151. // #27245
  72152. M=M+1
  72153. //vv push_d_to_stack
  72154. //vv arith_cmp_op(JLT)
  72155. //
  72156. //// or
  72157. //^^ arith_binary_op(|)
  72158. //^^ pop_stack_to_d
  72159. // #27246
  72160. @SP
  72161. // #27247
  72162. M=M-1
  72163. // #27248
  72164. A=M
  72165. // #27249
  72166. D=M
  72167. //vv pop_stack_to_d
  72168. //^^ arith_d_with_stack_top(D|M)
  72169. // #27250
  72170. @R13
  72171. // #27251
  72172. M=D
  72173. //^^ pop_stack_to_d
  72174. // #27252
  72175. @SP
  72176. // #27253
  72177. M=M-1
  72178. // #27254
  72179. A=M
  72180. // #27255
  72181. D=M
  72182. //vv pop_stack_to_d
  72183. // #27256
  72184. @R13
  72185. // #27257
  72186. D=D|M
  72187. // #27258
  72188. @R13
  72189. // #27259
  72190. M=0
  72191. //vv arith_d_with_stack_top(D|M)
  72192. //^^ push_d_to_stack
  72193. // #27260
  72194. @SP
  72195. // #27261
  72196. A=M
  72197. // #27262
  72198. M=D
  72199. // #27263
  72200. @SP
  72201. // #27264
  72202. M=M+1
  72203. //vv push_d_to_stack
  72204. //vv arith_binary_op(|)
  72205. //
  72206. //// push argument 2
  72207. //^^ push_from_ram(ARG, 2)
  72208. // #27265
  72209. @ARG
  72210. // #27266
  72211. D=M
  72212. // #27267
  72213. @2
  72214. // #27268
  72215. A=D+A
  72216. // #27269
  72217. D=M
  72218. //^^ push_d_to_stack
  72219. // #27270
  72220. @SP
  72221. // #27271
  72222. A=M
  72223. // #27272
  72224. M=D
  72225. // #27273
  72226. @SP
  72227. // #27274
  72228. M=M+1
  72229. //vv push_d_to_stack
  72230. //vv push_from_ram(ARG, 2)
  72231. //
  72232. //// push constant 511
  72233. //^^ push_constant(511)
  72234. // #27275
  72235. @511
  72236. // #27276
  72237. D=A
  72238. //^^ push_d_to_stack
  72239. // #27277
  72240. @SP
  72241. // #27278
  72242. A=M
  72243. // #27279
  72244. M=D
  72245. // #27280
  72246. @SP
  72247. // #27281
  72248. M=M+1
  72249. //vv push_d_to_stack
  72250. //vv push_constant(511)
  72251. //
  72252. //// gt
  72253. //^^ arith_cmp_op(JGT)
  72254. //^^ pop_stack_to_d
  72255. // #27282
  72256. @SP
  72257. // #27283
  72258. M=M-1
  72259. // #27284
  72260. A=M
  72261. // #27285
  72262. D=M
  72263. //vv pop_stack_to_d
  72264. //^^ arith_d_with_stack_top(D-M)
  72265. // #27286
  72266. @R13
  72267. // #27287
  72268. M=D
  72269. //^^ pop_stack_to_d
  72270. // #27288
  72271. @SP
  72272. // #27289
  72273. M=M-1
  72274. // #27290
  72275. A=M
  72276. // #27291
  72277. D=M
  72278. //vv pop_stack_to_d
  72279. // #27292
  72280. @R13
  72281. // #27293
  72282. D=D-M
  72283. // #27294
  72284. @R13
  72285. // #27295
  72286. M=0
  72287. //vv arith_d_with_stack_top(D-M)
  72288. // #27296
  72289. @PUT_TRUE_247
  72290. // #27297
  72291. D;JGT
  72292. // #27298
  72293. @R13
  72294. // #27299
  72295. M=0
  72296. // #27300
  72297. @CONT_247
  72298. // #27301
  72299. 0;JMP
  72300. (PUT_TRUE_247)
  72301. // #27302
  72302. @R13
  72303. // #27303
  72304. M=-1
  72305. (CONT_247)
  72306. // #27304
  72307. @R13
  72308. // #27305
  72309. D=M
  72310. // #27306
  72311. @R13
  72312. // #27307
  72313. M=0
  72314. //^^ push_d_to_stack
  72315. // #27308
  72316. @SP
  72317. // #27309
  72318. A=M
  72319. // #27310
  72320. M=D
  72321. // #27311
  72322. @SP
  72323. // #27312
  72324. M=M+1
  72325. //vv push_d_to_stack
  72326. //vv arith_cmp_op(JGT)
  72327. //
  72328. //// or
  72329. //^^ arith_binary_op(|)
  72330. //^^ pop_stack_to_d
  72331. // #27313
  72332. @SP
  72333. // #27314
  72334. M=M-1
  72335. // #27315
  72336. A=M
  72337. // #27316
  72338. D=M
  72339. //vv pop_stack_to_d
  72340. //^^ arith_d_with_stack_top(D|M)
  72341. // #27317
  72342. @R13
  72343. // #27318
  72344. M=D
  72345. //^^ pop_stack_to_d
  72346. // #27319
  72347. @SP
  72348. // #27320
  72349. M=M-1
  72350. // #27321
  72351. A=M
  72352. // #27322
  72353. D=M
  72354. //vv pop_stack_to_d
  72355. // #27323
  72356. @R13
  72357. // #27324
  72358. D=D|M
  72359. // #27325
  72360. @R13
  72361. // #27326
  72362. M=0
  72363. //vv arith_d_with_stack_top(D|M)
  72364. //^^ push_d_to_stack
  72365. // #27327
  72366. @SP
  72367. // #27328
  72368. A=M
  72369. // #27329
  72370. M=D
  72371. // #27330
  72372. @SP
  72373. // #27331
  72374. M=M+1
  72375. //vv push_d_to_stack
  72376. //vv arith_binary_op(|)
  72377. //
  72378. //// push argument 1
  72379. //^^ push_from_ram(ARG, 1)
  72380. // #27332
  72381. @ARG
  72382. // #27333
  72383. D=M
  72384. // #27334
  72385. @1
  72386. // #27335
  72387. A=D+A
  72388. // #27336
  72389. D=M
  72390. //^^ push_d_to_stack
  72391. // #27337
  72392. @SP
  72393. // #27338
  72394. A=M
  72395. // #27339
  72396. M=D
  72397. // #27340
  72398. @SP
  72399. // #27341
  72400. M=M+1
  72401. //vv push_d_to_stack
  72402. //vv push_from_ram(ARG, 1)
  72403. //
  72404. //// push constant 0
  72405. //^^ push_constant(0)
  72406. // #27342
  72407. @0
  72408. // #27343
  72409. D=A
  72410. //^^ push_d_to_stack
  72411. // #27344
  72412. @SP
  72413. // #27345
  72414. A=M
  72415. // #27346
  72416. M=D
  72417. // #27347
  72418. @SP
  72419. // #27348
  72420. M=M+1
  72421. //vv push_d_to_stack
  72422. //vv push_constant(0)
  72423. //
  72424. //// lt
  72425. //^^ arith_cmp_op(JLT)
  72426. //^^ pop_stack_to_d
  72427. // #27349
  72428. @SP
  72429. // #27350
  72430. M=M-1
  72431. // #27351
  72432. A=M
  72433. // #27352
  72434. D=M
  72435. //vv pop_stack_to_d
  72436. //^^ arith_d_with_stack_top(D-M)
  72437. // #27353
  72438. @R13
  72439. // #27354
  72440. M=D
  72441. //^^ pop_stack_to_d
  72442. // #27355
  72443. @SP
  72444. // #27356
  72445. M=M-1
  72446. // #27357
  72447. A=M
  72448. // #27358
  72449. D=M
  72450. //vv pop_stack_to_d
  72451. // #27359
  72452. @R13
  72453. // #27360
  72454. D=D-M
  72455. // #27361
  72456. @R13
  72457. // #27362
  72458. M=0
  72459. //vv arith_d_with_stack_top(D-M)
  72460. // #27363
  72461. @PUT_TRUE_248
  72462. // #27364
  72463. D;JLT
  72464. // #27365
  72465. @R13
  72466. // #27366
  72467. M=0
  72468. // #27367
  72469. @CONT_248
  72470. // #27368
  72471. 0;JMP
  72472. (PUT_TRUE_248)
  72473. // #27369
  72474. @R13
  72475. // #27370
  72476. M=-1
  72477. (CONT_248)
  72478. // #27371
  72479. @R13
  72480. // #27372
  72481. D=M
  72482. // #27373
  72483. @R13
  72484. // #27374
  72485. M=0
  72486. //^^ push_d_to_stack
  72487. // #27375
  72488. @SP
  72489. // #27376
  72490. A=M
  72491. // #27377
  72492. M=D
  72493. // #27378
  72494. @SP
  72495. // #27379
  72496. M=M+1
  72497. //vv push_d_to_stack
  72498. //vv arith_cmp_op(JLT)
  72499. //
  72500. //// or
  72501. //^^ arith_binary_op(|)
  72502. //^^ pop_stack_to_d
  72503. // #27380
  72504. @SP
  72505. // #27381
  72506. M=M-1
  72507. // #27382
  72508. A=M
  72509. // #27383
  72510. D=M
  72511. //vv pop_stack_to_d
  72512. //^^ arith_d_with_stack_top(D|M)
  72513. // #27384
  72514. @R13
  72515. // #27385
  72516. M=D
  72517. //^^ pop_stack_to_d
  72518. // #27386
  72519. @SP
  72520. // #27387
  72521. M=M-1
  72522. // #27388
  72523. A=M
  72524. // #27389
  72525. D=M
  72526. //vv pop_stack_to_d
  72527. // #27390
  72528. @R13
  72529. // #27391
  72530. D=D|M
  72531. // #27392
  72532. @R13
  72533. // #27393
  72534. M=0
  72535. //vv arith_d_with_stack_top(D|M)
  72536. //^^ push_d_to_stack
  72537. // #27394
  72538. @SP
  72539. // #27395
  72540. A=M
  72541. // #27396
  72542. M=D
  72543. // #27397
  72544. @SP
  72545. // #27398
  72546. M=M+1
  72547. //vv push_d_to_stack
  72548. //vv arith_binary_op(|)
  72549. //
  72550. //// push argument 3
  72551. //^^ push_from_ram(ARG, 3)
  72552. // #27399
  72553. @ARG
  72554. // #27400
  72555. D=M
  72556. // #27401
  72557. @3
  72558. // #27402
  72559. A=D+A
  72560. // #27403
  72561. D=M
  72562. //^^ push_d_to_stack
  72563. // #27404
  72564. @SP
  72565. // #27405
  72566. A=M
  72567. // #27406
  72568. M=D
  72569. // #27407
  72570. @SP
  72571. // #27408
  72572. M=M+1
  72573. //vv push_d_to_stack
  72574. //vv push_from_ram(ARG, 3)
  72575. //
  72576. //// push constant 255
  72577. //^^ push_constant(255)
  72578. // #27409
  72579. @255
  72580. // #27410
  72581. D=A
  72582. //^^ push_d_to_stack
  72583. // #27411
  72584. @SP
  72585. // #27412
  72586. A=M
  72587. // #27413
  72588. M=D
  72589. // #27414
  72590. @SP
  72591. // #27415
  72592. M=M+1
  72593. //vv push_d_to_stack
  72594. //vv push_constant(255)
  72595. //
  72596. //// gt
  72597. //^^ arith_cmp_op(JGT)
  72598. //^^ pop_stack_to_d
  72599. // #27416
  72600. @SP
  72601. // #27417
  72602. M=M-1
  72603. // #27418
  72604. A=M
  72605. // #27419
  72606. D=M
  72607. //vv pop_stack_to_d
  72608. //^^ arith_d_with_stack_top(D-M)
  72609. // #27420
  72610. @R13
  72611. // #27421
  72612. M=D
  72613. //^^ pop_stack_to_d
  72614. // #27422
  72615. @SP
  72616. // #27423
  72617. M=M-1
  72618. // #27424
  72619. A=M
  72620. // #27425
  72621. D=M
  72622. //vv pop_stack_to_d
  72623. // #27426
  72624. @R13
  72625. // #27427
  72626. D=D-M
  72627. // #27428
  72628. @R13
  72629. // #27429
  72630. M=0
  72631. //vv arith_d_with_stack_top(D-M)
  72632. // #27430
  72633. @PUT_TRUE_249
  72634. // #27431
  72635. D;JGT
  72636. // #27432
  72637. @R13
  72638. // #27433
  72639. M=0
  72640. // #27434
  72641. @CONT_249
  72642. // #27435
  72643. 0;JMP
  72644. (PUT_TRUE_249)
  72645. // #27436
  72646. @R13
  72647. // #27437
  72648. M=-1
  72649. (CONT_249)
  72650. // #27438
  72651. @R13
  72652. // #27439
  72653. D=M
  72654. // #27440
  72655. @R13
  72656. // #27441
  72657. M=0
  72658. //^^ push_d_to_stack
  72659. // #27442
  72660. @SP
  72661. // #27443
  72662. A=M
  72663. // #27444
  72664. M=D
  72665. // #27445
  72666. @SP
  72667. // #27446
  72668. M=M+1
  72669. //vv push_d_to_stack
  72670. //vv arith_cmp_op(JGT)
  72671. //
  72672. //// or
  72673. //^^ arith_binary_op(|)
  72674. //^^ pop_stack_to_d
  72675. // #27447
  72676. @SP
  72677. // #27448
  72678. M=M-1
  72679. // #27449
  72680. A=M
  72681. // #27450
  72682. D=M
  72683. //vv pop_stack_to_d
  72684. //^^ arith_d_with_stack_top(D|M)
  72685. // #27451
  72686. @R13
  72687. // #27452
  72688. M=D
  72689. //^^ pop_stack_to_d
  72690. // #27453
  72691. @SP
  72692. // #27454
  72693. M=M-1
  72694. // #27455
  72695. A=M
  72696. // #27456
  72697. D=M
  72698. //vv pop_stack_to_d
  72699. // #27457
  72700. @R13
  72701. // #27458
  72702. D=D|M
  72703. // #27459
  72704. @R13
  72705. // #27460
  72706. M=0
  72707. //vv arith_d_with_stack_top(D|M)
  72708. //^^ push_d_to_stack
  72709. // #27461
  72710. @SP
  72711. // #27462
  72712. A=M
  72713. // #27463
  72714. M=D
  72715. // #27464
  72716. @SP
  72717. // #27465
  72718. M=M+1
  72719. //vv push_d_to_stack
  72720. //vv arith_binary_op(|)
  72721. //
  72722. //// if-goto IF_TRUE0
  72723. //^^ pop_stack_to_d
  72724. // #27466
  72725. @SP
  72726. // #27467
  72727. M=M-1
  72728. // #27468
  72729. A=M
  72730. // #27469
  72731. D=M
  72732. //vv pop_stack_to_d
  72733. // #27470
  72734. @Screen.drawRectangle$IF_TRUE0
  72735. // #27471
  72736. D;JNE
  72737. //
  72738. //// goto IF_FALSE0
  72739. // #27472
  72740. @Screen.drawRectangle$IF_FALSE0
  72741. // #27473
  72742. 0;JMP
  72743. //
  72744. //// label IF_TRUE0
  72745. (Screen.drawRectangle$IF_TRUE0)
  72746. //
  72747. //// push constant 9
  72748. //^^ push_constant(9)
  72749. // #27474
  72750. @9
  72751. // #27475
  72752. D=A
  72753. //^^ push_d_to_stack
  72754. // #27476
  72755. @SP
  72756. // #27477
  72757. A=M
  72758. // #27478
  72759. M=D
  72760. // #27479
  72761. @SP
  72762. // #27480
  72763. M=M+1
  72764. //vv push_d_to_stack
  72765. //vv push_constant(9)
  72766. //
  72767. //// call Sys.error 1
  72768. //^^ push_constant(RET_ADDR_250)
  72769. // #27481
  72770. @RET_ADDR_250
  72771. // #27482
  72772. D=A
  72773. //^^ push_d_to_stack
  72774. // #27483
  72775. @SP
  72776. // #27484
  72777. A=M
  72778. // #27485
  72779. M=D
  72780. // #27486
  72781. @SP
  72782. // #27487
  72783. M=M+1
  72784. //vv push_d_to_stack
  72785. //vv push_constant(RET_ADDR_250)
  72786. //push return-address
  72787. // #27488
  72788. @LCL
  72789. // #27489
  72790. D=M
  72791. //^^ push_d_to_stack
  72792. // #27490
  72793. @SP
  72794. // #27491
  72795. A=M
  72796. // #27492
  72797. M=D
  72798. // #27493
  72799. @SP
  72800. // #27494
  72801. M=M+1
  72802. //vv push_d_to_stack
  72803. //push LCL
  72804. // #27495
  72805. @ARG
  72806. // #27496
  72807. D=M
  72808. //^^ push_d_to_stack
  72809. // #27497
  72810. @SP
  72811. // #27498
  72812. A=M
  72813. // #27499
  72814. M=D
  72815. // #27500
  72816. @SP
  72817. // #27501
  72818. M=M+1
  72819. //vv push_d_to_stack
  72820. //push ARG
  72821. // #27502
  72822. @THIS
  72823. // #27503
  72824. D=M
  72825. //^^ push_d_to_stack
  72826. // #27504
  72827. @SP
  72828. // #27505
  72829. A=M
  72830. // #27506
  72831. M=D
  72832. // #27507
  72833. @SP
  72834. // #27508
  72835. M=M+1
  72836. //vv push_d_to_stack
  72837. //push THIS
  72838. // #27509
  72839. @THAT
  72840. // #27510
  72841. D=M
  72842. //^^ push_d_to_stack
  72843. // #27511
  72844. @SP
  72845. // #27512
  72846. A=M
  72847. // #27513
  72848. M=D
  72849. // #27514
  72850. @SP
  72851. // #27515
  72852. M=M+1
  72853. //vv push_d_to_stack
  72854. //push THAT
  72855. // #27516
  72856. @SP
  72857. // #27517
  72858. D=M
  72859. // #27518
  72860. @ARG
  72861. // #27519
  72862. M=D
  72863. // #27520
  72864. @6
  72865. // #27521
  72866. D=A
  72867. // #27522
  72868. @ARG
  72869. // #27523
  72870. M=M-D // ARG = SP - args - 5
  72871. // #27524
  72872. @SP
  72873. // #27525
  72874. D=M
  72875. // #27526
  72876. @LCL
  72877. // #27527
  72878. M=D // LCL = SP
  72879. // #27528
  72880. @Sys.error
  72881. // #27529
  72882. 0;JMP
  72883. (RET_ADDR_250)
  72884. //
  72885. //// pop temp 0
  72886. //^^ pop_to_loc{5)
  72887. //^^ pop_stack_to_d
  72888. // #27530
  72889. @SP
  72890. // #27531
  72891. M=M-1
  72892. // #27532
  72893. A=M
  72894. // #27533
  72895. D=M
  72896. //vv pop_stack_to_d
  72897. // #27534
  72898. @5
  72899. // #27535
  72900. M=D
  72901. //vv pop_to_loc{5)
  72902. //
  72903. //// label IF_FALSE0
  72904. (Screen.drawRectangle$IF_FALSE0)
  72905. //
  72906. //// push argument 0
  72907. //^^ push_from_ram(ARG, 0)
  72908. // #27536
  72909. @ARG
  72910. // #27537
  72911. D=M
  72912. // #27538
  72913. @0
  72914. // #27539
  72915. A=D+A
  72916. // #27540
  72917. D=M
  72918. //^^ push_d_to_stack
  72919. // #27541
  72920. @SP
  72921. // #27542
  72922. A=M
  72923. // #27543
  72924. M=D
  72925. // #27544
  72926. @SP
  72927. // #27545
  72928. M=M+1
  72929. //vv push_d_to_stack
  72930. //vv push_from_ram(ARG, 0)
  72931. //
  72932. //// push constant 16
  72933. //^^ push_constant(16)
  72934. // #27546
  72935. @16
  72936. // #27547
  72937. D=A
  72938. //^^ push_d_to_stack
  72939. // #27548
  72940. @SP
  72941. // #27549
  72942. A=M
  72943. // #27550
  72944. M=D
  72945. // #27551
  72946. @SP
  72947. // #27552
  72948. M=M+1
  72949. //vv push_d_to_stack
  72950. //vv push_constant(16)
  72951. //
  72952. //// call Math.divide 2
  72953. //^^ push_constant(RET_ADDR_251)
  72954. // #27553
  72955. @RET_ADDR_251
  72956. // #27554
  72957. D=A
  72958. //^^ push_d_to_stack
  72959. // #27555
  72960. @SP
  72961. // #27556
  72962. A=M
  72963. // #27557
  72964. M=D
  72965. // #27558
  72966. @SP
  72967. // #27559
  72968. M=M+1
  72969. //vv push_d_to_stack
  72970. //vv push_constant(RET_ADDR_251)
  72971. //push return-address
  72972. // #27560
  72973. @LCL
  72974. // #27561
  72975. D=M
  72976. //^^ push_d_to_stack
  72977. // #27562
  72978. @SP
  72979. // #27563
  72980. A=M
  72981. // #27564
  72982. M=D
  72983. // #27565
  72984. @SP
  72985. // #27566
  72986. M=M+1
  72987. //vv push_d_to_stack
  72988. //push LCL
  72989. // #27567
  72990. @ARG
  72991. // #27568
  72992. D=M
  72993. //^^ push_d_to_stack
  72994. // #27569
  72995. @SP
  72996. // #27570
  72997. A=M
  72998. // #27571
  72999. M=D
  73000. // #27572
  73001. @SP
  73002. // #27573
  73003. M=M+1
  73004. //vv push_d_to_stack
  73005. //push ARG
  73006. // #27574
  73007. @THIS
  73008. // #27575
  73009. D=M
  73010. //^^ push_d_to_stack
  73011. // #27576
  73012. @SP
  73013. // #27577
  73014. A=M
  73015. // #27578
  73016. M=D
  73017. // #27579
  73018. @SP
  73019. // #27580
  73020. M=M+1
  73021. //vv push_d_to_stack
  73022. //push THIS
  73023. // #27581
  73024. @THAT
  73025. // #27582
  73026. D=M
  73027. //^^ push_d_to_stack
  73028. // #27583
  73029. @SP
  73030. // #27584
  73031. A=M
  73032. // #27585
  73033. M=D
  73034. // #27586
  73035. @SP
  73036. // #27587
  73037. M=M+1
  73038. //vv push_d_to_stack
  73039. //push THAT
  73040. // #27588
  73041. @SP
  73042. // #27589
  73043. D=M
  73044. // #27590
  73045. @ARG
  73046. // #27591
  73047. M=D
  73048. // #27592
  73049. @7
  73050. // #27593
  73051. D=A
  73052. // #27594
  73053. @ARG
  73054. // #27595
  73055. M=M-D // ARG = SP - args - 5
  73056. // #27596
  73057. @SP
  73058. // #27597
  73059. D=M
  73060. // #27598
  73061. @LCL
  73062. // #27599
  73063. M=D // LCL = SP
  73064. // #27600
  73065. @Math.divide
  73066. // #27601
  73067. 0;JMP
  73068. (RET_ADDR_251)
  73069. //
  73070. //// pop local 3
  73071. //^^ pop_to_ram(LCL, 3)
  73072. // #27602
  73073. @LCL
  73074. // #27603
  73075. D=M
  73076. // #27604
  73077. @3
  73078. // #27605
  73079. D=D+A
  73080. // #27606
  73081. @R13
  73082. // #27607
  73083. M=D
  73084. //^^ pop_stack_to_d
  73085. // #27608
  73086. @SP
  73087. // #27609
  73088. M=M-1
  73089. // #27610
  73090. A=M
  73091. // #27611
  73092. D=M
  73093. //vv pop_stack_to_d
  73094. // #27612
  73095. @R13
  73096. // #27613
  73097. A=M
  73098. // #27614
  73099. M=D
  73100. // #27615
  73101. @R13
  73102. // #27616
  73103. M=0
  73104. //vv pop_to_ram(LCL, 3)
  73105. //
  73106. //// push argument 0
  73107. //^^ push_from_ram(ARG, 0)
  73108. // #27617
  73109. @ARG
  73110. // #27618
  73111. D=M
  73112. // #27619
  73113. @0
  73114. // #27620
  73115. A=D+A
  73116. // #27621
  73117. D=M
  73118. //^^ push_d_to_stack
  73119. // #27622
  73120. @SP
  73121. // #27623
  73122. A=M
  73123. // #27624
  73124. M=D
  73125. // #27625
  73126. @SP
  73127. // #27626
  73128. M=M+1
  73129. //vv push_d_to_stack
  73130. //vv push_from_ram(ARG, 0)
  73131. //
  73132. //// push local 3
  73133. //^^ push_from_ram(LCL, 3)
  73134. // #27627
  73135. @LCL
  73136. // #27628
  73137. D=M
  73138. // #27629
  73139. @3
  73140. // #27630
  73141. A=D+A
  73142. // #27631
  73143. D=M
  73144. //^^ push_d_to_stack
  73145. // #27632
  73146. @SP
  73147. // #27633
  73148. A=M
  73149. // #27634
  73150. M=D
  73151. // #27635
  73152. @SP
  73153. // #27636
  73154. M=M+1
  73155. //vv push_d_to_stack
  73156. //vv push_from_ram(LCL, 3)
  73157. //
  73158. //// push constant 16
  73159. //^^ push_constant(16)
  73160. // #27637
  73161. @16
  73162. // #27638
  73163. D=A
  73164. //^^ push_d_to_stack
  73165. // #27639
  73166. @SP
  73167. // #27640
  73168. A=M
  73169. // #27641
  73170. M=D
  73171. // #27642
  73172. @SP
  73173. // #27643
  73174. M=M+1
  73175. //vv push_d_to_stack
  73176. //vv push_constant(16)
  73177. //
  73178. //// call Math.multiply 2
  73179. //^^ push_constant(RET_ADDR_252)
  73180. // #27644
  73181. @RET_ADDR_252
  73182. // #27645
  73183. D=A
  73184. //^^ push_d_to_stack
  73185. // #27646
  73186. @SP
  73187. // #27647
  73188. A=M
  73189. // #27648
  73190. M=D
  73191. // #27649
  73192. @SP
  73193. // #27650
  73194. M=M+1
  73195. //vv push_d_to_stack
  73196. //vv push_constant(RET_ADDR_252)
  73197. //push return-address
  73198. // #27651
  73199. @LCL
  73200. // #27652
  73201. D=M
  73202. //^^ push_d_to_stack
  73203. // #27653
  73204. @SP
  73205. // #27654
  73206. A=M
  73207. // #27655
  73208. M=D
  73209. // #27656
  73210. @SP
  73211. // #27657
  73212. M=M+1
  73213. //vv push_d_to_stack
  73214. //push LCL
  73215. // #27658
  73216. @ARG
  73217. // #27659
  73218. D=M
  73219. //^^ push_d_to_stack
  73220. // #27660
  73221. @SP
  73222. // #27661
  73223. A=M
  73224. // #27662
  73225. M=D
  73226. // #27663
  73227. @SP
  73228. // #27664
  73229. M=M+1
  73230. //vv push_d_to_stack
  73231. //push ARG
  73232. // #27665
  73233. @THIS
  73234. // #27666
  73235. D=M
  73236. //^^ push_d_to_stack
  73237. // #27667
  73238. @SP
  73239. // #27668
  73240. A=M
  73241. // #27669
  73242. M=D
  73243. // #27670
  73244. @SP
  73245. // #27671
  73246. M=M+1
  73247. //vv push_d_to_stack
  73248. //push THIS
  73249. // #27672
  73250. @THAT
  73251. // #27673
  73252. D=M
  73253. //^^ push_d_to_stack
  73254. // #27674
  73255. @SP
  73256. // #27675
  73257. A=M
  73258. // #27676
  73259. M=D
  73260. // #27677
  73261. @SP
  73262. // #27678
  73263. M=M+1
  73264. //vv push_d_to_stack
  73265. //push THAT
  73266. // #27679
  73267. @SP
  73268. // #27680
  73269. D=M
  73270. // #27681
  73271. @ARG
  73272. // #27682
  73273. M=D
  73274. // #27683
  73275. @7
  73276. // #27684
  73277. D=A
  73278. // #27685
  73279. @ARG
  73280. // #27686
  73281. M=M-D // ARG = SP - args - 5
  73282. // #27687
  73283. @SP
  73284. // #27688
  73285. D=M
  73286. // #27689
  73287. @LCL
  73288. // #27690
  73289. M=D // LCL = SP
  73290. // #27691
  73291. @Math.multiply
  73292. // #27692
  73293. 0;JMP
  73294. (RET_ADDR_252)
  73295. //
  73296. //// sub
  73297. //^^ arith_binary_op(-)
  73298. //^^ pop_stack_to_d
  73299. // #27693
  73300. @SP
  73301. // #27694
  73302. M=M-1
  73303. // #27695
  73304. A=M
  73305. // #27696
  73306. D=M
  73307. //vv pop_stack_to_d
  73308. //^^ arith_d_with_stack_top(D-M)
  73309. // #27697
  73310. @R13
  73311. // #27698
  73312. M=D
  73313. //^^ pop_stack_to_d
  73314. // #27699
  73315. @SP
  73316. // #27700
  73317. M=M-1
  73318. // #27701
  73319. A=M
  73320. // #27702
  73321. D=M
  73322. //vv pop_stack_to_d
  73323. // #27703
  73324. @R13
  73325. // #27704
  73326. D=D-M
  73327. // #27705
  73328. @R13
  73329. // #27706
  73330. M=0
  73331. //vv arith_d_with_stack_top(D-M)
  73332. //^^ push_d_to_stack
  73333. // #27707
  73334. @SP
  73335. // #27708
  73336. A=M
  73337. // #27709
  73338. M=D
  73339. // #27710
  73340. @SP
  73341. // #27711
  73342. M=M+1
  73343. //vv push_d_to_stack
  73344. //vv arith_binary_op(-)
  73345. //
  73346. //// pop local 7
  73347. //^^ pop_to_ram(LCL, 7)
  73348. // #27712
  73349. @LCL
  73350. // #27713
  73351. D=M
  73352. // #27714
  73353. @7
  73354. // #27715
  73355. D=D+A
  73356. // #27716
  73357. @R13
  73358. // #27717
  73359. M=D
  73360. //^^ pop_stack_to_d
  73361. // #27718
  73362. @SP
  73363. // #27719
  73364. M=M-1
  73365. // #27720
  73366. A=M
  73367. // #27721
  73368. D=M
  73369. //vv pop_stack_to_d
  73370. // #27722
  73371. @R13
  73372. // #27723
  73373. A=M
  73374. // #27724
  73375. M=D
  73376. // #27725
  73377. @R13
  73378. // #27726
  73379. M=0
  73380. //vv pop_to_ram(LCL, 7)
  73381. //
  73382. //// push argument 2
  73383. //^^ push_from_ram(ARG, 2)
  73384. // #27727
  73385. @ARG
  73386. // #27728
  73387. D=M
  73388. // #27729
  73389. @2
  73390. // #27730
  73391. A=D+A
  73392. // #27731
  73393. D=M
  73394. //^^ push_d_to_stack
  73395. // #27732
  73396. @SP
  73397. // #27733
  73398. A=M
  73399. // #27734
  73400. M=D
  73401. // #27735
  73402. @SP
  73403. // #27736
  73404. M=M+1
  73405. //vv push_d_to_stack
  73406. //vv push_from_ram(ARG, 2)
  73407. //
  73408. //// push constant 16
  73409. //^^ push_constant(16)
  73410. // #27737
  73411. @16
  73412. // #27738
  73413. D=A
  73414. //^^ push_d_to_stack
  73415. // #27739
  73416. @SP
  73417. // #27740
  73418. A=M
  73419. // #27741
  73420. M=D
  73421. // #27742
  73422. @SP
  73423. // #27743
  73424. M=M+1
  73425. //vv push_d_to_stack
  73426. //vv push_constant(16)
  73427. //
  73428. //// call Math.divide 2
  73429. //^^ push_constant(RET_ADDR_253)
  73430. // #27744
  73431. @RET_ADDR_253
  73432. // #27745
  73433. D=A
  73434. //^^ push_d_to_stack
  73435. // #27746
  73436. @SP
  73437. // #27747
  73438. A=M
  73439. // #27748
  73440. M=D
  73441. // #27749
  73442. @SP
  73443. // #27750
  73444. M=M+1
  73445. //vv push_d_to_stack
  73446. //vv push_constant(RET_ADDR_253)
  73447. //push return-address
  73448. // #27751
  73449. @LCL
  73450. // #27752
  73451. D=M
  73452. //^^ push_d_to_stack
  73453. // #27753
  73454. @SP
  73455. // #27754
  73456. A=M
  73457. // #27755
  73458. M=D
  73459. // #27756
  73460. @SP
  73461. // #27757
  73462. M=M+1
  73463. //vv push_d_to_stack
  73464. //push LCL
  73465. // #27758
  73466. @ARG
  73467. // #27759
  73468. D=M
  73469. //^^ push_d_to_stack
  73470. // #27760
  73471. @SP
  73472. // #27761
  73473. A=M
  73474. // #27762
  73475. M=D
  73476. // #27763
  73477. @SP
  73478. // #27764
  73479. M=M+1
  73480. //vv push_d_to_stack
  73481. //push ARG
  73482. // #27765
  73483. @THIS
  73484. // #27766
  73485. D=M
  73486. //^^ push_d_to_stack
  73487. // #27767
  73488. @SP
  73489. // #27768
  73490. A=M
  73491. // #27769
  73492. M=D
  73493. // #27770
  73494. @SP
  73495. // #27771
  73496. M=M+1
  73497. //vv push_d_to_stack
  73498. //push THIS
  73499. // #27772
  73500. @THAT
  73501. // #27773
  73502. D=M
  73503. //^^ push_d_to_stack
  73504. // #27774
  73505. @SP
  73506. // #27775
  73507. A=M
  73508. // #27776
  73509. M=D
  73510. // #27777
  73511. @SP
  73512. // #27778
  73513. M=M+1
  73514. //vv push_d_to_stack
  73515. //push THAT
  73516. // #27779
  73517. @SP
  73518. // #27780
  73519. D=M
  73520. // #27781
  73521. @ARG
  73522. // #27782
  73523. M=D
  73524. // #27783
  73525. @7
  73526. // #27784
  73527. D=A
  73528. // #27785
  73529. @ARG
  73530. // #27786
  73531. M=M-D // ARG = SP - args - 5
  73532. // #27787
  73533. @SP
  73534. // #27788
  73535. D=M
  73536. // #27789
  73537. @LCL
  73538. // #27790
  73539. M=D // LCL = SP
  73540. // #27791
  73541. @Math.divide
  73542. // #27792
  73543. 0;JMP
  73544. (RET_ADDR_253)
  73545. //
  73546. //// pop local 4
  73547. //^^ pop_to_ram(LCL, 4)
  73548. // #27793
  73549. @LCL
  73550. // #27794
  73551. D=M
  73552. // #27795
  73553. @4
  73554. // #27796
  73555. D=D+A
  73556. // #27797
  73557. @R13
  73558. // #27798
  73559. M=D
  73560. //^^ pop_stack_to_d
  73561. // #27799
  73562. @SP
  73563. // #27800
  73564. M=M-1
  73565. // #27801
  73566. A=M
  73567. // #27802
  73568. D=M
  73569. //vv pop_stack_to_d
  73570. // #27803
  73571. @R13
  73572. // #27804
  73573. A=M
  73574. // #27805
  73575. M=D
  73576. // #27806
  73577. @R13
  73578. // #27807
  73579. M=0
  73580. //vv pop_to_ram(LCL, 4)
  73581. //
  73582. //// push argument 2
  73583. //^^ push_from_ram(ARG, 2)
  73584. // #27808
  73585. @ARG
  73586. // #27809
  73587. D=M
  73588. // #27810
  73589. @2
  73590. // #27811
  73591. A=D+A
  73592. // #27812
  73593. D=M
  73594. //^^ push_d_to_stack
  73595. // #27813
  73596. @SP
  73597. // #27814
  73598. A=M
  73599. // #27815
  73600. M=D
  73601. // #27816
  73602. @SP
  73603. // #27817
  73604. M=M+1
  73605. //vv push_d_to_stack
  73606. //vv push_from_ram(ARG, 2)
  73607. //
  73608. //// push local 4
  73609. //^^ push_from_ram(LCL, 4)
  73610. // #27818
  73611. @LCL
  73612. // #27819
  73613. D=M
  73614. // #27820
  73615. @4
  73616. // #27821
  73617. A=D+A
  73618. // #27822
  73619. D=M
  73620. //^^ push_d_to_stack
  73621. // #27823
  73622. @SP
  73623. // #27824
  73624. A=M
  73625. // #27825
  73626. M=D
  73627. // #27826
  73628. @SP
  73629. // #27827
  73630. M=M+1
  73631. //vv push_d_to_stack
  73632. //vv push_from_ram(LCL, 4)
  73633. //
  73634. //// push constant 16
  73635. //^^ push_constant(16)
  73636. // #27828
  73637. @16
  73638. // #27829
  73639. D=A
  73640. //^^ push_d_to_stack
  73641. // #27830
  73642. @SP
  73643. // #27831
  73644. A=M
  73645. // #27832
  73646. M=D
  73647. // #27833
  73648. @SP
  73649. // #27834
  73650. M=M+1
  73651. //vv push_d_to_stack
  73652. //vv push_constant(16)
  73653. //
  73654. //// call Math.multiply 2
  73655. //^^ push_constant(RET_ADDR_254)
  73656. // #27835
  73657. @RET_ADDR_254
  73658. // #27836
  73659. D=A
  73660. //^^ push_d_to_stack
  73661. // #27837
  73662. @SP
  73663. // #27838
  73664. A=M
  73665. // #27839
  73666. M=D
  73667. // #27840
  73668. @SP
  73669. // #27841
  73670. M=M+1
  73671. //vv push_d_to_stack
  73672. //vv push_constant(RET_ADDR_254)
  73673. //push return-address
  73674. // #27842
  73675. @LCL
  73676. // #27843
  73677. D=M
  73678. //^^ push_d_to_stack
  73679. // #27844
  73680. @SP
  73681. // #27845
  73682. A=M
  73683. // #27846
  73684. M=D
  73685. // #27847
  73686. @SP
  73687. // #27848
  73688. M=M+1
  73689. //vv push_d_to_stack
  73690. //push LCL
  73691. // #27849
  73692. @ARG
  73693. // #27850
  73694. D=M
  73695. //^^ push_d_to_stack
  73696. // #27851
  73697. @SP
  73698. // #27852
  73699. A=M
  73700. // #27853
  73701. M=D
  73702. // #27854
  73703. @SP
  73704. // #27855
  73705. M=M+1
  73706. //vv push_d_to_stack
  73707. //push ARG
  73708. // #27856
  73709. @THIS
  73710. // #27857
  73711. D=M
  73712. //^^ push_d_to_stack
  73713. // #27858
  73714. @SP
  73715. // #27859
  73716. A=M
  73717. // #27860
  73718. M=D
  73719. // #27861
  73720. @SP
  73721. // #27862
  73722. M=M+1
  73723. //vv push_d_to_stack
  73724. //push THIS
  73725. // #27863
  73726. @THAT
  73727. // #27864
  73728. D=M
  73729. //^^ push_d_to_stack
  73730. // #27865
  73731. @SP
  73732. // #27866
  73733. A=M
  73734. // #27867
  73735. M=D
  73736. // #27868
  73737. @SP
  73738. // #27869
  73739. M=M+1
  73740. //vv push_d_to_stack
  73741. //push THAT
  73742. // #27870
  73743. @SP
  73744. // #27871
  73745. D=M
  73746. // #27872
  73747. @ARG
  73748. // #27873
  73749. M=D
  73750. // #27874
  73751. @7
  73752. // #27875
  73753. D=A
  73754. // #27876
  73755. @ARG
  73756. // #27877
  73757. M=M-D // ARG = SP - args - 5
  73758. // #27878
  73759. @SP
  73760. // #27879
  73761. D=M
  73762. // #27880
  73763. @LCL
  73764. // #27881
  73765. M=D // LCL = SP
  73766. // #27882
  73767. @Math.multiply
  73768. // #27883
  73769. 0;JMP
  73770. (RET_ADDR_254)
  73771. //
  73772. //// sub
  73773. //^^ arith_binary_op(-)
  73774. //^^ pop_stack_to_d
  73775. // #27884
  73776. @SP
  73777. // #27885
  73778. M=M-1
  73779. // #27886
  73780. A=M
  73781. // #27887
  73782. D=M
  73783. //vv pop_stack_to_d
  73784. //^^ arith_d_with_stack_top(D-M)
  73785. // #27888
  73786. @R13
  73787. // #27889
  73788. M=D
  73789. //^^ pop_stack_to_d
  73790. // #27890
  73791. @SP
  73792. // #27891
  73793. M=M-1
  73794. // #27892
  73795. A=M
  73796. // #27893
  73797. D=M
  73798. //vv pop_stack_to_d
  73799. // #27894
  73800. @R13
  73801. // #27895
  73802. D=D-M
  73803. // #27896
  73804. @R13
  73805. // #27897
  73806. M=0
  73807. //vv arith_d_with_stack_top(D-M)
  73808. //^^ push_d_to_stack
  73809. // #27898
  73810. @SP
  73811. // #27899
  73812. A=M
  73813. // #27900
  73814. M=D
  73815. // #27901
  73816. @SP
  73817. // #27902
  73818. M=M+1
  73819. //vv push_d_to_stack
  73820. //vv arith_binary_op(-)
  73821. //
  73822. //// pop local 8
  73823. //^^ pop_to_ram(LCL, 8)
  73824. // #27903
  73825. @LCL
  73826. // #27904
  73827. D=M
  73828. // #27905
  73829. @8
  73830. // #27906
  73831. D=D+A
  73832. // #27907
  73833. @R13
  73834. // #27908
  73835. M=D
  73836. //^^ pop_stack_to_d
  73837. // #27909
  73838. @SP
  73839. // #27910
  73840. M=M-1
  73841. // #27911
  73842. A=M
  73843. // #27912
  73844. D=M
  73845. //vv pop_stack_to_d
  73846. // #27913
  73847. @R13
  73848. // #27914
  73849. A=M
  73850. // #27915
  73851. M=D
  73852. // #27916
  73853. @R13
  73854. // #27917
  73855. M=0
  73856. //vv pop_to_ram(LCL, 8)
  73857. //
  73858. //// push local 7
  73859. //^^ push_from_ram(LCL, 7)
  73860. // #27918
  73861. @LCL
  73862. // #27919
  73863. D=M
  73864. // #27920
  73865. @7
  73866. // #27921
  73867. A=D+A
  73868. // #27922
  73869. D=M
  73870. //^^ push_d_to_stack
  73871. // #27923
  73872. @SP
  73873. // #27924
  73874. A=M
  73875. // #27925
  73876. M=D
  73877. // #27926
  73878. @SP
  73879. // #27927
  73880. M=M+1
  73881. //vv push_d_to_stack
  73882. //vv push_from_ram(LCL, 7)
  73883. //
  73884. //// push static 0
  73885. //^^ push_from_loc(Screen.vm.0)
  73886. // #27928
  73887. @Screen.vm.0
  73888. // #27929
  73889. D=M
  73890. //^^ push_d_to_stack
  73891. // #27930
  73892. @SP
  73893. // #27931
  73894. A=M
  73895. // #27932
  73896. M=D
  73897. // #27933
  73898. @SP
  73899. // #27934
  73900. M=M+1
  73901. //vv push_d_to_stack
  73902. //vv push_from_loc(Screen.vm.0)
  73903. //
  73904. //// add
  73905. //^^ arith_binary_op(+)
  73906. //^^ pop_stack_to_d
  73907. // #27935
  73908. @SP
  73909. // #27936
  73910. M=M-1
  73911. // #27937
  73912. A=M
  73913. // #27938
  73914. D=M
  73915. //vv pop_stack_to_d
  73916. //^^ arith_d_with_stack_top(D+M)
  73917. // #27939
  73918. @R13
  73919. // #27940
  73920. M=D
  73921. //^^ pop_stack_to_d
  73922. // #27941
  73923. @SP
  73924. // #27942
  73925. M=M-1
  73926. // #27943
  73927. A=M
  73928. // #27944
  73929. D=M
  73930. //vv pop_stack_to_d
  73931. // #27945
  73932. @R13
  73933. // #27946
  73934. D=D+M
  73935. // #27947
  73936. @R13
  73937. // #27948
  73938. M=0
  73939. //vv arith_d_with_stack_top(D+M)
  73940. //^^ push_d_to_stack
  73941. // #27949
  73942. @SP
  73943. // #27950
  73944. A=M
  73945. // #27951
  73946. M=D
  73947. // #27952
  73948. @SP
  73949. // #27953
  73950. M=M+1
  73951. //vv push_d_to_stack
  73952. //vv arith_binary_op(+)
  73953. //
  73954. //// pop pointer 1
  73955. //^^ pop_to_loc{4)
  73956. //^^ pop_stack_to_d
  73957. // #27954
  73958. @SP
  73959. // #27955
  73960. M=M-1
  73961. // #27956
  73962. A=M
  73963. // #27957
  73964. D=M
  73965. //vv pop_stack_to_d
  73966. // #27958
  73967. @4
  73968. // #27959
  73969. M=D
  73970. //vv pop_to_loc{4)
  73971. //
  73972. //// push that 0
  73973. //^^ push_from_ram(THAT, 0)
  73974. // #27960
  73975. @THAT
  73976. // #27961
  73977. D=M
  73978. // #27962
  73979. @0
  73980. // #27963
  73981. A=D+A
  73982. // #27964
  73983. D=M
  73984. //^^ push_d_to_stack
  73985. // #27965
  73986. @SP
  73987. // #27966
  73988. A=M
  73989. // #27967
  73990. M=D
  73991. // #27968
  73992. @SP
  73993. // #27969
  73994. M=M+1
  73995. //vv push_d_to_stack
  73996. //vv push_from_ram(THAT, 0)
  73997. //
  73998. //// push constant 1
  73999. //^^ push_constant(1)
  74000. // #27970
  74001. @1
  74002. // #27971
  74003. D=A
  74004. //^^ push_d_to_stack
  74005. // #27972
  74006. @SP
  74007. // #27973
  74008. A=M
  74009. // #27974
  74010. M=D
  74011. // #27975
  74012. @SP
  74013. // #27976
  74014. M=M+1
  74015. //vv push_d_to_stack
  74016. //vv push_constant(1)
  74017. //
  74018. //// sub
  74019. //^^ arith_binary_op(-)
  74020. //^^ pop_stack_to_d
  74021. // #27977
  74022. @SP
  74023. // #27978
  74024. M=M-1
  74025. // #27979
  74026. A=M
  74027. // #27980
  74028. D=M
  74029. //vv pop_stack_to_d
  74030. //^^ arith_d_with_stack_top(D-M)
  74031. // #27981
  74032. @R13
  74033. // #27982
  74034. M=D
  74035. //^^ pop_stack_to_d
  74036. // #27983
  74037. @SP
  74038. // #27984
  74039. M=M-1
  74040. // #27985
  74041. A=M
  74042. // #27986
  74043. D=M
  74044. //vv pop_stack_to_d
  74045. // #27987
  74046. @R13
  74047. // #27988
  74048. D=D-M
  74049. // #27989
  74050. @R13
  74051. // #27990
  74052. M=0
  74053. //vv arith_d_with_stack_top(D-M)
  74054. //^^ push_d_to_stack
  74055. // #27991
  74056. @SP
  74057. // #27992
  74058. A=M
  74059. // #27993
  74060. M=D
  74061. // #27994
  74062. @SP
  74063. // #27995
  74064. M=M+1
  74065. //vv push_d_to_stack
  74066. //vv arith_binary_op(-)
  74067. //
  74068. //// not
  74069. //^^ arith_unary_op(!)
  74070. //^^ pop_stack_to_d
  74071. // #27996
  74072. @SP
  74073. // #27997
  74074. M=M-1
  74075. // #27998
  74076. A=M
  74077. // #27999
  74078. D=M
  74079. //vv pop_stack_to_d
  74080. // #28000
  74081. D=!D
  74082. //^^ push_d_to_stack
  74083. // #28001
  74084. @SP
  74085. // #28002
  74086. A=M
  74087. // #28003
  74088. M=D
  74089. // #28004
  74090. @SP
  74091. // #28005
  74092. M=M+1
  74093. //vv push_d_to_stack
  74094. //vv arith_unary_op(!)
  74095. //
  74096. //// pop local 6
  74097. //^^ pop_to_ram(LCL, 6)
  74098. // #28006
  74099. @LCL
  74100. // #28007
  74101. D=M
  74102. // #28008
  74103. @6
  74104. // #28009
  74105. D=D+A
  74106. // #28010
  74107. @R13
  74108. // #28011
  74109. M=D
  74110. //^^ pop_stack_to_d
  74111. // #28012
  74112. @SP
  74113. // #28013
  74114. M=M-1
  74115. // #28014
  74116. A=M
  74117. // #28015
  74118. D=M
  74119. //vv pop_stack_to_d
  74120. // #28016
  74121. @R13
  74122. // #28017
  74123. A=M
  74124. // #28018
  74125. M=D
  74126. // #28019
  74127. @R13
  74128. // #28020
  74129. M=0
  74130. //vv pop_to_ram(LCL, 6)
  74131. //
  74132. //// push local 8
  74133. //^^ push_from_ram(LCL, 8)
  74134. // #28021
  74135. @LCL
  74136. // #28022
  74137. D=M
  74138. // #28023
  74139. @8
  74140. // #28024
  74141. A=D+A
  74142. // #28025
  74143. D=M
  74144. //^^ push_d_to_stack
  74145. // #28026
  74146. @SP
  74147. // #28027
  74148. A=M
  74149. // #28028
  74150. M=D
  74151. // #28029
  74152. @SP
  74153. // #28030
  74154. M=M+1
  74155. //vv push_d_to_stack
  74156. //vv push_from_ram(LCL, 8)
  74157. //
  74158. //// push constant 1
  74159. //^^ push_constant(1)
  74160. // #28031
  74161. @1
  74162. // #28032
  74163. D=A
  74164. //^^ push_d_to_stack
  74165. // #28033
  74166. @SP
  74167. // #28034
  74168. A=M
  74169. // #28035
  74170. M=D
  74171. // #28036
  74172. @SP
  74173. // #28037
  74174. M=M+1
  74175. //vv push_d_to_stack
  74176. //vv push_constant(1)
  74177. //
  74178. //// add
  74179. //^^ arith_binary_op(+)
  74180. //^^ pop_stack_to_d
  74181. // #28038
  74182. @SP
  74183. // #28039
  74184. M=M-1
  74185. // #28040
  74186. A=M
  74187. // #28041
  74188. D=M
  74189. //vv pop_stack_to_d
  74190. //^^ arith_d_with_stack_top(D+M)
  74191. // #28042
  74192. @R13
  74193. // #28043
  74194. M=D
  74195. //^^ pop_stack_to_d
  74196. // #28044
  74197. @SP
  74198. // #28045
  74199. M=M-1
  74200. // #28046
  74201. A=M
  74202. // #28047
  74203. D=M
  74204. //vv pop_stack_to_d
  74205. // #28048
  74206. @R13
  74207. // #28049
  74208. D=D+M
  74209. // #28050
  74210. @R13
  74211. // #28051
  74212. M=0
  74213. //vv arith_d_with_stack_top(D+M)
  74214. //^^ push_d_to_stack
  74215. // #28052
  74216. @SP
  74217. // #28053
  74218. A=M
  74219. // #28054
  74220. M=D
  74221. // #28055
  74222. @SP
  74223. // #28056
  74224. M=M+1
  74225. //vv push_d_to_stack
  74226. //vv arith_binary_op(+)
  74227. //
  74228. //// push static 0
  74229. //^^ push_from_loc(Screen.vm.0)
  74230. // #28057
  74231. @Screen.vm.0
  74232. // #28058
  74233. D=M
  74234. //^^ push_d_to_stack
  74235. // #28059
  74236. @SP
  74237. // #28060
  74238. A=M
  74239. // #28061
  74240. M=D
  74241. // #28062
  74242. @SP
  74243. // #28063
  74244. M=M+1
  74245. //vv push_d_to_stack
  74246. //vv push_from_loc(Screen.vm.0)
  74247. //
  74248. //// add
  74249. //^^ arith_binary_op(+)
  74250. //^^ pop_stack_to_d
  74251. // #28064
  74252. @SP
  74253. // #28065
  74254. M=M-1
  74255. // #28066
  74256. A=M
  74257. // #28067
  74258. D=M
  74259. //vv pop_stack_to_d
  74260. //^^ arith_d_with_stack_top(D+M)
  74261. // #28068
  74262. @R13
  74263. // #28069
  74264. M=D
  74265. //^^ pop_stack_to_d
  74266. // #28070
  74267. @SP
  74268. // #28071
  74269. M=M-1
  74270. // #28072
  74271. A=M
  74272. // #28073
  74273. D=M
  74274. //vv pop_stack_to_d
  74275. // #28074
  74276. @R13
  74277. // #28075
  74278. D=D+M
  74279. // #28076
  74280. @R13
  74281. // #28077
  74282. M=0
  74283. //vv arith_d_with_stack_top(D+M)
  74284. //^^ push_d_to_stack
  74285. // #28078
  74286. @SP
  74287. // #28079
  74288. A=M
  74289. // #28080
  74290. M=D
  74291. // #28081
  74292. @SP
  74293. // #28082
  74294. M=M+1
  74295. //vv push_d_to_stack
  74296. //vv arith_binary_op(+)
  74297. //
  74298. //// pop pointer 1
  74299. //^^ pop_to_loc{4)
  74300. //^^ pop_stack_to_d
  74301. // #28083
  74302. @SP
  74303. // #28084
  74304. M=M-1
  74305. // #28085
  74306. A=M
  74307. // #28086
  74308. D=M
  74309. //vv pop_stack_to_d
  74310. // #28087
  74311. @4
  74312. // #28088
  74313. M=D
  74314. //vv pop_to_loc{4)
  74315. //
  74316. //// push that 0
  74317. //^^ push_from_ram(THAT, 0)
  74318. // #28089
  74319. @THAT
  74320. // #28090
  74321. D=M
  74322. // #28091
  74323. @0
  74324. // #28092
  74325. A=D+A
  74326. // #28093
  74327. D=M
  74328. //^^ push_d_to_stack
  74329. // #28094
  74330. @SP
  74331. // #28095
  74332. A=M
  74333. // #28096
  74334. M=D
  74335. // #28097
  74336. @SP
  74337. // #28098
  74338. M=M+1
  74339. //vv push_d_to_stack
  74340. //vv push_from_ram(THAT, 0)
  74341. //
  74342. //// push constant 1
  74343. //^^ push_constant(1)
  74344. // #28099
  74345. @1
  74346. // #28100
  74347. D=A
  74348. //^^ push_d_to_stack
  74349. // #28101
  74350. @SP
  74351. // #28102
  74352. A=M
  74353. // #28103
  74354. M=D
  74355. // #28104
  74356. @SP
  74357. // #28105
  74358. M=M+1
  74359. //vv push_d_to_stack
  74360. //vv push_constant(1)
  74361. //
  74362. //// sub
  74363. //^^ arith_binary_op(-)
  74364. //^^ pop_stack_to_d
  74365. // #28106
  74366. @SP
  74367. // #28107
  74368. M=M-1
  74369. // #28108
  74370. A=M
  74371. // #28109
  74372. D=M
  74373. //vv pop_stack_to_d
  74374. //^^ arith_d_with_stack_top(D-M)
  74375. // #28110
  74376. @R13
  74377. // #28111
  74378. M=D
  74379. //^^ pop_stack_to_d
  74380. // #28112
  74381. @SP
  74382. // #28113
  74383. M=M-1
  74384. // #28114
  74385. A=M
  74386. // #28115
  74387. D=M
  74388. //vv pop_stack_to_d
  74389. // #28116
  74390. @R13
  74391. // #28117
  74392. D=D-M
  74393. // #28118
  74394. @R13
  74395. // #28119
  74396. M=0
  74397. //vv arith_d_with_stack_top(D-M)
  74398. //^^ push_d_to_stack
  74399. // #28120
  74400. @SP
  74401. // #28121
  74402. A=M
  74403. // #28122
  74404. M=D
  74405. // #28123
  74406. @SP
  74407. // #28124
  74408. M=M+1
  74409. //vv push_d_to_stack
  74410. //vv arith_binary_op(-)
  74411. //
  74412. //// pop local 5
  74413. //^^ pop_to_ram(LCL, 5)
  74414. // #28125
  74415. @LCL
  74416. // #28126
  74417. D=M
  74418. // #28127
  74419. @5
  74420. // #28128
  74421. D=D+A
  74422. // #28129
  74423. @R13
  74424. // #28130
  74425. M=D
  74426. //^^ pop_stack_to_d
  74427. // #28131
  74428. @SP
  74429. // #28132
  74430. M=M-1
  74431. // #28133
  74432. A=M
  74433. // #28134
  74434. D=M
  74435. //vv pop_stack_to_d
  74436. // #28135
  74437. @R13
  74438. // #28136
  74439. A=M
  74440. // #28137
  74441. M=D
  74442. // #28138
  74443. @R13
  74444. // #28139
  74445. M=0
  74446. //vv pop_to_ram(LCL, 5)
  74447. //
  74448. //// push argument 1
  74449. //^^ push_from_ram(ARG, 1)
  74450. // #28140
  74451. @ARG
  74452. // #28141
  74453. D=M
  74454. // #28142
  74455. @1
  74456. // #28143
  74457. A=D+A
  74458. // #28144
  74459. D=M
  74460. //^^ push_d_to_stack
  74461. // #28145
  74462. @SP
  74463. // #28146
  74464. A=M
  74465. // #28147
  74466. M=D
  74467. // #28148
  74468. @SP
  74469. // #28149
  74470. M=M+1
  74471. //vv push_d_to_stack
  74472. //vv push_from_ram(ARG, 1)
  74473. //
  74474. //// push constant 32
  74475. //^^ push_constant(32)
  74476. // #28150
  74477. @32
  74478. // #28151
  74479. D=A
  74480. //^^ push_d_to_stack
  74481. // #28152
  74482. @SP
  74483. // #28153
  74484. A=M
  74485. // #28154
  74486. M=D
  74487. // #28155
  74488. @SP
  74489. // #28156
  74490. M=M+1
  74491. //vv push_d_to_stack
  74492. //vv push_constant(32)
  74493. //
  74494. //// call Math.multiply 2
  74495. //^^ push_constant(RET_ADDR_255)
  74496. // #28157
  74497. @RET_ADDR_255
  74498. // #28158
  74499. D=A
  74500. //^^ push_d_to_stack
  74501. // #28159
  74502. @SP
  74503. // #28160
  74504. A=M
  74505. // #28161
  74506. M=D
  74507. // #28162
  74508. @SP
  74509. // #28163
  74510. M=M+1
  74511. //vv push_d_to_stack
  74512. //vv push_constant(RET_ADDR_255)
  74513. //push return-address
  74514. // #28164
  74515. @LCL
  74516. // #28165
  74517. D=M
  74518. //^^ push_d_to_stack
  74519. // #28166
  74520. @SP
  74521. // #28167
  74522. A=M
  74523. // #28168
  74524. M=D
  74525. // #28169
  74526. @SP
  74527. // #28170
  74528. M=M+1
  74529. //vv push_d_to_stack
  74530. //push LCL
  74531. // #28171
  74532. @ARG
  74533. // #28172
  74534. D=M
  74535. //^^ push_d_to_stack
  74536. // #28173
  74537. @SP
  74538. // #28174
  74539. A=M
  74540. // #28175
  74541. M=D
  74542. // #28176
  74543. @SP
  74544. // #28177
  74545. M=M+1
  74546. //vv push_d_to_stack
  74547. //push ARG
  74548. // #28178
  74549. @THIS
  74550. // #28179
  74551. D=M
  74552. //^^ push_d_to_stack
  74553. // #28180
  74554. @SP
  74555. // #28181
  74556. A=M
  74557. // #28182
  74558. M=D
  74559. // #28183
  74560. @SP
  74561. // #28184
  74562. M=M+1
  74563. //vv push_d_to_stack
  74564. //push THIS
  74565. // #28185
  74566. @THAT
  74567. // #28186
  74568. D=M
  74569. //^^ push_d_to_stack
  74570. // #28187
  74571. @SP
  74572. // #28188
  74573. A=M
  74574. // #28189
  74575. M=D
  74576. // #28190
  74577. @SP
  74578. // #28191
  74579. M=M+1
  74580. //vv push_d_to_stack
  74581. //push THAT
  74582. // #28192
  74583. @SP
  74584. // #28193
  74585. D=M
  74586. // #28194
  74587. @ARG
  74588. // #28195
  74589. M=D
  74590. // #28196
  74591. @7
  74592. // #28197
  74593. D=A
  74594. // #28198
  74595. @ARG
  74596. // #28199
  74597. M=M-D // ARG = SP - args - 5
  74598. // #28200
  74599. @SP
  74600. // #28201
  74601. D=M
  74602. // #28202
  74603. @LCL
  74604. // #28203
  74605. M=D // LCL = SP
  74606. // #28204
  74607. @Math.multiply
  74608. // #28205
  74609. 0;JMP
  74610. (RET_ADDR_255)
  74611. //
  74612. //// push local 3
  74613. //^^ push_from_ram(LCL, 3)
  74614. // #28206
  74615. @LCL
  74616. // #28207
  74617. D=M
  74618. // #28208
  74619. @3
  74620. // #28209
  74621. A=D+A
  74622. // #28210
  74623. D=M
  74624. //^^ push_d_to_stack
  74625. // #28211
  74626. @SP
  74627. // #28212
  74628. A=M
  74629. // #28213
  74630. M=D
  74631. // #28214
  74632. @SP
  74633. // #28215
  74634. M=M+1
  74635. //vv push_d_to_stack
  74636. //vv push_from_ram(LCL, 3)
  74637. //
  74638. //// add
  74639. //^^ arith_binary_op(+)
  74640. //^^ pop_stack_to_d
  74641. // #28216
  74642. @SP
  74643. // #28217
  74644. M=M-1
  74645. // #28218
  74646. A=M
  74647. // #28219
  74648. D=M
  74649. //vv pop_stack_to_d
  74650. //^^ arith_d_with_stack_top(D+M)
  74651. // #28220
  74652. @R13
  74653. // #28221
  74654. M=D
  74655. //^^ pop_stack_to_d
  74656. // #28222
  74657. @SP
  74658. // #28223
  74659. M=M-1
  74660. // #28224
  74661. A=M
  74662. // #28225
  74663. D=M
  74664. //vv pop_stack_to_d
  74665. // #28226
  74666. @R13
  74667. // #28227
  74668. D=D+M
  74669. // #28228
  74670. @R13
  74671. // #28229
  74672. M=0
  74673. //vv arith_d_with_stack_top(D+M)
  74674. //^^ push_d_to_stack
  74675. // #28230
  74676. @SP
  74677. // #28231
  74678. A=M
  74679. // #28232
  74680. M=D
  74681. // #28233
  74682. @SP
  74683. // #28234
  74684. M=M+1
  74685. //vv push_d_to_stack
  74686. //vv arith_binary_op(+)
  74687. //
  74688. //// pop local 0
  74689. //^^ pop_to_ram(LCL, 0)
  74690. // #28235
  74691. @LCL
  74692. // #28236
  74693. D=M
  74694. // #28237
  74695. @0
  74696. // #28238
  74697. D=D+A
  74698. // #28239
  74699. @R13
  74700. // #28240
  74701. M=D
  74702. //^^ pop_stack_to_d
  74703. // #28241
  74704. @SP
  74705. // #28242
  74706. M=M-1
  74707. // #28243
  74708. A=M
  74709. // #28244
  74710. D=M
  74711. //vv pop_stack_to_d
  74712. // #28245
  74713. @R13
  74714. // #28246
  74715. A=M
  74716. // #28247
  74717. M=D
  74718. // #28248
  74719. @R13
  74720. // #28249
  74721. M=0
  74722. //vv pop_to_ram(LCL, 0)
  74723. //
  74724. //// push local 4
  74725. //^^ push_from_ram(LCL, 4)
  74726. // #28250
  74727. @LCL
  74728. // #28251
  74729. D=M
  74730. // #28252
  74731. @4
  74732. // #28253
  74733. A=D+A
  74734. // #28254
  74735. D=M
  74736. //^^ push_d_to_stack
  74737. // #28255
  74738. @SP
  74739. // #28256
  74740. A=M
  74741. // #28257
  74742. M=D
  74743. // #28258
  74744. @SP
  74745. // #28259
  74746. M=M+1
  74747. //vv push_d_to_stack
  74748. //vv push_from_ram(LCL, 4)
  74749. //
  74750. //// push local 3
  74751. //^^ push_from_ram(LCL, 3)
  74752. // #28260
  74753. @LCL
  74754. // #28261
  74755. D=M
  74756. // #28262
  74757. @3
  74758. // #28263
  74759. A=D+A
  74760. // #28264
  74761. D=M
  74762. //^^ push_d_to_stack
  74763. // #28265
  74764. @SP
  74765. // #28266
  74766. A=M
  74767. // #28267
  74768. M=D
  74769. // #28268
  74770. @SP
  74771. // #28269
  74772. M=M+1
  74773. //vv push_d_to_stack
  74774. //vv push_from_ram(LCL, 3)
  74775. //
  74776. //// sub
  74777. //^^ arith_binary_op(-)
  74778. //^^ pop_stack_to_d
  74779. // #28270
  74780. @SP
  74781. // #28271
  74782. M=M-1
  74783. // #28272
  74784. A=M
  74785. // #28273
  74786. D=M
  74787. //vv pop_stack_to_d
  74788. //^^ arith_d_with_stack_top(D-M)
  74789. // #28274
  74790. @R13
  74791. // #28275
  74792. M=D
  74793. //^^ pop_stack_to_d
  74794. // #28276
  74795. @SP
  74796. // #28277
  74797. M=M-1
  74798. // #28278
  74799. A=M
  74800. // #28279
  74801. D=M
  74802. //vv pop_stack_to_d
  74803. // #28280
  74804. @R13
  74805. // #28281
  74806. D=D-M
  74807. // #28282
  74808. @R13
  74809. // #28283
  74810. M=0
  74811. //vv arith_d_with_stack_top(D-M)
  74812. //^^ push_d_to_stack
  74813. // #28284
  74814. @SP
  74815. // #28285
  74816. A=M
  74817. // #28286
  74818. M=D
  74819. // #28287
  74820. @SP
  74821. // #28288
  74822. M=M+1
  74823. //vv push_d_to_stack
  74824. //vv arith_binary_op(-)
  74825. //
  74826. //// pop local 2
  74827. //^^ pop_to_ram(LCL, 2)
  74828. // #28289
  74829. @LCL
  74830. // #28290
  74831. D=M
  74832. // #28291
  74833. @2
  74834. // #28292
  74835. D=D+A
  74836. // #28293
  74837. @R13
  74838. // #28294
  74839. M=D
  74840. //^^ pop_stack_to_d
  74841. // #28295
  74842. @SP
  74843. // #28296
  74844. M=M-1
  74845. // #28297
  74846. A=M
  74847. // #28298
  74848. D=M
  74849. //vv pop_stack_to_d
  74850. // #28299
  74851. @R13
  74852. // #28300
  74853. A=M
  74854. // #28301
  74855. M=D
  74856. // #28302
  74857. @R13
  74858. // #28303
  74859. M=0
  74860. //vv pop_to_ram(LCL, 2)
  74861. //
  74862. //// label WHILE_EXP0
  74863. (Screen.drawRectangle$WHILE_EXP0)
  74864. //
  74865. //// push argument 1
  74866. //^^ push_from_ram(ARG, 1)
  74867. // #28304
  74868. @ARG
  74869. // #28305
  74870. D=M
  74871. // #28306
  74872. @1
  74873. // #28307
  74874. A=D+A
  74875. // #28308
  74876. D=M
  74877. //^^ push_d_to_stack
  74878. // #28309
  74879. @SP
  74880. // #28310
  74881. A=M
  74882. // #28311
  74883. M=D
  74884. // #28312
  74885. @SP
  74886. // #28313
  74887. M=M+1
  74888. //vv push_d_to_stack
  74889. //vv push_from_ram(ARG, 1)
  74890. //
  74891. //// push argument 3
  74892. //^^ push_from_ram(ARG, 3)
  74893. // #28314
  74894. @ARG
  74895. // #28315
  74896. D=M
  74897. // #28316
  74898. @3
  74899. // #28317
  74900. A=D+A
  74901. // #28318
  74902. D=M
  74903. //^^ push_d_to_stack
  74904. // #28319
  74905. @SP
  74906. // #28320
  74907. A=M
  74908. // #28321
  74909. M=D
  74910. // #28322
  74911. @SP
  74912. // #28323
  74913. M=M+1
  74914. //vv push_d_to_stack
  74915. //vv push_from_ram(ARG, 3)
  74916. //
  74917. //// gt
  74918. //^^ arith_cmp_op(JGT)
  74919. //^^ pop_stack_to_d
  74920. // #28324
  74921. @SP
  74922. // #28325
  74923. M=M-1
  74924. // #28326
  74925. A=M
  74926. // #28327
  74927. D=M
  74928. //vv pop_stack_to_d
  74929. //^^ arith_d_with_stack_top(D-M)
  74930. // #28328
  74931. @R13
  74932. // #28329
  74933. M=D
  74934. //^^ pop_stack_to_d
  74935. // #28330
  74936. @SP
  74937. // #28331
  74938. M=M-1
  74939. // #28332
  74940. A=M
  74941. // #28333
  74942. D=M
  74943. //vv pop_stack_to_d
  74944. // #28334
  74945. @R13
  74946. // #28335
  74947. D=D-M
  74948. // #28336
  74949. @R13
  74950. // #28337
  74951. M=0
  74952. //vv arith_d_with_stack_top(D-M)
  74953. // #28338
  74954. @PUT_TRUE_256
  74955. // #28339
  74956. D;JGT
  74957. // #28340
  74958. @R13
  74959. // #28341
  74960. M=0
  74961. // #28342
  74962. @CONT_256
  74963. // #28343
  74964. 0;JMP
  74965. (PUT_TRUE_256)
  74966. // #28344
  74967. @R13
  74968. // #28345
  74969. M=-1
  74970. (CONT_256)
  74971. // #28346
  74972. @R13
  74973. // #28347
  74974. D=M
  74975. // #28348
  74976. @R13
  74977. // #28349
  74978. M=0
  74979. //^^ push_d_to_stack
  74980. // #28350
  74981. @SP
  74982. // #28351
  74983. A=M
  74984. // #28352
  74985. M=D
  74986. // #28353
  74987. @SP
  74988. // #28354
  74989. M=M+1
  74990. //vv push_d_to_stack
  74991. //vv arith_cmp_op(JGT)
  74992. //
  74993. //// not
  74994. //^^ arith_unary_op(!)
  74995. //^^ pop_stack_to_d
  74996. // #28355
  74997. @SP
  74998. // #28356
  74999. M=M-1
  75000. // #28357
  75001. A=M
  75002. // #28358
  75003. D=M
  75004. //vv pop_stack_to_d
  75005. // #28359
  75006. D=!D
  75007. //^^ push_d_to_stack
  75008. // #28360
  75009. @SP
  75010. // #28361
  75011. A=M
  75012. // #28362
  75013. M=D
  75014. // #28363
  75015. @SP
  75016. // #28364
  75017. M=M+1
  75018. //vv push_d_to_stack
  75019. //vv arith_unary_op(!)
  75020. //
  75021. //// not
  75022. //^^ arith_unary_op(!)
  75023. //^^ pop_stack_to_d
  75024. // #28365
  75025. @SP
  75026. // #28366
  75027. M=M-1
  75028. // #28367
  75029. A=M
  75030. // #28368
  75031. D=M
  75032. //vv pop_stack_to_d
  75033. // #28369
  75034. D=!D
  75035. //^^ push_d_to_stack
  75036. // #28370
  75037. @SP
  75038. // #28371
  75039. A=M
  75040. // #28372
  75041. M=D
  75042. // #28373
  75043. @SP
  75044. // #28374
  75045. M=M+1
  75046. //vv push_d_to_stack
  75047. //vv arith_unary_op(!)
  75048. //
  75049. //// if-goto WHILE_END0
  75050. //^^ pop_stack_to_d
  75051. // #28375
  75052. @SP
  75053. // #28376
  75054. M=M-1
  75055. // #28377
  75056. A=M
  75057. // #28378
  75058. D=M
  75059. //vv pop_stack_to_d
  75060. // #28379
  75061. @Screen.drawRectangle$WHILE_END0
  75062. // #28380
  75063. D;JNE
  75064. //
  75065. //// push local 0
  75066. //^^ push_from_ram(LCL, 0)
  75067. // #28381
  75068. @LCL
  75069. // #28382
  75070. D=M
  75071. // #28383
  75072. @0
  75073. // #28384
  75074. A=D+A
  75075. // #28385
  75076. D=M
  75077. //^^ push_d_to_stack
  75078. // #28386
  75079. @SP
  75080. // #28387
  75081. A=M
  75082. // #28388
  75083. M=D
  75084. // #28389
  75085. @SP
  75086. // #28390
  75087. M=M+1
  75088. //vv push_d_to_stack
  75089. //vv push_from_ram(LCL, 0)
  75090. //
  75091. //// push local 2
  75092. //^^ push_from_ram(LCL, 2)
  75093. // #28391
  75094. @LCL
  75095. // #28392
  75096. D=M
  75097. // #28393
  75098. @2
  75099. // #28394
  75100. A=D+A
  75101. // #28395
  75102. D=M
  75103. //^^ push_d_to_stack
  75104. // #28396
  75105. @SP
  75106. // #28397
  75107. A=M
  75108. // #28398
  75109. M=D
  75110. // #28399
  75111. @SP
  75112. // #28400
  75113. M=M+1
  75114. //vv push_d_to_stack
  75115. //vv push_from_ram(LCL, 2)
  75116. //
  75117. //// add
  75118. //^^ arith_binary_op(+)
  75119. //^^ pop_stack_to_d
  75120. // #28401
  75121. @SP
  75122. // #28402
  75123. M=M-1
  75124. // #28403
  75125. A=M
  75126. // #28404
  75127. D=M
  75128. //vv pop_stack_to_d
  75129. //^^ arith_d_with_stack_top(D+M)
  75130. // #28405
  75131. @R13
  75132. // #28406
  75133. M=D
  75134. //^^ pop_stack_to_d
  75135. // #28407
  75136. @SP
  75137. // #28408
  75138. M=M-1
  75139. // #28409
  75140. A=M
  75141. // #28410
  75142. D=M
  75143. //vv pop_stack_to_d
  75144. // #28411
  75145. @R13
  75146. // #28412
  75147. D=D+M
  75148. // #28413
  75149. @R13
  75150. // #28414
  75151. M=0
  75152. //vv arith_d_with_stack_top(D+M)
  75153. //^^ push_d_to_stack
  75154. // #28415
  75155. @SP
  75156. // #28416
  75157. A=M
  75158. // #28417
  75159. M=D
  75160. // #28418
  75161. @SP
  75162. // #28419
  75163. M=M+1
  75164. //vv push_d_to_stack
  75165. //vv arith_binary_op(+)
  75166. //
  75167. //// pop local 1
  75168. //^^ pop_to_ram(LCL, 1)
  75169. // #28420
  75170. @LCL
  75171. // #28421
  75172. D=M
  75173. // #28422
  75174. @1
  75175. // #28423
  75176. D=D+A
  75177. // #28424
  75178. @R13
  75179. // #28425
  75180. M=D
  75181. //^^ pop_stack_to_d
  75182. // #28426
  75183. @SP
  75184. // #28427
  75185. M=M-1
  75186. // #28428
  75187. A=M
  75188. // #28429
  75189. D=M
  75190. //vv pop_stack_to_d
  75191. // #28430
  75192. @R13
  75193. // #28431
  75194. A=M
  75195. // #28432
  75196. M=D
  75197. // #28433
  75198. @R13
  75199. // #28434
  75200. M=0
  75201. //vv pop_to_ram(LCL, 1)
  75202. //
  75203. //// push local 2
  75204. //^^ push_from_ram(LCL, 2)
  75205. // #28435
  75206. @LCL
  75207. // #28436
  75208. D=M
  75209. // #28437
  75210. @2
  75211. // #28438
  75212. A=D+A
  75213. // #28439
  75214. D=M
  75215. //^^ push_d_to_stack
  75216. // #28440
  75217. @SP
  75218. // #28441
  75219. A=M
  75220. // #28442
  75221. M=D
  75222. // #28443
  75223. @SP
  75224. // #28444
  75225. M=M+1
  75226. //vv push_d_to_stack
  75227. //vv push_from_ram(LCL, 2)
  75228. //
  75229. //// push constant 0
  75230. //^^ push_constant(0)
  75231. // #28445
  75232. @0
  75233. // #28446
  75234. D=A
  75235. //^^ push_d_to_stack
  75236. // #28447
  75237. @SP
  75238. // #28448
  75239. A=M
  75240. // #28449
  75241. M=D
  75242. // #28450
  75243. @SP
  75244. // #28451
  75245. M=M+1
  75246. //vv push_d_to_stack
  75247. //vv push_constant(0)
  75248. //
  75249. //// eq
  75250. //^^ arith_cmp_op(JEQ)
  75251. //^^ pop_stack_to_d
  75252. // #28452
  75253. @SP
  75254. // #28453
  75255. M=M-1
  75256. // #28454
  75257. A=M
  75258. // #28455
  75259. D=M
  75260. //vv pop_stack_to_d
  75261. //^^ arith_d_with_stack_top(D-M)
  75262. // #28456
  75263. @R13
  75264. // #28457
  75265. M=D
  75266. //^^ pop_stack_to_d
  75267. // #28458
  75268. @SP
  75269. // #28459
  75270. M=M-1
  75271. // #28460
  75272. A=M
  75273. // #28461
  75274. D=M
  75275. //vv pop_stack_to_d
  75276. // #28462
  75277. @R13
  75278. // #28463
  75279. D=D-M
  75280. // #28464
  75281. @R13
  75282. // #28465
  75283. M=0
  75284. //vv arith_d_with_stack_top(D-M)
  75285. // #28466
  75286. @PUT_TRUE_257
  75287. // #28467
  75288. D;JEQ
  75289. // #28468
  75290. @R13
  75291. // #28469
  75292. M=0
  75293. // #28470
  75294. @CONT_257
  75295. // #28471
  75296. 0;JMP
  75297. (PUT_TRUE_257)
  75298. // #28472
  75299. @R13
  75300. // #28473
  75301. M=-1
  75302. (CONT_257)
  75303. // #28474
  75304. @R13
  75305. // #28475
  75306. D=M
  75307. // #28476
  75308. @R13
  75309. // #28477
  75310. M=0
  75311. //^^ push_d_to_stack
  75312. // #28478
  75313. @SP
  75314. // #28479
  75315. A=M
  75316. // #28480
  75317. M=D
  75318. // #28481
  75319. @SP
  75320. // #28482
  75321. M=M+1
  75322. //vv push_d_to_stack
  75323. //vv arith_cmp_op(JEQ)
  75324. //
  75325. //// if-goto IF_TRUE1
  75326. //^^ pop_stack_to_d
  75327. // #28483
  75328. @SP
  75329. // #28484
  75330. M=M-1
  75331. // #28485
  75332. A=M
  75333. // #28486
  75334. D=M
  75335. //vv pop_stack_to_d
  75336. // #28487
  75337. @Screen.drawRectangle$IF_TRUE1
  75338. // #28488
  75339. D;JNE
  75340. //
  75341. //// goto IF_FALSE1
  75342. // #28489
  75343. @Screen.drawRectangle$IF_FALSE1
  75344. // #28490
  75345. 0;JMP
  75346. //
  75347. //// label IF_TRUE1
  75348. (Screen.drawRectangle$IF_TRUE1)
  75349. //
  75350. //// push local 0
  75351. //^^ push_from_ram(LCL, 0)
  75352. // #28491
  75353. @LCL
  75354. // #28492
  75355. D=M
  75356. // #28493
  75357. @0
  75358. // #28494
  75359. A=D+A
  75360. // #28495
  75361. D=M
  75362. //^^ push_d_to_stack
  75363. // #28496
  75364. @SP
  75365. // #28497
  75366. A=M
  75367. // #28498
  75368. M=D
  75369. // #28499
  75370. @SP
  75371. // #28500
  75372. M=M+1
  75373. //vv push_d_to_stack
  75374. //vv push_from_ram(LCL, 0)
  75375. //
  75376. //// push local 5
  75377. //^^ push_from_ram(LCL, 5)
  75378. // #28501
  75379. @LCL
  75380. // #28502
  75381. D=M
  75382. // #28503
  75383. @5
  75384. // #28504
  75385. A=D+A
  75386. // #28505
  75387. D=M
  75388. //^^ push_d_to_stack
  75389. // #28506
  75390. @SP
  75391. // #28507
  75392. A=M
  75393. // #28508
  75394. M=D
  75395. // #28509
  75396. @SP
  75397. // #28510
  75398. M=M+1
  75399. //vv push_d_to_stack
  75400. //vv push_from_ram(LCL, 5)
  75401. //
  75402. //// push local 6
  75403. //^^ push_from_ram(LCL, 6)
  75404. // #28511
  75405. @LCL
  75406. // #28512
  75407. D=M
  75408. // #28513
  75409. @6
  75410. // #28514
  75411. A=D+A
  75412. // #28515
  75413. D=M
  75414. //^^ push_d_to_stack
  75415. // #28516
  75416. @SP
  75417. // #28517
  75418. A=M
  75419. // #28518
  75420. M=D
  75421. // #28519
  75422. @SP
  75423. // #28520
  75424. M=M+1
  75425. //vv push_d_to_stack
  75426. //vv push_from_ram(LCL, 6)
  75427. //
  75428. //// and
  75429. //^^ arith_binary_op(&)
  75430. //^^ pop_stack_to_d
  75431. // #28521
  75432. @SP
  75433. // #28522
  75434. M=M-1
  75435. // #28523
  75436. A=M
  75437. // #28524
  75438. D=M
  75439. //vv pop_stack_to_d
  75440. //^^ arith_d_with_stack_top(D&M)
  75441. // #28525
  75442. @R13
  75443. // #28526
  75444. M=D
  75445. //^^ pop_stack_to_d
  75446. // #28527
  75447. @SP
  75448. // #28528
  75449. M=M-1
  75450. // #28529
  75451. A=M
  75452. // #28530
  75453. D=M
  75454. //vv pop_stack_to_d
  75455. // #28531
  75456. @R13
  75457. // #28532
  75458. D=D&M
  75459. // #28533
  75460. @R13
  75461. // #28534
  75462. M=0
  75463. //vv arith_d_with_stack_top(D&M)
  75464. //^^ push_d_to_stack
  75465. // #28535
  75466. @SP
  75467. // #28536
  75468. A=M
  75469. // #28537
  75470. M=D
  75471. // #28538
  75472. @SP
  75473. // #28539
  75474. M=M+1
  75475. //vv push_d_to_stack
  75476. //vv arith_binary_op(&)
  75477. //
  75478. //// call Screen.updateLocation 2
  75479. //^^ push_constant(RET_ADDR_258)
  75480. // #28540
  75481. @RET_ADDR_258
  75482. // #28541
  75483. D=A
  75484. //^^ push_d_to_stack
  75485. // #28542
  75486. @SP
  75487. // #28543
  75488. A=M
  75489. // #28544
  75490. M=D
  75491. // #28545
  75492. @SP
  75493. // #28546
  75494. M=M+1
  75495. //vv push_d_to_stack
  75496. //vv push_constant(RET_ADDR_258)
  75497. //push return-address
  75498. // #28547
  75499. @LCL
  75500. // #28548
  75501. D=M
  75502. //^^ push_d_to_stack
  75503. // #28549
  75504. @SP
  75505. // #28550
  75506. A=M
  75507. // #28551
  75508. M=D
  75509. // #28552
  75510. @SP
  75511. // #28553
  75512. M=M+1
  75513. //vv push_d_to_stack
  75514. //push LCL
  75515. // #28554
  75516. @ARG
  75517. // #28555
  75518. D=M
  75519. //^^ push_d_to_stack
  75520. // #28556
  75521. @SP
  75522. // #28557
  75523. A=M
  75524. // #28558
  75525. M=D
  75526. // #28559
  75527. @SP
  75528. // #28560
  75529. M=M+1
  75530. //vv push_d_to_stack
  75531. //push ARG
  75532. // #28561
  75533. @THIS
  75534. // #28562
  75535. D=M
  75536. //^^ push_d_to_stack
  75537. // #28563
  75538. @SP
  75539. // #28564
  75540. A=M
  75541. // #28565
  75542. M=D
  75543. // #28566
  75544. @SP
  75545. // #28567
  75546. M=M+1
  75547. //vv push_d_to_stack
  75548. //push THIS
  75549. // #28568
  75550. @THAT
  75551. // #28569
  75552. D=M
  75553. //^^ push_d_to_stack
  75554. // #28570
  75555. @SP
  75556. // #28571
  75557. A=M
  75558. // #28572
  75559. M=D
  75560. // #28573
  75561. @SP
  75562. // #28574
  75563. M=M+1
  75564. //vv push_d_to_stack
  75565. //push THAT
  75566. // #28575
  75567. @SP
  75568. // #28576
  75569. D=M
  75570. // #28577
  75571. @ARG
  75572. // #28578
  75573. M=D
  75574. // #28579
  75575. @7
  75576. // #28580
  75577. D=A
  75578. // #28581
  75579. @ARG
  75580. // #28582
  75581. M=M-D // ARG = SP - args - 5
  75582. // #28583
  75583. @SP
  75584. // #28584
  75585. D=M
  75586. // #28585
  75587. @LCL
  75588. // #28586
  75589. M=D // LCL = SP
  75590. // #28587
  75591. @Screen.updateLocation
  75592. // #28588
  75593. 0;JMP
  75594. (RET_ADDR_258)
  75595. //
  75596. //// pop temp 0
  75597. //^^ pop_to_loc{5)
  75598. //^^ pop_stack_to_d
  75599. // #28589
  75600. @SP
  75601. // #28590
  75602. M=M-1
  75603. // #28591
  75604. A=M
  75605. // #28592
  75606. D=M
  75607. //vv pop_stack_to_d
  75608. // #28593
  75609. @5
  75610. // #28594
  75611. M=D
  75612. //vv pop_to_loc{5)
  75613. //
  75614. //// goto IF_END1
  75615. // #28595
  75616. @Screen.drawRectangle$IF_END1
  75617. // #28596
  75618. 0;JMP
  75619. //
  75620. //// label IF_FALSE1
  75621. (Screen.drawRectangle$IF_FALSE1)
  75622. //
  75623. //// push local 0
  75624. //^^ push_from_ram(LCL, 0)
  75625. // #28597
  75626. @LCL
  75627. // #28598
  75628. D=M
  75629. // #28599
  75630. @0
  75631. // #28600
  75632. A=D+A
  75633. // #28601
  75634. D=M
  75635. //^^ push_d_to_stack
  75636. // #28602
  75637. @SP
  75638. // #28603
  75639. A=M
  75640. // #28604
  75641. M=D
  75642. // #28605
  75643. @SP
  75644. // #28606
  75645. M=M+1
  75646. //vv push_d_to_stack
  75647. //vv push_from_ram(LCL, 0)
  75648. //
  75649. //// push local 6
  75650. //^^ push_from_ram(LCL, 6)
  75651. // #28607
  75652. @LCL
  75653. // #28608
  75654. D=M
  75655. // #28609
  75656. @6
  75657. // #28610
  75658. A=D+A
  75659. // #28611
  75660. D=M
  75661. //^^ push_d_to_stack
  75662. // #28612
  75663. @SP
  75664. // #28613
  75665. A=M
  75666. // #28614
  75667. M=D
  75668. // #28615
  75669. @SP
  75670. // #28616
  75671. M=M+1
  75672. //vv push_d_to_stack
  75673. //vv push_from_ram(LCL, 6)
  75674. //
  75675. //// call Screen.updateLocation 2
  75676. //^^ push_constant(RET_ADDR_259)
  75677. // #28617
  75678. @RET_ADDR_259
  75679. // #28618
  75680. D=A
  75681. //^^ push_d_to_stack
  75682. // #28619
  75683. @SP
  75684. // #28620
  75685. A=M
  75686. // #28621
  75687. M=D
  75688. // #28622
  75689. @SP
  75690. // #28623
  75691. M=M+1
  75692. //vv push_d_to_stack
  75693. //vv push_constant(RET_ADDR_259)
  75694. //push return-address
  75695. // #28624
  75696. @LCL
  75697. // #28625
  75698. D=M
  75699. //^^ push_d_to_stack
  75700. // #28626
  75701. @SP
  75702. // #28627
  75703. A=M
  75704. // #28628
  75705. M=D
  75706. // #28629
  75707. @SP
  75708. // #28630
  75709. M=M+1
  75710. //vv push_d_to_stack
  75711. //push LCL
  75712. // #28631
  75713. @ARG
  75714. // #28632
  75715. D=M
  75716. //^^ push_d_to_stack
  75717. // #28633
  75718. @SP
  75719. // #28634
  75720. A=M
  75721. // #28635
  75722. M=D
  75723. // #28636
  75724. @SP
  75725. // #28637
  75726. M=M+1
  75727. //vv push_d_to_stack
  75728. //push ARG
  75729. // #28638
  75730. @THIS
  75731. // #28639
  75732. D=M
  75733. //^^ push_d_to_stack
  75734. // #28640
  75735. @SP
  75736. // #28641
  75737. A=M
  75738. // #28642
  75739. M=D
  75740. // #28643
  75741. @SP
  75742. // #28644
  75743. M=M+1
  75744. //vv push_d_to_stack
  75745. //push THIS
  75746. // #28645
  75747. @THAT
  75748. // #28646
  75749. D=M
  75750. //^^ push_d_to_stack
  75751. // #28647
  75752. @SP
  75753. // #28648
  75754. A=M
  75755. // #28649
  75756. M=D
  75757. // #28650
  75758. @SP
  75759. // #28651
  75760. M=M+1
  75761. //vv push_d_to_stack
  75762. //push THAT
  75763. // #28652
  75764. @SP
  75765. // #28653
  75766. D=M
  75767. // #28654
  75768. @ARG
  75769. // #28655
  75770. M=D
  75771. // #28656
  75772. @7
  75773. // #28657
  75774. D=A
  75775. // #28658
  75776. @ARG
  75777. // #28659
  75778. M=M-D // ARG = SP - args - 5
  75779. // #28660
  75780. @SP
  75781. // #28661
  75782. D=M
  75783. // #28662
  75784. @LCL
  75785. // #28663
  75786. M=D // LCL = SP
  75787. // #28664
  75788. @Screen.updateLocation
  75789. // #28665
  75790. 0;JMP
  75791. (RET_ADDR_259)
  75792. //
  75793. //// pop temp 0
  75794. //^^ pop_to_loc{5)
  75795. //^^ pop_stack_to_d
  75796. // #28666
  75797. @SP
  75798. // #28667
  75799. M=M-1
  75800. // #28668
  75801. A=M
  75802. // #28669
  75803. D=M
  75804. //vv pop_stack_to_d
  75805. // #28670
  75806. @5
  75807. // #28671
  75808. M=D
  75809. //vv pop_to_loc{5)
  75810. //
  75811. //// push local 0
  75812. //^^ push_from_ram(LCL, 0)
  75813. // #28672
  75814. @LCL
  75815. // #28673
  75816. D=M
  75817. // #28674
  75818. @0
  75819. // #28675
  75820. A=D+A
  75821. // #28676
  75822. D=M
  75823. //^^ push_d_to_stack
  75824. // #28677
  75825. @SP
  75826. // #28678
  75827. A=M
  75828. // #28679
  75829. M=D
  75830. // #28680
  75831. @SP
  75832. // #28681
  75833. M=M+1
  75834. //vv push_d_to_stack
  75835. //vv push_from_ram(LCL, 0)
  75836. //
  75837. //// push constant 1
  75838. //^^ push_constant(1)
  75839. // #28682
  75840. @1
  75841. // #28683
  75842. D=A
  75843. //^^ push_d_to_stack
  75844. // #28684
  75845. @SP
  75846. // #28685
  75847. A=M
  75848. // #28686
  75849. M=D
  75850. // #28687
  75851. @SP
  75852. // #28688
  75853. M=M+1
  75854. //vv push_d_to_stack
  75855. //vv push_constant(1)
  75856. //
  75857. //// add
  75858. //^^ arith_binary_op(+)
  75859. //^^ pop_stack_to_d
  75860. // #28689
  75861. @SP
  75862. // #28690
  75863. M=M-1
  75864. // #28691
  75865. A=M
  75866. // #28692
  75867. D=M
  75868. //vv pop_stack_to_d
  75869. //^^ arith_d_with_stack_top(D+M)
  75870. // #28693
  75871. @R13
  75872. // #28694
  75873. M=D
  75874. //^^ pop_stack_to_d
  75875. // #28695
  75876. @SP
  75877. // #28696
  75878. M=M-1
  75879. // #28697
  75880. A=M
  75881. // #28698
  75882. D=M
  75883. //vv pop_stack_to_d
  75884. // #28699
  75885. @R13
  75886. // #28700
  75887. D=D+M
  75888. // #28701
  75889. @R13
  75890. // #28702
  75891. M=0
  75892. //vv arith_d_with_stack_top(D+M)
  75893. //^^ push_d_to_stack
  75894. // #28703
  75895. @SP
  75896. // #28704
  75897. A=M
  75898. // #28705
  75899. M=D
  75900. // #28706
  75901. @SP
  75902. // #28707
  75903. M=M+1
  75904. //vv push_d_to_stack
  75905. //vv arith_binary_op(+)
  75906. //
  75907. //// pop local 0
  75908. //^^ pop_to_ram(LCL, 0)
  75909. // #28708
  75910. @LCL
  75911. // #28709
  75912. D=M
  75913. // #28710
  75914. @0
  75915. // #28711
  75916. D=D+A
  75917. // #28712
  75918. @R13
  75919. // #28713
  75920. M=D
  75921. //^^ pop_stack_to_d
  75922. // #28714
  75923. @SP
  75924. // #28715
  75925. M=M-1
  75926. // #28716
  75927. A=M
  75928. // #28717
  75929. D=M
  75930. //vv pop_stack_to_d
  75931. // #28718
  75932. @R13
  75933. // #28719
  75934. A=M
  75935. // #28720
  75936. M=D
  75937. // #28721
  75938. @R13
  75939. // #28722
  75940. M=0
  75941. //vv pop_to_ram(LCL, 0)
  75942. //
  75943. //// label WHILE_EXP1
  75944. (Screen.drawRectangle$WHILE_EXP1)
  75945. //
  75946. //// push local 0
  75947. //^^ push_from_ram(LCL, 0)
  75948. // #28723
  75949. @LCL
  75950. // #28724
  75951. D=M
  75952. // #28725
  75953. @0
  75954. // #28726
  75955. A=D+A
  75956. // #28727
  75957. D=M
  75958. //^^ push_d_to_stack
  75959. // #28728
  75960. @SP
  75961. // #28729
  75962. A=M
  75963. // #28730
  75964. M=D
  75965. // #28731
  75966. @SP
  75967. // #28732
  75968. M=M+1
  75969. //vv push_d_to_stack
  75970. //vv push_from_ram(LCL, 0)
  75971. //
  75972. //// push local 1
  75973. //^^ push_from_ram(LCL, 1)
  75974. // #28733
  75975. @LCL
  75976. // #28734
  75977. D=M
  75978. // #28735
  75979. @1
  75980. // #28736
  75981. A=D+A
  75982. // #28737
  75983. D=M
  75984. //^^ push_d_to_stack
  75985. // #28738
  75986. @SP
  75987. // #28739
  75988. A=M
  75989. // #28740
  75990. M=D
  75991. // #28741
  75992. @SP
  75993. // #28742
  75994. M=M+1
  75995. //vv push_d_to_stack
  75996. //vv push_from_ram(LCL, 1)
  75997. //
  75998. //// lt
  75999. //^^ arith_cmp_op(JLT)
  76000. //^^ pop_stack_to_d
  76001. // #28743
  76002. @SP
  76003. // #28744
  76004. M=M-1
  76005. // #28745
  76006. A=M
  76007. // #28746
  76008. D=M
  76009. //vv pop_stack_to_d
  76010. //^^ arith_d_with_stack_top(D-M)
  76011. // #28747
  76012. @R13
  76013. // #28748
  76014. M=D
  76015. //^^ pop_stack_to_d
  76016. // #28749
  76017. @SP
  76018. // #28750
  76019. M=M-1
  76020. // #28751
  76021. A=M
  76022. // #28752
  76023. D=M
  76024. //vv pop_stack_to_d
  76025. // #28753
  76026. @R13
  76027. // #28754
  76028. D=D-M
  76029. // #28755
  76030. @R13
  76031. // #28756
  76032. M=0
  76033. //vv arith_d_with_stack_top(D-M)
  76034. // #28757
  76035. @PUT_TRUE_260
  76036. // #28758
  76037. D;JLT
  76038. // #28759
  76039. @R13
  76040. // #28760
  76041. M=0
  76042. // #28761
  76043. @CONT_260
  76044. // #28762
  76045. 0;JMP
  76046. (PUT_TRUE_260)
  76047. // #28763
  76048. @R13
  76049. // #28764
  76050. M=-1
  76051. (CONT_260)
  76052. // #28765
  76053. @R13
  76054. // #28766
  76055. D=M
  76056. // #28767
  76057. @R13
  76058. // #28768
  76059. M=0
  76060. //^^ push_d_to_stack
  76061. // #28769
  76062. @SP
  76063. // #28770
  76064. A=M
  76065. // #28771
  76066. M=D
  76067. // #28772
  76068. @SP
  76069. // #28773
  76070. M=M+1
  76071. //vv push_d_to_stack
  76072. //vv arith_cmp_op(JLT)
  76073. //
  76074. //// not
  76075. //^^ arith_unary_op(!)
  76076. //^^ pop_stack_to_d
  76077. // #28774
  76078. @SP
  76079. // #28775
  76080. M=M-1
  76081. // #28776
  76082. A=M
  76083. // #28777
  76084. D=M
  76085. //vv pop_stack_to_d
  76086. // #28778
  76087. D=!D
  76088. //^^ push_d_to_stack
  76089. // #28779
  76090. @SP
  76091. // #28780
  76092. A=M
  76093. // #28781
  76094. M=D
  76095. // #28782
  76096. @SP
  76097. // #28783
  76098. M=M+1
  76099. //vv push_d_to_stack
  76100. //vv arith_unary_op(!)
  76101. //
  76102. //// if-goto WHILE_END1
  76103. //^^ pop_stack_to_d
  76104. // #28784
  76105. @SP
  76106. // #28785
  76107. M=M-1
  76108. // #28786
  76109. A=M
  76110. // #28787
  76111. D=M
  76112. //vv pop_stack_to_d
  76113. // #28788
  76114. @Screen.drawRectangle$WHILE_END1
  76115. // #28789
  76116. D;JNE
  76117. //
  76118. //// push local 0
  76119. //^^ push_from_ram(LCL, 0)
  76120. // #28790
  76121. @LCL
  76122. // #28791
  76123. D=M
  76124. // #28792
  76125. @0
  76126. // #28793
  76127. A=D+A
  76128. // #28794
  76129. D=M
  76130. //^^ push_d_to_stack
  76131. // #28795
  76132. @SP
  76133. // #28796
  76134. A=M
  76135. // #28797
  76136. M=D
  76137. // #28798
  76138. @SP
  76139. // #28799
  76140. M=M+1
  76141. //vv push_d_to_stack
  76142. //vv push_from_ram(LCL, 0)
  76143. //
  76144. //// push constant 1
  76145. //^^ push_constant(1)
  76146. // #28800
  76147. @1
  76148. // #28801
  76149. D=A
  76150. //^^ push_d_to_stack
  76151. // #28802
  76152. @SP
  76153. // #28803
  76154. A=M
  76155. // #28804
  76156. M=D
  76157. // #28805
  76158. @SP
  76159. // #28806
  76160. M=M+1
  76161. //vv push_d_to_stack
  76162. //vv push_constant(1)
  76163. //
  76164. //// neg
  76165. //^^ arith_unary_op(-)
  76166. //^^ pop_stack_to_d
  76167. // #28807
  76168. @SP
  76169. // #28808
  76170. M=M-1
  76171. // #28809
  76172. A=M
  76173. // #28810
  76174. D=M
  76175. //vv pop_stack_to_d
  76176. // #28811
  76177. D=-D
  76178. //^^ push_d_to_stack
  76179. // #28812
  76180. @SP
  76181. // #28813
  76182. A=M
  76183. // #28814
  76184. M=D
  76185. // #28815
  76186. @SP
  76187. // #28816
  76188. M=M+1
  76189. //vv push_d_to_stack
  76190. //vv arith_unary_op(-)
  76191. //
  76192. //// call Screen.updateLocation 2
  76193. //^^ push_constant(RET_ADDR_261)
  76194. // #28817
  76195. @RET_ADDR_261
  76196. // #28818
  76197. D=A
  76198. //^^ push_d_to_stack
  76199. // #28819
  76200. @SP
  76201. // #28820
  76202. A=M
  76203. // #28821
  76204. M=D
  76205. // #28822
  76206. @SP
  76207. // #28823
  76208. M=M+1
  76209. //vv push_d_to_stack
  76210. //vv push_constant(RET_ADDR_261)
  76211. //push return-address
  76212. // #28824
  76213. @LCL
  76214. // #28825
  76215. D=M
  76216. //^^ push_d_to_stack
  76217. // #28826
  76218. @SP
  76219. // #28827
  76220. A=M
  76221. // #28828
  76222. M=D
  76223. // #28829
  76224. @SP
  76225. // #28830
  76226. M=M+1
  76227. //vv push_d_to_stack
  76228. //push LCL
  76229. // #28831
  76230. @ARG
  76231. // #28832
  76232. D=M
  76233. //^^ push_d_to_stack
  76234. // #28833
  76235. @SP
  76236. // #28834
  76237. A=M
  76238. // #28835
  76239. M=D
  76240. // #28836
  76241. @SP
  76242. // #28837
  76243. M=M+1
  76244. //vv push_d_to_stack
  76245. //push ARG
  76246. // #28838
  76247. @THIS
  76248. // #28839
  76249. D=M
  76250. //^^ push_d_to_stack
  76251. // #28840
  76252. @SP
  76253. // #28841
  76254. A=M
  76255. // #28842
  76256. M=D
  76257. // #28843
  76258. @SP
  76259. // #28844
  76260. M=M+1
  76261. //vv push_d_to_stack
  76262. //push THIS
  76263. // #28845
  76264. @THAT
  76265. // #28846
  76266. D=M
  76267. //^^ push_d_to_stack
  76268. // #28847
  76269. @SP
  76270. // #28848
  76271. A=M
  76272. // #28849
  76273. M=D
  76274. // #28850
  76275. @SP
  76276. // #28851
  76277. M=M+1
  76278. //vv push_d_to_stack
  76279. //push THAT
  76280. // #28852
  76281. @SP
  76282. // #28853
  76283. D=M
  76284. // #28854
  76285. @ARG
  76286. // #28855
  76287. M=D
  76288. // #28856
  76289. @7
  76290. // #28857
  76291. D=A
  76292. // #28858
  76293. @ARG
  76294. // #28859
  76295. M=M-D // ARG = SP - args - 5
  76296. // #28860
  76297. @SP
  76298. // #28861
  76299. D=M
  76300. // #28862
  76301. @LCL
  76302. // #28863
  76303. M=D // LCL = SP
  76304. // #28864
  76305. @Screen.updateLocation
  76306. // #28865
  76307. 0;JMP
  76308. (RET_ADDR_261)
  76309. //
  76310. //// pop temp 0
  76311. //^^ pop_to_loc{5)
  76312. //^^ pop_stack_to_d
  76313. // #28866
  76314. @SP
  76315. // #28867
  76316. M=M-1
  76317. // #28868
  76318. A=M
  76319. // #28869
  76320. D=M
  76321. //vv pop_stack_to_d
  76322. // #28870
  76323. @5
  76324. // #28871
  76325. M=D
  76326. //vv pop_to_loc{5)
  76327. //
  76328. //// push local 0
  76329. //^^ push_from_ram(LCL, 0)
  76330. // #28872
  76331. @LCL
  76332. // #28873
  76333. D=M
  76334. // #28874
  76335. @0
  76336. // #28875
  76337. A=D+A
  76338. // #28876
  76339. D=M
  76340. //^^ push_d_to_stack
  76341. // #28877
  76342. @SP
  76343. // #28878
  76344. A=M
  76345. // #28879
  76346. M=D
  76347. // #28880
  76348. @SP
  76349. // #28881
  76350. M=M+1
  76351. //vv push_d_to_stack
  76352. //vv push_from_ram(LCL, 0)
  76353. //
  76354. //// push constant 1
  76355. //^^ push_constant(1)
  76356. // #28882
  76357. @1
  76358. // #28883
  76359. D=A
  76360. //^^ push_d_to_stack
  76361. // #28884
  76362. @SP
  76363. // #28885
  76364. A=M
  76365. // #28886
  76366. M=D
  76367. // #28887
  76368. @SP
  76369. // #28888
  76370. M=M+1
  76371. //vv push_d_to_stack
  76372. //vv push_constant(1)
  76373. //
  76374. //// add
  76375. //^^ arith_binary_op(+)
  76376. //^^ pop_stack_to_d
  76377. // #28889
  76378. @SP
  76379. // #28890
  76380. M=M-1
  76381. // #28891
  76382. A=M
  76383. // #28892
  76384. D=M
  76385. //vv pop_stack_to_d
  76386. //^^ arith_d_with_stack_top(D+M)
  76387. // #28893
  76388. @R13
  76389. // #28894
  76390. M=D
  76391. //^^ pop_stack_to_d
  76392. // #28895
  76393. @SP
  76394. // #28896
  76395. M=M-1
  76396. // #28897
  76397. A=M
  76398. // #28898
  76399. D=M
  76400. //vv pop_stack_to_d
  76401. // #28899
  76402. @R13
  76403. // #28900
  76404. D=D+M
  76405. // #28901
  76406. @R13
  76407. // #28902
  76408. M=0
  76409. //vv arith_d_with_stack_top(D+M)
  76410. //^^ push_d_to_stack
  76411. // #28903
  76412. @SP
  76413. // #28904
  76414. A=M
  76415. // #28905
  76416. M=D
  76417. // #28906
  76418. @SP
  76419. // #28907
  76420. M=M+1
  76421. //vv push_d_to_stack
  76422. //vv arith_binary_op(+)
  76423. //
  76424. //// pop local 0
  76425. //^^ pop_to_ram(LCL, 0)
  76426. // #28908
  76427. @LCL
  76428. // #28909
  76429. D=M
  76430. // #28910
  76431. @0
  76432. // #28911
  76433. D=D+A
  76434. // #28912
  76435. @R13
  76436. // #28913
  76437. M=D
  76438. //^^ pop_stack_to_d
  76439. // #28914
  76440. @SP
  76441. // #28915
  76442. M=M-1
  76443. // #28916
  76444. A=M
  76445. // #28917
  76446. D=M
  76447. //vv pop_stack_to_d
  76448. // #28918
  76449. @R13
  76450. // #28919
  76451. A=M
  76452. // #28920
  76453. M=D
  76454. // #28921
  76455. @R13
  76456. // #28922
  76457. M=0
  76458. //vv pop_to_ram(LCL, 0)
  76459. //
  76460. //// goto WHILE_EXP1
  76461. // #28923
  76462. @Screen.drawRectangle$WHILE_EXP1
  76463. // #28924
  76464. 0;JMP
  76465. //
  76466. //// label WHILE_END1
  76467. (Screen.drawRectangle$WHILE_END1)
  76468. //
  76469. //// push local 1
  76470. //^^ push_from_ram(LCL, 1)
  76471. // #28925
  76472. @LCL
  76473. // #28926
  76474. D=M
  76475. // #28927
  76476. @1
  76477. // #28928
  76478. A=D+A
  76479. // #28929
  76480. D=M
  76481. //^^ push_d_to_stack
  76482. // #28930
  76483. @SP
  76484. // #28931
  76485. A=M
  76486. // #28932
  76487. M=D
  76488. // #28933
  76489. @SP
  76490. // #28934
  76491. M=M+1
  76492. //vv push_d_to_stack
  76493. //vv push_from_ram(LCL, 1)
  76494. //
  76495. //// push local 5
  76496. //^^ push_from_ram(LCL, 5)
  76497. // #28935
  76498. @LCL
  76499. // #28936
  76500. D=M
  76501. // #28937
  76502. @5
  76503. // #28938
  76504. A=D+A
  76505. // #28939
  76506. D=M
  76507. //^^ push_d_to_stack
  76508. // #28940
  76509. @SP
  76510. // #28941
  76511. A=M
  76512. // #28942
  76513. M=D
  76514. // #28943
  76515. @SP
  76516. // #28944
  76517. M=M+1
  76518. //vv push_d_to_stack
  76519. //vv push_from_ram(LCL, 5)
  76520. //
  76521. //// call Screen.updateLocation 2
  76522. //^^ push_constant(RET_ADDR_262)
  76523. // #28945
  76524. @RET_ADDR_262
  76525. // #28946
  76526. D=A
  76527. //^^ push_d_to_stack
  76528. // #28947
  76529. @SP
  76530. // #28948
  76531. A=M
  76532. // #28949
  76533. M=D
  76534. // #28950
  76535. @SP
  76536. // #28951
  76537. M=M+1
  76538. //vv push_d_to_stack
  76539. //vv push_constant(RET_ADDR_262)
  76540. //push return-address
  76541. // #28952
  76542. @LCL
  76543. // #28953
  76544. D=M
  76545. //^^ push_d_to_stack
  76546. // #28954
  76547. @SP
  76548. // #28955
  76549. A=M
  76550. // #28956
  76551. M=D
  76552. // #28957
  76553. @SP
  76554. // #28958
  76555. M=M+1
  76556. //vv push_d_to_stack
  76557. //push LCL
  76558. // #28959
  76559. @ARG
  76560. // #28960
  76561. D=M
  76562. //^^ push_d_to_stack
  76563. // #28961
  76564. @SP
  76565. // #28962
  76566. A=M
  76567. // #28963
  76568. M=D
  76569. // #28964
  76570. @SP
  76571. // #28965
  76572. M=M+1
  76573. //vv push_d_to_stack
  76574. //push ARG
  76575. // #28966
  76576. @THIS
  76577. // #28967
  76578. D=M
  76579. //^^ push_d_to_stack
  76580. // #28968
  76581. @SP
  76582. // #28969
  76583. A=M
  76584. // #28970
  76585. M=D
  76586. // #28971
  76587. @SP
  76588. // #28972
  76589. M=M+1
  76590. //vv push_d_to_stack
  76591. //push THIS
  76592. // #28973
  76593. @THAT
  76594. // #28974
  76595. D=M
  76596. //^^ push_d_to_stack
  76597. // #28975
  76598. @SP
  76599. // #28976
  76600. A=M
  76601. // #28977
  76602. M=D
  76603. // #28978
  76604. @SP
  76605. // #28979
  76606. M=M+1
  76607. //vv push_d_to_stack
  76608. //push THAT
  76609. // #28980
  76610. @SP
  76611. // #28981
  76612. D=M
  76613. // #28982
  76614. @ARG
  76615. // #28983
  76616. M=D
  76617. // #28984
  76618. @7
  76619. // #28985
  76620. D=A
  76621. // #28986
  76622. @ARG
  76623. // #28987
  76624. M=M-D // ARG = SP - args - 5
  76625. // #28988
  76626. @SP
  76627. // #28989
  76628. D=M
  76629. // #28990
  76630. @LCL
  76631. // #28991
  76632. M=D // LCL = SP
  76633. // #28992
  76634. @Screen.updateLocation
  76635. // #28993
  76636. 0;JMP
  76637. (RET_ADDR_262)
  76638. //
  76639. //// pop temp 0
  76640. //^^ pop_to_loc{5)
  76641. //^^ pop_stack_to_d
  76642. // #28994
  76643. @SP
  76644. // #28995
  76645. M=M-1
  76646. // #28996
  76647. A=M
  76648. // #28997
  76649. D=M
  76650. //vv pop_stack_to_d
  76651. // #28998
  76652. @5
  76653. // #28999
  76654. M=D
  76655. //vv pop_to_loc{5)
  76656. //
  76657. //// label IF_END1
  76658. (Screen.drawRectangle$IF_END1)
  76659. //
  76660. //// push argument 1
  76661. //^^ push_from_ram(ARG, 1)
  76662. // #29000
  76663. @ARG
  76664. // #29001
  76665. D=M
  76666. // #29002
  76667. @1
  76668. // #29003
  76669. A=D+A
  76670. // #29004
  76671. D=M
  76672. //^^ push_d_to_stack
  76673. // #29005
  76674. @SP
  76675. // #29006
  76676. A=M
  76677. // #29007
  76678. M=D
  76679. // #29008
  76680. @SP
  76681. // #29009
  76682. M=M+1
  76683. //vv push_d_to_stack
  76684. //vv push_from_ram(ARG, 1)
  76685. //
  76686. //// push constant 1
  76687. //^^ push_constant(1)
  76688. // #29010
  76689. @1
  76690. // #29011
  76691. D=A
  76692. //^^ push_d_to_stack
  76693. // #29012
  76694. @SP
  76695. // #29013
  76696. A=M
  76697. // #29014
  76698. M=D
  76699. // #29015
  76700. @SP
  76701. // #29016
  76702. M=M+1
  76703. //vv push_d_to_stack
  76704. //vv push_constant(1)
  76705. //
  76706. //// add
  76707. //^^ arith_binary_op(+)
  76708. //^^ pop_stack_to_d
  76709. // #29017
  76710. @SP
  76711. // #29018
  76712. M=M-1
  76713. // #29019
  76714. A=M
  76715. // #29020
  76716. D=M
  76717. //vv pop_stack_to_d
  76718. //^^ arith_d_with_stack_top(D+M)
  76719. // #29021
  76720. @R13
  76721. // #29022
  76722. M=D
  76723. //^^ pop_stack_to_d
  76724. // #29023
  76725. @SP
  76726. // #29024
  76727. M=M-1
  76728. // #29025
  76729. A=M
  76730. // #29026
  76731. D=M
  76732. //vv pop_stack_to_d
  76733. // #29027
  76734. @R13
  76735. // #29028
  76736. D=D+M
  76737. // #29029
  76738. @R13
  76739. // #29030
  76740. M=0
  76741. //vv arith_d_with_stack_top(D+M)
  76742. //^^ push_d_to_stack
  76743. // #29031
  76744. @SP
  76745. // #29032
  76746. A=M
  76747. // #29033
  76748. M=D
  76749. // #29034
  76750. @SP
  76751. // #29035
  76752. M=M+1
  76753. //vv push_d_to_stack
  76754. //vv arith_binary_op(+)
  76755. //
  76756. //// pop argument 1
  76757. //^^ pop_to_ram(ARG, 1)
  76758. // #29036
  76759. @ARG
  76760. // #29037
  76761. D=M
  76762. // #29038
  76763. @1
  76764. // #29039
  76765. D=D+A
  76766. // #29040
  76767. @R13
  76768. // #29041
  76769. M=D
  76770. //^^ pop_stack_to_d
  76771. // #29042
  76772. @SP
  76773. // #29043
  76774. M=M-1
  76775. // #29044
  76776. A=M
  76777. // #29045
  76778. D=M
  76779. //vv pop_stack_to_d
  76780. // #29046
  76781. @R13
  76782. // #29047
  76783. A=M
  76784. // #29048
  76785. M=D
  76786. // #29049
  76787. @R13
  76788. // #29050
  76789. M=0
  76790. //vv pop_to_ram(ARG, 1)
  76791. //
  76792. //// push local 1
  76793. //^^ push_from_ram(LCL, 1)
  76794. // #29051
  76795. @LCL
  76796. // #29052
  76797. D=M
  76798. // #29053
  76799. @1
  76800. // #29054
  76801. A=D+A
  76802. // #29055
  76803. D=M
  76804. //^^ push_d_to_stack
  76805. // #29056
  76806. @SP
  76807. // #29057
  76808. A=M
  76809. // #29058
  76810. M=D
  76811. // #29059
  76812. @SP
  76813. // #29060
  76814. M=M+1
  76815. //vv push_d_to_stack
  76816. //vv push_from_ram(LCL, 1)
  76817. //
  76818. //// push constant 32
  76819. //^^ push_constant(32)
  76820. // #29061
  76821. @32
  76822. // #29062
  76823. D=A
  76824. //^^ push_d_to_stack
  76825. // #29063
  76826. @SP
  76827. // #29064
  76828. A=M
  76829. // #29065
  76830. M=D
  76831. // #29066
  76832. @SP
  76833. // #29067
  76834. M=M+1
  76835. //vv push_d_to_stack
  76836. //vv push_constant(32)
  76837. //
  76838. //// add
  76839. //^^ arith_binary_op(+)
  76840. //^^ pop_stack_to_d
  76841. // #29068
  76842. @SP
  76843. // #29069
  76844. M=M-1
  76845. // #29070
  76846. A=M
  76847. // #29071
  76848. D=M
  76849. //vv pop_stack_to_d
  76850. //^^ arith_d_with_stack_top(D+M)
  76851. // #29072
  76852. @R13
  76853. // #29073
  76854. M=D
  76855. //^^ pop_stack_to_d
  76856. // #29074
  76857. @SP
  76858. // #29075
  76859. M=M-1
  76860. // #29076
  76861. A=M
  76862. // #29077
  76863. D=M
  76864. //vv pop_stack_to_d
  76865. // #29078
  76866. @R13
  76867. // #29079
  76868. D=D+M
  76869. // #29080
  76870. @R13
  76871. // #29081
  76872. M=0
  76873. //vv arith_d_with_stack_top(D+M)
  76874. //^^ push_d_to_stack
  76875. // #29082
  76876. @SP
  76877. // #29083
  76878. A=M
  76879. // #29084
  76880. M=D
  76881. // #29085
  76882. @SP
  76883. // #29086
  76884. M=M+1
  76885. //vv push_d_to_stack
  76886. //vv arith_binary_op(+)
  76887. //
  76888. //// push local 2
  76889. //^^ push_from_ram(LCL, 2)
  76890. // #29087
  76891. @LCL
  76892. // #29088
  76893. D=M
  76894. // #29089
  76895. @2
  76896. // #29090
  76897. A=D+A
  76898. // #29091
  76899. D=M
  76900. //^^ push_d_to_stack
  76901. // #29092
  76902. @SP
  76903. // #29093
  76904. A=M
  76905. // #29094
  76906. M=D
  76907. // #29095
  76908. @SP
  76909. // #29096
  76910. M=M+1
  76911. //vv push_d_to_stack
  76912. //vv push_from_ram(LCL, 2)
  76913. //
  76914. //// sub
  76915. //^^ arith_binary_op(-)
  76916. //^^ pop_stack_to_d
  76917. // #29097
  76918. @SP
  76919. // #29098
  76920. M=M-1
  76921. // #29099
  76922. A=M
  76923. // #29100
  76924. D=M
  76925. //vv pop_stack_to_d
  76926. //^^ arith_d_with_stack_top(D-M)
  76927. // #29101
  76928. @R13
  76929. // #29102
  76930. M=D
  76931. //^^ pop_stack_to_d
  76932. // #29103
  76933. @SP
  76934. // #29104
  76935. M=M-1
  76936. // #29105
  76937. A=M
  76938. // #29106
  76939. D=M
  76940. //vv pop_stack_to_d
  76941. // #29107
  76942. @R13
  76943. // #29108
  76944. D=D-M
  76945. // #29109
  76946. @R13
  76947. // #29110
  76948. M=0
  76949. //vv arith_d_with_stack_top(D-M)
  76950. //^^ push_d_to_stack
  76951. // #29111
  76952. @SP
  76953. // #29112
  76954. A=M
  76955. // #29113
  76956. M=D
  76957. // #29114
  76958. @SP
  76959. // #29115
  76960. M=M+1
  76961. //vv push_d_to_stack
  76962. //vv arith_binary_op(-)
  76963. //
  76964. //// pop local 0
  76965. //^^ pop_to_ram(LCL, 0)
  76966. // #29116
  76967. @LCL
  76968. // #29117
  76969. D=M
  76970. // #29118
  76971. @0
  76972. // #29119
  76973. D=D+A
  76974. // #29120
  76975. @R13
  76976. // #29121
  76977. M=D
  76978. //^^ pop_stack_to_d
  76979. // #29122
  76980. @SP
  76981. // #29123
  76982. M=M-1
  76983. // #29124
  76984. A=M
  76985. // #29125
  76986. D=M
  76987. //vv pop_stack_to_d
  76988. // #29126
  76989. @R13
  76990. // #29127
  76991. A=M
  76992. // #29128
  76993. M=D
  76994. // #29129
  76995. @R13
  76996. // #29130
  76997. M=0
  76998. //vv pop_to_ram(LCL, 0)
  76999. //
  77000. //// goto WHILE_EXP0
  77001. // #29131
  77002. @Screen.drawRectangle$WHILE_EXP0
  77003. // #29132
  77004. 0;JMP
  77005. //
  77006. //// label WHILE_END0
  77007. (Screen.drawRectangle$WHILE_END0)
  77008. //
  77009. //// push constant 0
  77010. //^^ push_constant(0)
  77011. // #29133
  77012. @0
  77013. // #29134
  77014. D=A
  77015. //^^ push_d_to_stack
  77016. // #29135
  77017. @SP
  77018. // #29136
  77019. A=M
  77020. // #29137
  77021. M=D
  77022. // #29138
  77023. @SP
  77024. // #29139
  77025. M=M+1
  77026. //vv push_d_to_stack
  77027. //vv push_constant(0)
  77028. //
  77029. //// return
  77030. // #29140
  77031. @LCL
  77032. // #29141
  77033. D=M
  77034. // #29142
  77035. @R14
  77036. // #29143
  77037. M=D //R14=LCL
  77038. // #29144
  77039. @5
  77040. // #29145
  77041. A=D-A
  77042. // #29146
  77043. D=M
  77044. // #29147
  77045. @R15
  77046. // #29148
  77047. M=D //R15=*(LCL-5)
  77048. //^^ pop_stack_to_d
  77049. // #29149
  77050. @SP
  77051. // #29150
  77052. M=M-1
  77053. // #29151
  77054. A=M
  77055. // #29152
  77056. D=M
  77057. //vv pop_stack_to_d
  77058. // #29153
  77059. @ARG
  77060. // #29154
  77061. A=M
  77062. // #29155
  77063. M=D //*ARG = pop()
  77064. // #29156
  77065. @ARG
  77066. // #29157
  77067. D=M
  77068. // #29158
  77069. @SP
  77070. // #29159
  77071. M=D+1 //SP=ARG+1
  77072. // #29160
  77073. @R14
  77074. // #29161
  77075. AM=M-1
  77076. // #29162
  77077. D=M
  77078. // #29163
  77079. @THAT
  77080. // #29164
  77081. M=D //THAT = *(--R14)
  77082. // #29165
  77083. @R14
  77084. // #29166
  77085. AM=M-1
  77086. // #29167
  77087. D=M
  77088. // #29168
  77089. @THIS
  77090. // #29169
  77091. M=D //THIS = *(--R14)
  77092. // #29170
  77093. @R14
  77094. // #29171
  77095. AM=M-1
  77096. // #29172
  77097. D=M
  77098. // #29173
  77099. @ARG
  77100. // #29174
  77101. M=D //ARG = *(--R14)
  77102. // #29175
  77103. @R14
  77104. // #29176
  77105. AM=M-1
  77106. // #29177
  77107. D=M
  77108. // #29178
  77109. @LCL
  77110. // #29179
  77111. M=D //LCL = *(--R14)
  77112. // #29180
  77113. @R15
  77114. // #29181
  77115. A=M
  77116. // #29182
  77117. 0;JMP //goto *R15
  77118. //
  77119. //// function Screen.drawHorizontal 11
  77120. (Screen.drawHorizontal)
  77121. // #29183
  77122. D=0
  77123. //^^ push_d_to_stack
  77124. // #29184
  77125. @SP
  77126. // #29185
  77127. A=M
  77128. // #29186
  77129. M=D
  77130. // #29187
  77131. @SP
  77132. // #29188
  77133. M=M+1
  77134. //vv push_d_to_stack
  77135. // #29189
  77136. D=0
  77137. //^^ push_d_to_stack
  77138. // #29190
  77139. @SP
  77140. // #29191
  77141. A=M
  77142. // #29192
  77143. M=D
  77144. // #29193
  77145. @SP
  77146. // #29194
  77147. M=M+1
  77148. //vv push_d_to_stack
  77149. // #29195
  77150. D=0
  77151. //^^ push_d_to_stack
  77152. // #29196
  77153. @SP
  77154. // #29197
  77155. A=M
  77156. // #29198
  77157. M=D
  77158. // #29199
  77159. @SP
  77160. // #29200
  77161. M=M+1
  77162. //vv push_d_to_stack
  77163. // #29201
  77164. D=0
  77165. //^^ push_d_to_stack
  77166. // #29202
  77167. @SP
  77168. // #29203
  77169. A=M
  77170. // #29204
  77171. M=D
  77172. // #29205
  77173. @SP
  77174. // #29206
  77175. M=M+1
  77176. //vv push_d_to_stack
  77177. // #29207
  77178. D=0
  77179. //^^ push_d_to_stack
  77180. // #29208
  77181. @SP
  77182. // #29209
  77183. A=M
  77184. // #29210
  77185. M=D
  77186. // #29211
  77187. @SP
  77188. // #29212
  77189. M=M+1
  77190. //vv push_d_to_stack
  77191. // #29213
  77192. D=0
  77193. //^^ push_d_to_stack
  77194. // #29214
  77195. @SP
  77196. // #29215
  77197. A=M
  77198. // #29216
  77199. M=D
  77200. // #29217
  77201. @SP
  77202. // #29218
  77203. M=M+1
  77204. //vv push_d_to_stack
  77205. // #29219
  77206. D=0
  77207. //^^ push_d_to_stack
  77208. // #29220
  77209. @SP
  77210. // #29221
  77211. A=M
  77212. // #29222
  77213. M=D
  77214. // #29223
  77215. @SP
  77216. // #29224
  77217. M=M+1
  77218. //vv push_d_to_stack
  77219. // #29225
  77220. D=0
  77221. //^^ push_d_to_stack
  77222. // #29226
  77223. @SP
  77224. // #29227
  77225. A=M
  77226. // #29228
  77227. M=D
  77228. // #29229
  77229. @SP
  77230. // #29230
  77231. M=M+1
  77232. //vv push_d_to_stack
  77233. // #29231
  77234. D=0
  77235. //^^ push_d_to_stack
  77236. // #29232
  77237. @SP
  77238. // #29233
  77239. A=M
  77240. // #29234
  77241. M=D
  77242. // #29235
  77243. @SP
  77244. // #29236
  77245. M=M+1
  77246. //vv push_d_to_stack
  77247. // #29237
  77248. D=0
  77249. //^^ push_d_to_stack
  77250. // #29238
  77251. @SP
  77252. // #29239
  77253. A=M
  77254. // #29240
  77255. M=D
  77256. // #29241
  77257. @SP
  77258. // #29242
  77259. M=M+1
  77260. //vv push_d_to_stack
  77261. // #29243
  77262. D=0
  77263. //^^ push_d_to_stack
  77264. // #29244
  77265. @SP
  77266. // #29245
  77267. A=M
  77268. // #29246
  77269. M=D
  77270. // #29247
  77271. @SP
  77272. // #29248
  77273. M=M+1
  77274. //vv push_d_to_stack
  77275. //
  77276. //// push constant 3
  77277. //^^ push_constant(3)
  77278. // #29249
  77279. @3
  77280. // #29250
  77281. D=A
  77282. //^^ push_d_to_stack
  77283. // #29251
  77284. @SP
  77285. // #29252
  77286. A=M
  77287. // #29253
  77288. M=D
  77289. // #29254
  77290. @SP
  77291. // #29255
  77292. M=M+1
  77293. //vv push_d_to_stack
  77294. //vv push_constant(3)
  77295. //
  77296. //// call Memory.alloc 1
  77297. //^^ push_constant(RET_ADDR_302)
  77298. // #29256
  77299. @RET_ADDR_302
  77300. // #29257
  77301. D=A
  77302. //^^ push_d_to_stack
  77303. // #29258
  77304. @SP
  77305. // #29259
  77306. A=M
  77307. // #29260
  77308. M=D
  77309. // #29261
  77310. @SP
  77311. // #29262
  77312. M=M+1
  77313. //vv push_d_to_stack
  77314. //vv push_constant(RET_ADDR_302)
  77315. //push return-address
  77316. // #29263
  77317. @LCL
  77318. // #29264
  77319. D=M
  77320. //^^ push_d_to_stack
  77321. // #29265
  77322. @SP
  77323. // #29266
  77324. A=M
  77325. // #29267
  77326. M=D
  77327. // #29268
  77328. @SP
  77329. // #29269
  77330. M=M+1
  77331. //vv push_d_to_stack
  77332. //push LCL
  77333. // #29270
  77334. @ARG
  77335. // #29271
  77336. D=M
  77337. //^^ push_d_to_stack
  77338. // #29272
  77339. @SP
  77340. // #29273
  77341. A=M
  77342. // #29274
  77343. M=D
  77344. // #29275
  77345. @SP
  77346. // #29276
  77347. M=M+1
  77348. //vv push_d_to_stack
  77349. //push ARG
  77350. // #29277
  77351. @THIS
  77352. // #29278
  77353. D=M
  77354. //^^ push_d_to_stack
  77355. // #29279
  77356. @SP
  77357. // #29280
  77358. A=M
  77359. // #29281
  77360. M=D
  77361. // #29282
  77362. @SP
  77363. // #29283
  77364. M=M+1
  77365. //vv push_d_to_stack
  77366. //push THIS
  77367. // #29284
  77368. @THAT
  77369. // #29285
  77370. D=M
  77371. //^^ push_d_to_stack
  77372. // #29286
  77373. @SP
  77374. // #29287
  77375. A=M
  77376. // #29288
  77377. M=D
  77378. // #29289
  77379. @SP
  77380. // #29290
  77381. M=M+1
  77382. //vv push_d_to_stack
  77383. //push THAT
  77384. // #29291
  77385. @SP
  77386. // #29292
  77387. D=M
  77388. // #29293
  77389. @ARG
  77390. // #29294
  77391. M=D
  77392. // #29295
  77393. @6
  77394. // #29296
  77395. D=A
  77396. // #29297
  77397. @ARG
  77398. // #29298
  77399. M=M-D // ARG = SP - args - 5
  77400. // #29299
  77401. @SP
  77402. // #29300
  77403. D=M
  77404. // #29301
  77405. @LCL
  77406. // #29302
  77407. M=D // LCL = SP
  77408. // #29303
  77409. @Memory.alloc
  77410. // #29304
  77411. 0;JMP
  77412. (RET_ADDR_302)
  77413. //
  77414. //// pop pointer 0
  77415. //^^ pop_to_loc{3)
  77416. //^^ pop_stack_to_d
  77417. // #29305
  77418. @SP
  77419. // #29306
  77420. M=M-1
  77421. // #29307
  77422. A=M
  77423. // #29308
  77424. D=M
  77425. //vv pop_stack_to_d
  77426. // #29309
  77427. @3
  77428. // #29310
  77429. M=D
  77430. //vv pop_to_loc{3)
  77431. //
  77432. //// push argument 0
  77433. //^^ push_from_ram(ARG, 0)
  77434. // #29311
  77435. @ARG
  77436. // #29312
  77437. D=M
  77438. // #29313
  77439. @0
  77440. // #29314
  77441. A=D+A
  77442. // #29315
  77443. D=M
  77444. //^^ push_d_to_stack
  77445. // #29316
  77446. @SP
  77447. // #29317
  77448. A=M
  77449. // #29318
  77450. M=D
  77451. // #29319
  77452. @SP
  77453. // #29320
  77454. M=M+1
  77455. //vv push_d_to_stack
  77456. //vv push_from_ram(ARG, 0)
  77457. //
  77458. //// pop this 0
  77459. //^^ pop_to_ram(THIS, 0)
  77460. // #29321
  77461. @THIS
  77462. // #29322
  77463. D=M
  77464. // #29323
  77465. @0
  77466. // #29324
  77467. D=D+A
  77468. // #29325
  77469. @R13
  77470. // #29326
  77471. M=D
  77472. //^^ pop_stack_to_d
  77473. // #29327
  77474. @SP
  77475. // #29328
  77476. M=M-1
  77477. // #29329
  77478. A=M
  77479. // #29330
  77480. D=M
  77481. //vv pop_stack_to_d
  77482. // #29331
  77483. @R13
  77484. // #29332
  77485. A=M
  77486. // #29333
  77487. M=D
  77488. // #29334
  77489. @R13
  77490. // #29335
  77491. M=0
  77492. //vv pop_to_ram(THIS, 0)
  77493. //
  77494. //// push argument 1
  77495. //^^ push_from_ram(ARG, 1)
  77496. // #29336
  77497. @ARG
  77498. // #29337
  77499. D=M
  77500. // #29338
  77501. @1
  77502. // #29339
  77503. A=D+A
  77504. // #29340
  77505. D=M
  77506. //^^ push_d_to_stack
  77507. // #29341
  77508. @SP
  77509. // #29342
  77510. A=M
  77511. // #29343
  77512. M=D
  77513. // #29344
  77514. @SP
  77515. // #29345
  77516. M=M+1
  77517. //vv push_d_to_stack
  77518. //vv push_from_ram(ARG, 1)
  77519. //
  77520. //// pop this 1
  77521. //^^ pop_to_ram(THIS, 1)
  77522. // #29346
  77523. @THIS
  77524. // #29347
  77525. D=M
  77526. // #29348
  77527. @1
  77528. // #29349
  77529. D=D+A
  77530. // #29350
  77531. @R13
  77532. // #29351
  77533. M=D
  77534. //^^ pop_stack_to_d
  77535. // #29352
  77536. @SP
  77537. // #29353
  77538. M=M-1
  77539. // #29354
  77540. A=M
  77541. // #29355
  77542. D=M
  77543. //vv pop_stack_to_d
  77544. // #29356
  77545. @R13
  77546. // #29357
  77547. A=M
  77548. // #29358
  77549. M=D
  77550. // #29359
  77551. @R13
  77552. // #29360
  77553. M=0
  77554. //vv pop_to_ram(THIS, 1)
  77555. //
  77556. //// push argument 2
  77557. //^^ push_from_ram(ARG, 2)
  77558. // #29361
  77559. @ARG
  77560. // #29362
  77561. D=M
  77562. // #29363
  77563. @2
  77564. // #29364
  77565. A=D+A
  77566. // #29365
  77567. D=M
  77568. //^^ push_d_to_stack
  77569. // #29366
  77570. @SP
  77571. // #29367
  77572. A=M
  77573. // #29368
  77574. M=D
  77575. // #29369
  77576. @SP
  77577. // #29370
  77578. M=M+1
  77579. //vv push_d_to_stack
  77580. //vv push_from_ram(ARG, 2)
  77581. //
  77582. //// pop this 2
  77583. //^^ pop_to_ram(THIS, 2)
  77584. // #29371
  77585. @THIS
  77586. // #29372
  77587. D=M
  77588. // #29373
  77589. @2
  77590. // #29374
  77591. D=D+A
  77592. // #29375
  77593. @R13
  77594. // #29376
  77595. M=D
  77596. //^^ pop_stack_to_d
  77597. // #29377
  77598. @SP
  77599. // #29378
  77600. M=M-1
  77601. // #29379
  77602. A=M
  77603. // #29380
  77604. D=M
  77605. //vv pop_stack_to_d
  77606. // #29381
  77607. @R13
  77608. // #29382
  77609. A=M
  77610. // #29383
  77611. M=D
  77612. // #29384
  77613. @R13
  77614. // #29385
  77615. M=0
  77616. //vv pop_to_ram(THIS, 2)
  77617. //
  77618. //// push pointer 0
  77619. //^^ push_from_loc(3)
  77620. // #29386
  77621. @3
  77622. // #29387
  77623. D=M
  77624. //^^ push_d_to_stack
  77625. // #29388
  77626. @SP
  77627. // #29389
  77628. A=M
  77629. // #29390
  77630. M=D
  77631. // #29391
  77632. @SP
  77633. // #29392
  77634. M=M+1
  77635. //vv push_d_to_stack
  77636. //vv push_from_loc(3)
  77637. //
  77638. //// call Square.draw 1
  77639. //^^ push_constant(RET_ADDR_303)
  77640. // #29393
  77641. @RET_ADDR_303
  77642. // #29394
  77643. D=A
  77644. //^^ push_d_to_stack
  77645. // #29395
  77646. @SP
  77647. // #29396
  77648. A=M
  77649. // #29397
  77650. M=D
  77651. // #29398
  77652. @SP
  77653. // #29399
  77654. M=M+1
  77655. //vv push_d_to_stack
  77656. //vv push_constant(RET_ADDR_303)
  77657. //push return-address
  77658. // #29400
  77659. @LCL
  77660. // #29401
  77661. D=M
  77662. //^^ push_d_to_stack
  77663. // #29402
  77664. @SP
  77665. // #29403
  77666. A=M
  77667. // #29404
  77668. M=D
  77669. // #29405
  77670. @SP
  77671. // #29406
  77672. M=M+1
  77673. //vv push_d_to_stack
  77674. //push LCL
  77675. // #29407
  77676. @ARG
  77677. // #29408
  77678. D=M
  77679. //^^ push_d_to_stack
  77680. // #29409
  77681. @SP
  77682. // #29410
  77683. A=M
  77684. // #29411
  77685. M=D
  77686. // #29412
  77687. @SP
  77688. // #29413
  77689. M=M+1
  77690. //vv push_d_to_stack
  77691. //push ARG
  77692. // #29414
  77693. @THIS
  77694. // #29415
  77695. D=M
  77696. //^^ push_d_to_stack
  77697. // #29416
  77698. @SP
  77699. // #29417
  77700. A=M
  77701. // #29418
  77702. M=D
  77703. // #29419
  77704. @SP
  77705. // #29420
  77706. M=M+1
  77707. //vv push_d_to_stack
  77708. //push THIS
  77709. // #29421
  77710. @THAT
  77711. // #29422
  77712. D=M
  77713. //^^ push_d_to_stack
  77714. // #29423
  77715. @SP
  77716. // #29424
  77717. A=M
  77718. // #29425
  77719. M=D
  77720. // #29426
  77721. @SP
  77722. // #29427
  77723. M=M+1
  77724. //vv push_d_to_stack
  77725. //push THAT
  77726. // #29428
  77727. @SP
  77728. // #29429
  77729. D=M
  77730. // #29430
  77731. @ARG
  77732. // #29431
  77733. M=D
  77734. // #29432
  77735. @6
  77736. // #29433
  77737. D=A
  77738. // #29434
  77739. @ARG
  77740. // #29435
  77741. M=M-D // ARG = SP - args - 5
  77742. // #29436
  77743. @SP
  77744. // #29437
  77745. D=M
  77746. // #29438
  77747. @LCL
  77748. // #29439
  77749. M=D // LCL = SP
  77750. // #29440
  77751. @Square.draw
  77752. // #29441
  77753. 0;JMP
  77754. (RET_ADDR_303)
  77755. //
  77756. //// pop temp 0
  77757. //^^ pop_to_loc{5)
  77758. //^^ pop_stack_to_d
  77759. // #29442
  77760. @SP
  77761. // #29443
  77762. M=M-1
  77763. // #29444
  77764. A=M
  77765. // #29445
  77766. D=M
  77767. //vv pop_stack_to_d
  77768. // #29446
  77769. @5
  77770. // #29447
  77771. M=D
  77772. //vv pop_to_loc{5)
  77773. //
  77774. //// push pointer 0
  77775. //^^ push_from_loc(3)
  77776. // #29448
  77777. @3
  77778. // #29449
  77779. D=M
  77780. //^^ push_d_to_stack
  77781. // #29450
  77782. @SP
  77783. // #29451
  77784. A=M
  77785. // #29452
  77786. M=D
  77787. // #29453
  77788. @SP
  77789. // #29454
  77790. M=M+1
  77791. //vv push_d_to_stack
  77792. //vv push_from_loc(3)
  77793. //
  77794. //// return
  77795. // #29455
  77796. @LCL
  77797. // #29456
  77798. D=M
  77799. // #29457
  77800. @R14
  77801. // #29458
  77802. M=D //R14=LCL
  77803. // #29459
  77804. @5
  77805. // #29460
  77806. A=D-A
  77807. // #29461
  77808. D=M
  77809. // #29462
  77810. @R15
  77811. // #29463
  77812. M=D //R15=*(LCL-5)
  77813. //^^ pop_stack_to_d
  77814. // #29464
  77815. @SP
  77816. // #29465
  77817. M=M-1
  77818. // #29466
  77819. A=M
  77820. // #29467
  77821. D=M
  77822. //vv pop_stack_to_d
  77823. // #29468
  77824. @ARG
  77825. // #29469
  77826. A=M
  77827. // #29470
  77828. M=D //*ARG = pop()
  77829. // #29471
  77830. @ARG
  77831. // #29472
  77832. D=M
  77833. // #29473
  77834. @SP
  77835. // #29474
  77836. M=D+1 //SP=ARG+1
  77837. // #29475
  77838. @R14
  77839. // #29476
  77840. AM=M-1
  77841. // #29477
  77842. D=M
  77843. // #29478
  77844. @THAT
  77845. // #29479
  77846. M=D //THAT = *(--R14)
  77847. // #29480
  77848. @R14
  77849. // #29481
  77850. AM=M-1
  77851. // #29482
  77852. D=M
  77853. // #29483
  77854. @THIS
  77855. // #29484
  77856. M=D //THIS = *(--R14)
  77857. // #29485
  77858. @R14
  77859. // #29486
  77860. AM=M-1
  77861. // #29487
  77862. D=M
  77863. // #29488
  77864. @ARG
  77865. // #29489
  77866. M=D //ARG = *(--R14)
  77867. // #29490
  77868. @R14
  77869. // #29491
  77870. AM=M-1
  77871. // #29492
  77872. D=M
  77873. // #29493
  77874. @LCL
  77875. // #29494
  77876. M=D //LCL = *(--R14)
  77877. // #29495
  77878. @R15
  77879. // #29496
  77880. A=M
  77881. // #29497
  77882. 0;JMP //goto *R15
  77883. //
  77884. //// function Square.dispose 0
  77885. (Square.dispose)
  77886. //
  77887. //// push argument 0
  77888. //^^ push_from_ram(ARG, 0)
  77889. // #29498
  77890. @ARG
  77891. // #29499
  77892. D=M
  77893. // #29500
  77894. @0
  77895. // #29501
  77896. A=D+A
  77897. // #29502
  77898. D=M
  77899. //^^ push_d_to_stack
  77900. // #29503
  77901. @SP
  77902. // #29504
  77903. A=M
  77904. // #29505
  77905. M=D
  77906. // #29506
  77907. @SP
  77908. // #29507
  77909. M=M+1
  77910. //vv push_d_to_stack
  77911. //vv push_from_ram(ARG, 0)
  77912. //
  77913. //// pop pointer 0
  77914. //^^ pop_to_loc{3)
  77915. //^^ pop_stack_to_d
  77916. // #29508
  77917. @SP
  77918. // #29509
  77919. M=M-1
  77920. // #29510
  77921. A=M
  77922. // #29511
  77923. D=M
  77924. //vv pop_stack_to_d
  77925. // #29512
  77926. @3
  77927. // #29513
  77928. M=D
  77929. //vv pop_to_loc{3)
  77930. //
  77931. //// push pointer 0
  77932. //^^ push_from_loc(3)
  77933. // #29514
  77934. @3
  77935. // #29515
  77936. D=M
  77937. //^^ push_d_to_stack
  77938. // #29516
  77939. @SP
  77940. // #29517
  77941. A=M
  77942. // #29518
  77943. M=D
  77944. // #29519
  77945. @SP
  77946. // #29520
  77947. M=M+1
  77948. //vv push_d_to_stack
  77949. //vv push_from_loc(3)
  77950. //
  77951. //// call Memory.deAlloc 1
  77952. //^^ push_constant(RET_ADDR_304)
  77953. // #29521
  77954. @RET_ADDR_304
  77955. // #29522
  77956. D=A
  77957. //^^ push_d_to_stack
  77958. // #29523
  77959. @SP
  77960. // #29524
  77961. A=M
  77962. // #29525
  77963. M=D
  77964. // #29526
  77965. @SP
  77966. // #29527
  77967. M=M+1
  77968. //vv push_d_to_stack
  77969. //vv push_constant(RET_ADDR_304)
  77970. //push return-address
  77971. // #29528
  77972. @LCL
  77973. // #29529
  77974. D=M
  77975. //^^ push_d_to_stack
  77976. // #29530
  77977. @SP
  77978. // #29531
  77979. A=M
  77980. // #29532
  77981. M=D
  77982. // #29533
  77983. @SP
  77984. // #29534
  77985. M=M+1
  77986. //vv push_d_to_stack
  77987. //push LCL
  77988. // #29535
  77989. @ARG
  77990. // #29536
  77991. D=M
  77992. //^^ push_d_to_stack
  77993. // #29537
  77994. @SP
  77995. // #29538
  77996. A=M
  77997. // #29539
  77998. M=D
  77999. // #29540
  78000. @SP
  78001. // #29541
  78002. M=M+1
  78003. //vv push_d_to_stack
  78004. //push ARG
  78005. // #29542
  78006. @THIS
  78007. // #29543
  78008. D=M
  78009. //^^ push_d_to_stack
  78010. // #29544
  78011. @SP
  78012. // #29545
  78013. A=M
  78014. // #29546
  78015. M=D
  78016. // #29547
  78017. @SP
  78018. // #29548
  78019. M=M+1
  78020. //vv push_d_to_stack
  78021. //push THIS
  78022. // #29549
  78023. @THAT
  78024. // #29550
  78025. D=M
  78026. //^^ push_d_to_stack
  78027. // #29551
  78028. @SP
  78029. // #29552
  78030. A=M
  78031. // #29553
  78032. M=D
  78033. // #29554
  78034. @SP
  78035. // #29555
  78036. M=M+1
  78037. //vv push_d_to_stack
  78038. //push THAT
  78039. // #29556
  78040. @SP
  78041. // #29557
  78042. D=M
  78043. // #29558
  78044. @ARG
  78045. // #29559
  78046. M=D
  78047. // #29560
  78048. @6
  78049. // #29561
  78050. D=A
  78051. // #29562
  78052. @ARG
  78053. // #29563
  78054. M=M-D // ARG = SP - args - 5
  78055. // #29564
  78056. @SP
  78057. // #29565
  78058. D=M
  78059. // #29566
  78060. @LCL
  78061. // #29567
  78062. M=D // LCL = SP
  78063. // #29568
  78064. @Memory.deAlloc
  78065. // #29569
  78066. 0;JMP
  78067. (RET_ADDR_304)
  78068. //
  78069. //// pop temp 0
  78070. //^^ pop_to_loc{5)
  78071. //^^ pop_stack_to_d
  78072. // #29570
  78073. @SP
  78074. // #29571
  78075. M=M-1
  78076. // #29572
  78077. A=M
  78078. // #29573
  78079. D=M
  78080. //vv pop_stack_to_d
  78081. // #29574
  78082. @5
  78083. // #29575
  78084. M=D
  78085. //vv pop_to_loc{5)
  78086. //
  78087. //// push constant 0
  78088. //^^ push_constant(0)
  78089. // #29576
  78090. @0
  78091. // #29577
  78092. D=A
  78093. //^^ push_d_to_stack
  78094. // #29578
  78095. @SP
  78096. // #29579
  78097. A=M
  78098. // #29580
  78099. M=D
  78100. // #29581
  78101. @SP
  78102. // #29582
  78103. M=M+1
  78104. //vv push_d_to_stack
  78105. //vv push_constant(0)
  78106. //
  78107. //// return
  78108. // #29583
  78109. @LCL
  78110. // #29584
  78111. D=M
  78112. // #29585
  78113. @R14
  78114. // #29586
  78115. M=D //R14=LCL
  78116. // #29587
  78117. @5
  78118. // #29588
  78119. A=D-A
  78120. // #29589
  78121. D=M
  78122. // #29590
  78123. @R15
  78124. // #29591
  78125. M=D //R15=*(LCL-5)
  78126. //^^ pop_stack_to_d
  78127. // #29592
  78128. @SP
  78129. // #29593
  78130. M=M-1
  78131. // #29594
  78132. A=M
  78133. // #29595
  78134. D=M
  78135. //vv pop_stack_to_d
  78136. // #29596
  78137. @ARG
  78138. // #29597
  78139. A=M
  78140. // #29598
  78141. M=D //*ARG = pop()
  78142. // #29599
  78143. @ARG
  78144. // #29600
  78145. D=M
  78146. // #29601
  78147. @SP
  78148. // #29602
  78149. M=D+1 //SP=ARG+1
  78150. // #29603
  78151. @R14
  78152. // #29604
  78153. AM=M-1
  78154. // #29605
  78155. D=M
  78156. // #29606
  78157. @THAT
  78158. // #29607
  78159. M=D //THAT = *(--R14)
  78160. // #29608
  78161. @R14
  78162. // #29609
  78163. AM=M-1
  78164. // #29610
  78165. D=M
  78166. // #29611
  78167. @THIS
  78168. // #29612
  78169. M=D //THIS = *(--R14)
  78170. // #29613
  78171. @R14
  78172. // #29614
  78173. AM=M-1
  78174. // #29615
  78175. D=M
  78176. // #29616
  78177. @ARG
  78178. // #29617
  78179. M=D //ARG = *(--R14)
  78180. // #29618
  78181. @R14
  78182. // #29619
  78183. AM=M-1
  78184. // #29620
  78185. D=M
  78186. // #29621
  78187. @LCL
  78188. // #29622
  78189. M=D //LCL = *(--R14)
  78190. // #29623
  78191. @R15
  78192. // #29624
  78193. A=M
  78194. // #29625
  78195. 0;JMP //goto *R15
  78196. //
  78197. //// function Square.draw 0
  78198. (Square.draw)
  78199. //
  78200. //// push argument 0
  78201. //^^ push_from_ram(ARG, 0)
  78202. // #29626
  78203. @ARG
  78204. // #29627
  78205. D=M
  78206. // #29628
  78207. @0
  78208. // #29629
  78209. A=D+A
  78210. // #29630
  78211. D=M
  78212. //^^ push_d_to_stack
  78213. // #29631
  78214. @SP
  78215. // #29632
  78216. A=M
  78217. // #29633
  78218. M=D
  78219. // #29634
  78220. @SP
  78221. // #29635
  78222. M=M+1
  78223. //vv push_d_to_stack
  78224. //vv push_from_ram(ARG, 0)
  78225. //
  78226. //// pop pointer 0
  78227. //^^ pop_to_loc{3)
  78228. //^^ pop_stack_to_d
  78229. // #29636
  78230. @SP
  78231. // #29637
  78232. M=M-1
  78233. // #29638
  78234. A=M
  78235. // #29639
  78236. D=M
  78237. //vv pop_stack_to_d
  78238. // #29640
  78239. @3
  78240. // #29641
  78241. M=D
  78242. //vv pop_to_loc{3)
  78243. //
  78244. //// push constant 0
  78245. //^^ push_constant(0)
  78246. // #29642
  78247. @0
  78248. // #29643
  78249. D=A
  78250. //^^ push_d_to_stack
  78251. // #29644
  78252. @SP
  78253. // #29645
  78254. A=M
  78255. // #29646
  78256. M=D
  78257. // #29647
  78258. @SP
  78259. // #29648
  78260. M=M+1
  78261. //vv push_d_to_stack
  78262. //vv push_constant(0)
  78263. //
  78264. //// not
  78265. //^^ arith_unary_op(!)
  78266. //^^ pop_stack_to_d
  78267. // #29649
  78268. @SP
  78269. // #29650
  78270. M=M-1
  78271. // #29651
  78272. A=M
  78273. // #29652
  78274. D=M
  78275. //vv pop_stack_to_d
  78276. // #29653
  78277. D=!D
  78278. //^^ push_d_to_stack
  78279. // #29654
  78280. @SP
  78281. // #29655
  78282. A=M
  78283. // #29656
  78284. M=D
  78285. // #29657
  78286. @SP
  78287. // #29658
  78288. M=M+1
  78289. //vv push_d_to_stack
  78290. //vv arith_unary_op(!)
  78291. //
  78292. //// call Screen.setColor 1
  78293. //^^ push_constant(RET_ADDR_305)
  78294. // #29659
  78295. @RET_ADDR_305
  78296. // #29660
  78297. D=A
  78298. //^^ push_d_to_stack
  78299. // #29661
  78300. @SP
  78301. // #29662
  78302. A=M
  78303. // #29663
  78304. M=D
  78305. // #29664
  78306. @SP
  78307. // #29665
  78308. M=M+1
  78309. //vv push_d_to_stack
  78310. //vv push_constant(RET_ADDR_305)
  78311. //push return-address
  78312. // #29666
  78313. @LCL
  78314. // #29667
  78315. D=M
  78316. //^^ push_d_to_stack
  78317. // #29668
  78318. @SP
  78319. // #29669
  78320. A=M
  78321. // #29670
  78322. M=D
  78323. // #29671
  78324. @SP
  78325. // #29672
  78326. M=M+1
  78327. //vv push_d_to_stack
  78328. //push LCL
  78329. // #29673
  78330. @ARG
  78331. // #29674
  78332. D=M
  78333. //^^ push_d_to_stack
  78334. // #29675
  78335. @SP
  78336. // #29676
  78337. A=M
  78338. // #29677
  78339. M=D
  78340. // #29678
  78341. @SP
  78342. // #29679
  78343. M=M+1
  78344. //vv push_d_to_stack
  78345. //push ARG
  78346. // #29680
  78347. @THIS
  78348. // #29681
  78349. D=M
  78350. //^^ push_d_to_stack
  78351. // #29682
  78352. @SP
  78353. // #29683
  78354. A=M
  78355. // #29684
  78356. M=D
  78357. // #29685
  78358. @SP
  78359. // #29686
  78360. M=M+1
  78361. //vv push_d_to_stack
  78362. //push THIS
  78363. // #29687
  78364. @THAT
  78365. // #29688
  78366. D=M
  78367. //^^ push_d_to_stack
  78368. // #29689
  78369. @SP
  78370. // #29690
  78371. A=M
  78372. // #29691
  78373. M=D
  78374. // #29692
  78375. @SP
  78376. // #29693
  78377. M=M+1
  78378. //vv push_d_to_stack
  78379. //push THAT
  78380. // #29694
  78381. @SP
  78382. // #29695
  78383. D=M
  78384. // #29696
  78385. @ARG
  78386. // #29697
  78387. M=D
  78388. // #29698
  78389. @6
  78390. // #29699
  78391. D=A
  78392. // #29700
  78393. @ARG
  78394. // #29701
  78395. M=M-D // ARG = SP - args - 5
  78396. // #29702
  78397. @SP
  78398. // #29703
  78399. D=M
  78400. // #29704
  78401. @LCL
  78402. // #29705
  78403. M=D // LCL = SP
  78404. // #29706
  78405. @Screen.setColor
  78406. // #29707
  78407. 0;JMP
  78408. (RET_ADDR_305)
  78409. //
  78410. //// pop temp 0
  78411. //^^ pop_to_loc{5)
  78412. //^^ pop_stack_to_d
  78413. // #29708
  78414. @SP
  78415. // #29709
  78416. M=M-1
  78417. // #29710
  78418. A=M
  78419. // #29711
  78420. D=M
  78421. //vv pop_stack_to_d
  78422. // #29712
  78423. @5
  78424. // #29713
  78425. M=D
  78426. //vv pop_to_loc{5)
  78427. //
  78428. //// push this 0
  78429. //^^ push_from_ram(THIS, 0)
  78430. // #29714
  78431. @THIS
  78432. // #29715
  78433. D=M
  78434. // #29716
  78435. @0
  78436. // #29717
  78437. A=D+A
  78438. // #29718
  78439. D=M
  78440. //^^ push_d_to_stack
  78441. // #29719
  78442. @SP
  78443. // #29720
  78444. A=M
  78445. // #29721
  78446. M=D
  78447. // #29722
  78448. @SP
  78449. // #29723
  78450. M=M+1
  78451. //vv push_d_to_stack
  78452. //vv push_from_ram(THIS, 0)
  78453. //
  78454. //// push this 1
  78455. //^^ push_from_ram(THIS, 1)
  78456. // #29724
  78457. @THIS
  78458. // #29725
  78459. D=M
  78460. // #29726
  78461. @1
  78462. // #29727
  78463. A=D+A
  78464. // #29728
  78465. D=M
  78466. //^^ push_d_to_stack
  78467. // #29729
  78468. @SP
  78469. // #29730
  78470. A=M
  78471. // #29731
  78472. M=D
  78473. // #29732
  78474. @SP
  78475. // #29733
  78476. M=M+1
  78477. //vv push_d_to_stack
  78478. //vv push_from_ram(THIS, 1)
  78479. //
  78480. //// push this 0
  78481. //^^ push_from_ram(THIS, 0)
  78482. // #29734
  78483. @THIS
  78484. // #29735
  78485. D=M
  78486. // #29736
  78487. @0
  78488. // #29737
  78489. A=D+A
  78490. // #29738
  78491. D=M
  78492. //^^ push_d_to_stack
  78493. // #29739
  78494. @SP
  78495. // #29740
  78496. A=M
  78497. // #29741
  78498. M=D
  78499. // #29742
  78500. @SP
  78501. // #29743
  78502. M=M+1
  78503. //vv push_d_to_stack
  78504. //vv push_from_ram(THIS, 0)
  78505. //
  78506. //// push this 2
  78507. //^^ push_from_ram(THIS, 2)
  78508. // #29744
  78509. @THIS
  78510. // #29745
  78511. D=M
  78512. // #29746
  78513. @2
  78514. // #29747
  78515. A=D+A
  78516. // #29748
  78517. D=M
  78518. //^^ push_d_to_stack
  78519. // #29749
  78520. @SP
  78521. // #29750
  78522. A=M
  78523. // #29751
  78524. M=D
  78525. // #29752
  78526. @SP
  78527. // #29753
  78528. M=M+1
  78529. //vv push_d_to_stack
  78530. //vv push_from_ram(THIS, 2)
  78531. //
  78532. //// add
  78533. //^^ arith_binary_op(+)
  78534. //^^ pop_stack_to_d
  78535. // #29754
  78536. @SP
  78537. // #29755
  78538. M=M-1
  78539. // #29756
  78540. A=M
  78541. // #29757
  78542. D=M
  78543. //vv pop_stack_to_d
  78544. //^^ arith_d_with_stack_top(D+M)
  78545. // #29758
  78546. @R13
  78547. // #29759
  78548. M=D
  78549. //^^ pop_stack_to_d
  78550. // #29760
  78551. @SP
  78552. // #29761
  78553. M=M-1
  78554. // #29762
  78555. A=M
  78556. // #29763
  78557. D=M
  78558. //vv pop_stack_to_d
  78559. // #29764
  78560. @R13
  78561. // #29765
  78562. D=D+M
  78563. // #29766
  78564. @R13
  78565. // #29767
  78566. M=0
  78567. //vv arith_d_with_stack_top(D+M)
  78568. //^^ push_d_to_stack
  78569. // #29768
  78570. @SP
  78571. // #29769
  78572. A=M
  78573. // #29770
  78574. M=D
  78575. // #29771
  78576. @SP
  78577. // #29772
  78578. M=M+1
  78579. //vv push_d_to_stack
  78580. //vv arith_binary_op(+)
  78581. //
  78582. //// push this 1
  78583. //^^ push_from_ram(THIS, 1)
  78584. // #29773
  78585. @THIS
  78586. // #29774
  78587. D=M
  78588. // #29775
  78589. @1
  78590. // #29776
  78591. A=D+A
  78592. // #29777
  78593. D=M
  78594. //^^ push_d_to_stack
  78595. // #29778
  78596. @SP
  78597. // #29779
  78598. A=M
  78599. // #29780
  78600. M=D
  78601. // #29781
  78602. @SP
  78603. // #29782
  78604. M=M+1
  78605. //vv push_d_to_stack
  78606. //vv push_from_ram(THIS, 1)
  78607. //
  78608. //// push this 2
  78609. //^^ push_from_ram(THIS, 2)
  78610. // #29783
  78611. @THIS
  78612. // #29784
  78613. D=M
  78614. // #29785
  78615. @2
  78616. // #29786
  78617. A=D+A
  78618. // #29787
  78619. D=M
  78620. //^^ push_d_to_stack
  78621. // #29788
  78622. @SP
  78623. // #29789
  78624. A=M
  78625. // #29790
  78626. M=D
  78627. // #29791
  78628. @SP
  78629. // #29792
  78630. M=M+1
  78631. //vv push_d_to_stack
  78632. //vv push_from_ram(THIS, 2)
  78633. //
  78634. //// add
  78635. //^^ arith_binary_op(+)
  78636. //^^ pop_stack_to_d
  78637. // #29793
  78638. @SP
  78639. // #29794
  78640. M=M-1
  78641. // #29795
  78642. A=M
  78643. // #29796
  78644. D=M
  78645. //vv pop_stack_to_d
  78646. //^^ arith_d_with_stack_top(D+M)
  78647. // #29797
  78648. @R13
  78649. // #29798
  78650. M=D
  78651. //^^ pop_stack_to_d
  78652. // #29799
  78653. @SP
  78654. // #29800
  78655. M=M-1
  78656. // #29801
  78657. A=M
  78658. // #29802
  78659. D=M
  78660. //vv pop_stack_to_d
  78661. // #29803
  78662. @R13
  78663. // #29804
  78664. D=D+M
  78665. // #29805
  78666. @R13
  78667. // #29806
  78668. M=0
  78669. //vv arith_d_with_stack_top(D+M)
  78670. //^^ push_d_to_stack
  78671. // #29807
  78672. @SP
  78673. // #29808
  78674. A=M
  78675. // #29809
  78676. M=D
  78677. // #29810
  78678. @SP
  78679. // #29811
  78680. M=M+1
  78681. //vv push_d_to_stack
  78682. //vv arith_binary_op(+)
  78683. //
  78684. //// call Screen.drawRectangle 4
  78685. //^^ push_constant(RET_ADDR_306)
  78686. // #29812
  78687. @RET_ADDR_306
  78688. // #29813
  78689. D=A
  78690. //^^ push_d_to_stack
  78691. // #29814
  78692. @SP
  78693. // #29815
  78694. A=M
  78695. // #29816
  78696. M=D
  78697. // #29817
  78698. @SP
  78699. // #29818
  78700. M=M+1
  78701. //vv push_d_to_stack
  78702. //vv push_constant(RET_ADDR_306)
  78703. //push return-address
  78704. // #29819
  78705. @LCL
  78706. // #29820
  78707. D=M
  78708. //^^ push_d_to_stack
  78709. // #29821
  78710. @SP
  78711. // #29822
  78712. A=M
  78713. // #29823
  78714. M=D
  78715. // #29824
  78716. @SP
  78717. // #29825
  78718. M=M+1
  78719. //vv push_d_to_stack
  78720. //push LCL
  78721. // #29826
  78722. @ARG
  78723. // #29827
  78724. D=M
  78725. //^^ push_d_to_stack
  78726. // #29828
  78727. @SP
  78728. // #29829
  78729. A=M
  78730. // #29830
  78731. M=D
  78732. // #29831
  78733. @SP
  78734. // #29832
  78735. M=M+1
  78736. //vv push_d_to_stack
  78737. //push ARG
  78738. // #29833
  78739. @THIS
  78740. // #29834
  78741. D=M
  78742. //^^ push_d_to_stack
  78743. // #29835
  78744. @SP
  78745. // #29836
  78746. A=M
  78747. // #29837
  78748. M=D
  78749. // #29838
  78750. @SP
  78751. // #29839
  78752. M=M+1
  78753. //vv push_d_to_stack
  78754. //push THIS
  78755. // #29840
  78756. @THAT
  78757. // #29841
  78758. D=M
  78759. //^^ push_d_to_stack
  78760. // #29842
  78761. @SP
  78762. // #29843
  78763. A=M
  78764. // #29844
  78765. M=D
  78766. // #29845
  78767. @SP
  78768. // #29846
  78769. M=M+1
  78770. //vv push_d_to_stack
  78771. //push THAT
  78772. // #29847
  78773. @SP
  78774. // #29848
  78775. D=M
  78776. // #29849
  78777. @ARG
  78778. // #29850
  78779. M=D
  78780. // #29851
  78781. @9
  78782. // #29852
  78783. D=A
  78784. // #29853
  78785. @ARG
  78786. // #29854
  78787. M=M-D // ARG = SP - args - 5
  78788. // #29855
  78789. @SP
  78790. // #29856
  78791. D=M
  78792. // #29857
  78793. @LCL
  78794. // #29858
  78795. M=D // LCL = SP
  78796. // #29859
  78797. @Screen.drawRectangle
  78798. // #29860
  78799. 0;JMP
  78800. (RET_ADDR_306)
  78801. //
  78802. //// pop temp 0
  78803. //^^ pop_to_loc{5)
  78804. //^^ pop_stack_to_d
  78805. // #29861
  78806. @SP
  78807. // #29862
  78808. M=M-1
  78809. // #29863
  78810. A=M
  78811. // #29864
  78812. D=M
  78813. //vv pop_stack_to_d
  78814. // #29865
  78815. @5
  78816. // #29866
  78817. M=D
  78818. //vv pop_to_loc{5)
  78819. //
  78820. //// push constant 0
  78821. //^^ push_constant(0)
  78822. // #29867
  78823. @0
  78824. // #29868
  78825. D=A
  78826. //^^ push_d_to_stack
  78827. // #29869
  78828. @SP
  78829. // #29870
  78830. A=M
  78831. // #29871
  78832. M=D
  78833. // #29872
  78834. @SP
  78835. // #29873
  78836. M=M+1
  78837. //vv push_d_to_stack
  78838. //vv push_constant(0)
  78839. //
  78840. //// return
  78841. // #29874
  78842. @LCL
  78843. // #29875
  78844. D=M
  78845. // #29876
  78846. @R14
  78847. // #29877
  78848. M=D //R14=LCL
  78849. // #29878
  78850. @5
  78851. // #29879
  78852. A=D-A
  78853. // #29880
  78854. D=M
  78855. // #29881
  78856. @R15
  78857. // #29882
  78858. M=D //R15=*(LCL-5)
  78859. //^^ pop_stack_to_d
  78860. // #29883
  78861. @SP
  78862. // #29884
  78863. M=M-1
  78864. // #29885
  78865. A=M
  78866. // #29886
  78867. D=M
  78868. //vv pop_stack_to_d
  78869. // #29887
  78870. @ARG
  78871. // #29888
  78872. A=M
  78873. // #29889
  78874. M=D //*ARG = pop()
  78875. // #29890
  78876. @ARG
  78877. // #29891
  78878. D=M
  78879. // #29892
  78880. @SP
  78881. // #29893
  78882. M=D+1 //SP=ARG+1
  78883. // #29894
  78884. @R14
  78885. // #29895
  78886. AM=M-1
  78887. // #29896
  78888. D=M
  78889. // #29897
  78890. @THAT
  78891. // #29898
  78892. M=D //THAT = *(--R14)
  78893. // #29899
  78894. @R14
  78895. // #29900
  78896. AM=M-1
  78897. // #29901
  78898. D=M
  78899. // #29902
  78900. @THIS
  78901. // #29903
  78902. M=D //THIS = *(--R14)
  78903. // #29904
  78904. @R14
  78905. // #29905
  78906. AM=M-1
  78907. // #29906
  78908. D=M
  78909. // #29907
  78910. @ARG
  78911. // #29908
  78912. M=D //ARG = *(--R14)
  78913. // #29909
  78914. @R14
  78915. // #29910
  78916. AM=M-1
  78917. // #29911
  78918. D=M
  78919. // #29912
  78920. @LCL
  78921. // #29913
  78922. M=D //LCL = *(--R14)
  78923. // #29914
  78924. @R15
  78925. // #29915
  78926. A=M
  78927. // #29916
  78928. 0;JMP //goto *R15
  78929. //
  78930. //// function Square.erase 0
  78931. (Square.erase)
  78932. //
  78933. //// push argument 0
  78934. //^^ push_from_ram(ARG, 0)
  78935. // #29917
  78936. @ARG
  78937. // #29918
  78938. D=M
  78939. // #29919
  78940. @0
  78941. // #29920
  78942. A=D+A
  78943. // #29921
  78944. D=M
  78945. //^^ push_d_to_stack
  78946. // #29922
  78947. @SP
  78948. // #29923
  78949. A=M
  78950. // #29924
  78951. M=D
  78952. // #29925
  78953. @SP
  78954. // #29926
  78955. M=M+1
  78956. //vv push_d_to_stack
  78957. //vv push_from_ram(ARG, 0)
  78958. //
  78959. //// pop pointer 0
  78960. //^^ pop_to_loc{3)
  78961. //^^ pop_stack_to_d
  78962. // #29927
  78963. @SP
  78964. // #29928
  78965. M=M-1
  78966. // #29929
  78967. A=M
  78968. // #29930
  78969. D=M
  78970. //vv pop_stack_to_d
  78971. // #29931
  78972. @3
  78973. // #29932
  78974. M=D
  78975. //vv pop_to_loc{3)
  78976. //
  78977. //// push constant 0
  78978. //^^ push_constant(0)
  78979. // #29933
  78980. @0
  78981. // #29934
  78982. D=A
  78983. //^^ push_d_to_stack
  78984. // #29935
  78985. @SP
  78986. // #29936
  78987. A=M
  78988. // #29937
  78989. M=D
  78990. // #29938
  78991. @SP
  78992. // #29939
  78993. M=M+1
  78994. //vv push_d_to_stack
  78995. //vv push_constant(0)
  78996. //
  78997. //// call Screen.setColor 1
  78998. //^^ push_constant(RET_ADDR_307)
  78999. // #29940
  79000. @RET_ADDR_307
  79001. // #29941
  79002. D=A
  79003. //^^ push_d_to_stack
  79004. // #29942
  79005. @SP
  79006. // #29943
  79007. A=M
  79008. // #29944
  79009. M=D
  79010. // #29945
  79011. @SP
  79012. // #29946
  79013. M=M+1
  79014. //vv push_d_to_stack
  79015. //vv push_constant(RET_ADDR_307)
  79016. //push return-address
  79017. // #29947
  79018. @LCL
  79019. // #29948
  79020. D=M
  79021. //^^ push_d_to_stack
  79022. // #29949
  79023. @SP
  79024. // #29950
  79025. A=M
  79026. // #29951
  79027. M=D
  79028. // #29952
  79029. @SP
  79030. // #29953
  79031. M=M+1
  79032. //vv push_d_to_stack
  79033. //push LCL
  79034. // #29954
  79035. @ARG
  79036. // #29955
  79037. D=M
  79038. //^^ push_d_to_stack
  79039. // #29956
  79040. @SP
  79041. // #29957
  79042. A=M
  79043. // #29958
  79044. M=D
  79045. // #29959
  79046. @SP
  79047. // #29960
  79048. M=M+1
  79049. //vv push_d_to_stack
  79050. //push ARG
  79051. // #29961
  79052. @THIS
  79053. // #29962
  79054. D=M
  79055. //^^ push_d_to_stack
  79056. // #29963
  79057. @SP
  79058. // #29964
  79059. A=M
  79060. // #29965
  79061. M=D
  79062. // #29966
  79063. @SP
  79064. // #29967
  79065. M=M+1
  79066. //vv push_d_to_stack
  79067. //push THIS
  79068. // #29968
  79069. @THAT
  79070. // #29969
  79071. D=M
  79072. //^^ push_d_to_stack
  79073. // #29970
  79074. @SP
  79075. // #29971
  79076. A=M
  79077. // #29972
  79078. M=D
  79079. // #29973
  79080. @SP
  79081. // #29974
  79082. M=M+1
  79083. //vv push_d_to_stack
  79084. //push THAT
  79085. // #29975
  79086. @SP
  79087. // #29976
  79088. D=M
  79089. // #29977
  79090. @ARG
  79091. // #29978
  79092. M=D
  79093. // #29979
  79094. @6
  79095. // #29980
  79096. D=A
  79097. // #29981
  79098. @ARG
  79099. // #29982
  79100. M=M-D // ARG = SP - args - 5
  79101. // #29983
  79102. @SP
  79103. // #29984
  79104. D=M
  79105. // #29985
  79106. @LCL
  79107. // #29986
  79108. M=D // LCL = SP
  79109. // #29987
  79110. @Screen.setColor
  79111. // #29988
  79112. 0;JMP
  79113. (RET_ADDR_307)
  79114. //
  79115. //// pop temp 0
  79116. //^^ pop_to_loc{5)
  79117. //^^ pop_stack_to_d
  79118. // #29989
  79119. @SP
  79120. // #29990
  79121. M=M-1
  79122. // #29991
  79123. A=M
  79124. // #29992
  79125. D=M
  79126. //vv pop_stack_to_d
  79127. // #29993
  79128. @5
  79129. // #29994
  79130. M=D
  79131. //vv pop_to_loc{5)
  79132. //
  79133. //// push this 0
  79134. //^^ push_from_ram(THIS, 0)
  79135. // #29995
  79136. @THIS
  79137. // #29996
  79138. D=M
  79139. // #29997
  79140. @0
  79141. // #29998
  79142. A=D+A
  79143. // #29999
  79144. D=M
  79145. //^^ push_d_to_stack
  79146. // #30000
  79147. @SP
  79148. // #30001
  79149. A=M
  79150. // #30002
  79151. M=D
  79152. // #30003
  79153. @SP
  79154. // #30004
  79155. M=M+1
  79156. //vv push_d_to_stack
  79157. //vv push_from_ram(THIS, 0)
  79158. //
  79159. //// push this 1
  79160. //^^ push_from_ram(THIS, 1)
  79161. // #30005
  79162. @THIS
  79163. // #30006
  79164. D=M
  79165. // #30007
  79166. @1
  79167. // #30008
  79168. A=D+A
  79169. // #30009
  79170. D=M
  79171. //^^ push_d_to_stack
  79172. // #30010
  79173. @SP
  79174. // #30011
  79175. A=M
  79176. // #30012
  79177. M=D
  79178. // #30013
  79179. @SP
  79180. // #30014
  79181. M=M+1
  79182. //vv push_d_to_stack
  79183. //vv push_from_ram(THIS, 1)
  79184. //
  79185. //// push this 0
  79186. //^^ push_from_ram(THIS, 0)
  79187. // #30015
  79188. @THIS
  79189. // #30016
  79190. D=M
  79191. // #30017
  79192. @0
  79193. // #30018
  79194. A=D+A
  79195. // #30019
  79196. D=M
  79197. //^^ push_d_to_stack
  79198. // #30020
  79199. @SP
  79200. // #30021
  79201. A=M
  79202. // #30022
  79203. M=D
  79204. // #30023
  79205. @SP
  79206. // #30024
  79207. M=M+1
  79208. //vv push_d_to_stack
  79209. //vv push_from_ram(THIS, 0)
  79210. //
  79211. //// push this 2
  79212. //^^ push_from_ram(THIS, 2)
  79213. // #30025
  79214. @THIS
  79215. // #30026
  79216. D=M
  79217. // #30027
  79218. @2
  79219. // #30028
  79220. A=D+A
  79221. // #30029
  79222. D=M
  79223. //^^ push_d_to_stack
  79224. // #30030
  79225. @SP
  79226. // #30031
  79227. A=M
  79228. // #30032
  79229. M=D
  79230. // #30033
  79231. @SP
  79232. // #30034
  79233. M=M+1
  79234. //vv push_d_to_stack
  79235. //vv push_from_ram(THIS, 2)
  79236. //
  79237. //// add
  79238. //^^ arith_binary_op(+)
  79239. //^^ pop_stack_to_d
  79240. // #30035
  79241. @SP
  79242. // #30036
  79243. M=M-1
  79244. // #30037
  79245. A=M
  79246. // #30038
  79247. D=M
  79248. //vv pop_stack_to_d
  79249. //^^ arith_d_with_stack_top(D+M)
  79250. // #30039
  79251. @R13
  79252. // #30040
  79253. M=D
  79254. //^^ pop_stack_to_d
  79255. // #30041
  79256. @SP
  79257. // #30042
  79258. M=M-1
  79259. // #30043
  79260. A=M
  79261. // #30044
  79262. D=M
  79263. //vv pop_stack_to_d
  79264. // #30045
  79265. @R13
  79266. // #30046
  79267. D=D+M
  79268. // #30047
  79269. @R13
  79270. // #30048
  79271. M=0
  79272. //vv arith_d_with_stack_top(D+M)
  79273. //^^ push_d_to_stack
  79274. // #30049
  79275. @SP
  79276. // #30050
  79277. A=M
  79278. // #30051
  79279. M=D
  79280. // #30052
  79281. @SP
  79282. // #30053
  79283. M=M+1
  79284. //vv push_d_to_stack
  79285. //vv arith_binary_op(+)
  79286. //
  79287. //// push this 1
  79288. //^^ push_from_ram(THIS, 1)
  79289. // #30054
  79290. @THIS
  79291. // #30055
  79292. D=M
  79293. // #30056
  79294. @1
  79295. // #30057
  79296. A=D+A
  79297. // #30058
  79298. D=M
  79299. //^^ push_d_to_stack
  79300. // #30059
  79301. @SP
  79302. // #30060
  79303. A=M
  79304. // #30061
  79305. M=D
  79306. // #30062
  79307. @SP
  79308. // #30063
  79309. M=M+1
  79310. //vv push_d_to_stack
  79311. //vv push_from_ram(THIS, 1)
  79312. //
  79313. //// push this 2
  79314. //^^ push_from_ram(THIS, 2)
  79315. // #30064
  79316. @THIS
  79317. // #30065
  79318. D=M
  79319. // #30066
  79320. @2
  79321. // #30067
  79322. A=D+A
  79323. // #30068
  79324. D=M
  79325. //^^ push_d_to_stack
  79326. // #30069
  79327. @SP
  79328. // #30070
  79329. A=M
  79330. // #30071
  79331. M=D
  79332. // #30072
  79333. @SP
  79334. // #30073
  79335. M=M+1
  79336. //vv push_d_to_stack
  79337. //vv push_from_ram(THIS, 2)
  79338. //
  79339. //// add
  79340. //^^ arith_binary_op(+)
  79341. //^^ pop_stack_to_d
  79342. // #30074
  79343. @SP
  79344. // #30075
  79345. M=M-1
  79346. // #30076
  79347. A=M
  79348. // #30077
  79349. D=M
  79350. //vv pop_stack_to_d
  79351. //^^ arith_d_with_stack_top(D+M)
  79352. // #30078
  79353. @R13
  79354. // #30079
  79355. M=D
  79356. //^^ pop_stack_to_d
  79357. // #30080
  79358. @SP
  79359. // #30081
  79360. M=M-1
  79361. // #30082
  79362. A=M
  79363. // #30083
  79364. D=M
  79365. //vv pop_stack_to_d
  79366. // #30084
  79367. @R13
  79368. // #30085
  79369. D=D+M
  79370. // #30086
  79371. @R13
  79372. // #30087
  79373. M=0
  79374. //vv arith_d_with_stack_top(D+M)
  79375. //^^ push_d_to_stack
  79376. // #30088
  79377. @SP
  79378. // #30089
  79379. A=M
  79380. // #30090
  79381. M=D
  79382. // #30091
  79383. @SP
  79384. // #30092
  79385. M=M+1
  79386. //vv push_d_to_stack
  79387. //vv arith_binary_op(+)
  79388. //
  79389. //// call Screen.drawRectangle 4
  79390. //^^ push_constant(RET_ADDR_308)
  79391. // #30093
  79392. @RET_ADDR_308
  79393. // #30094
  79394. D=A
  79395. //^^ push_d_to_stack
  79396. // #30095
  79397. @SP
  79398. // #30096
  79399. A=M
  79400. // #30097
  79401. M=D
  79402. // #30098
  79403. @SP
  79404. // #30099
  79405. M=M+1
  79406. //vv push_d_to_stack
  79407. //vv push_constant(RET_ADDR_308)
  79408. //push return-address
  79409. // #30100
  79410. @LCL
  79411. // #30101
  79412. D=M
  79413. //^^ push_d_to_stack
  79414. // #30102
  79415. @SP
  79416. // #30103
  79417. A=M
  79418. // #30104
  79419. M=D
  79420. // #30105
  79421. @SP
  79422. // #30106
  79423. M=M+1
  79424. //vv push_d_to_stack
  79425. //push LCL
  79426. // #30107
  79427. @ARG
  79428. // #30108
  79429. D=M
  79430. //^^ push_d_to_stack
  79431. // #30109
  79432. @SP
  79433. // #30110
  79434. A=M
  79435. // #30111
  79436. M=D
  79437. // #30112
  79438. @SP
  79439. // #30113
  79440. M=M+1
  79441. //vv push_d_to_stack
  79442. //push ARG
  79443. // #30114
  79444. @THIS
  79445. // #30115
  79446. D=M
  79447. //^^ push_d_to_stack
  79448. // #30116
  79449. @SP
  79450. // #30117
  79451. A=M
  79452. // #30118
  79453. M=D
  79454. // #30119
  79455. @SP
  79456. // #30120
  79457. M=M+1
  79458. //vv push_d_to_stack
  79459. //push THIS
  79460. // #30121
  79461. @THAT
  79462. // #30122
  79463. D=M
  79464. //^^ push_d_to_stack
  79465. // #30123
  79466. @SP
  79467. // #30124
  79468. A=M
  79469. // #30125
  79470. M=D
  79471. // #30126
  79472. @SP
  79473. // #30127
  79474. M=M+1
  79475. //vv push_d_to_stack
  79476. //push THAT
  79477. // #30128
  79478. @SP
  79479. // #30129
  79480. D=M
  79481. // #30130
  79482. @ARG
  79483. // #30131
  79484. M=D
  79485. // #30132
  79486. @9
  79487. // #30133
  79488. D=A
  79489. // #30134
  79490. @ARG
  79491. // #30135
  79492. M=M-D // ARG = SP - args - 5
  79493. // #30136
  79494. @SP
  79495. // #30137
  79496. D=M
  79497. // #30138
  79498. @LCL
  79499. // #30139
  79500. M=D // LCL = SP
  79501. // #30140
  79502. @Screen.drawRectangle
  79503. // #30141
  79504. 0;JMP
  79505. (RET_ADDR_308)
  79506. //
  79507. //// pop temp 0
  79508. //^^ pop_to_loc{5)
  79509. //^^ pop_stack_to_d
  79510. // #30142
  79511. @SP
  79512. // #30143
  79513. M=M-1
  79514. // #30144
  79515. A=M
  79516. // #30145
  79517. D=M
  79518. //vv pop_stack_to_d
  79519. // #30146
  79520. @5
  79521. // #30147
  79522. M=D
  79523. //vv pop_to_loc{5)
  79524. //
  79525. //// push constant 0
  79526. //^^ push_constant(0)
  79527. // #30148
  79528. @0
  79529. // #30149
  79530. D=A
  79531. //^^ push_d_to_stack
  79532. // #30150
  79533. @SP
  79534. // #30151
  79535. A=M
  79536. // #30152
  79537. M=D
  79538. // #30153
  79539. @SP
  79540. // #30154
  79541. M=M+1
  79542. //vv push_d_to_stack
  79543. //vv push_constant(0)
  79544. //
  79545. //// return
  79546. // #30155
  79547. @LCL
  79548. // #30156
  79549. D=M
  79550. // #30157
  79551. @R14
  79552. // #30158
  79553. M=D //R14=LCL
  79554. // #30159
  79555. @5
  79556. // #30160
  79557. A=D-A
  79558. // #30161
  79559. D=M
  79560. // #30162
  79561. @R15
  79562. // #30163
  79563. M=D //R15=*(LCL-5)
  79564. //^^ pop_stack_to_d
  79565. // #30164
  79566. @SP
  79567. // #30165
  79568. M=M-1
  79569. // #30166
  79570. A=M
  79571. // #30167
  79572. D=M
  79573. //vv pop_stack_to_d
  79574. // #30168
  79575. @ARG
  79576. // #30169
  79577. A=M
  79578. // #30170
  79579. M=D //*ARG = pop()
  79580. // #30171
  79581. @ARG
  79582. // #30172
  79583. D=M
  79584. // #30173
  79585. @SP
  79586. // #30174
  79587. M=D+1 //SP=ARG+1
  79588. // #30175
  79589. @R14
  79590. // #30176
  79591. AM=M-1
  79592. // #30177
  79593. D=M
  79594. // #30178
  79595. @THAT
  79596. // #30179
  79597. M=D //THAT = *(--R14)
  79598. // #30180
  79599. @R14
  79600. // #30181
  79601. AM=M-1
  79602. // #30182
  79603. D=M
  79604. // #30183
  79605. @THIS
  79606. // #30184
  79607. M=D //THIS = *(--R14)
  79608. // #30185
  79609. @R14
  79610. // #30186
  79611. AM=M-1
  79612. // #30187
  79613. D=M
  79614. // #30188
  79615. @ARG
  79616. // #30189
  79617. M=D //ARG = *(--R14)
  79618. // #30190
  79619. @R14
  79620. // #30191
  79621. AM=M-1
  79622. // #30192
  79623. D=M
  79624. // #30193
  79625. @LCL
  79626. // #30194
  79627. M=D //LCL = *(--R14)
  79628. // #30195
  79629. @R15
  79630. // #30196
  79631. A=M
  79632. // #30197
  79633. 0;JMP //goto *R15
  79634. //
  79635. //// function Square.incSize 0
  79636. (Square.incSize)
  79637. //
  79638. //// push argument 0
  79639. //^^ push_from_ram(ARG, 0)
  79640. // #30198
  79641. @ARG
  79642. // #30199
  79643. D=M
  79644. // #30200
  79645. @0
  79646. // #30201
  79647. A=D+A
  79648. // #30202
  79649. D=M
  79650. //^^ push_d_to_stack
  79651. // #30203
  79652. @SP
  79653. // #30204
  79654. A=M
  79655. // #30205
  79656. M=D
  79657. // #30206
  79658. @SP
  79659. // #30207
  79660. M=M+1
  79661. //vv push_d_to_stack
  79662. //vv push_from_ram(ARG, 0)
  79663. //
  79664. //// pop pointer 0
  79665. //^^ pop_to_loc{3)
  79666. //^^ pop_stack_to_d
  79667. // #30208
  79668. @SP
  79669. // #30209
  79670. M=M-1
  79671. // #30210
  79672. A=M
  79673. // #30211
  79674. D=M
  79675. //vv pop_stack_to_d
  79676. // #30212
  79677. @3
  79678. // #30213
  79679. M=D
  79680. //vv pop_to_loc{3)
  79681. //
  79682. //// push this 1
  79683. //^^ push_from_ram(THIS, 1)
  79684. // #30214
  79685. @THIS
  79686. // #30215
  79687. D=M
  79688. // #30216
  79689. @1
  79690. // #30217
  79691. A=D+A
  79692. // #30218
  79693. D=M
  79694. //^^ push_d_to_stack
  79695. // #30219
  79696. @SP
  79697. // #30220
  79698. A=M
  79699. // #30221
  79700. M=D
  79701. // #30222
  79702. @SP
  79703. // #30223
  79704. M=M+1
  79705. //vv push_d_to_stack
  79706. //vv push_from_ram(THIS, 1)
  79707. //
  79708. //// push this 2
  79709. //^^ push_from_ram(THIS, 2)
  79710. // #30224
  79711. @THIS
  79712. // #30225
  79713. D=M
  79714. // #30226
  79715. @2
  79716. // #30227
  79717. A=D+A
  79718. // #30228
  79719. D=M
  79720. //^^ push_d_to_stack
  79721. // #30229
  79722. @SP
  79723. // #30230
  79724. A=M
  79725. // #30231
  79726. M=D
  79727. // #30232
  79728. @SP
  79729. // #30233
  79730. M=M+1
  79731. //vv push_d_to_stack
  79732. //vv push_from_ram(THIS, 2)
  79733. //
  79734. //// add
  79735. //^^ arith_binary_op(+)
  79736. //^^ pop_stack_to_d
  79737. // #30234
  79738. @SP
  79739. // #30235
  79740. M=M-1
  79741. // #30236
  79742. A=M
  79743. // #30237
  79744. D=M
  79745. //vv pop_stack_to_d
  79746. //^^ arith_d_with_stack_top(D+M)
  79747. // #30238
  79748. @R13
  79749. // #30239
  79750. M=D
  79751. //^^ pop_stack_to_d
  79752. // #30240
  79753. @SP
  79754. // #30241
  79755. M=M-1
  79756. // #30242
  79757. A=M
  79758. // #30243
  79759. D=M
  79760. //vv pop_stack_to_d
  79761. // #30244
  79762. @R13
  79763. // #30245
  79764. D=D+M
  79765. // #30246
  79766. @R13
  79767. // #30247
  79768. M=0
  79769. //vv arith_d_with_stack_top(D+M)
  79770. //^^ push_d_to_stack
  79771. // #30248
  79772. @SP
  79773. // #30249
  79774. A=M
  79775. // #30250
  79776. M=D
  79777. // #30251
  79778. @SP
  79779. // #30252
  79780. M=M+1
  79781. //vv push_d_to_stack
  79782. //vv arith_binary_op(+)
  79783. //
  79784. //// push constant 254
  79785. //^^ push_constant(254)
  79786. // #30253
  79787. @254
  79788. // #30254
  79789. D=A
  79790. //^^ push_d_to_stack
  79791. // #30255
  79792. @SP
  79793. // #30256
  79794. A=M
  79795. // #30257
  79796. M=D
  79797. // #30258
  79798. @SP
  79799. // #30259
  79800. M=M+1
  79801. //vv push_d_to_stack
  79802. //vv push_constant(254)
  79803. //
  79804. //// lt
  79805. //^^ arith_cmp_op(JLT)
  79806. //^^ pop_stack_to_d
  79807. // #30260
  79808. @SP
  79809. // #30261
  79810. M=M-1
  79811. // #30262
  79812. A=M
  79813. // #30263
  79814. D=M
  79815. //vv pop_stack_to_d
  79816. //^^ arith_d_with_stack_top(D-M)
  79817. // #30264
  79818. @R13
  79819. // #30265
  79820. M=D
  79821. //^^ pop_stack_to_d
  79822. // #30266
  79823. @SP
  79824. // #30267
  79825. M=M-1
  79826. // #30268
  79827. A=M
  79828. // #30269
  79829. D=M
  79830. //vv pop_stack_to_d
  79831. // #30270
  79832. @R13
  79833. // #30271
  79834. D=D-M
  79835. // #30272
  79836. @R13
  79837. // #30273
  79838. M=0
  79839. //vv arith_d_with_stack_top(D-M)
  79840. // #30274
  79841. @PUT_TRUE_309
  79842. // #30275
  79843. D;JLT
  79844. // #30276
  79845. @R13
  79846. // #30277
  79847. M=0
  79848. // #30278
  79849. @CONT_309
  79850. // #30279
  79851. 0;JMP
  79852. (PUT_TRUE_309)
  79853. // #30280
  79854. @R13
  79855. // #30281
  79856. M=-1
  79857. (CONT_309)
  79858. // #30282
  79859. @R13
  79860. // #30283
  79861. D=M
  79862. // #30284
  79863. @R13
  79864. // #30285
  79865. M=0
  79866. //^^ push_d_to_stack
  79867. // #30286
  79868. @SP
  79869. // #30287
  79870. A=M
  79871. // #30288
  79872. M=D
  79873. // #30289
  79874. @SP
  79875. // #30290
  79876. M=M+1
  79877. //vv push_d_to_stack
  79878. //vv arith_cmp_op(JLT)
  79879. //
  79880. //// push this 0
  79881. //^^ push_from_ram(THIS, 0)
  79882. // #30291
  79883. @THIS
  79884. // #30292
  79885. D=M
  79886. // #30293
  79887. @0
  79888. // #30294
  79889. A=D+A
  79890. // #30295
  79891. D=M
  79892. //^^ push_d_to_stack
  79893. // #30296
  79894. @SP
  79895. // #30297
  79896. A=M
  79897. // #30298
  79898. M=D
  79899. // #30299
  79900. @SP
  79901. // #30300
  79902. M=M+1
  79903. //vv push_d_to_stack
  79904. //vv push_from_ram(THIS, 0)
  79905. //
  79906. //// push this 2
  79907. //^^ push_from_ram(THIS, 2)
  79908. // #30301
  79909. @THIS
  79910. // #30302
  79911. D=M
  79912. // #30303
  79913. @2
  79914. // #30304
  79915. A=D+A
  79916. // #30305
  79917. D=M
  79918. //^^ push_d_to_stack
  79919. // #30306
  79920. @SP
  79921. // #30307
  79922. A=M
  79923. // #30308
  79924. M=D
  79925. // #30309
  79926. @SP
  79927. // #30310
  79928. M=M+1
  79929. //vv push_d_to_stack
  79930. //vv push_from_ram(THIS, 2)
  79931. //
  79932. //// add
  79933. //^^ arith_binary_op(+)
  79934. //^^ pop_stack_to_d
  79935. // #30311
  79936. @SP
  79937. // #30312
  79938. M=M-1
  79939. // #30313
  79940. A=M
  79941. // #30314
  79942. D=M
  79943. //vv pop_stack_to_d
  79944. //^^ arith_d_with_stack_top(D+M)
  79945. // #30315
  79946. @R13
  79947. // #30316
  79948. M=D
  79949. //^^ pop_stack_to_d
  79950. // #30317
  79951. @SP
  79952. // #30318
  79953. M=M-1
  79954. // #30319
  79955. A=M
  79956. // #30320
  79957. D=M
  79958. //vv pop_stack_to_d
  79959. // #30321
  79960. @R13
  79961. // #30322
  79962. D=D+M
  79963. // #30323
  79964. @R13
  79965. // #30324
  79966. M=0
  79967. //vv arith_d_with_stack_top(D+M)
  79968. //^^ push_d_to_stack
  79969. // #30325
  79970. @SP
  79971. // #30326
  79972. A=M
  79973. // #30327
  79974. M=D
  79975. // #30328
  79976. @SP
  79977. // #30329
  79978. M=M+1
  79979. //vv push_d_to_stack
  79980. //vv arith_binary_op(+)
  79981. //
  79982. //// push constant 510
  79983. //^^ push_constant(510)
  79984. // #30330
  79985. @510
  79986. // #30331
  79987. D=A
  79988. //^^ push_d_to_stack
  79989. // #30332
  79990. @SP
  79991. // #30333
  79992. A=M
  79993. // #30334
  79994. M=D
  79995. // #30335
  79996. @SP
  79997. // #30336
  79998. M=M+1
  79999. //vv push_d_to_stack
  80000. //vv push_constant(510)
  80001. //
  80002. //// lt
  80003. //^^ arith_cmp_op(JLT)
  80004. //^^ pop_stack_to_d
  80005. // #30337
  80006. @SP
  80007. // #30338
  80008. M=M-1
  80009. // #30339
  80010. A=M
  80011. // #30340
  80012. D=M
  80013. //vv pop_stack_to_d
  80014. //^^ arith_d_with_stack_top(D-M)
  80015. // #30341
  80016. @R13
  80017. // #30342
  80018. M=D
  80019. //^^ pop_stack_to_d
  80020. // #30343
  80021. @SP
  80022. // #30344
  80023. M=M-1
  80024. // #30345
  80025. A=M
  80026. // #30346
  80027. D=M
  80028. //vv pop_stack_to_d
  80029. // #30347
  80030. @R13
  80031. // #30348
  80032. D=D-M
  80033. // #30349
  80034. @R13
  80035. // #30350
  80036. M=0
  80037. //vv arith_d_with_stack_top(D-M)
  80038. // #30351
  80039. @PUT_TRUE_310
  80040. // #30352
  80041. D;JLT
  80042. // #30353
  80043. @R13
  80044. // #30354
  80045. M=0
  80046. // #30355
  80047. @CONT_310
  80048. // #30356
  80049. 0;JMP
  80050. (PUT_TRUE_310)
  80051. // #30357
  80052. @R13
  80053. // #30358
  80054. M=-1
  80055. (CONT_310)
  80056. // #30359
  80057. @R13
  80058. // #30360
  80059. D=M
  80060. // #30361
  80061. @R13
  80062. // #30362
  80063. M=0
  80064. //^^ push_d_to_stack
  80065. // #30363
  80066. @SP
  80067. // #30364
  80068. A=M
  80069. // #30365
  80070. M=D
  80071. // #30366
  80072. @SP
  80073. // #30367
  80074. M=M+1
  80075. //vv push_d_to_stack
  80076. //vv arith_cmp_op(JLT)
  80077. //
  80078. //// and
  80079. //^^ arith_binary_op(&)
  80080. //^^ pop_stack_to_d
  80081. // #30368
  80082. @SP
  80083. // #30369
  80084. M=M-1
  80085. // #30370
  80086. A=M
  80087. // #30371
  80088. D=M
  80089. //vv pop_stack_to_d
  80090. //^^ arith_d_with_stack_top(D&M)
  80091. // #30372
  80092. @R13
  80093. // #30373
  80094. M=D
  80095. //^^ pop_stack_to_d
  80096. // #30374
  80097. @SP
  80098. // #30375
  80099. M=M-1
  80100. // #30376
  80101. A=M
  80102. // #30377
  80103. D=M
  80104. //vv pop_stack_to_d
  80105. // #30378
  80106. @R13
  80107. // #30379
  80108. D=D&M
  80109. // #30380
  80110. @R13
  80111. // #30381
  80112. M=0
  80113. //vv arith_d_with_stack_top(D&M)
  80114. //^^ push_d_to_stack
  80115. // #30382
  80116. @SP
  80117. // #30383
  80118. A=M
  80119. // #30384
  80120. M=D
  80121. // #30385
  80122. @SP
  80123. // #30386
  80124. M=M+1
  80125. //vv push_d_to_stack
  80126. //vv arith_binary_op(&)
  80127. //
  80128. //// if-goto IF_TRUE0
  80129. //^^ pop_stack_to_d
  80130. // #30387
  80131. @SP
  80132. // #30388
  80133. M=M-1
  80134. // #30389
  80135. A=M
  80136. // #30390
  80137. D=M
  80138. //vv pop_stack_to_d
  80139. // #30391
  80140. @Square.incSize$IF_TRUE0
  80141. // #30392
  80142. D;JNE
  80143. //
  80144. //// goto IF_FALSE0
  80145. // #30393
  80146. @Square.incSize$IF_FALSE0
  80147. // #30394
  80148. 0;JMP
  80149. //
  80150. //// label IF_TRUE0
  80151. (Square.incSize$IF_TRUE0)
  80152. //
  80153. //// push pointer 0
  80154. //^^ push_from_loc(3)
  80155. // #30395
  80156. @3
  80157. // #30396
  80158. D=M
  80159. //^^ push_d_to_stack
  80160. // #30397
  80161. @SP
  80162. // #30398
  80163. A=M
  80164. // #30399
  80165. M=D
  80166. // #30400
  80167. @SP
  80168. // #30401
  80169. M=M+1
  80170. //vv push_d_to_stack
  80171. //vv push_from_loc(3)
  80172. //
  80173. //// call Square.erase 1
  80174. //^^ push_constant(RET_ADDR_311)
  80175. // #30402
  80176. @RET_ADDR_311
  80177. // #30403
  80178. D=A
  80179. //^^ push_d_to_stack
  80180. // #30404
  80181. @SP
  80182. // #30405
  80183. A=M
  80184. // #30406
  80185. M=D
  80186. // #30407
  80187. @SP
  80188. // #30408
  80189. M=M+1
  80190. //vv push_d_to_stack
  80191. //vv push_constant(RET_ADDR_311)
  80192. //push return-address
  80193. // #30409
  80194. @LCL
  80195. // #30410
  80196. D=M
  80197. //^^ push_d_to_stack
  80198. // #30411
  80199. @SP
  80200. // #30412
  80201. A=M
  80202. // #30413
  80203. M=D
  80204. // #30414
  80205. @SP
  80206. // #30415
  80207. M=M+1
  80208. //vv push_d_to_stack
  80209. //push LCL
  80210. // #30416
  80211. @ARG
  80212. // #30417
  80213. D=M
  80214. //^^ push_d_to_stack
  80215. // #30418
  80216. @SP
  80217. // #30419
  80218. A=M
  80219. // #30420
  80220. M=D
  80221. // #30421
  80222. @SP
  80223. // #30422
  80224. M=M+1
  80225. //vv push_d_to_stack
  80226. //push ARG
  80227. // #30423
  80228. @THIS
  80229. // #30424
  80230. D=M
  80231. //^^ push_d_to_stack
  80232. // #30425
  80233. @SP
  80234. // #30426
  80235. A=M
  80236. // #30427
  80237. M=D
  80238. // #30428
  80239. @SP
  80240. // #30429
  80241. M=M+1
  80242. //vv push_d_to_stack
  80243. //push THIS
  80244. // #30430
  80245. @THAT
  80246. // #30431
  80247. D=M
  80248. //^^ push_d_to_stack
  80249. // #30432
  80250. @SP
  80251. // #30433
  80252. A=M
  80253. // #30434
  80254. M=D
  80255. // #30435
  80256. @SP
  80257. // #30436
  80258. M=M+1
  80259. //vv push_d_to_stack
  80260. //push THAT
  80261. // #30437
  80262. @SP
  80263. // #30438
  80264. D=M
  80265. // #30439
  80266. @ARG
  80267. // #30440
  80268. M=D
  80269. // #30441
  80270. @6
  80271. // #30442
  80272. D=A
  80273. // #30443
  80274. @ARG
  80275. // #30444
  80276. M=M-D // ARG = SP - args - 5
  80277. // #30445
  80278. @SP
  80279. // #30446
  80280. D=M
  80281. // #30447
  80282. @LCL
  80283. // #30448
  80284. M=D // LCL = SP
  80285. // #30449
  80286. @Square.erase
  80287. // #30450
  80288. 0;JMP
  80289. (RET_ADDR_311)
  80290. //
  80291. //// pop temp 0
  80292. //^^ pop_to_loc{5)
  80293. //^^ pop_stack_to_d
  80294. // #30451
  80295. @SP
  80296. // #30452
  80297. M=M-1
  80298. // #30453
  80299. A=M
  80300. // #30454
  80301. D=M
  80302. //vv pop_stack_to_d
  80303. // #30455
  80304. @5
  80305. // #30456
  80306. M=D
  80307. //vv pop_to_loc{5)
  80308. //
  80309. //// push this 2
  80310. //^^ push_from_ram(THIS, 2)
  80311. // #30457
  80312. @THIS
  80313. // #30458
  80314. D=M
  80315. // #30459
  80316. @2
  80317. // #30460
  80318. A=D+A
  80319. // #30461
  80320. D=M
  80321. //^^ push_d_to_stack
  80322. // #30462
  80323. @SP
  80324. // #30463
  80325. A=M
  80326. // #30464
  80327. M=D
  80328. // #30465
  80329. @SP
  80330. // #30466
  80331. M=M+1
  80332. //vv push_d_to_stack
  80333. //vv push_from_ram(THIS, 2)
  80334. //
  80335. //// push constant 2
  80336. //^^ push_constant(2)
  80337. // #30467
  80338. @2
  80339. // #30468
  80340. D=A
  80341. //^^ push_d_to_stack
  80342. // #30469
  80343. @SP
  80344. // #30470
  80345. A=M
  80346. // #30471
  80347. M=D
  80348. // #30472
  80349. @SP
  80350. // #30473
  80351. M=M+1
  80352. //vv push_d_to_stack
  80353. //vv push_constant(2)
  80354. //
  80355. //// add
  80356. //^^ arith_binary_op(+)
  80357. //^^ pop_stack_to_d
  80358. // #30474
  80359. @SP
  80360. // #30475
  80361. M=M-1
  80362. // #30476
  80363. A=M
  80364. // #30477
  80365. D=M
  80366. //vv pop_stack_to_d
  80367. //^^ arith_d_with_stack_top(D+M)
  80368. // #30478
  80369. @R13
  80370. // #30479
  80371. M=D
  80372. //^^ pop_stack_to_d
  80373. // #30480
  80374. @SP
  80375. // #30481
  80376. M=M-1
  80377. // #30482
  80378. A=M
  80379. // #30483
  80380. D=M
  80381. //vv pop_stack_to_d
  80382. // #30484
  80383. @R13
  80384. // #30485
  80385. D=D+M
  80386. // #30486
  80387. @R13
  80388. // #30487
  80389. M=0
  80390. //vv arith_d_with_stack_top(D+M)
  80391. //^^ push_d_to_stack
  80392. // #30488
  80393. @SP
  80394. // #30489
  80395. A=M
  80396. // #30490
  80397. M=D
  80398. // #30491
  80399. @SP
  80400. // #30492
  80401. M=M+1
  80402. //vv push_d_to_stack
  80403. //vv arith_binary_op(+)
  80404. //
  80405. //// pop this 2
  80406. //^^ pop_to_ram(THIS, 2)
  80407. // #30493
  80408. @THIS
  80409. // #30494
  80410. D=M
  80411. // #30495
  80412. @2
  80413. // #30496
  80414. D=D+A
  80415. // #30497
  80416. @R13
  80417. // #30498
  80418. M=D
  80419. //^^ pop_stack_to_d
  80420. // #30499
  80421. @SP
  80422. // #30500
  80423. M=M-1
  80424. // #30501
  80425. A=M
  80426. // #30502
  80427. D=M
  80428. //vv pop_stack_to_d
  80429. // #30503
  80430. @R13
  80431. // #30504
  80432. A=M
  80433. // #30505
  80434. M=D
  80435. // #30506
  80436. @R13
  80437. // #30507
  80438. M=0
  80439. //vv pop_to_ram(THIS, 2)
  80440. //
  80441. //// push pointer 0
  80442. //^^ push_from_loc(3)
  80443. // #30508
  80444. @3
  80445. // #30509
  80446. D=M
  80447. //^^ push_d_to_stack
  80448. // #30510
  80449. @SP
  80450. // #30511
  80451. A=M
  80452. // #30512
  80453. M=D
  80454. // #30513
  80455. @SP
  80456. // #30514
  80457. M=M+1
  80458. //vv push_d_to_stack
  80459. //vv push_from_loc(3)
  80460. //
  80461. //// call Square.draw 1
  80462. //^^ push_constant(RET_ADDR_312)
  80463. // #30515
  80464. @RET_ADDR_312
  80465. // #30516
  80466. D=A
  80467. //^^ push_d_to_stack
  80468. // #30517
  80469. @SP
  80470. // #30518
  80471. A=M
  80472. // #30519
  80473. M=D
  80474. // #30520
  80475. @SP
  80476. // #30521
  80477. M=M+1
  80478. //vv push_d_to_stack
  80479. //vv push_constant(RET_ADDR_312)
  80480. //push return-address
  80481. // #30522
  80482. @LCL
  80483. // #30523
  80484. D=M
  80485. //^^ push_d_to_stack
  80486. // #30524
  80487. @SP
  80488. // #30525
  80489. A=M
  80490. // #30526
  80491. M=D
  80492. // #30527
  80493. @SP
  80494. // #30528
  80495. M=M+1
  80496. //vv push_d_to_stack
  80497. //push LCL
  80498. // #30529
  80499. @ARG
  80500. // #30530
  80501. D=M
  80502. //^^ push_d_to_stack
  80503. // #30531
  80504. @SP
  80505. // #30532
  80506. A=M
  80507. // #30533
  80508. M=D
  80509. // #30534
  80510. @SP
  80511. // #30535
  80512. M=M+1
  80513. //vv push_d_to_stack
  80514. //push ARG
  80515. // #30536
  80516. @THIS
  80517. // #30537
  80518. D=M
  80519. //^^ push_d_to_stack
  80520. // #30538
  80521. @SP
  80522. // #30539
  80523. A=M
  80524. // #30540
  80525. M=D
  80526. // #30541
  80527. @SP
  80528. // #30542
  80529. M=M+1
  80530. //vv push_d_to_stack
  80531. //push THIS
  80532. // #30543
  80533. @THAT
  80534. // #30544
  80535. D=M
  80536. //^^ push_d_to_stack
  80537. // #30545
  80538. @SP
  80539. // #30546
  80540. A=M
  80541. // #30547
  80542. M=D
  80543. // #30548
  80544. @SP
  80545. // #30549
  80546. M=M+1
  80547. //vv push_d_to_stack
  80548. //push THAT
  80549. // #30550
  80550. @SP
  80551. // #30551
  80552. D=M
  80553. // #30552
  80554. @ARG
  80555. // #30553
  80556. M=D
  80557. // #30554
  80558. @6
  80559. // #30555
  80560. D=A
  80561. // #30556
  80562. @ARG
  80563. // #30557
  80564. M=M-D // ARG = SP - args - 5
  80565. // #30558
  80566. @SP
  80567. // #30559
  80568. D=M
  80569. // #30560
  80570. @LCL
  80571. // #30561
  80572. M=D // LCL = SP
  80573. // #30562
  80574. @Square.draw
  80575. // #30563
  80576. 0;JMP
  80577. (RET_ADDR_312)
  80578. //
  80579. //// pop temp 0
  80580. //^^ pop_to_loc{5)
  80581. //^^ pop_stack_to_d
  80582. // #30564
  80583. @SP
  80584. // #30565
  80585. M=M-1
  80586. // #30566
  80587. A=M
  80588. // #30567
  80589. D=M
  80590. //vv pop_stack_to_d
  80591. // #30568
  80592. @5
  80593. // #30569
  80594. M=D
  80595. //vv pop_to_loc{5)
  80596. //
  80597. //// label IF_FALSE0
  80598. (Square.incSize$IF_FALSE0)
  80599. //
  80600. //// push constant 0
  80601. //^^ push_constant(0)
  80602. // #30570
  80603. @0
  80604. // #30571
  80605. D=A
  80606. //^^ push_d_to_stack
  80607. // #30572
  80608. @SP
  80609. // #30573
  80610. A=M
  80611. // #30574
  80612. M=D
  80613. // #30575
  80614. @SP
  80615. // #30576
  80616. M=M+1
  80617. //vv push_d_to_stack
  80618. //vv push_constant(0)
  80619. //
  80620. //// return
  80621. // #30577
  80622. @LCL
  80623. // #30578
  80624. D=M
  80625. // #30579
  80626. @R14
  80627. // #30580
  80628. M=D //R14=LCL
  80629. // #30581
  80630. @5
  80631. // #30582
  80632. A=D-A
  80633. // #30583
  80634. D=M
  80635. // #30584
  80636. @R15
  80637. // #30585
  80638. M=D //R15=*(LCL-5)
  80639. //^^ pop_stack_to_d
  80640. // #30586
  80641. @SP
  80642. // #30587
  80643. M=M-1
  80644. // #30588
  80645. A=M
  80646. // #30589
  80647. D=M
  80648. //vv pop_stack_to_d
  80649. // #30590
  80650. @ARG
  80651. // #30591
  80652. A=M
  80653. // #30592
  80654. M=D //*ARG = pop()
  80655. // #30593
  80656. @ARG
  80657. // #30594
  80658. D=M
  80659. // #30595
  80660. @SP
  80661. // #30596
  80662. M=D+1 //SP=ARG+1
  80663. // #30597
  80664. @R14
  80665. // #30598
  80666. AM=M-1
  80667. // #30599
  80668. D=M
  80669. // #30600
  80670. @THAT
  80671. // #30601
  80672. M=D //THAT = *(--R14)
  80673. // #30602
  80674. @R14
  80675. // #30603
  80676. AM=M-1
  80677. // #30604
  80678. D=M
  80679. // #30605
  80680. @THIS
  80681. // #30606
  80682. M=D //THIS = *(--R14)
  80683. // #30607
  80684. @R14
  80685. // #30608
  80686. AM=M-1
  80687. // #30609
  80688. D=M
  80689. // #30610
  80690. @ARG
  80691. // #30611
  80692. M=D //ARG = *(--R14)
  80693. // #30612
  80694. @R14
  80695. // #30613
  80696. AM=M-1
  80697. // #30614
  80698. D=M
  80699. // #30615
  80700. @LCL
  80701. // #30616
  80702. M=D //LCL = *(--R14)
  80703. // #30617
  80704. @R15
  80705. // #30618
  80706. A=M
  80707. // #30619
  80708. 0;JMP //goto *R15
  80709. //
  80710. //// function Square.decSize 0
  80711. (Square.decSize)
  80712. //
  80713. //// push argument 0
  80714. //^^ push_from_ram(ARG, 0)
  80715. // #30620
  80716. @ARG
  80717. // #30621
  80718. D=M
  80719. // #30622
  80720. @0
  80721. // #30623
  80722. A=D+A
  80723. // #30624
  80724. D=M
  80725. //^^ push_d_to_stack
  80726. // #30625
  80727. @SP
  80728. // #30626
  80729. A=M
  80730. // #30627
  80731. M=D
  80732. // #30628
  80733. @SP
  80734. // #30629
  80735. M=M+1
  80736. //vv push_d_to_stack
  80737. //vv push_from_ram(ARG, 0)
  80738. //
  80739. //// pop pointer 0
  80740. //^^ pop_to_loc{3)
  80741. //^^ pop_stack_to_d
  80742. // #30630
  80743. @SP
  80744. // #30631
  80745. M=M-1
  80746. // #30632
  80747. A=M
  80748. // #30633
  80749. D=M
  80750. //vv pop_stack_to_d
  80751. // #30634
  80752. @3
  80753. // #30635
  80754. M=D
  80755. //vv pop_to_loc{3)
  80756. //
  80757. //// push this 2
  80758. //^^ push_from_ram(THIS, 2)
  80759. // #30636
  80760. @THIS
  80761. // #30637
  80762. D=M
  80763. // #30638
  80764. @2
  80765. // #30639
  80766. A=D+A
  80767. // #30640
  80768. D=M
  80769. //^^ push_d_to_stack
  80770. // #30641
  80771. @SP
  80772. // #30642
  80773. A=M
  80774. // #30643
  80775. M=D
  80776. // #30644
  80777. @SP
  80778. // #30645
  80779. M=M+1
  80780. //vv push_d_to_stack
  80781. //vv push_from_ram(THIS, 2)
  80782. //
  80783. //// push constant 2
  80784. //^^ push_constant(2)
  80785. // #30646
  80786. @2
  80787. // #30647
  80788. D=A
  80789. //^^ push_d_to_stack
  80790. // #30648
  80791. @SP
  80792. // #30649
  80793. A=M
  80794. // #30650
  80795. M=D
  80796. // #30651
  80797. @SP
  80798. // #30652
  80799. M=M+1
  80800. //vv push_d_to_stack
  80801. //vv push_constant(2)
  80802. //
  80803. //// gt
  80804. //^^ arith_cmp_op(JGT)
  80805. //^^ pop_stack_to_d
  80806. // #30653
  80807. @SP
  80808. // #30654
  80809. M=M-1
  80810. // #30655
  80811. A=M
  80812. // #30656
  80813. D=M
  80814. //vv pop_stack_to_d
  80815. //^^ arith_d_with_stack_top(D-M)
  80816. // #30657
  80817. @R13
  80818. // #30658
  80819. M=D
  80820. //^^ pop_stack_to_d
  80821. // #30659
  80822. @SP
  80823. // #30660
  80824. M=M-1
  80825. // #30661
  80826. A=M
  80827. // #30662
  80828. D=M
  80829. //vv pop_stack_to_d
  80830. // #30663
  80831. @R13
  80832. // #30664
  80833. D=D-M
  80834. // #30665
  80835. @R13
  80836. // #30666
  80837. M=0
  80838. //vv arith_d_with_stack_top(D-M)
  80839. // #30667
  80840. @PUT_TRUE_313
  80841. // #30668
  80842. D;JGT
  80843. // #30669
  80844. @R13
  80845. // #30670
  80846. M=0
  80847. // #30671
  80848. @CONT_313
  80849. // #30672
  80850. 0;JMP
  80851. (PUT_TRUE_313)
  80852. // #30673
  80853. @R13
  80854. // #30674
  80855. M=-1
  80856. (CONT_313)
  80857. // #30675
  80858. @R13
  80859. // #30676
  80860. D=M
  80861. // #30677
  80862. @R13
  80863. // #30678
  80864. M=0
  80865. //^^ push_d_to_stack
  80866. // #30679
  80867. @SP
  80868. // #30680
  80869. A=M
  80870. // #30681
  80871. M=D
  80872. // #30682
  80873. @SP
  80874. // #30683
  80875. M=M+1
  80876. //vv push_d_to_stack
  80877. //vv arith_cmp_op(JGT)
  80878. //
  80879. //// if-goto IF_TRUE0
  80880. //^^ pop_stack_to_d
  80881. // #30684
  80882. @SP
  80883. // #30685
  80884. M=M-1
  80885. // #30686
  80886. A=M
  80887. // #30687
  80888. D=M
  80889. //vv pop_stack_to_d
  80890. // #30688
  80891. @Square.decSize$IF_TRUE0
  80892. // #30689
  80893. D;JNE
  80894. //
  80895. //// goto IF_FALSE0
  80896. // #30690
  80897. @Square.decSize$IF_FALSE0
  80898. // #30691
  80899. 0;JMP
  80900. //
  80901. //// label IF_TRUE0
  80902. (Square.decSize$IF_TRUE0)
  80903. //
  80904. //// push pointer 0
  80905. //^^ push_from_loc(3)
  80906. // #30692
  80907. @3
  80908. // #30693
  80909. D=M
  80910. //^^ push_d_to_stack
  80911. // #30694
  80912. @SP
  80913. // #30695
  80914. A=M
  80915. // #30696
  80916. M=D
  80917. // #30697
  80918. @SP
  80919. // #30698
  80920. M=M+1
  80921. //vv push_d_to_stack
  80922. //vv push_from_loc(3)
  80923. //
  80924. //// call Square.erase 1
  80925. //^^ push_constant(RET_ADDR_314)
  80926. // #30699
  80927. @RET_ADDR_314
  80928. // #30700
  80929. D=A
  80930. //^^ push_d_to_stack
  80931. // #30701
  80932. @SP
  80933. // #30702
  80934. A=M
  80935. // #30703
  80936. M=D
  80937. // #30704
  80938. @SP
  80939. // #30705
  80940. M=M+1
  80941. //vv push_d_to_stack
  80942. //vv push_constant(RET_ADDR_314)
  80943. //push return-address
  80944. // #30706
  80945. @LCL
  80946. // #30707
  80947. D=M
  80948. //^^ push_d_to_stack
  80949. // #30708
  80950. @SP
  80951. // #30709
  80952. A=M
  80953. // #30710
  80954. M=D
  80955. // #30711
  80956. @SP
  80957. // #30712
  80958. M=M+1
  80959. //vv push_d_to_stack
  80960. //push LCL
  80961. // #30713
  80962. @ARG
  80963. // #30714
  80964. D=M
  80965. //^^ push_d_to_stack
  80966. // #30715
  80967. @SP
  80968. // #30716
  80969. A=M
  80970. // #30717
  80971. M=D
  80972. // #30718
  80973. @SP
  80974. // #30719
  80975. M=M+1
  80976. //vv push_d_to_stack
  80977. //push ARG
  80978. // #30720
  80979. @THIS
  80980. // #30721
  80981. D=M
  80982. //^^ push_d_to_stack
  80983. // #30722
  80984. @SP
  80985. // #30723
  80986. A=M
  80987. // #30724
  80988. M=D
  80989. // #30725
  80990. @SP
  80991. // #30726
  80992. M=M+1
  80993. //vv push_d_to_stack
  80994. //push THIS
  80995. // #30727
  80996. @THAT
  80997. // #30728
  80998. D=M
  80999. //^^ push_d_to_stack
  81000. // #30729
  81001. @SP
  81002. // #30730
  81003. A=M
  81004. // #30731
  81005. M=D
  81006. // #30732
  81007. @SP
  81008. // #30733
  81009. M=M+1
  81010. //vv push_d_to_stack
  81011. //push THAT
  81012. // #30734
  81013. @SP
  81014. // #30735
  81015. D=M
  81016. // #30736
  81017. @ARG
  81018. // #30737
  81019. M=D
  81020. // #30738
  81021. @6
  81022. // #30739
  81023. D=A
  81024. // #30740
  81025. @ARG
  81026. // #30741
  81027. M=M-D // ARG = SP - args - 5
  81028. // #30742
  81029. @SP
  81030. // #30743
  81031. D=M
  81032. // #30744
  81033. @LCL
  81034. // #30745
  81035. M=D // LCL = SP
  81036. // #30746
  81037. @Square.erase
  81038. // #30747
  81039. 0;JMP
  81040. (RET_ADDR_314)
  81041. //
  81042. //// pop temp 0
  81043. //^^ pop_to_loc{5)
  81044. //^^ pop_stack_to_d
  81045. // #30748
  81046. @SP
  81047. // #30749
  81048. M=M-1
  81049. // #30750
  81050. A=M
  81051. // #30751
  81052. D=M
  81053. //vv pop_stack_to_d
  81054. // #30752
  81055. @5
  81056. // #30753
  81057. M=D
  81058. //vv pop_to_loc{5)
  81059. //
  81060. //// push this 2
  81061. //^^ push_from_ram(THIS, 2)
  81062. // #30754
  81063. @THIS
  81064. // #30755
  81065. D=M
  81066. // #30756
  81067. @2
  81068. // #30757
  81069. A=D+A
  81070. // #30758
  81071. D=M
  81072. //^^ push_d_to_stack
  81073. // #30759
  81074. @SP
  81075. // #30760
  81076. A=M
  81077. // #30761
  81078. M=D
  81079. // #30762
  81080. @SP
  81081. // #30763
  81082. M=M+1
  81083. //vv push_d_to_stack
  81084. //vv push_from_ram(THIS, 2)
  81085. //
  81086. //// push constant 2
  81087. //^^ push_constant(2)
  81088. // #30764
  81089. @2
  81090. // #30765
  81091. D=A
  81092. //^^ push_d_to_stack
  81093. // #30766
  81094. @SP
  81095. // #30767
  81096. A=M
  81097. // #30768
  81098. M=D
  81099. // #30769
  81100. @SP
  81101. // #30770
  81102. M=M+1
  81103. //vv push_d_to_stack
  81104. //vv push_constant(2)
  81105. //
  81106. //// sub
  81107. //^^ arith_binary_op(-)
  81108. //^^ pop_stack_to_d
  81109. // #30771
  81110. @SP
  81111. // #30772
  81112. M=M-1
  81113. // #30773
  81114. A=M
  81115. // #30774
  81116. D=M
  81117. //vv pop_stack_to_d
  81118. //^^ arith_d_with_stack_top(D-M)
  81119. // #30775
  81120. @R13
  81121. // #30776
  81122. M=D
  81123. //^^ pop_stack_to_d
  81124. // #30777
  81125. @SP
  81126. // #30778
  81127. M=M-1
  81128. // #30779
  81129. A=M
  81130. // #30780
  81131. D=M
  81132. //vv pop_stack_to_d
  81133. // #30781
  81134. @R13
  81135. // #30782
  81136. D=D-M
  81137. // #30783
  81138. @R13
  81139. // #30784
  81140. M=0
  81141. //vv arith_d_with_stack_top(D-M)
  81142. //^^ push_d_to_stack
  81143. // #30785
  81144. @SP
  81145. // #30786
  81146. A=M
  81147. // #30787
  81148. M=D
  81149. // #30788
  81150. @SP
  81151. // #30789
  81152. M=M+1
  81153. //vv push_d_to_stack
  81154. //vv arith_binary_op(-)
  81155. //
  81156. //// pop this 2
  81157. //^^ pop_to_ram(THIS, 2)
  81158. // #30790
  81159. @THIS
  81160. // #30791
  81161. D=M
  81162. // #30792
  81163. @2
  81164. // #30793
  81165. D=D+A
  81166. // #30794
  81167. @R13
  81168. // #30795
  81169. M=D
  81170. //^^ pop_stack_to_d
  81171. // #30796
  81172. @SP
  81173. // #30797
  81174. M=M-1
  81175. // #30798
  81176. A=M
  81177. // #30799
  81178. D=M
  81179. //vv pop_stack_to_d
  81180. // #30800
  81181. @R13
  81182. // #30801
  81183. A=M
  81184. // #30802
  81185. M=D
  81186. // #30803
  81187. @R13
  81188. // #30804
  81189. M=0
  81190. //vv pop_to_ram(THIS, 2)
  81191. //
  81192. //// push pointer 0
  81193. //^^ push_from_loc(3)
  81194. // #30805
  81195. @3
  81196. // #30806
  81197. D=M
  81198. //^^ push_d_to_stack
  81199. // #30807
  81200. @SP
  81201. // #30808
  81202. A=M
  81203. // #30809
  81204. M=D
  81205. // #30810
  81206. @SP
  81207. // #30811
  81208. M=M+1
  81209. //vv push_d_to_stack
  81210. //vv push_from_loc(3)
  81211. //
  81212. //// call Square.draw 1
  81213. //^^ push_constant(RET_ADDR_315)
  81214. // #30812
  81215. @RET_ADDR_315
  81216. // #30813
  81217. D=A
  81218. //^^ push_d_to_stack
  81219. // #30814
  81220. @SP
  81221. // #30815
  81222. A=M
  81223. // #30816
  81224. M=D
  81225. // #30817
  81226. @SP
  81227. // #30818
  81228. M=M+1
  81229. //vv push_d_to_stack
  81230. //vv push_constant(RET_ADDR_315)
  81231. //push return-address
  81232. // #30819
  81233. @LCL
  81234. // #30820
  81235. D=M
  81236. //^^ push_d_to_stack
  81237. // #30821
  81238. @SP
  81239. // #30822
  81240. A=M
  81241. // #30823
  81242. M=D
  81243. // #30824
  81244. @SP
  81245. // #30825
  81246. M=M+1
  81247. //vv push_d_to_stack
  81248. //push LCL
  81249. // #30826
  81250. @ARG
  81251. // #30827
  81252. D=M
  81253. //^^ push_d_to_stack
  81254. // #30828
  81255. @SP
  81256. // #30829
  81257. A=M
  81258. // #30830
  81259. M=D
  81260. // #30831
  81261. @SP
  81262. // #30832
  81263. M=M+1
  81264. //vv push_d_to_stack
  81265. //push ARG
  81266. // #30833
  81267. @THIS
  81268. // #30834
  81269. D=M
  81270. //^^ push_d_to_stack
  81271. // #30835
  81272. @SP
  81273. // #30836
  81274. A=M
  81275. // #30837
  81276. M=D
  81277. // #30838
  81278. @SP
  81279. // #30839
  81280. M=M+1
  81281. //vv push_d_to_stack
  81282. //push THIS
  81283. // #30840
  81284. @THAT
  81285. // #30841
  81286. D=M
  81287. //^^ push_d_to_stack
  81288. // #30842
  81289. @SP
  81290. // #30843
  81291. A=M
  81292. // #30844
  81293. M=D
  81294. // #30845
  81295. @SP
  81296. // #30846
  81297. M=M+1
  81298. //vv push_d_to_stack
  81299. //push THAT
  81300. // #30847
  81301. @SP
  81302. // #30848
  81303. D=M
  81304. // #30849
  81305. @ARG
  81306. // #30850
  81307. M=D
  81308. // #30851
  81309. @6
  81310. // #30852
  81311. D=A
  81312. // #30853
  81313. @ARG
  81314. // #30854
  81315. M=M-D // ARG = SP - args - 5
  81316. // #30855
  81317. @SP
  81318. // #30856
  81319. D=M
  81320. // #30857
  81321. @LCL
  81322. // #30858
  81323. M=D // LCL = SP
  81324. // #30859
  81325. @Square.draw
  81326. // #30860
  81327. 0;JMP
  81328. (RET_ADDR_315)
  81329. //
  81330. //// pop temp 0
  81331. //^^ pop_to_loc{5)
  81332. //^^ pop_stack_to_d
  81333. // #30861
  81334. @SP
  81335. // #30862
  81336. M=M-1
  81337. // #30863
  81338. A=M
  81339. // #30864
  81340. D=M
  81341. //vv pop_stack_to_d
  81342. // #30865
  81343. @5
  81344. // #30866
  81345. M=D
  81346. //vv pop_to_loc{5)
  81347. //
  81348. //// label IF_FALSE0
  81349. (Square.decSize$IF_FALSE0)
  81350. //
  81351. //// push constant 0
  81352. //^^ push_constant(0)
  81353. // #30867
  81354. @0
  81355. // #30868
  81356. D=A
  81357. //^^ push_d_to_stack
  81358. // #30869
  81359. @SP
  81360. // #30870
  81361. A=M
  81362. // #30871
  81363. M=D
  81364. // #30872
  81365. @SP
  81366. // #30873
  81367. M=M+1
  81368. //vv push_d_to_stack
  81369. //vv push_constant(0)
  81370. //
  81371. //// return
  81372. // #30874
  81373. @LCL
  81374. // #30875
  81375. D=M
  81376. // #30876
  81377. @R14
  81378. // #30877
  81379. M=D //R14=LCL
  81380. // #30878
  81381. @5
  81382. // #30879
  81383. A=D-A
  81384. // #30880
  81385. D=M
  81386. // #30881
  81387. @R15
  81388. // #30882
  81389. M=D //R15=*(LCL-5)
  81390. //^^ pop_stack_to_d
  81391. // #30883
  81392. @SP
  81393. // #30884
  81394. M=M-1
  81395. // #30885
  81396. A=M
  81397. // #30886
  81398. D=M
  81399. //vv pop_stack_to_d
  81400. // #30887
  81401. @ARG
  81402. // #30888
  81403. A=M
  81404. // #30889
  81405. M=D //*ARG = pop()
  81406. // #30890
  81407. @ARG
  81408. // #30891
  81409. D=M
  81410. // #30892
  81411. @SP
  81412. // #30893
  81413. M=D+1 //SP=ARG+1
  81414. // #30894
  81415. @R14
  81416. // #30895
  81417. AM=M-1
  81418. // #30896
  81419. D=M
  81420. // #30897
  81421. @THAT
  81422. // #30898
  81423. M=D //THAT = *(--R14)
  81424. // #30899
  81425. @R14
  81426. // #30900
  81427. AM=M-1
  81428. // #30901
  81429. D=M
  81430. // #30902
  81431. @THIS
  81432. // #30903
  81433. M=D //THIS = *(--R14)
  81434. // #30904
  81435. @R14
  81436. // #30905
  81437. AM=M-1
  81438. // #30906
  81439. D=M
  81440. // #30907
  81441. @ARG
  81442. // #30908
  81443. M=D //ARG = *(--R14)
  81444. // #30909
  81445. @R14
  81446. // #30910
  81447. AM=M-1
  81448. // #30911
  81449. D=M
  81450. // #30912
  81451. @LCL
  81452. // #30913
  81453. M=D //LCL = *(--R14)
  81454. // #30914
  81455. @R15
  81456. // #30915
  81457. A=M
  81458. // #30916
  81459. 0;JMP //goto *R15
  81460. //
  81461. //// function Square.moveUp 0
  81462. (Square.moveUp)
  81463. //
  81464. //// push argument 0
  81465. //^^ push_from_ram(ARG, 0)
  81466. // #30917
  81467. @ARG
  81468. // #30918
  81469. D=M
  81470. // #30919
  81471. @0
  81472. // #30920
  81473. A=D+A
  81474. // #30921
  81475. D=M
  81476. //^^ push_d_to_stack
  81477. // #30922
  81478. @SP
  81479. // #30923
  81480. A=M
  81481. // #30924
  81482. M=D
  81483. // #30925
  81484. @SP
  81485. // #30926
  81486. M=M+1
  81487. //vv push_d_to_stack
  81488. //vv push_from_ram(ARG, 0)
  81489. //
  81490. //// pop pointer 0
  81491. //^^ pop_to_loc{3)
  81492. //^^ pop_stack_to_d
  81493. // #30927
  81494. @SP
  81495. // #30928
  81496. M=M-1
  81497. // #30929
  81498. A=M
  81499. // #30930
  81500. D=M
  81501. //vv pop_stack_to_d
  81502. // #30931
  81503. @3
  81504. // #30932
  81505. M=D
  81506. //vv pop_to_loc{3)
  81507. //
  81508. //// push this 1
  81509. //^^ push_from_ram(THIS, 1)
  81510. // #30933
  81511. @THIS
  81512. // #30934
  81513. D=M
  81514. // #30935
  81515. @1
  81516. // #30936
  81517. A=D+A
  81518. // #30937
  81519. D=M
  81520. //^^ push_d_to_stack
  81521. // #30938
  81522. @SP
  81523. // #30939
  81524. A=M
  81525. // #30940
  81526. M=D
  81527. // #30941
  81528. @SP
  81529. // #30942
  81530. M=M+1
  81531. //vv push_d_to_stack
  81532. //vv push_from_ram(THIS, 1)
  81533. //
  81534. //// push constant 1
  81535. //^^ push_constant(1)
  81536. // #30943
  81537. @1
  81538. // #30944
  81539. D=A
  81540. //^^ push_d_to_stack
  81541. // #30945
  81542. @SP
  81543. // #30946
  81544. A=M
  81545. // #30947
  81546. M=D
  81547. // #30948
  81548. @SP
  81549. // #30949
  81550. M=M+1
  81551. //vv push_d_to_stack
  81552. //vv push_constant(1)
  81553. //
  81554. //// gt
  81555. //^^ arith_cmp_op(JGT)
  81556. //^^ pop_stack_to_d
  81557. // #30950
  81558. @SP
  81559. // #30951
  81560. M=M-1
  81561. // #30952
  81562. A=M
  81563. // #30953
  81564. D=M
  81565. //vv pop_stack_to_d
  81566. //^^ arith_d_with_stack_top(D-M)
  81567. // #30954
  81568. @R13
  81569. // #30955
  81570. M=D
  81571. //^^ pop_stack_to_d
  81572. // #30956
  81573. @SP
  81574. // #30957
  81575. M=M-1
  81576. // #30958
  81577. A=M
  81578. // #30959
  81579. D=M
  81580. //vv pop_stack_to_d
  81581. // #30960
  81582. @R13
  81583. // #30961
  81584. D=D-M
  81585. // #30962
  81586. @R13
  81587. // #30963
  81588. M=0
  81589. //vv arith_d_with_stack_top(D-M)
  81590. // #30964
  81591. @PUT_TRUE_316
  81592. // #30965
  81593. D;JGT
  81594. // #30966
  81595. @R13
  81596. // #30967
  81597. M=0
  81598. // #30968
  81599. @CONT_316
  81600. // #30969
  81601. 0;JMP
  81602. (PUT_TRUE_316)
  81603. // #30970
  81604. @R13
  81605. // #30971
  81606. M=-1
  81607. (CONT_316)
  81608. // #30972
  81609. @R13
  81610. // #30973
  81611. D=M
  81612. // #30974
  81613. @R13
  81614. // #30975
  81615. M=0
  81616. //^^ push_d_to_stack
  81617. // #30976
  81618. @SP
  81619. // #30977
  81620. A=M
  81621. // #30978
  81622. M=D
  81623. // #30979
  81624. @SP
  81625. // #30980
  81626. M=M+1
  81627. //vv push_d_to_stack
  81628. //vv arith_cmp_op(JGT)
  81629. //
  81630. //// if-goto IF_TRUE0
  81631. //^^ pop_stack_to_d
  81632. // #30981
  81633. @SP
  81634. // #30982
  81635. M=M-1
  81636. // #30983
  81637. A=M
  81638. // #30984
  81639. D=M
  81640. //vv pop_stack_to_d
  81641. // #30985
  81642. @Square.moveUp$IF_TRUE0
  81643. // #30986
  81644. D;JNE
  81645. //
  81646. //// goto IF_FALSE0
  81647. // #30987
  81648. @Square.moveUp$IF_FALSE0
  81649. // #30988
  81650. 0;JMP
  81651. //
  81652. //// label IF_TRUE0
  81653. (Square.moveUp$IF_TRUE0)
  81654. //
  81655. //// push constant 0
  81656. //^^ push_constant(0)
  81657. // #30989
  81658. @0
  81659. // #30990
  81660. D=A
  81661. //^^ push_d_to_stack
  81662. // #30991
  81663. @SP
  81664. // #30992
  81665. A=M
  81666. // #30993
  81667. M=D
  81668. // #30994
  81669. @SP
  81670. // #30995
  81671. M=M+1
  81672. //vv push_d_to_stack
  81673. //vv push_constant(0)
  81674. //
  81675. //// call Screen.setColor 1
  81676. //^^ push_constant(RET_ADDR_317)
  81677. // #30996
  81678. @RET_ADDR_317
  81679. // #30997
  81680. D=A
  81681. //^^ push_d_to_stack
  81682. // #30998
  81683. @SP
  81684. // #30999
  81685. A=M
  81686. // #31000
  81687. M=D
  81688. // #31001
  81689. @SP
  81690. // #31002
  81691. M=M+1
  81692. //vv push_d_to_stack
  81693. //vv push_constant(RET_ADDR_317)
  81694. //push return-address
  81695. // #31003
  81696. @LCL
  81697. // #31004
  81698. D=M
  81699. //^^ push_d_to_stack
  81700. // #31005
  81701. @SP
  81702. // #31006
  81703. A=M
  81704. // #31007
  81705. M=D
  81706. // #31008
  81707. @SP
  81708. // #31009
  81709. M=M+1
  81710. //vv push_d_to_stack
  81711. //push LCL
  81712. // #31010
  81713. @ARG
  81714. // #31011
  81715. D=M
  81716. //^^ push_d_to_stack
  81717. // #31012
  81718. @SP
  81719. // #31013
  81720. A=M
  81721. // #31014
  81722. M=D
  81723. // #31015
  81724. @SP
  81725. // #31016
  81726. M=M+1
  81727. //vv push_d_to_stack
  81728. //push ARG
  81729. // #31017
  81730. @THIS
  81731. // #31018
  81732. D=M
  81733. //^^ push_d_to_stack
  81734. // #31019
  81735. @SP
  81736. // #31020
  81737. A=M
  81738. // #31021
  81739. M=D
  81740. // #31022
  81741. @SP
  81742. // #31023
  81743. M=M+1
  81744. //vv push_d_to_stack
  81745. //push THIS
  81746. // #31024
  81747. @THAT
  81748. // #31025
  81749. D=M
  81750. //^^ push_d_to_stack
  81751. // #31026
  81752. @SP
  81753. // #31027
  81754. A=M
  81755. // #31028
  81756. M=D
  81757. // #31029
  81758. @SP
  81759. // #31030
  81760. M=M+1
  81761. //vv push_d_to_stack
  81762. //push THAT
  81763. // #31031
  81764. @SP
  81765. // #31032
  81766. D=M
  81767. // #31033
  81768. @ARG
  81769. // #31034
  81770. M=D
  81771. // #31035
  81772. @6
  81773. // #31036
  81774. D=A
  81775. // #31037
  81776. @ARG
  81777. // #31038
  81778. M=M-D // ARG = SP - args - 5
  81779. // #31039
  81780. @SP
  81781. // #31040
  81782. D=M
  81783. // #31041
  81784. @LCL
  81785. // #31042
  81786. M=D // LCL = SP
  81787. // #31043
  81788. @Screen.setColor
  81789. // #31044
  81790. 0;JMP
  81791. (RET_ADDR_317)
  81792. //
  81793. //// pop temp 0
  81794. //^^ pop_to_loc{5)
  81795. //^^ pop_stack_to_d
  81796. // #31045
  81797. @SP
  81798. // #31046
  81799. M=M-1
  81800. // #31047
  81801. A=M
  81802. // #31048
  81803. D=M
  81804. //vv pop_stack_to_d
  81805. // #31049
  81806. @5
  81807. // #31050
  81808. M=D
  81809. //vv pop_to_loc{5)
  81810. //
  81811. //// push this 0
  81812. //^^ push_from_ram(THIS, 0)
  81813. // #31051
  81814. @THIS
  81815. // #31052
  81816. D=M
  81817. // #31053
  81818. @0
  81819. // #31054
  81820. A=D+A
  81821. // #31055
  81822. D=M
  81823. //^^ push_d_to_stack
  81824. // #31056
  81825. @SP
  81826. // #31057
  81827. A=M
  81828. // #31058
  81829. M=D
  81830. // #31059
  81831. @SP
  81832. // #31060
  81833. M=M+1
  81834. //vv push_d_to_stack
  81835. //vv push_from_ram(THIS, 0)
  81836. //
  81837. //// push this 1
  81838. //^^ push_from_ram(THIS, 1)
  81839. // #31061
  81840. @THIS
  81841. // #31062
  81842. D=M
  81843. // #31063
  81844. @1
  81845. // #31064
  81846. A=D+A
  81847. // #31065
  81848. D=M
  81849. //^^ push_d_to_stack
  81850. // #31066
  81851. @SP
  81852. // #31067
  81853. A=M
  81854. // #31068
  81855. M=D
  81856. // #31069
  81857. @SP
  81858. // #31070
  81859. M=M+1
  81860. //vv push_d_to_stack
  81861. //vv push_from_ram(THIS, 1)
  81862. //
  81863. //// push this 2
  81864. //^^ push_from_ram(THIS, 2)
  81865. // #31071
  81866. @THIS
  81867. // #31072
  81868. D=M
  81869. // #31073
  81870. @2
  81871. // #31074
  81872. A=D+A
  81873. // #31075
  81874. D=M
  81875. //^^ push_d_to_stack
  81876. // #31076
  81877. @SP
  81878. // #31077
  81879. A=M
  81880. // #31078
  81881. M=D
  81882. // #31079
  81883. @SP
  81884. // #31080
  81885. M=M+1
  81886. //vv push_d_to_stack
  81887. //vv push_from_ram(THIS, 2)
  81888. //
  81889. //// add
  81890. //^^ arith_binary_op(+)
  81891. //^^ pop_stack_to_d
  81892. // #31081
  81893. @SP
  81894. // #31082
  81895. M=M-1
  81896. // #31083
  81897. A=M
  81898. // #31084
  81899. D=M
  81900. //vv pop_stack_to_d
  81901. //^^ arith_d_with_stack_top(D+M)
  81902. // #31085
  81903. @R13
  81904. // #31086
  81905. M=D
  81906. //^^ pop_stack_to_d
  81907. // #31087
  81908. @SP
  81909. // #31088
  81910. M=M-1
  81911. // #31089
  81912. A=M
  81913. // #31090
  81914. D=M
  81915. //vv pop_stack_to_d
  81916. // #31091
  81917. @R13
  81918. // #31092
  81919. D=D+M
  81920. // #31093
  81921. @R13
  81922. // #31094
  81923. M=0
  81924. //vv arith_d_with_stack_top(D+M)
  81925. //^^ push_d_to_stack
  81926. // #31095
  81927. @SP
  81928. // #31096
  81929. A=M
  81930. // #31097
  81931. M=D
  81932. // #31098
  81933. @SP
  81934. // #31099
  81935. M=M+1
  81936. //vv push_d_to_stack
  81937. //vv arith_binary_op(+)
  81938. //
  81939. //// push constant 1
  81940. //^^ push_constant(1)
  81941. // #31100
  81942. @1
  81943. // #31101
  81944. D=A
  81945. //^^ push_d_to_stack
  81946. // #31102
  81947. @SP
  81948. // #31103
  81949. A=M
  81950. // #31104
  81951. M=D
  81952. // #31105
  81953. @SP
  81954. // #31106
  81955. M=M+1
  81956. //vv push_d_to_stack
  81957. //vv push_constant(1)
  81958. //
  81959. //// sub
  81960. //^^ arith_binary_op(-)
  81961. //^^ pop_stack_to_d
  81962. // #31107
  81963. @SP
  81964. // #31108
  81965. M=M-1
  81966. // #31109
  81967. A=M
  81968. // #31110
  81969. D=M
  81970. //vv pop_stack_to_d
  81971. //^^ arith_d_with_stack_top(D-M)
  81972. // #31111
  81973. @R13
  81974. // #31112
  81975. M=D
  81976. //^^ pop_stack_to_d
  81977. // #31113
  81978. @SP
  81979. // #31114
  81980. M=M-1
  81981. // #31115
  81982. A=M
  81983. // #31116
  81984. D=M
  81985. //vv pop_stack_to_d
  81986. // #31117
  81987. @R13
  81988. // #31118
  81989. D=D-M
  81990. // #31119
  81991. @R13
  81992. // #31120
  81993. M=0
  81994. //vv arith_d_with_stack_top(D-M)
  81995. //^^ push_d_to_stack
  81996. // #31121
  81997. @SP
  81998. // #31122
  81999. A=M
  82000. // #31123
  82001. M=D
  82002. // #31124
  82003. @SP
  82004. // #31125
  82005. M=M+1
  82006. //vv push_d_to_stack
  82007. //vv arith_binary_op(-)
  82008. //
  82009. //// push this 0
  82010. //^^ push_from_ram(THIS, 0)
  82011. // #31126
  82012. @THIS
  82013. // #31127
  82014. D=M
  82015. // #31128
  82016. @0
  82017. // #31129
  82018. A=D+A
  82019. // #31130
  82020. D=M
  82021. //^^ push_d_to_stack
  82022. // #31131
  82023. @SP
  82024. // #31132
  82025. A=M
  82026. // #31133
  82027. M=D
  82028. // #31134
  82029. @SP
  82030. // #31135
  82031. M=M+1
  82032. //vv push_d_to_stack
  82033. //vv push_from_ram(THIS, 0)
  82034. //
  82035. //// push this 2
  82036. //^^ push_from_ram(THIS, 2)
  82037. // #31136
  82038. @THIS
  82039. // #31137
  82040. D=M
  82041. // #31138
  82042. @2
  82043. // #31139
  82044. A=D+A
  82045. // #31140
  82046. D=M
  82047. //^^ push_d_to_stack
  82048. // #31141
  82049. @SP
  82050. // #31142
  82051. A=M
  82052. // #31143
  82053. M=D
  82054. // #31144
  82055. @SP
  82056. // #31145
  82057. M=M+1
  82058. //vv push_d_to_stack
  82059. //vv push_from_ram(THIS, 2)
  82060. //
  82061. //// add
  82062. //^^ arith_binary_op(+)
  82063. //^^ pop_stack_to_d
  82064. // #31146
  82065. @SP
  82066. // #31147
  82067. M=M-1
  82068. // #31148
  82069. A=M
  82070. // #31149
  82071. D=M
  82072. //vv pop_stack_to_d
  82073. //^^ arith_d_with_stack_top(D+M)
  82074. // #31150
  82075. @R13
  82076. // #31151
  82077. M=D
  82078. //^^ pop_stack_to_d
  82079. // #31152
  82080. @SP
  82081. // #31153
  82082. M=M-1
  82083. // #31154
  82084. A=M
  82085. // #31155
  82086. D=M
  82087. //vv pop_stack_to_d
  82088. // #31156
  82089. @R13
  82090. // #31157
  82091. D=D+M
  82092. // #31158
  82093. @R13
  82094. // #31159
  82095. M=0
  82096. //vv arith_d_with_stack_top(D+M)
  82097. //^^ push_d_to_stack
  82098. // #31160
  82099. @SP
  82100. // #31161
  82101. A=M
  82102. // #31162
  82103. M=D
  82104. // #31163
  82105. @SP
  82106. // #31164
  82107. M=M+1
  82108. //vv push_d_to_stack
  82109. //vv arith_binary_op(+)
  82110. //
  82111. //// push this 1
  82112. //^^ push_from_ram(THIS, 1)
  82113. // #31165
  82114. @THIS
  82115. // #31166
  82116. D=M
  82117. // #31167
  82118. @1
  82119. // #31168
  82120. A=D+A
  82121. // #31169
  82122. D=M
  82123. //^^ push_d_to_stack
  82124. // #31170
  82125. @SP
  82126. // #31171
  82127. A=M
  82128. // #31172
  82129. M=D
  82130. // #31173
  82131. @SP
  82132. // #31174
  82133. M=M+1
  82134. //vv push_d_to_stack
  82135. //vv push_from_ram(THIS, 1)
  82136. //
  82137. //// push this 2
  82138. //^^ push_from_ram(THIS, 2)
  82139. // #31175
  82140. @THIS
  82141. // #31176
  82142. D=M
  82143. // #31177
  82144. @2
  82145. // #31178
  82146. A=D+A
  82147. // #31179
  82148. D=M
  82149. //^^ push_d_to_stack
  82150. // #31180
  82151. @SP
  82152. // #31181
  82153. A=M
  82154. // #31182
  82155. M=D
  82156. // #31183
  82157. @SP
  82158. // #31184
  82159. M=M+1
  82160. //vv push_d_to_stack
  82161. //vv push_from_ram(THIS, 2)
  82162. //
  82163. //// add
  82164. //^^ arith_binary_op(+)
  82165. //^^ pop_stack_to_d
  82166. // #31185
  82167. @SP
  82168. // #31186
  82169. M=M-1
  82170. // #31187
  82171. A=M
  82172. // #31188
  82173. D=M
  82174. //vv pop_stack_to_d
  82175. //^^ arith_d_with_stack_top(D+M)
  82176. // #31189
  82177. @R13
  82178. // #31190
  82179. M=D
  82180. //^^ pop_stack_to_d
  82181. // #31191
  82182. @SP
  82183. // #31192
  82184. M=M-1
  82185. // #31193
  82186. A=M
  82187. // #31194
  82188. D=M
  82189. //vv pop_stack_to_d
  82190. // #31195
  82191. @R13
  82192. // #31196
  82193. D=D+M
  82194. // #31197
  82195. @R13
  82196. // #31198
  82197. M=0
  82198. //vv arith_d_with_stack_top(D+M)
  82199. //^^ push_d_to_stack
  82200. // #31199
  82201. @SP
  82202. // #31200
  82203. A=M
  82204. // #31201
  82205. M=D
  82206. // #31202
  82207. @SP
  82208. // #31203
  82209. M=M+1
  82210. //vv push_d_to_stack
  82211. //vv arith_binary_op(+)
  82212. //
  82213. //// call Screen.drawRectangle 4
  82214. //^^ push_constant(RET_ADDR_318)
  82215. // #31204
  82216. @RET_ADDR_318
  82217. // #31205
  82218. D=A
  82219. //^^ push_d_to_stack
  82220. // #31206
  82221. @SP
  82222. // #31207
  82223. A=M
  82224. // #31208
  82225. M=D
  82226. // #31209
  82227. @SP
  82228. // #31210
  82229. M=M+1
  82230. //vv push_d_to_stack
  82231. //vv push_constant(RET_ADDR_318)
  82232. //push return-address
  82233. // #31211
  82234. @LCL
  82235. // #31212
  82236. D=M
  82237. //^^ push_d_to_stack
  82238. // #31213
  82239. @SP
  82240. // #31214
  82241. A=M
  82242. // #31215
  82243. M=D
  82244. // #31216
  82245. @SP
  82246. // #31217
  82247. M=M+1
  82248. //vv push_d_to_stack
  82249. //push LCL
  82250. // #31218
  82251. @ARG
  82252. // #31219
  82253. D=M
  82254. //^^ push_d_to_stack
  82255. // #31220
  82256. @SP
  82257. // #31221
  82258. A=M
  82259. // #31222
  82260. M=D
  82261. // #31223
  82262. @SP
  82263. // #31224
  82264. M=M+1
  82265. //vv push_d_to_stack
  82266. //push ARG
  82267. // #31225
  82268. @THIS
  82269. // #31226
  82270. D=M
  82271. //^^ push_d_to_stack
  82272. // #31227
  82273. @SP
  82274. // #31228
  82275. A=M
  82276. // #31229
  82277. M=D
  82278. // #31230
  82279. @SP
  82280. // #31231
  82281. M=M+1
  82282. //vv push_d_to_stack
  82283. //push THIS
  82284. // #31232
  82285. @THAT
  82286. // #31233
  82287. D=M
  82288. //^^ push_d_to_stack
  82289. // #31234
  82290. @SP
  82291. // #31235
  82292. A=M
  82293. // #31236
  82294. M=D
  82295. // #31237
  82296. @SP
  82297. // #31238
  82298. M=M+1
  82299. //vv push_d_to_stack
  82300. //push THAT
  82301. // #31239
  82302. @SP
  82303. // #31240
  82304. D=M
  82305. // #31241
  82306. @ARG
  82307. // #31242
  82308. M=D
  82309. // #31243
  82310. @9
  82311. // #31244
  82312. D=A
  82313. // #31245
  82314. @ARG
  82315. // #31246
  82316. M=M-D // ARG = SP - args - 5
  82317. // #31247
  82318. @SP
  82319. // #31248
  82320. D=M
  82321. // #31249
  82322. @LCL
  82323. // #31250
  82324. M=D // LCL = SP
  82325. // #31251
  82326. @Screen.drawRectangle
  82327. // #31252
  82328. 0;JMP
  82329. (RET_ADDR_318)
  82330. //
  82331. //// pop temp 0
  82332. //^^ pop_to_loc{5)
  82333. //^^ pop_stack_to_d
  82334. // #31253
  82335. @SP
  82336. // #31254
  82337. M=M-1
  82338. // #31255
  82339. A=M
  82340. // #31256
  82341. D=M
  82342. //vv pop_stack_to_d
  82343. // #31257
  82344. @5
  82345. // #31258
  82346. M=D
  82347. //vv pop_to_loc{5)
  82348. //
  82349. //// push this 1
  82350. //^^ push_from_ram(THIS, 1)
  82351. // #31259
  82352. @THIS
  82353. // #31260
  82354. D=M
  82355. // #31261
  82356. @1
  82357. // #31262
  82358. A=D+A
  82359. // #31263
  82360. D=M
  82361. //^^ push_d_to_stack
  82362. // #31264
  82363. @SP
  82364. // #31265
  82365. A=M
  82366. // #31266
  82367. M=D
  82368. // #31267
  82369. @SP
  82370. // #31268
  82371. M=M+1
  82372. //vv push_d_to_stack
  82373. //vv push_from_ram(THIS, 1)
  82374. //
  82375. //// push constant 2
  82376. //^^ push_constant(2)
  82377. // #31269
  82378. @2
  82379. // #31270
  82380. D=A
  82381. //^^ push_d_to_stack
  82382. // #31271
  82383. @SP
  82384. // #31272
  82385. A=M
  82386. // #31273
  82387. M=D
  82388. // #31274
  82389. @SP
  82390. // #31275
  82391. M=M+1
  82392. //vv push_d_to_stack
  82393. //vv push_constant(2)
  82394. //
  82395. //// sub
  82396. //^^ arith_binary_op(-)
  82397. //^^ pop_stack_to_d
  82398. // #31276
  82399. @SP
  82400. // #31277
  82401. M=M-1
  82402. // #31278
  82403. A=M
  82404. // #31279
  82405. D=M
  82406. //vv pop_stack_to_d
  82407. //^^ arith_d_with_stack_top(D-M)
  82408. // #31280
  82409. @R13
  82410. // #31281
  82411. M=D
  82412. //^^ pop_stack_to_d
  82413. // #31282
  82414. @SP
  82415. // #31283
  82416. M=M-1
  82417. // #31284
  82418. A=M
  82419. // #31285
  82420. D=M
  82421. //vv pop_stack_to_d
  82422. // #31286
  82423. @R13
  82424. // #31287
  82425. D=D-M
  82426. // #31288
  82427. @R13
  82428. // #31289
  82429. M=0
  82430. //vv arith_d_with_stack_top(D-M)
  82431. //^^ push_d_to_stack
  82432. // #31290
  82433. @SP
  82434. // #31291
  82435. A=M
  82436. // #31292
  82437. M=D
  82438. // #31293
  82439. @SP
  82440. // #31294
  82441. M=M+1
  82442. //vv push_d_to_stack
  82443. //vv arith_binary_op(-)
  82444. //
  82445. //// pop this 1
  82446. //^^ pop_to_ram(THIS, 1)
  82447. // #31295
  82448. @THIS
  82449. // #31296
  82450. D=M
  82451. // #31297
  82452. @1
  82453. // #31298
  82454. D=D+A
  82455. // #31299
  82456. @R13
  82457. // #31300
  82458. M=D
  82459. //^^ pop_stack_to_d
  82460. // #31301
  82461. @SP
  82462. // #31302
  82463. M=M-1
  82464. // #31303
  82465. A=M
  82466. // #31304
  82467. D=M
  82468. //vv pop_stack_to_d
  82469. // #31305
  82470. @R13
  82471. // #31306
  82472. A=M
  82473. // #31307
  82474. M=D
  82475. // #31308
  82476. @R13
  82477. // #31309
  82478. M=0
  82479. //vv pop_to_ram(THIS, 1)
  82480. //
  82481. //// push constant 0
  82482. //^^ push_constant(0)
  82483. // #31310
  82484. @0
  82485. // #31311
  82486. D=A
  82487. //^^ push_d_to_stack
  82488. // #31312
  82489. @SP
  82490. // #31313
  82491. A=M
  82492. // #31314
  82493. M=D
  82494. // #31315
  82495. @SP
  82496. // #31316
  82497. M=M+1
  82498. //vv push_d_to_stack
  82499. //vv push_constant(0)
  82500. //
  82501. //// not
  82502. //^^ arith_unary_op(!)
  82503. //^^ pop_stack_to_d
  82504. // #31317
  82505. @SP
  82506. // #31318
  82507. M=M-1
  82508. // #31319
  82509. A=M
  82510. // #31320
  82511. D=M
  82512. //vv pop_stack_to_d
  82513. // #31321
  82514. D=!D
  82515. //^^ push_d_to_stack
  82516. // #31322
  82517. @SP
  82518. // #31323
  82519. A=M
  82520. // #31324
  82521. M=D
  82522. // #31325
  82523. @SP
  82524. // #31326
  82525. M=M+1
  82526. //vv push_d_to_stack
  82527. //vv arith_unary_op(!)
  82528. //
  82529. //// call Screen.setColor 1
  82530. //^^ push_constant(RET_ADDR_319)
  82531. // #31327
  82532. @RET_ADDR_319
  82533. // #31328
  82534. D=A
  82535. //^^ push_d_to_stack
  82536. // #31329
  82537. @SP
  82538. // #31330
  82539. A=M
  82540. // #31331
  82541. M=D
  82542. // #31332
  82543. @SP
  82544. // #31333
  82545. M=M+1
  82546. //vv push_d_to_stack
  82547. //vv push_constant(RET_ADDR_319)
  82548. //push return-address
  82549. // #31334
  82550. @LCL
  82551. // #31335
  82552. D=M
  82553. //^^ push_d_to_stack
  82554. // #31336
  82555. @SP
  82556. // #31337
  82557. A=M
  82558. // #31338
  82559. M=D
  82560. // #31339
  82561. @SP
  82562. // #31340
  82563. M=M+1
  82564. //vv push_d_to_stack
  82565. //push LCL
  82566. // #31341
  82567. @ARG
  82568. // #31342
  82569. D=M
  82570. //^^ push_d_to_stack
  82571. // #31343
  82572. @SP
  82573. // #31344
  82574. A=M
  82575. // #31345
  82576. M=D
  82577. // #31346
  82578. @SP
  82579. // #31347
  82580. M=M+1
  82581. //vv push_d_to_stack
  82582. //push ARG
  82583. // #31348
  82584. @THIS
  82585. // #31349
  82586. D=M
  82587. //^^ push_d_to_stack
  82588. // #31350
  82589. @SP
  82590. // #31351
  82591. A=M
  82592. // #31352
  82593. M=D
  82594. // #31353
  82595. @SP
  82596. // #31354
  82597. M=M+1
  82598. //vv push_d_to_stack
  82599. //push THIS
  82600. // #31355
  82601. @THAT
  82602. // #31356
  82603. D=M
  82604. //^^ push_d_to_stack
  82605. // #31357
  82606. @SP
  82607. // #31358
  82608. A=M
  82609. // #31359
  82610. M=D
  82611. // #31360
  82612. @SP
  82613. // #31361
  82614. M=M+1
  82615. //vv push_d_to_stack
  82616. //push THAT
  82617. // #31362
  82618. @SP
  82619. // #31363
  82620. D=M
  82621. // #31364
  82622. @ARG
  82623. // #31365
  82624. M=D
  82625. // #31366
  82626. @6
  82627. // #31367
  82628. D=A
  82629. // #31368
  82630. @ARG
  82631. // #31369
  82632. M=M-D // ARG = SP - args - 5
  82633. // #31370
  82634. @SP
  82635. // #31371
  82636. D=M
  82637. // #31372
  82638. @LCL
  82639. // #31373
  82640. M=D // LCL = SP
  82641. // #31374
  82642. @Screen.setColor
  82643. // #31375
  82644. 0;JMP
  82645. (RET_ADDR_319)
  82646. //
  82647. //// pop temp 0
  82648. //^^ pop_to_loc{5)
  82649. //^^ pop_stack_to_d
  82650. // #31376
  82651. @SP
  82652. // #31377
  82653. M=M-1
  82654. // #31378
  82655. A=M
  82656. // #31379
  82657. D=M
  82658. //vv pop_stack_to_d
  82659. // #31380
  82660. @5
  82661. // #31381
  82662. M=D
  82663. //vv pop_to_loc{5)
  82664. //
  82665. //// push this 0
  82666. //^^ push_from_ram(THIS, 0)
  82667. // #31382
  82668. @THIS
  82669. // #31383
  82670. D=M
  82671. // #31384
  82672. @0
  82673. // #31385
  82674. A=D+A
  82675. // #31386
  82676. D=M
  82677. //^^ push_d_to_stack
  82678. // #31387
  82679. @SP
  82680. // #31388
  82681. A=M
  82682. // #31389
  82683. M=D
  82684. // #31390
  82685. @SP
  82686. // #31391
  82687. M=M+1
  82688. //vv push_d_to_stack
  82689. //vv push_from_ram(THIS, 0)
  82690. //
  82691. //// push this 1
  82692. //^^ push_from_ram(THIS, 1)
  82693. // #31392
  82694. @THIS
  82695. // #31393
  82696. D=M
  82697. // #31394
  82698. @1
  82699. // #31395
  82700. A=D+A
  82701. // #31396
  82702. D=M
  82703. //^^ push_d_to_stack
  82704. // #31397
  82705. @SP
  82706. // #31398
  82707. A=M
  82708. // #31399
  82709. M=D
  82710. // #31400
  82711. @SP
  82712. // #31401
  82713. M=M+1
  82714. //vv push_d_to_stack
  82715. //vv push_from_ram(THIS, 1)
  82716. //
  82717. //// push this 0
  82718. //^^ push_from_ram(THIS, 0)
  82719. // #31402
  82720. @THIS
  82721. // #31403
  82722. D=M
  82723. // #31404
  82724. @0
  82725. // #31405
  82726. A=D+A
  82727. // #31406
  82728. D=M
  82729. //^^ push_d_to_stack
  82730. // #31407
  82731. @SP
  82732. // #31408
  82733. A=M
  82734. // #31409
  82735. M=D
  82736. // #31410
  82737. @SP
  82738. // #31411
  82739. M=M+1
  82740. //vv push_d_to_stack
  82741. //vv push_from_ram(THIS, 0)
  82742. //
  82743. //// push this 2
  82744. //^^ push_from_ram(THIS, 2)
  82745. // #31412
  82746. @THIS
  82747. // #31413
  82748. D=M
  82749. // #31414
  82750. @2
  82751. // #31415
  82752. A=D+A
  82753. // #31416
  82754. D=M
  82755. //^^ push_d_to_stack
  82756. // #31417
  82757. @SP
  82758. // #31418
  82759. A=M
  82760. // #31419
  82761. M=D
  82762. // #31420
  82763. @SP
  82764. // #31421
  82765. M=M+1
  82766. //vv push_d_to_stack
  82767. //vv push_from_ram(THIS, 2)
  82768. //
  82769. //// add
  82770. //^^ arith_binary_op(+)
  82771. //^^ pop_stack_to_d
  82772. // #31422
  82773. @SP
  82774. // #31423
  82775. M=M-1
  82776. // #31424
  82777. A=M
  82778. // #31425
  82779. D=M
  82780. //vv pop_stack_to_d
  82781. //^^ arith_d_with_stack_top(D+M)
  82782. // #31426
  82783. @R13
  82784. // #31427
  82785. M=D
  82786. //^^ pop_stack_to_d
  82787. // #31428
  82788. @SP
  82789. // #31429
  82790. M=M-1
  82791. // #31430
  82792. A=M
  82793. // #31431
  82794. D=M
  82795. //vv pop_stack_to_d
  82796. // #31432
  82797. @R13
  82798. // #31433
  82799. D=D+M
  82800. // #31434
  82801. @R13
  82802. // #31435
  82803. M=0
  82804. //vv arith_d_with_stack_top(D+M)
  82805. //^^ push_d_to_stack
  82806. // #31436
  82807. @SP
  82808. // #31437
  82809. A=M
  82810. // #31438
  82811. M=D
  82812. // #31439
  82813. @SP
  82814. // #31440
  82815. M=M+1
  82816. //vv push_d_to_stack
  82817. //vv arith_binary_op(+)
  82818. //
  82819. //// push this 1
  82820. //^^ push_from_ram(THIS, 1)
  82821. // #31441
  82822. @THIS
  82823. // #31442
  82824. D=M
  82825. // #31443
  82826. @1
  82827. // #31444
  82828. A=D+A
  82829. // #31445
  82830. D=M
  82831. //^^ push_d_to_stack
  82832. // #31446
  82833. @SP
  82834. // #31447
  82835. A=M
  82836. // #31448
  82837. M=D
  82838. // #31449
  82839. @SP
  82840. // #31450
  82841. M=M+1
  82842. //vv push_d_to_stack
  82843. //vv push_from_ram(THIS, 1)
  82844. //
  82845. //// push constant 1
  82846. //^^ push_constant(1)
  82847. // #31451
  82848. @1
  82849. // #31452
  82850. D=A
  82851. //^^ push_d_to_stack
  82852. // #31453
  82853. @SP
  82854. // #31454
  82855. A=M
  82856. // #31455
  82857. M=D
  82858. // #31456
  82859. @SP
  82860. // #31457
  82861. M=M+1
  82862. //vv push_d_to_stack
  82863. //vv push_constant(1)
  82864. //
  82865. //// add
  82866. //^^ arith_binary_op(+)
  82867. //^^ pop_stack_to_d
  82868. // #31458
  82869. @SP
  82870. // #31459
  82871. M=M-1
  82872. // #31460
  82873. A=M
  82874. // #31461
  82875. D=M
  82876. //vv pop_stack_to_d
  82877. //^^ arith_d_with_stack_top(D+M)
  82878. // #31462
  82879. @R13
  82880. // #31463
  82881. M=D
  82882. //^^ pop_stack_to_d
  82883. // #31464
  82884. @SP
  82885. // #31465
  82886. M=M-1
  82887. // #31466
  82888. A=M
  82889. // #31467
  82890. D=M
  82891. //vv pop_stack_to_d
  82892. // #31468
  82893. @R13
  82894. // #31469
  82895. D=D+M
  82896. // #31470
  82897. @R13
  82898. // #31471
  82899. M=0
  82900. //vv arith_d_with_stack_top(D+M)
  82901. //^^ push_d_to_stack
  82902. // #31472
  82903. @SP
  82904. // #31473
  82905. A=M
  82906. // #31474
  82907. M=D
  82908. // #31475
  82909. @SP
  82910. // #31476
  82911. M=M+1
  82912. //vv push_d_to_stack
  82913. //vv arith_binary_op(+)
  82914. //
  82915. //// call Screen.drawRectangle 4
  82916. //^^ push_constant(RET_ADDR_320)
  82917. // #31477
  82918. @RET_ADDR_320
  82919. // #31478
  82920. D=A
  82921. //^^ push_d_to_stack
  82922. // #31479
  82923. @SP
  82924. // #31480
  82925. A=M
  82926. // #31481
  82927. M=D
  82928. // #31482
  82929. @SP
  82930. // #31483
  82931. M=M+1
  82932. //vv push_d_to_stack
  82933. //vv push_constant(RET_ADDR_320)
  82934. //push return-address
  82935. // #31484
  82936. @LCL
  82937. // #31485
  82938. D=M
  82939. //^^ push_d_to_stack
  82940. // #31486
  82941. @SP
  82942. // #31487
  82943. A=M
  82944. // #31488
  82945. M=D
  82946. // #31489
  82947. @SP
  82948. // #31490
  82949. M=M+1
  82950. //vv push_d_to_stack
  82951. //push LCL
  82952. // #31491
  82953. @ARG
  82954. // #31492
  82955. D=M
  82956. //^^ push_d_to_stack
  82957. // #31493
  82958. @SP
  82959. // #31494
  82960. A=M
  82961. // #31495
  82962. M=D
  82963. // #31496
  82964. @SP
  82965. // #31497
  82966. M=M+1
  82967. //vv push_d_to_stack
  82968. //push ARG
  82969. // #31498
  82970. @THIS
  82971. // #31499
  82972. D=M
  82973. //^^ push_d_to_stack
  82974. // #31500
  82975. @SP
  82976. // #31501
  82977. A=M
  82978. // #31502
  82979. M=D
  82980. // #31503
  82981. @SP
  82982. // #31504
  82983. M=M+1
  82984. //vv push_d_to_stack
  82985. //push THIS
  82986. // #31505
  82987. @THAT
  82988. // #31506
  82989. D=M
  82990. //^^ push_d_to_stack
  82991. // #31507
  82992. @SP
  82993. // #31508
  82994. A=M
  82995. // #31509
  82996. M=D
  82997. // #31510
  82998. @SP
  82999. // #31511
  83000. M=M+1
  83001. //vv push_d_to_stack
  83002. //push THAT
  83003. // #31512
  83004. @SP
  83005. // #31513
  83006. D=M
  83007. // #31514
  83008. @ARG
  83009. // #31515
  83010. M=D
  83011. // #31516
  83012. @9
  83013. // #31517
  83014. D=A
  83015. // #31518
  83016. @ARG
  83017. // #31519
  83018. M=M-D // ARG = SP - args - 5
  83019. // #31520
  83020. @SP
  83021. // #31521
  83022. D=M
  83023. // #31522
  83024. @LCL
  83025. // #31523
  83026. M=D // LCL = SP
  83027. // #31524
  83028. @Screen.drawRectangle
  83029. // #31525
  83030. 0;JMP
  83031. (RET_ADDR_320)
  83032. //
  83033. //// pop temp 0
  83034. //^^ pop_to_loc{5)
  83035. //^^ pop_stack_to_d
  83036. // #31526
  83037. @SP
  83038. // #31527
  83039. M=M-1
  83040. // #31528
  83041. A=M
  83042. // #31529
  83043. D=M
  83044. //vv pop_stack_to_d
  83045. // #31530
  83046. @5
  83047. // #31531
  83048. M=D
  83049. //vv pop_to_loc{5)
  83050. //
  83051. //// label IF_FALSE0
  83052. (Square.moveUp$IF_FALSE0)
  83053. //
  83054. //// push constant 0
  83055. //^^ push_constant(0)
  83056. // #31532
  83057. @0
  83058. // #31533
  83059. D=A
  83060. //^^ push_d_to_stack
  83061. // #31534
  83062. @SP
  83063. // #31535
  83064. A=M
  83065. // #31536
  83066. M=D
  83067. // #31537
  83068. @SP
  83069. // #31538
  83070. M=M+1
  83071. //vv push_d_to_stack
  83072. //vv push_constant(0)
  83073. //
  83074. //// return
  83075. // #31539
  83076. @LCL
  83077. // #31540
  83078. D=M
  83079. // #31541
  83080. @R14
  83081. // #31542
  83082. M=D //R14=LCL
  83083. // #31543
  83084. @5
  83085. // #31544
  83086. A=D-A
  83087. // #31545
  83088. D=M
  83089. // #31546
  83090. @R15
  83091. // #31547
  83092. M=D //R15=*(LCL-5)
  83093. //^^ pop_stack_to_d
  83094. // #31548
  83095. @SP
  83096. // #31549
  83097. M=M-1
  83098. // #31550
  83099. A=M
  83100. // #31551
  83101. D=M
  83102. //vv pop_stack_to_d
  83103. // #31552
  83104. @ARG
  83105. // #31553
  83106. A=M
  83107. // #31554
  83108. M=D //*ARG = pop()
  83109. // #31555
  83110. @ARG
  83111. // #31556
  83112. D=M
  83113. // #31557
  83114. @SP
  83115. // #31558
  83116. M=D+1 //SP=ARG+1
  83117. // #31559
  83118. @R14
  83119. // #31560
  83120. AM=M-1
  83121. // #31561
  83122. D=M
  83123. // #31562
  83124. @THAT
  83125. // #31563
  83126. M=D //THAT = *(--R14)
  83127. // #31564
  83128. @R14
  83129. // #31565
  83130. AM=M-1
  83131. // #31566
  83132. D=M
  83133. // #31567
  83134. @THIS
  83135. // #31568
  83136. M=D //THIS = *(--R14)
  83137. // #31569
  83138. @R14
  83139. // #31570
  83140. AM=M-1
  83141. // #31571
  83142. D=M
  83143. // #31572
  83144. @ARG
  83145. // #31573
  83146. M=D //ARG = *(--R14)
  83147. // #31574
  83148. @R14
  83149. // #31575
  83150. AM=M-1
  83151. // #31576
  83152. D=M
  83153. // #31577
  83154. @LCL
  83155. // #31578
  83156. M=D //LCL = *(--R14)
  83157. // #31579
  83158. @R15
  83159. // #31580
  83160. A=M
  83161. // #31581
  83162. 0;JMP //goto *R15
  83163. //
  83164. //// function Square.moveDown 0
  83165. (Square.moveDown)
  83166. //
  83167. //// push argument 0
  83168. //^^ push_from_ram(ARG, 0)
  83169. // #31582
  83170. @ARG
  83171. // #31583
  83172. D=M
  83173. // #31584
  83174. @0
  83175. // #31585
  83176. A=D+A
  83177. // #31586
  83178. D=M
  83179. //^^ push_d_to_stack
  83180. // #31587
  83181. @SP
  83182. // #31588
  83183. A=M
  83184. // #31589
  83185. M=D
  83186. // #31590
  83187. @SP
  83188. // #31591
  83189. M=M+1
  83190. //vv push_d_to_stack
  83191. //vv push_from_ram(ARG, 0)
  83192. //
  83193. //// pop pointer 0
  83194. //^^ pop_to_loc{3)
  83195. //^^ pop_stack_to_d
  83196. // #31592
  83197. @SP
  83198. // #31593
  83199. M=M-1
  83200. // #31594
  83201. A=M
  83202. // #31595
  83203. D=M
  83204. //vv pop_stack_to_d
  83205. // #31596
  83206. @3
  83207. // #31597
  83208. M=D
  83209. //vv pop_to_loc{3)
  83210. //
  83211. //// push this 1
  83212. //^^ push_from_ram(THIS, 1)
  83213. // #31598
  83214. @THIS
  83215. // #31599
  83216. D=M
  83217. // #31600
  83218. @1
  83219. // #31601
  83220. A=D+A
  83221. // #31602
  83222. D=M
  83223. //^^ push_d_to_stack
  83224. // #31603
  83225. @SP
  83226. // #31604
  83227. A=M
  83228. // #31605
  83229. M=D
  83230. // #31606
  83231. @SP
  83232. // #31607
  83233. M=M+1
  83234. //vv push_d_to_stack
  83235. //vv push_from_ram(THIS, 1)
  83236. //
  83237. //// push this 2
  83238. //^^ push_from_ram(THIS, 2)
  83239. // #31608
  83240. @THIS
  83241. // #31609
  83242. D=M
  83243. // #31610
  83244. @2
  83245. // #31611
  83246. A=D+A
  83247. // #31612
  83248. D=M
  83249. //^^ push_d_to_stack
  83250. // #31613
  83251. @SP
  83252. // #31614
  83253. A=M
  83254. // #31615
  83255. M=D
  83256. // #31616
  83257. @SP
  83258. // #31617
  83259. M=M+1
  83260. //vv push_d_to_stack
  83261. //vv push_from_ram(THIS, 2)
  83262. //
  83263. //// add
  83264. //^^ arith_binary_op(+)
  83265. //^^ pop_stack_to_d
  83266. // #31618
  83267. @SP
  83268. // #31619
  83269. M=M-1
  83270. // #31620
  83271. A=M
  83272. // #31621
  83273. D=M
  83274. //vv pop_stack_to_d
  83275. //^^ arith_d_with_stack_top(D+M)
  83276. // #31622
  83277. @R13
  83278. // #31623
  83279. M=D
  83280. //^^ pop_stack_to_d
  83281. // #31624
  83282. @SP
  83283. // #31625
  83284. M=M-1
  83285. // #31626
  83286. A=M
  83287. // #31627
  83288. D=M
  83289. //vv pop_stack_to_d
  83290. // #31628
  83291. @R13
  83292. // #31629
  83293. D=D+M
  83294. // #31630
  83295. @R13
  83296. // #31631
  83297. M=0
  83298. //vv arith_d_with_stack_top(D+M)
  83299. //^^ push_d_to_stack
  83300. // #31632
  83301. @SP
  83302. // #31633
  83303. A=M
  83304. // #31634
  83305. M=D
  83306. // #31635
  83307. @SP
  83308. // #31636
  83309. M=M+1
  83310. //vv push_d_to_stack
  83311. //vv arith_binary_op(+)
  83312. //
  83313. //// push constant 254
  83314. //^^ push_constant(254)
  83315. // #31637
  83316. @254
  83317. // #31638
  83318. D=A
  83319. //^^ push_d_to_stack
  83320. // #31639
  83321. @SP
  83322. // #31640
  83323. A=M
  83324. // #31641
  83325. M=D
  83326. // #31642
  83327. @SP
  83328. // #31643
  83329. M=M+1
  83330. //vv push_d_to_stack
  83331. //vv push_constant(254)
  83332. //
  83333. //// lt
  83334. //^^ arith_cmp_op(JLT)
  83335. //^^ pop_stack_to_d
  83336. // #31644
  83337. @SP
  83338. // #31645
  83339. M=M-1
  83340. // #31646
  83341. A=M
  83342. // #31647
  83343. D=M
  83344. //vv pop_stack_to_d
  83345. //^^ arith_d_with_stack_top(D-M)
  83346. // #31648
  83347. @R13
  83348. // #31649
  83349. M=D
  83350. //^^ pop_stack_to_d
  83351. // #31650
  83352. @SP
  83353. // #31651
  83354. M=M-1
  83355. // #31652
  83356. A=M
  83357. // #31653
  83358. D=M
  83359. //vv pop_stack_to_d
  83360. // #31654
  83361. @R13
  83362. // #31655
  83363. D=D-M
  83364. // #31656
  83365. @R13
  83366. // #31657
  83367. M=0
  83368. //vv arith_d_with_stack_top(D-M)
  83369. // #31658
  83370. @PUT_TRUE_321
  83371. // #31659
  83372. D;JLT
  83373. // #31660
  83374. @R13
  83375. // #31661
  83376. M=0
  83377. // #31662
  83378. @CONT_321
  83379. // #31663
  83380. 0;JMP
  83381. (PUT_TRUE_321)
  83382. // #31664
  83383. @R13
  83384. // #31665
  83385. M=-1
  83386. (CONT_321)
  83387. // #31666
  83388. @R13
  83389. // #31667
  83390. D=M
  83391. // #31668
  83392. @R13
  83393. // #31669
  83394. M=0
  83395. //^^ push_d_to_stack
  83396. // #31670
  83397. @SP
  83398. // #31671
  83399. A=M
  83400. // #31672
  83401. M=D
  83402. // #31673
  83403. @SP
  83404. // #31674
  83405. M=M+1
  83406. //vv push_d_to_stack
  83407. //vv arith_cmp_op(JLT)
  83408. //
  83409. //// if-goto IF_TRUE0
  83410. //^^ pop_stack_to_d
  83411. // #31675
  83412. @SP
  83413. // #31676
  83414. M=M-1
  83415. // #31677
  83416. A=M
  83417. // #31678
  83418. D=M
  83419. //vv pop_stack_to_d
  83420. // #31679
  83421. @Square.moveDown$IF_TRUE0
  83422. // #31680
  83423. D;JNE
  83424. //
  83425. //// goto IF_FALSE0
  83426. // #31681
  83427. @Square.moveDown$IF_FALSE0
  83428. // #31682
  83429. 0;JMP
  83430. //
  83431. //// label IF_TRUE0
  83432. (Square.moveDown$IF_TRUE0)
  83433. //
  83434. //// push constant 0
  83435. //^^ push_constant(0)
  83436. // #31683
  83437. @0
  83438. // #31684
  83439. D=A
  83440. //^^ push_d_to_stack
  83441. // #31685
  83442. @SP
  83443. // #31686
  83444. A=M
  83445. // #31687
  83446. M=D
  83447. // #31688
  83448. @SP
  83449. // #31689
  83450. M=M+1
  83451. //vv push_d_to_stack
  83452. //vv push_constant(0)
  83453. //
  83454. //// call Screen.setColor 1
  83455. //^^ push_constant(RET_ADDR_322)
  83456. // #31690
  83457. @RET_ADDR_322
  83458. // #31691
  83459. D=A
  83460. //^^ push_d_to_stack
  83461. // #31692
  83462. @SP
  83463. // #31693
  83464. A=M
  83465. // #31694
  83466. M=D
  83467. // #31695
  83468. @SP
  83469. // #31696
  83470. M=M+1
  83471. //vv push_d_to_stack
  83472. //vv push_constant(RET_ADDR_322)
  83473. //push return-address
  83474. // #31697
  83475. @LCL
  83476. // #31698
  83477. D=M
  83478. //^^ push_d_to_stack
  83479. // #31699
  83480. @SP
  83481. // #31700
  83482. A=M
  83483. // #31701
  83484. M=D
  83485. // #31702
  83486. @SP
  83487. // #31703
  83488. M=M+1
  83489. //vv push_d_to_stack
  83490. //push LCL
  83491. // #31704
  83492. @ARG
  83493. // #31705
  83494. D=M
  83495. //^^ push_d_to_stack
  83496. // #31706
  83497. @SP
  83498. // #31707
  83499. A=M
  83500. // #31708
  83501. M=D
  83502. // #31709
  83503. @SP
  83504. // #31710
  83505. M=M+1
  83506. //vv push_d_to_stack
  83507. //push ARG
  83508. // #31711
  83509. @THIS
  83510. // #31712
  83511. D=M
  83512. //^^ push_d_to_stack
  83513. // #31713
  83514. @SP
  83515. // #31714
  83516. A=M
  83517. // #31715
  83518. M=D
  83519. // #31716
  83520. @SP
  83521. // #31717
  83522. M=M+1
  83523. //vv push_d_to_stack
  83524. //push THIS
  83525. // #31718
  83526. @THAT
  83527. // #31719
  83528. D=M
  83529. //^^ push_d_to_stack
  83530. // #31720
  83531. @SP
  83532. // #31721
  83533. A=M
  83534. // #31722
  83535. M=D
  83536. // #31723
  83537. @SP
  83538. // #31724
  83539. M=M+1
  83540. //vv push_d_to_stack
  83541. //push THAT
  83542. // #31725
  83543. @SP
  83544. // #31726
  83545. D=M
  83546. // #31727
  83547. @ARG
  83548. // #31728
  83549. M=D
  83550. // #31729
  83551. @6
  83552. // #31730
  83553. D=A
  83554. // #31731
  83555. @ARG
  83556. // #31732
  83557. M=M-D // ARG = SP - args - 5
  83558. // #31733
  83559. @SP
  83560. // #31734
  83561. D=M
  83562. // #31735
  83563. @LCL
  83564. // #31736
  83565. M=D // LCL = SP
  83566. // #31737
  83567. @Screen.setColor
  83568. // #31738
  83569. 0;JMP
  83570. (RET_ADDR_322)
  83571. //
  83572. //// pop temp 0
  83573. //^^ pop_to_loc{5)
  83574. //^^ pop_stack_to_d
  83575. // #31739
  83576. @SP
  83577. // #31740
  83578. M=M-1
  83579. // #31741
  83580. A=M
  83581. // #31742
  83582. D=M
  83583. //vv pop_stack_to_d
  83584. // #31743
  83585. @5
  83586. // #31744
  83587. M=D
  83588. //vv pop_to_loc{5)
  83589. //
  83590. //// push this 0
  83591. //^^ push_from_ram(THIS, 0)
  83592. // #31745
  83593. @THIS
  83594. // #31746
  83595. D=M
  83596. // #31747
  83597. @0
  83598. // #31748
  83599. A=D+A
  83600. // #31749
  83601. D=M
  83602. //^^ push_d_to_stack
  83603. // #31750
  83604. @SP
  83605. // #31751
  83606. A=M
  83607. // #31752
  83608. M=D
  83609. // #31753
  83610. @SP
  83611. // #31754
  83612. M=M+1
  83613. //vv push_d_to_stack
  83614. //vv push_from_ram(THIS, 0)
  83615. //
  83616. //// push this 1
  83617. //^^ push_from_ram(THIS, 1)
  83618. // #31755
  83619. @THIS
  83620. // #31756
  83621. D=M
  83622. // #31757
  83623. @1
  83624. // #31758
  83625. A=D+A
  83626. // #31759
  83627. D=M
  83628. //^^ push_d_to_stack
  83629. // #31760
  83630. @SP
  83631. // #31761
  83632. A=M
  83633. // #31762
  83634. M=D
  83635. // #31763
  83636. @SP
  83637. // #31764
  83638. M=M+1
  83639. //vv push_d_to_stack
  83640. //vv push_from_ram(THIS, 1)
  83641. //
  83642. //// push this 0
  83643. //^^ push_from_ram(THIS, 0)
  83644. // #31765
  83645. @THIS
  83646. // #31766
  83647. D=M
  83648. // #31767
  83649. @0
  83650. // #31768
  83651. A=D+A
  83652. // #31769
  83653. D=M
  83654. //^^ push_d_to_stack
  83655. // #31770
  83656. @SP
  83657. // #31771
  83658. A=M
  83659. // #31772
  83660. M=D
  83661. // #31773
  83662. @SP
  83663. // #31774
  83664. M=M+1
  83665. //vv push_d_to_stack
  83666. //vv push_from_ram(THIS, 0)
  83667. //
  83668. //// push this 2
  83669. //^^ push_from_ram(THIS, 2)
  83670. // #31775
  83671. @THIS
  83672. // #31776
  83673. D=M
  83674. // #31777
  83675. @2
  83676. // #31778
  83677. A=D+A
  83678. // #31779
  83679. D=M
  83680. //^^ push_d_to_stack
  83681. // #31780
  83682. @SP
  83683. // #31781
  83684. A=M
  83685. // #31782
  83686. M=D
  83687. // #31783
  83688. @SP
  83689. // #31784
  83690. M=M+1
  83691. //vv push_d_to_stack
  83692. //vv push_from_ram(THIS, 2)
  83693. //
  83694. //// add
  83695. //^^ arith_binary_op(+)
  83696. //^^ pop_stack_to_d
  83697. // #31785
  83698. @SP
  83699. // #31786
  83700. M=M-1
  83701. // #31787
  83702. A=M
  83703. // #31788
  83704. D=M
  83705. //vv pop_stack_to_d
  83706. //^^ arith_d_with_stack_top(D+M)
  83707. // #31789
  83708. @R13
  83709. // #31790
  83710. M=D
  83711. //^^ pop_stack_to_d
  83712. // #31791
  83713. @SP
  83714. // #31792
  83715. M=M-1
  83716. // #31793
  83717. A=M
  83718. // #31794
  83719. D=M
  83720. //vv pop_stack_to_d
  83721. // #31795
  83722. @R13
  83723. // #31796
  83724. D=D+M
  83725. // #31797
  83726. @R13
  83727. // #31798
  83728. M=0
  83729. //vv arith_d_with_stack_top(D+M)
  83730. //^^ push_d_to_stack
  83731. // #31799
  83732. @SP
  83733. // #31800
  83734. A=M
  83735. // #31801
  83736. M=D
  83737. // #31802
  83738. @SP
  83739. // #31803
  83740. M=M+1
  83741. //vv push_d_to_stack
  83742. //vv arith_binary_op(+)
  83743. //
  83744. //// push this 1
  83745. //^^ push_from_ram(THIS, 1)
  83746. // #31804
  83747. @THIS
  83748. // #31805
  83749. D=M
  83750. // #31806
  83751. @1
  83752. // #31807
  83753. A=D+A
  83754. // #31808
  83755. D=M
  83756. //^^ push_d_to_stack
  83757. // #31809
  83758. @SP
  83759. // #31810
  83760. A=M
  83761. // #31811
  83762. M=D
  83763. // #31812
  83764. @SP
  83765. // #31813
  83766. M=M+1
  83767. //vv push_d_to_stack
  83768. //vv push_from_ram(THIS, 1)
  83769. //
  83770. //// push constant 1
  83771. //^^ push_constant(1)
  83772. // #31814
  83773. @1
  83774. // #31815
  83775. D=A
  83776. //^^ push_d_to_stack
  83777. // #31816
  83778. @SP
  83779. // #31817
  83780. A=M
  83781. // #31818
  83782. M=D
  83783. // #31819
  83784. @SP
  83785. // #31820
  83786. M=M+1
  83787. //vv push_d_to_stack
  83788. //vv push_constant(1)
  83789. //
  83790. //// add
  83791. //^^ arith_binary_op(+)
  83792. //^^ pop_stack_to_d
  83793. // #31821
  83794. @SP
  83795. // #31822
  83796. M=M-1
  83797. // #31823
  83798. A=M
  83799. // #31824
  83800. D=M
  83801. //vv pop_stack_to_d
  83802. //^^ arith_d_with_stack_top(D+M)
  83803. // #31825
  83804. @R13
  83805. // #31826
  83806. M=D
  83807. //^^ pop_stack_to_d
  83808. // #31827
  83809. @SP
  83810. // #31828
  83811. M=M-1
  83812. // #31829
  83813. A=M
  83814. // #31830
  83815. D=M
  83816. //vv pop_stack_to_d
  83817. // #31831
  83818. @R13
  83819. // #31832
  83820. D=D+M
  83821. // #31833
  83822. @R13
  83823. // #31834
  83824. M=0
  83825. //vv arith_d_with_stack_top(D+M)
  83826. //^^ push_d_to_stack
  83827. // #31835
  83828. @SP
  83829. // #31836
  83830. A=M
  83831. // #31837
  83832. M=D
  83833. // #31838
  83834. @SP
  83835. // #31839
  83836. M=M+1
  83837. //vv push_d_to_stack
  83838. //vv arith_binary_op(+)
  83839. //
  83840. //// call Screen.drawRectangle 4
  83841. //^^ push_constant(RET_ADDR_323)
  83842. // #31840
  83843. @RET_ADDR_323
  83844. // #31841
  83845. D=A
  83846. //^^ push_d_to_stack
  83847. // #31842
  83848. @SP
  83849. // #31843
  83850. A=M
  83851. // #31844
  83852. M=D
  83853. // #31845
  83854. @SP
  83855. // #31846
  83856. M=M+1
  83857. //vv push_d_to_stack
  83858. //vv push_constant(RET_ADDR_323)
  83859. //push return-address
  83860. // #31847
  83861. @LCL
  83862. // #31848
  83863. D=M
  83864. //^^ push_d_to_stack
  83865. // #31849
  83866. @SP
  83867. // #31850
  83868. A=M
  83869. // #31851
  83870. M=D
  83871. // #31852
  83872. @SP
  83873. // #31853
  83874. M=M+1
  83875. //vv push_d_to_stack
  83876. //push LCL
  83877. // #31854
  83878. @ARG
  83879. // #31855
  83880. D=M
  83881. //^^ push_d_to_stack
  83882. // #31856
  83883. @SP
  83884. // #31857
  83885. A=M
  83886. // #31858
  83887. M=D
  83888. // #31859
  83889. @SP
  83890. // #31860
  83891. M=M+1
  83892. //vv push_d_to_stack
  83893. //push ARG
  83894. // #31861
  83895. @THIS
  83896. // #31862
  83897. D=M
  83898. //^^ push_d_to_stack
  83899. // #31863
  83900. @SP
  83901. // #31864
  83902. A=M
  83903. // #31865
  83904. M=D
  83905. // #31866
  83906. @SP
  83907. // #31867
  83908. M=M+1
  83909. //vv push_d_to_stack
  83910. //push THIS
  83911. // #31868
  83912. @THAT
  83913. // #31869
  83914. D=M
  83915. //^^ push_d_to_stack
  83916. // #31870
  83917. @SP
  83918. // #31871
  83919. A=M
  83920. // #31872
  83921. M=D
  83922. // #31873
  83923. @SP
  83924. // #31874
  83925. M=M+1
  83926. //vv push_d_to_stack
  83927. //push THAT
  83928. // #31875
  83929. @SP
  83930. // #31876
  83931. D=M
  83932. // #31877
  83933. @ARG
  83934. // #31878
  83935. M=D
  83936. // #31879
  83937. @9
  83938. // #31880
  83939. D=A
  83940. // #31881
  83941. @ARG
  83942. // #31882
  83943. M=M-D // ARG = SP - args - 5
  83944. // #31883
  83945. @SP
  83946. // #31884
  83947. D=M
  83948. // #31885
  83949. @LCL
  83950. // #31886
  83951. M=D // LCL = SP
  83952. // #31887
  83953. @Screen.drawRectangle
  83954. // #31888
  83955. 0;JMP
  83956. (RET_ADDR_323)
  83957. //
  83958. //// pop temp 0
  83959. //^^ pop_to_loc{5)
  83960. //^^ pop_stack_to_d
  83961. // #31889
  83962. @SP
  83963. // #31890
  83964. M=M-1
  83965. // #31891
  83966. A=M
  83967. // #31892
  83968. D=M
  83969. //vv pop_stack_to_d
  83970. // #31893
  83971. @5
  83972. // #31894
  83973. M=D
  83974. //vv pop_to_loc{5)
  83975. //
  83976. //// push this 1
  83977. //^^ push_from_ram(THIS, 1)
  83978. // #31895
  83979. @THIS
  83980. // #31896
  83981. D=M
  83982. // #31897
  83983. @1
  83984. // #31898
  83985. A=D+A
  83986. // #31899
  83987. D=M
  83988. //^^ push_d_to_stack
  83989. // #31900
  83990. @SP
  83991. // #31901
  83992. A=M
  83993. // #31902
  83994. M=D
  83995. // #31903
  83996. @SP
  83997. // #31904
  83998. M=M+1
  83999. //vv push_d_to_stack
  84000. //vv push_from_ram(THIS, 1)
  84001. //
  84002. //// push constant 2
  84003. //^^ push_constant(2)
  84004. // #31905
  84005. @2
  84006. // #31906
  84007. D=A
  84008. //^^ push_d_to_stack
  84009. // #31907
  84010. @SP
  84011. // #31908
  84012. A=M
  84013. // #31909
  84014. M=D
  84015. // #31910
  84016. @SP
  84017. // #31911
  84018. M=M+1
  84019. //vv push_d_to_stack
  84020. //vv push_constant(2)
  84021. //
  84022. //// add
  84023. //^^ arith_binary_op(+)
  84024. //^^ pop_stack_to_d
  84025. // #31912
  84026. @SP
  84027. // #31913
  84028. M=M-1
  84029. // #31914
  84030. A=M
  84031. // #31915
  84032. D=M
  84033. //vv pop_stack_to_d
  84034. //^^ arith_d_with_stack_top(D+M)
  84035. // #31916
  84036. @R13
  84037. // #31917
  84038. M=D
  84039. //^^ pop_stack_to_d
  84040. // #31918
  84041. @SP
  84042. // #31919
  84043. M=M-1
  84044. // #31920
  84045. A=M
  84046. // #31921
  84047. D=M
  84048. //vv pop_stack_to_d
  84049. // #31922
  84050. @R13
  84051. // #31923
  84052. D=D+M
  84053. // #31924
  84054. @R13
  84055. // #31925
  84056. M=0
  84057. //vv arith_d_with_stack_top(D+M)
  84058. //^^ push_d_to_stack
  84059. // #31926
  84060. @SP
  84061. // #31927
  84062. A=M
  84063. // #31928
  84064. M=D
  84065. // #31929
  84066. @SP
  84067. // #31930
  84068. M=M+1
  84069. //vv push_d_to_stack
  84070. //vv arith_binary_op(+)
  84071. //
  84072. //// pop this 1
  84073. //^^ pop_to_ram(THIS, 1)
  84074. // #31931
  84075. @THIS
  84076. // #31932
  84077. D=M
  84078. // #31933
  84079. @1
  84080. // #31934
  84081. D=D+A
  84082. // #31935
  84083. @R13
  84084. // #31936
  84085. M=D
  84086. //^^ pop_stack_to_d
  84087. // #31937
  84088. @SP
  84089. // #31938
  84090. M=M-1
  84091. // #31939
  84092. A=M
  84093. // #31940
  84094. D=M
  84095. //vv pop_stack_to_d
  84096. // #31941
  84097. @R13
  84098. // #31942
  84099. A=M
  84100. // #31943
  84101. M=D
  84102. // #31944
  84103. @R13
  84104. // #31945
  84105. M=0
  84106. //vv pop_to_ram(THIS, 1)
  84107. //
  84108. //// push constant 0
  84109. //^^ push_constant(0)
  84110. // #31946
  84111. @0
  84112. // #31947
  84113. D=A
  84114. //^^ push_d_to_stack
  84115. // #31948
  84116. @SP
  84117. // #31949
  84118. A=M
  84119. // #31950
  84120. M=D
  84121. // #31951
  84122. @SP
  84123. // #31952
  84124. M=M+1
  84125. //vv push_d_to_stack
  84126. //vv push_constant(0)
  84127. //
  84128. //// not
  84129. //^^ arith_unary_op(!)
  84130. //^^ pop_stack_to_d
  84131. // #31953
  84132. @SP
  84133. // #31954
  84134. M=M-1
  84135. // #31955
  84136. A=M
  84137. // #31956
  84138. D=M
  84139. //vv pop_stack_to_d
  84140. // #31957
  84141. D=!D
  84142. //^^ push_d_to_stack
  84143. // #31958
  84144. @SP
  84145. // #31959
  84146. A=M
  84147. // #31960
  84148. M=D
  84149. // #31961
  84150. @SP
  84151. // #31962
  84152. M=M+1
  84153. //vv push_d_to_stack
  84154. //vv arith_unary_op(!)
  84155. //
  84156. //// call Screen.setColor 1
  84157. //^^ push_constant(RET_ADDR_324)
  84158. // #31963
  84159. @RET_ADDR_324
  84160. // #31964
  84161. D=A
  84162. //^^ push_d_to_stack
  84163. // #31965
  84164. @SP
  84165. // #31966
  84166. A=M
  84167. // #31967
  84168. M=D
  84169. // #31968
  84170. @SP
  84171. // #31969
  84172. M=M+1
  84173. //vv push_d_to_stack
  84174. //vv push_constant(RET_ADDR_324)
  84175. //push return-address
  84176. // #31970
  84177. @LCL
  84178. // #31971
  84179. D=M
  84180. //^^ push_d_to_stack
  84181. // #31972
  84182. @SP
  84183. // #31973
  84184. A=M
  84185. // #31974
  84186. M=D
  84187. // #31975
  84188. @SP
  84189. // #31976
  84190. M=M+1
  84191. //vv push_d_to_stack
  84192. //push LCL
  84193. // #31977
  84194. @ARG
  84195. // #31978
  84196. D=M
  84197. //^^ push_d_to_stack
  84198. // #31979
  84199. @SP
  84200. // #31980
  84201. A=M
  84202. // #31981
  84203. M=D
  84204. // #31982
  84205. @SP
  84206. // #31983
  84207. M=M+1
  84208. //vv push_d_to_stack
  84209. //push ARG
  84210. // #31984
  84211. @THIS
  84212. // #31985
  84213. D=M
  84214. //^^ push_d_to_stack
  84215. // #31986
  84216. @SP
  84217. // #31987
  84218. A=M
  84219. // #31988
  84220. M=D
  84221. // #31989
  84222. @SP
  84223. // #31990
  84224. M=M+1
  84225. //vv push_d_to_stack
  84226. //push THIS
  84227. // #31991
  84228. @THAT
  84229. // #31992
  84230. D=M
  84231. //^^ push_d_to_stack
  84232. // #31993
  84233. @SP
  84234. // #31994
  84235. A=M
  84236. // #31995
  84237. M=D
  84238. // #31996
  84239. @SP
  84240. // #31997
  84241. M=M+1
  84242. //vv push_d_to_stack
  84243. //push THAT
  84244. // #31998
  84245. @SP
  84246. // #31999
  84247. D=M
  84248. // #32000
  84249. @ARG
  84250. // #32001
  84251. M=D
  84252. // #32002
  84253. @6
  84254. // #32003
  84255. D=A
  84256. // #32004
  84257. @ARG
  84258. // #32005
  84259. M=M-D // ARG = SP - args - 5
  84260. // #32006
  84261. @SP
  84262. // #32007
  84263. D=M
  84264. // #32008
  84265. @LCL
  84266. // #32009
  84267. M=D // LCL = SP
  84268. // #32010
  84269. @Screen.setColor
  84270. // #32011
  84271. 0;JMP
  84272. (RET_ADDR_324)
  84273. //
  84274. //// pop temp 0
  84275. //^^ pop_to_loc{5)
  84276. //^^ pop_stack_to_d
  84277. // #32012
  84278. @SP
  84279. // #32013
  84280. M=M-1
  84281. // #32014
  84282. A=M
  84283. // #32015
  84284. D=M
  84285. //vv pop_stack_to_d
  84286. // #32016
  84287. @5
  84288. // #32017
  84289. M=D
  84290. //vv pop_to_loc{5)
  84291. //
  84292. //// push this 0
  84293. //^^ push_from_ram(THIS, 0)
  84294. // #32018
  84295. @THIS
  84296. // #32019
  84297. D=M
  84298. // #32020
  84299. @0
  84300. // #32021
  84301. A=D+A
  84302. // #32022
  84303. D=M
  84304. //^^ push_d_to_stack
  84305. // #32023
  84306. @SP
  84307. // #32024
  84308. A=M
  84309. // #32025
  84310. M=D
  84311. // #32026
  84312. @SP
  84313. // #32027
  84314. M=M+1
  84315. //vv push_d_to_stack
  84316. //vv push_from_ram(THIS, 0)
  84317. //
  84318. //// push this 1
  84319. //^^ push_from_ram(THIS, 1)
  84320. // #32028
  84321. @THIS
  84322. // #32029
  84323. D=M
  84324. // #32030
  84325. @1
  84326. // #32031
  84327. A=D+A
  84328. // #32032
  84329. D=M
  84330. //^^ push_d_to_stack
  84331. // #32033
  84332. @SP
  84333. // #32034
  84334. A=M
  84335. // #32035
  84336. M=D
  84337. // #32036
  84338. @SP
  84339. // #32037
  84340. M=M+1
  84341. //vv push_d_to_stack
  84342. //vv push_from_ram(THIS, 1)
  84343. //
  84344. //// push this 2
  84345. //^^ push_from_ram(THIS, 2)
  84346. // #32038
  84347. @THIS
  84348. // #32039
  84349. D=M
  84350. // #32040
  84351. @2
  84352. // #32041
  84353. A=D+A
  84354. // #32042
  84355. D=M
  84356. //^^ push_d_to_stack
  84357. // #32043
  84358. @SP
  84359. // #32044
  84360. A=M
  84361. // #32045
  84362. M=D
  84363. // #32046
  84364. @SP
  84365. // #32047
  84366. M=M+1
  84367. //vv push_d_to_stack
  84368. //vv push_from_ram(THIS, 2)
  84369. //
  84370. //// add
  84371. //^^ arith_binary_op(+)
  84372. //^^ pop_stack_to_d
  84373. // #32048
  84374. @SP
  84375. // #32049
  84376. M=M-1
  84377. // #32050
  84378. A=M
  84379. // #32051
  84380. D=M
  84381. //vv pop_stack_to_d
  84382. //^^ arith_d_with_stack_top(D+M)
  84383. // #32052
  84384. @R13
  84385. // #32053
  84386. M=D
  84387. //^^ pop_stack_to_d
  84388. // #32054
  84389. @SP
  84390. // #32055
  84391. M=M-1
  84392. // #32056
  84393. A=M
  84394. // #32057
  84395. D=M
  84396. //vv pop_stack_to_d
  84397. // #32058
  84398. @R13
  84399. // #32059
  84400. D=D+M
  84401. // #32060
  84402. @R13
  84403. // #32061
  84404. M=0
  84405. //vv arith_d_with_stack_top(D+M)
  84406. //^^ push_d_to_stack
  84407. // #32062
  84408. @SP
  84409. // #32063
  84410. A=M
  84411. // #32064
  84412. M=D
  84413. // #32065
  84414. @SP
  84415. // #32066
  84416. M=M+1
  84417. //vv push_d_to_stack
  84418. //vv arith_binary_op(+)
  84419. //
  84420. //// push constant 1
  84421. //^^ push_constant(1)
  84422. // #32067
  84423. @1
  84424. // #32068
  84425. D=A
  84426. //^^ push_d_to_stack
  84427. // #32069
  84428. @SP
  84429. // #32070
  84430. A=M
  84431. // #32071
  84432. M=D
  84433. // #32072
  84434. @SP
  84435. // #32073
  84436. M=M+1
  84437. //vv push_d_to_stack
  84438. //vv push_constant(1)
  84439. //
  84440. //// sub
  84441. //^^ arith_binary_op(-)
  84442. //^^ pop_stack_to_d
  84443. // #32074
  84444. @SP
  84445. // #32075
  84446. M=M-1
  84447. // #32076
  84448. A=M
  84449. // #32077
  84450. D=M
  84451. //vv pop_stack_to_d
  84452. //^^ arith_d_with_stack_top(D-M)
  84453. // #32078
  84454. @R13
  84455. // #32079
  84456. M=D
  84457. //^^ pop_stack_to_d
  84458. // #32080
  84459. @SP
  84460. // #32081
  84461. M=M-1
  84462. // #32082
  84463. A=M
  84464. // #32083
  84465. D=M
  84466. //vv pop_stack_to_d
  84467. // #32084
  84468. @R13
  84469. // #32085
  84470. D=D-M
  84471. // #32086
  84472. @R13
  84473. // #32087
  84474. M=0
  84475. //vv arith_d_with_stack_top(D-M)
  84476. //^^ push_d_to_stack
  84477. // #32088
  84478. @SP
  84479. // #32089
  84480. A=M
  84481. // #32090
  84482. M=D
  84483. // #32091
  84484. @SP
  84485. // #32092
  84486. M=M+1
  84487. //vv push_d_to_stack
  84488. //vv arith_binary_op(-)
  84489. //
  84490. //// push this 0
  84491. //^^ push_from_ram(THIS, 0)
  84492. // #32093
  84493. @THIS
  84494. // #32094
  84495. D=M
  84496. // #32095
  84497. @0
  84498. // #32096
  84499. A=D+A
  84500. // #32097
  84501. D=M
  84502. //^^ push_d_to_stack
  84503. // #32098
  84504. @SP
  84505. // #32099
  84506. A=M
  84507. // #32100
  84508. M=D
  84509. // #32101
  84510. @SP
  84511. // #32102
  84512. M=M+1
  84513. //vv push_d_to_stack
  84514. //vv push_from_ram(THIS, 0)
  84515. //
  84516. //// push this 2
  84517. //^^ push_from_ram(THIS, 2)
  84518. // #32103
  84519. @THIS
  84520. // #32104
  84521. D=M
  84522. // #32105
  84523. @2
  84524. // #32106
  84525. A=D+A
  84526. // #32107
  84527. D=M
  84528. //^^ push_d_to_stack
  84529. // #32108
  84530. @SP
  84531. // #32109
  84532. A=M
  84533. // #32110
  84534. M=D
  84535. // #32111
  84536. @SP
  84537. // #32112
  84538. M=M+1
  84539. //vv push_d_to_stack
  84540. //vv push_from_ram(THIS, 2)
  84541. //
  84542. //// add
  84543. //^^ arith_binary_op(+)
  84544. //^^ pop_stack_to_d
  84545. // #32113
  84546. @SP
  84547. // #32114
  84548. M=M-1
  84549. // #32115
  84550. A=M
  84551. // #32116
  84552. D=M
  84553. //vv pop_stack_to_d
  84554. //^^ arith_d_with_stack_top(D+M)
  84555. // #32117
  84556. @R13
  84557. // #32118
  84558. M=D
  84559. //^^ pop_stack_to_d
  84560. // #32119
  84561. @SP
  84562. // #32120
  84563. M=M-1
  84564. // #32121
  84565. A=M
  84566. // #32122
  84567. D=M
  84568. //vv pop_stack_to_d
  84569. // #32123
  84570. @R13
  84571. // #32124
  84572. D=D+M
  84573. // #32125
  84574. @R13
  84575. // #32126
  84576. M=0
  84577. //vv arith_d_with_stack_top(D+M)
  84578. //^^ push_d_to_stack
  84579. // #32127
  84580. @SP
  84581. // #32128
  84582. A=M
  84583. // #32129
  84584. M=D
  84585. // #32130
  84586. @SP
  84587. // #32131
  84588. M=M+1
  84589. //vv push_d_to_stack
  84590. //vv arith_binary_op(+)
  84591. //
  84592. //// push this 1
  84593. //^^ push_from_ram(THIS, 1)
  84594. // #32132
  84595. @THIS
  84596. // #32133
  84597. D=M
  84598. // #32134
  84599. @1
  84600. // #32135
  84601. A=D+A
  84602. // #32136
  84603. D=M
  84604. //^^ push_d_to_stack
  84605. // #32137
  84606. @SP
  84607. // #32138
  84608. A=M
  84609. // #32139
  84610. M=D
  84611. // #32140
  84612. @SP
  84613. // #32141
  84614. M=M+1
  84615. //vv push_d_to_stack
  84616. //vv push_from_ram(THIS, 1)
  84617. //
  84618. //// push this 2
  84619. //^^ push_from_ram(THIS, 2)
  84620. // #32142
  84621. @THIS
  84622. // #32143
  84623. D=M
  84624. // #32144
  84625. @2
  84626. // #32145
  84627. A=D+A
  84628. // #32146
  84629. D=M
  84630. //^^ push_d_to_stack
  84631. // #32147
  84632. @SP
  84633. // #32148
  84634. A=M
  84635. // #32149
  84636. M=D
  84637. // #32150
  84638. @SP
  84639. // #32151
  84640. M=M+1
  84641. //vv push_d_to_stack
  84642. //vv push_from_ram(THIS, 2)
  84643. //
  84644. //// add
  84645. //^^ arith_binary_op(+)
  84646. //^^ pop_stack_to_d
  84647. // #32152
  84648. @SP
  84649. // #32153
  84650. M=M-1
  84651. // #32154
  84652. A=M
  84653. // #32155
  84654. D=M
  84655. //vv pop_stack_to_d
  84656. //^^ arith_d_with_stack_top(D+M)
  84657. // #32156
  84658. @R13
  84659. // #32157
  84660. M=D
  84661. //^^ pop_stack_to_d
  84662. // #32158
  84663. @SP
  84664. // #32159
  84665. M=M-1
  84666. // #32160
  84667. A=M
  84668. // #32161
  84669. D=M
  84670. //vv pop_stack_to_d
  84671. // #32162
  84672. @R13
  84673. // #32163
  84674. D=D+M
  84675. // #32164
  84676. @R13
  84677. // #32165
  84678. M=0
  84679. //vv arith_d_with_stack_top(D+M)
  84680. //^^ push_d_to_stack
  84681. // #32166
  84682. @SP
  84683. // #32167
  84684. A=M
  84685. // #32168
  84686. M=D
  84687. // #32169
  84688. @SP
  84689. // #32170
  84690. M=M+1
  84691. //vv push_d_to_stack
  84692. //vv arith_binary_op(+)
  84693. //
  84694. //// call Screen.drawRectangle 4
  84695. //^^ push_constant(RET_ADDR_325)
  84696. // #32171
  84697. @RET_ADDR_325
  84698. // #32172
  84699. D=A
  84700. //^^ push_d_to_stack
  84701. // #32173
  84702. @SP
  84703. // #32174
  84704. A=M
  84705. // #32175
  84706. M=D
  84707. // #32176
  84708. @SP
  84709. // #32177
  84710. M=M+1
  84711. //vv push_d_to_stack
  84712. //vv push_constant(RET_ADDR_325)
  84713. //push return-address
  84714. // #32178
  84715. @LCL
  84716. // #32179
  84717. D=M
  84718. //^^ push_d_to_stack
  84719. // #32180
  84720. @SP
  84721. // #32181
  84722. A=M
  84723. // #32182
  84724. M=D
  84725. // #32183
  84726. @SP
  84727. // #32184
  84728. M=M+1
  84729. //vv push_d_to_stack
  84730. //push LCL
  84731. // #32185
  84732. @ARG
  84733. // #32186
  84734. D=M
  84735. //^^ push_d_to_stack
  84736. // #32187
  84737. @SP
  84738. // #32188
  84739. A=M
  84740. // #32189
  84741. M=D
  84742. // #32190
  84743. @SP
  84744. // #32191
  84745. M=M+1
  84746. //vv push_d_to_stack
  84747. //push ARG
  84748. // #32192
  84749. @THIS
  84750. // #32193
  84751. D=M
  84752. //^^ push_d_to_stack
  84753. // #32194
  84754. @SP
  84755. // #32195
  84756. A=M
  84757. // #32196
  84758. M=D
  84759. // #32197
  84760. @SP
  84761. // #32198
  84762. M=M+1
  84763. //vv push_d_to_stack
  84764. //push THIS
  84765. // #32199
  84766. @THAT
  84767. // #32200
  84768. D=M
  84769. //^^ push_d_to_stack
  84770. // #32201
  84771. @SP
  84772. // #32202
  84773. A=M
  84774. // #32203
  84775. M=D
  84776. // #32204
  84777. @SP
  84778. // #32205
  84779. M=M+1
  84780. //vv push_d_to_stack
  84781. //push THAT
  84782. // #32206
  84783. @SP
  84784. // #32207
  84785. D=M
  84786. // #32208
  84787. @ARG
  84788. // #32209
  84789. M=D
  84790. // #32210
  84791. @9
  84792. // #32211
  84793. D=A
  84794. // #32212
  84795. @ARG
  84796. // #32213
  84797. M=M-D // ARG = SP - args - 5
  84798. // #32214
  84799. @SP
  84800. // #32215
  84801. D=M
  84802. // #32216
  84803. @LCL
  84804. // #32217
  84805. M=D // LCL = SP
  84806. // #32218
  84807. @Screen.drawRectangle
  84808. // #32219
  84809. 0;JMP
  84810. (RET_ADDR_325)
  84811. //
  84812. //// pop temp 0
  84813. //^^ pop_to_loc{5)
  84814. //^^ pop_stack_to_d
  84815. // #32220
  84816. @SP
  84817. // #32221
  84818. M=M-1
  84819. // #32222
  84820. A=M
  84821. // #32223
  84822. D=M
  84823. //vv pop_stack_to_d
  84824. // #32224
  84825. @5
  84826. // #32225
  84827. M=D
  84828. //vv pop_to_loc{5)
  84829. //
  84830. //// label IF_FALSE0
  84831. (Square.moveDown$IF_FALSE0)
  84832. //
  84833. //// push constant 0
  84834. //^^ push_constant(0)
  84835. // #32226
  84836. @0
  84837. // #32227
  84838. D=A
  84839. //^^ push_d_to_stack
  84840. // #32228
  84841. @SP
  84842. // #32229
  84843. A=M
  84844. // #32230
  84845. M=D
  84846. // #32231
  84847. @SP
  84848. // #32232
  84849. M=M+1
  84850. //vv push_d_to_stack
  84851. //vv push_constant(0)
  84852. //
  84853. //// return
  84854. // #32233
  84855. @LCL
  84856. // #32234
  84857. D=M
  84858. // #32235
  84859. @R14
  84860. // #32236
  84861. M=D //R14=LCL
  84862. // #32237
  84863. @5
  84864. // #32238
  84865. A=D-A
  84866. // #32239
  84867. D=M
  84868. // #32240
  84869. @R15
  84870. // #32241
  84871. M=D //R15=*(LCL-5)
  84872. //^^ pop_stack_to_d
  84873. // #32242
  84874. @SP
  84875. // #32243
  84876. M=M-1
  84877. // #32244
  84878. A=M
  84879. // #32245
  84880. D=M
  84881. //vv pop_stack_to_d
  84882. // #32246
  84883. @ARG
  84884. // #32247
  84885. A=M
  84886. // #32248
  84887. M=D //*ARG = pop()
  84888. // #32249
  84889. @ARG
  84890. // #32250
  84891. D=M
  84892. // #32251
  84893. @SP
  84894. // #32252
  84895. M=D+1 //SP=ARG+1
  84896. // #32253
  84897. @R14
  84898. // #32254
  84899. AM=M-1
  84900. // #32255
  84901. D=M
  84902. // #32256
  84903. @THAT
  84904. // #32257
  84905. M=D //THAT = *(--R14)
  84906. // #32258
  84907. @R14
  84908. // #32259
  84909. AM=M-1
  84910. // #32260
  84911. D=M
  84912. // #32261
  84913. @THIS
  84914. // #32262
  84915. M=D //THIS = *(--R14)
  84916. // #32263
  84917. @R14
  84918. // #32264
  84919. AM=M-1
  84920. // #32265
  84921. D=M
  84922. // #32266
  84923. @ARG
  84924. // #32267
  84925. M=D //ARG = *(--R14)
  84926. // #32268
  84927. @R14
  84928. // #32269
  84929. AM=M-1
  84930. // #32270
  84931. D=M
  84932. // #32271
  84933. @LCL
  84934. // #32272
  84935. M=D //LCL = *(--R14)
  84936. // #32273
  84937. @R15
  84938. // #32274
  84939. A=M
  84940. // #32275
  84941. 0;JMP //goto *R15
  84942. //
  84943. //// function Square.moveLeft 0
  84944. (Square.moveLeft)
  84945. //
  84946. //// push argument 0
  84947. //^^ push_from_ram(ARG, 0)
  84948. // #32276
  84949. @ARG
  84950. // #32277
  84951. D=M
  84952. // #32278
  84953. @0
  84954. // #32279
  84955. A=D+A
  84956. // #32280
  84957. D=M
  84958. //^^ push_d_to_stack
  84959. // #32281
  84960. @SP
  84961. // #32282
  84962. A=M
  84963. // #32283
  84964. M=D
  84965. // #32284
  84966. @SP
  84967. // #32285
  84968. M=M+1
  84969. //vv push_d_to_stack
  84970. //vv push_from_ram(ARG, 0)
  84971. //
  84972. //// pop pointer 0
  84973. //^^ pop_to_loc{3)
  84974. //^^ pop_stack_to_d
  84975. // #32286
  84976. @SP
  84977. // #32287
  84978. M=M-1
  84979. // #32288
  84980. A=M
  84981. // #32289
  84982. D=M
  84983. //vv pop_stack_to_d
  84984. // #32290
  84985. @3
  84986. // #32291
  84987. M=D
  84988. //vv pop_to_loc{3)
  84989. //
  84990. //// push this 0
  84991. //^^ push_from_ram(THIS, 0)
  84992. // #32292
  84993. @THIS
  84994. // #32293
  84995. D=M
  84996. // #32294
  84997. @0
  84998. // #32295
  84999. A=D+A
  85000. // #32296
  85001. D=M
  85002. //^^ push_d_to_stack
  85003. // #32297
  85004. @SP
  85005. // #32298
  85006. A=M
  85007. // #32299
  85008. M=D
  85009. // #32300
  85010. @SP
  85011. // #32301
  85012. M=M+1
  85013. //vv push_d_to_stack
  85014. //vv push_from_ram(THIS, 0)
  85015. //
  85016. //// push constant 1
  85017. //^^ push_constant(1)
  85018. // #32302
  85019. @1
  85020. // #32303
  85021. D=A
  85022. //^^ push_d_to_stack
  85023. // #32304
  85024. @SP
  85025. // #32305
  85026. A=M
  85027. // #32306
  85028. M=D
  85029. // #32307
  85030. @SP
  85031. // #32308
  85032. M=M+1
  85033. //vv push_d_to_stack
  85034. //vv push_constant(1)
  85035. //
  85036. //// gt
  85037. //^^ arith_cmp_op(JGT)
  85038. //^^ pop_stack_to_d
  85039. // #32309
  85040. @SP
  85041. // #32310
  85042. M=M-1
  85043. // #32311
  85044. A=M
  85045. // #32312
  85046. D=M
  85047. //vv pop_stack_to_d
  85048. //^^ arith_d_with_stack_top(D-M)
  85049. // #32313
  85050. @R13
  85051. // #32314
  85052. M=D
  85053. //^^ pop_stack_to_d
  85054. // #32315
  85055. @SP
  85056. // #32316
  85057. M=M-1
  85058. // #32317
  85059. A=M
  85060. // #32318
  85061. D=M
  85062. //vv pop_stack_to_d
  85063. // #32319
  85064. @R13
  85065. // #32320
  85066. D=D-M
  85067. // #32321
  85068. @R13
  85069. // #32322
  85070. M=0
  85071. //vv arith_d_with_stack_top(D-M)
  85072. // #32323
  85073. @PUT_TRUE_326
  85074. // #32324
  85075. D;JGT
  85076. // #32325
  85077. @R13
  85078. // #32326
  85079. M=0
  85080. // #32327
  85081. @CONT_326
  85082. // #32328
  85083. 0;JMP
  85084. (PUT_TRUE_326)
  85085. // #32329
  85086. @R13
  85087. // #32330
  85088. M=-1
  85089. (CONT_326)
  85090. // #32331
  85091. @R13
  85092. // #32332
  85093. D=M
  85094. // #32333
  85095. @R13
  85096. // #32334
  85097. M=0
  85098. //^^ push_d_to_stack
  85099. // #32335
  85100. @SP
  85101. // #32336
  85102. A=M
  85103. // #32337
  85104. M=D
  85105. // #32338
  85106. @SP
  85107. // #32339
  85108. M=M+1
  85109. //vv push_d_to_stack
  85110. //vv arith_cmp_op(JGT)
  85111. //
  85112. //// if-goto IF_TRUE0
  85113. //^^ pop_stack_to_d
  85114. // #32340
  85115. @SP
  85116. // #32341
  85117. M=M-1
  85118. // #32342
  85119. A=M
  85120. // #32343
  85121. D=M
  85122. //vv pop_stack_to_d
  85123. // #32344
  85124. @Square.moveLeft$IF_TRUE0
  85125. // #32345
  85126. D;JNE
  85127. //
  85128. //// goto IF_FALSE0
  85129. // #32346
  85130. @Square.moveLeft$IF_FALSE0
  85131. // #32347
  85132. 0;JMP
  85133. //
  85134. //// label IF_TRUE0
  85135. (Square.moveLeft$IF_TRUE0)
  85136. //
  85137. //// push constant 0
  85138. //^^ push_constant(0)
  85139. // #32348
  85140. @0
  85141. // #32349
  85142. D=A
  85143. //^^ push_d_to_stack
  85144. // #32350
  85145. @SP
  85146. // #32351
  85147. A=M
  85148. // #32352
  85149. M=D
  85150. // #32353
  85151. @SP
  85152. // #32354
  85153. M=M+1
  85154. //vv push_d_to_stack
  85155. //vv push_constant(0)
  85156. //
  85157. //// call Screen.setColor 1
  85158. //^^ push_constant(RET_ADDR_327)
  85159. // #32355
  85160. @RET_ADDR_327
  85161. // #32356
  85162. D=A
  85163. //^^ push_d_to_stack
  85164. // #32357
  85165. @SP
  85166. // #32358
  85167. A=M
  85168. // #32359
  85169. M=D
  85170. // #32360
  85171. @SP
  85172. // #32361
  85173. M=M+1
  85174. //vv push_d_to_stack
  85175. //vv push_constant(RET_ADDR_327)
  85176. //push return-address
  85177. // #32362
  85178. @LCL
  85179. // #32363
  85180. D=M
  85181. //^^ push_d_to_stack
  85182. // #32364
  85183. @SP
  85184. // #32365
  85185. A=M
  85186. // #32366
  85187. M=D
  85188. // #32367
  85189. @SP
  85190. // #32368
  85191. M=M+1
  85192. //vv push_d_to_stack
  85193. //push LCL
  85194. // #32369
  85195. @ARG
  85196. // #32370
  85197. D=M
  85198. //^^ push_d_to_stack
  85199. // #32371
  85200. @SP
  85201. // #32372
  85202. A=M
  85203. // #32373
  85204. M=D
  85205. // #32374
  85206. @SP
  85207. // #32375
  85208. M=M+1
  85209. //vv push_d_to_stack
  85210. //push ARG
  85211. // #32376
  85212. @THIS
  85213. // #32377
  85214. D=M
  85215. //^^ push_d_to_stack
  85216. // #32378
  85217. @SP
  85218. // #32379
  85219. A=M
  85220. // #32380
  85221. M=D
  85222. // #32381
  85223. @SP
  85224. // #32382
  85225. M=M+1
  85226. //vv push_d_to_stack
  85227. //push THIS
  85228. // #32383
  85229. @THAT
  85230. // #32384
  85231. D=M
  85232. //^^ push_d_to_stack
  85233. // #32385
  85234. @SP
  85235. // #32386
  85236. A=M
  85237. // #32387
  85238. M=D
  85239. // #32388
  85240. @SP
  85241. // #32389
  85242. M=M+1
  85243. //vv push_d_to_stack
  85244. //push THAT
  85245. // #32390
  85246. @SP
  85247. // #32391
  85248. D=M
  85249. // #32392
  85250. @ARG
  85251. // #32393
  85252. M=D
  85253. // #32394
  85254. @6
  85255. // #32395
  85256. D=A
  85257. // #32396
  85258. @ARG
  85259. // #32397
  85260. M=M-D // ARG = SP - args - 5
  85261. // #32398
  85262. @SP
  85263. // #32399
  85264. D=M
  85265. // #32400
  85266. @LCL
  85267. // #32401
  85268. M=D // LCL = SP
  85269. // #32402
  85270. @Screen.setColor
  85271. // #32403
  85272. 0;JMP
  85273. (RET_ADDR_327)
  85274. //
  85275. //// pop temp 0
  85276. //^^ pop_to_loc{5)
  85277. //^^ pop_stack_to_d
  85278. // #32404
  85279. @SP
  85280. // #32405
  85281. M=M-1
  85282. // #32406
  85283. A=M
  85284. // #32407
  85285. D=M
  85286. //vv pop_stack_to_d
  85287. // #32408
  85288. @5
  85289. // #32409
  85290. M=D
  85291. //vv pop_to_loc{5)
  85292. //
  85293. //// push this 0
  85294. //^^ push_from_ram(THIS, 0)
  85295. // #32410
  85296. @THIS
  85297. // #32411
  85298. D=M
  85299. // #32412
  85300. @0
  85301. // #32413
  85302. A=D+A
  85303. // #32414
  85304. D=M
  85305. //^^ push_d_to_stack
  85306. // #32415
  85307. @SP
  85308. // #32416
  85309. A=M
  85310. // #32417
  85311. M=D
  85312. // #32418
  85313. @SP
  85314. // #32419
  85315. M=M+1
  85316. //vv push_d_to_stack
  85317. //vv push_from_ram(THIS, 0)
  85318. //
  85319. //// push this 2
  85320. //^^ push_from_ram(THIS, 2)
  85321. // #32420
  85322. @THIS
  85323. // #32421
  85324. D=M
  85325. // #32422
  85326. @2
  85327. // #32423
  85328. A=D+A
  85329. // #32424
  85330. D=M
  85331. //^^ push_d_to_stack
  85332. // #32425
  85333. @SP
  85334. // #32426
  85335. A=M
  85336. // #32427
  85337. M=D
  85338. // #32428
  85339. @SP
  85340. // #32429
  85341. M=M+1
  85342. //vv push_d_to_stack
  85343. //vv push_from_ram(THIS, 2)
  85344. //
  85345. //// add
  85346. //^^ arith_binary_op(+)
  85347. //^^ pop_stack_to_d
  85348. // #32430
  85349. @SP
  85350. // #32431
  85351. M=M-1
  85352. // #32432
  85353. A=M
  85354. // #32433
  85355. D=M
  85356. //vv pop_stack_to_d
  85357. //^^ arith_d_with_stack_top(D+M)
  85358. // #32434
  85359. @R13
  85360. // #32435
  85361. M=D
  85362. //^^ pop_stack_to_d
  85363. // #32436
  85364. @SP
  85365. // #32437
  85366. M=M-1
  85367. // #32438
  85368. A=M
  85369. // #32439
  85370. D=M
  85371. //vv pop_stack_to_d
  85372. // #32440
  85373. @R13
  85374. // #32441
  85375. D=D+M
  85376. // #32442
  85377. @R13
  85378. // #32443
  85379. M=0
  85380. //vv arith_d_with_stack_top(D+M)
  85381. //^^ push_d_to_stack
  85382. // #32444
  85383. @SP
  85384. // #32445
  85385. A=M
  85386. // #32446
  85387. M=D
  85388. // #32447
  85389. @SP
  85390. // #32448
  85391. M=M+1
  85392. //vv push_d_to_stack
  85393. //vv arith_binary_op(+)
  85394. //
  85395. //// push constant 1
  85396. //^^ push_constant(1)
  85397. // #32449
  85398. @1
  85399. // #32450
  85400. D=A
  85401. //^^ push_d_to_stack
  85402. // #32451
  85403. @SP
  85404. // #32452
  85405. A=M
  85406. // #32453
  85407. M=D
  85408. // #32454
  85409. @SP
  85410. // #32455
  85411. M=M+1
  85412. //vv push_d_to_stack
  85413. //vv push_constant(1)
  85414. //
  85415. //// sub
  85416. //^^ arith_binary_op(-)
  85417. //^^ pop_stack_to_d
  85418. // #32456
  85419. @SP
  85420. // #32457
  85421. M=M-1
  85422. // #32458
  85423. A=M
  85424. // #32459
  85425. D=M
  85426. //vv pop_stack_to_d
  85427. //^^ arith_d_with_stack_top(D-M)
  85428. // #32460
  85429. @R13
  85430. // #32461
  85431. M=D
  85432. //^^ pop_stack_to_d
  85433. // #32462
  85434. @SP
  85435. // #32463
  85436. M=M-1
  85437. // #32464
  85438. A=M
  85439. // #32465
  85440. D=M
  85441. //vv pop_stack_to_d
  85442. // #32466
  85443. @R13
  85444. // #32467
  85445. D=D-M
  85446. // #32468
  85447. @R13
  85448. // #32469
  85449. M=0
  85450. //vv arith_d_with_stack_top(D-M)
  85451. //^^ push_d_to_stack
  85452. // #32470
  85453. @SP
  85454. // #32471
  85455. A=M
  85456. // #32472
  85457. M=D
  85458. // #32473
  85459. @SP
  85460. // #32474
  85461. M=M+1
  85462. //vv push_d_to_stack
  85463. //vv arith_binary_op(-)
  85464. //
  85465. //// push this 1
  85466. //^^ push_from_ram(THIS, 1)
  85467. // #32475
  85468. @THIS
  85469. // #32476
  85470. D=M
  85471. // #32477
  85472. @1
  85473. // #32478
  85474. A=D+A
  85475. // #32479
  85476. D=M
  85477. //^^ push_d_to_stack
  85478. // #32480
  85479. @SP
  85480. // #32481
  85481. A=M
  85482. // #32482
  85483. M=D
  85484. // #32483
  85485. @SP
  85486. // #32484
  85487. M=M+1
  85488. //vv push_d_to_stack
  85489. //vv push_from_ram(THIS, 1)
  85490. //
  85491. //// push this 0
  85492. //^^ push_from_ram(THIS, 0)
  85493. // #32485
  85494. @THIS
  85495. // #32486
  85496. D=M
  85497. // #32487
  85498. @0
  85499. // #32488
  85500. A=D+A
  85501. // #32489
  85502. D=M
  85503. //^^ push_d_to_stack
  85504. // #32490
  85505. @SP
  85506. // #32491
  85507. A=M
  85508. // #32492
  85509. M=D
  85510. // #32493
  85511. @SP
  85512. // #32494
  85513. M=M+1
  85514. //vv push_d_to_stack
  85515. //vv push_from_ram(THIS, 0)
  85516. //
  85517. //// push this 2
  85518. //^^ push_from_ram(THIS, 2)
  85519. // #32495
  85520. @THIS
  85521. // #32496
  85522. D=M
  85523. // #32497
  85524. @2
  85525. // #32498
  85526. A=D+A
  85527. // #32499
  85528. D=M
  85529. //^^ push_d_to_stack
  85530. // #32500
  85531. @SP
  85532. // #32501
  85533. A=M
  85534. // #32502
  85535. M=D
  85536. // #32503
  85537. @SP
  85538. // #32504
  85539. M=M+1
  85540. //vv push_d_to_stack
  85541. //vv push_from_ram(THIS, 2)
  85542. //
  85543. //// add
  85544. //^^ arith_binary_op(+)
  85545. //^^ pop_stack_to_d
  85546. // #32505
  85547. @SP
  85548. // #32506
  85549. M=M-1
  85550. // #32507
  85551. A=M
  85552. // #32508
  85553. D=M
  85554. //vv pop_stack_to_d
  85555. //^^ arith_d_with_stack_top(D+M)
  85556. // #32509
  85557. @R13
  85558. // #32510
  85559. M=D
  85560. //^^ pop_stack_to_d
  85561. // #32511
  85562. @SP
  85563. // #32512
  85564. M=M-1
  85565. // #32513
  85566. A=M
  85567. // #32514
  85568. D=M
  85569. //vv pop_stack_to_d
  85570. // #32515
  85571. @R13
  85572. // #32516
  85573. D=D+M
  85574. // #32517
  85575. @R13
  85576. // #32518
  85577. M=0
  85578. //vv arith_d_with_stack_top(D+M)
  85579. //^^ push_d_to_stack
  85580. // #32519
  85581. @SP
  85582. // #32520
  85583. A=M
  85584. // #32521
  85585. M=D
  85586. // #32522
  85587. @SP
  85588. // #32523
  85589. M=M+1
  85590. //vv push_d_to_stack
  85591. //vv arith_binary_op(+)
  85592. //
  85593. //// push this 1
  85594. //^^ push_from_ram(THIS, 1)
  85595. // #32524
  85596. @THIS
  85597. // #32525
  85598. D=M
  85599. // #32526
  85600. @1
  85601. // #32527
  85602. A=D+A
  85603. // #32528
  85604. D=M
  85605. //^^ push_d_to_stack
  85606. // #32529
  85607. @SP
  85608. // #32530
  85609. A=M
  85610. // #32531
  85611. M=D
  85612. // #32532
  85613. @SP
  85614. // #32533
  85615. M=M+1
  85616. //vv push_d_to_stack
  85617. //vv push_from_ram(THIS, 1)
  85618. //
  85619. //// push this 2
  85620. //^^ push_from_ram(THIS, 2)
  85621. // #32534
  85622. @THIS
  85623. // #32535
  85624. D=M
  85625. // #32536
  85626. @2
  85627. // #32537
  85628. A=D+A
  85629. // #32538
  85630. D=M
  85631. //^^ push_d_to_stack
  85632. // #32539
  85633. @SP
  85634. // #32540
  85635. A=M
  85636. // #32541
  85637. M=D
  85638. // #32542
  85639. @SP
  85640. // #32543
  85641. M=M+1
  85642. //vv push_d_to_stack
  85643. //vv push_from_ram(THIS, 2)
  85644. //
  85645. //// add
  85646. //^^ arith_binary_op(+)
  85647. //^^ pop_stack_to_d
  85648. // #32544
  85649. @SP
  85650. // #32545
  85651. M=M-1
  85652. // #32546
  85653. A=M
  85654. // #32547
  85655. D=M
  85656. //vv pop_stack_to_d
  85657. //^^ arith_d_with_stack_top(D+M)
  85658. // #32548
  85659. @R13
  85660. // #32549
  85661. M=D
  85662. //^^ pop_stack_to_d
  85663. // #32550
  85664. @SP
  85665. // #32551
  85666. M=M-1
  85667. // #32552
  85668. A=M
  85669. // #32553
  85670. D=M
  85671. //vv pop_stack_to_d
  85672. // #32554
  85673. @R13
  85674. // #32555
  85675. D=D+M
  85676. // #32556
  85677. @R13
  85678. // #32557
  85679. M=0
  85680. //vv arith_d_with_stack_top(D+M)
  85681. //^^ push_d_to_stack
  85682. // #32558
  85683. @SP
  85684. // #32559
  85685. A=M
  85686. // #32560
  85687. M=D
  85688. // #32561
  85689. @SP
  85690. // #32562
  85691. M=M+1
  85692. //vv push_d_to_stack
  85693. //vv arith_binary_op(+)
  85694. //
  85695. //// call Screen.drawRectangle 4
  85696. //^^ push_constant(RET_ADDR_328)
  85697. // #32563
  85698. @RET_ADDR_328
  85699. // #32564
  85700. D=A
  85701. //^^ push_d_to_stack
  85702. // #32565
  85703. @SP
  85704. // #32566
  85705. A=M
  85706. // #32567
  85707. M=D
  85708. // #32568
  85709. @SP
  85710. // #32569
  85711. M=M+1
  85712. //vv push_d_to_stack
  85713. //vv push_constant(RET_ADDR_328)
  85714. //push return-address
  85715. // #32570
  85716. @LCL
  85717. // #32571
  85718. D=M
  85719. //^^ push_d_to_stack
  85720. // #32572
  85721. @SP
  85722. // #32573
  85723. A=M
  85724. // #32574
  85725. M=D
  85726. // #32575
  85727. @SP
  85728. // #32576
  85729. M=M+1
  85730. //vv push_d_to_stack
  85731. //push LCL
  85732. // #32577
  85733. @ARG
  85734. // #32578
  85735. D=M
  85736. //^^ push_d_to_stack
  85737. // #32579
  85738. @SP
  85739. // #32580
  85740. A=M
  85741. // #32581
  85742. M=D
  85743. // #32582
  85744. @SP
  85745. // #32583
  85746. M=M+1
  85747. //vv push_d_to_stack
  85748. //push ARG
  85749. // #32584
  85750. @THIS
  85751. // #32585
  85752. D=M
  85753. //^^ push_d_to_stack
  85754. // #32586
  85755. @SP
  85756. // #32587
  85757. A=M
  85758. // #32588
  85759. M=D
  85760. // #32589
  85761. @SP
  85762. // #32590
  85763. M=M+1
  85764. //vv push_d_to_stack
  85765. //push THIS
  85766. // #32591
  85767. @THAT
  85768. // #32592
  85769. D=M
  85770. //^^ push_d_to_stack
  85771. // #32593
  85772. @SP
  85773. // #32594
  85774. A=M
  85775. // #32595
  85776. M=D
  85777. // #32596
  85778. @SP
  85779. // #32597
  85780. M=M+1
  85781. //vv push_d_to_stack
  85782. //push THAT
  85783. // #32598
  85784. @SP
  85785. // #32599
  85786. D=M
  85787. // #32600
  85788. @ARG
  85789. // #32601
  85790. M=D
  85791. // #32602
  85792. @9
  85793. // #32603
  85794. D=A
  85795. // #32604
  85796. @ARG
  85797. // #32605
  85798. M=M-D // ARG = SP - args - 5
  85799. // #32606
  85800. @SP
  85801. // #32607
  85802. D=M
  85803. // #32608
  85804. @LCL
  85805. // #32609
  85806. M=D // LCL = SP
  85807. // #32610
  85808. @Screen.drawRectangle
  85809. // #32611
  85810. 0;JMP
  85811. (RET_ADDR_328)
  85812. //
  85813. //// pop temp 0
  85814. //^^ pop_to_loc{5)
  85815. //^^ pop_stack_to_d
  85816. // #32612
  85817. @SP
  85818. // #32613
  85819. M=M-1
  85820. // #32614
  85821. A=M
  85822. // #32615
  85823. D=M
  85824. //vv pop_stack_to_d
  85825. // #32616
  85826. @5
  85827. // #32617
  85828. M=D
  85829. //vv pop_to_loc{5)
  85830. //
  85831. //// push this 0
  85832. //^^ push_from_ram(THIS, 0)
  85833. // #32618
  85834. @THIS
  85835. // #32619
  85836. D=M
  85837. // #32620
  85838. @0
  85839. // #32621
  85840. A=D+A
  85841. // #32622
  85842. D=M
  85843. //^^ push_d_to_stack
  85844. // #32623
  85845. @SP
  85846. // #32624
  85847. A=M
  85848. // #32625
  85849. M=D
  85850. // #32626
  85851. @SP
  85852. // #32627
  85853. M=M+1
  85854. //vv push_d_to_stack
  85855. //vv push_from_ram(THIS, 0)
  85856. //
  85857. //// push constant 2
  85858. //^^ push_constant(2)
  85859. // #32628
  85860. @2
  85861. // #32629
  85862. D=A
  85863. //^^ push_d_to_stack
  85864. // #32630
  85865. @SP
  85866. // #32631
  85867. A=M
  85868. // #32632
  85869. M=D
  85870. // #32633
  85871. @SP
  85872. // #32634
  85873. M=M+1
  85874. //vv push_d_to_stack
  85875. //vv push_constant(2)
  85876. //
  85877. //// sub
  85878. //^^ arith_binary_op(-)
  85879. //^^ pop_stack_to_d
  85880. // #32635
  85881. @SP
  85882. // #32636
  85883. M=M-1
  85884. // #32637
  85885. A=M
  85886. // #32638
  85887. D=M
  85888. //vv pop_stack_to_d
  85889. //^^ arith_d_with_stack_top(D-M)
  85890. // #32639
  85891. @R13
  85892. // #32640
  85893. M=D
  85894. //^^ pop_stack_to_d
  85895. // #32641
  85896. @SP
  85897. // #32642
  85898. M=M-1
  85899. // #32643
  85900. A=M
  85901. // #32644
  85902. D=M
  85903. //vv pop_stack_to_d
  85904. // #32645
  85905. @R13
  85906. // #32646
  85907. D=D-M
  85908. // #32647
  85909. @R13
  85910. // #32648
  85911. M=0
  85912. //vv arith_d_with_stack_top(D-M)
  85913. //^^ push_d_to_stack
  85914. // #32649
  85915. @SP
  85916. // #32650
  85917. A=M
  85918. // #32651
  85919. M=D
  85920. // #32652
  85921. @SP
  85922. // #32653
  85923. M=M+1
  85924. //vv push_d_to_stack
  85925. //vv arith_binary_op(-)
  85926. //
  85927. //// pop this 0
  85928. //^^ pop_to_ram(THIS, 0)
  85929. // #32654
  85930. @THIS
  85931. // #32655
  85932. D=M
  85933. // #32656
  85934. @0
  85935. // #32657
  85936. D=D+A
  85937. // #32658
  85938. @R13
  85939. // #32659
  85940. M=D
  85941. //^^ pop_stack_to_d
  85942. // #32660
  85943. @SP
  85944. // #32661
  85945. M=M-1
  85946. // #32662
  85947. A=M
  85948. // #32663
  85949. D=M
  85950. //vv pop_stack_to_d
  85951. // #32664
  85952. @R13
  85953. // #32665
  85954. A=M
  85955. // #32666
  85956. M=D
  85957. // #32667
  85958. @R13
  85959. // #32668
  85960. M=0
  85961. //vv pop_to_ram(THIS, 0)
  85962. //
  85963. //// push constant 0
  85964. //^^ push_constant(0)
  85965. // #32669
  85966. @0
  85967. // #32670
  85968. D=A
  85969. //^^ push_d_to_stack
  85970. // #32671
  85971. @SP
  85972. // #32672
  85973. A=M
  85974. // #32673
  85975. M=D
  85976. // #32674
  85977. @SP
  85978. // #32675
  85979. M=M+1
  85980. //vv push_d_to_stack
  85981. //vv push_constant(0)
  85982. //
  85983. //// not
  85984. //^^ arith_unary_op(!)
  85985. //^^ pop_stack_to_d
  85986. // #32676
  85987. @SP
  85988. // #32677
  85989. M=M-1
  85990. // #32678
  85991. A=M
  85992. // #32679
  85993. D=M
  85994. //vv pop_stack_to_d
  85995. // #32680
  85996. D=!D
  85997. //^^ push_d_to_stack
  85998. // #32681
  85999. @SP
  86000. // #32682
  86001. A=M
  86002. // #32683
  86003. M=D
  86004. // #32684
  86005. @SP
  86006. // #32685
  86007. M=M+1
  86008. //vv push_d_to_stack
  86009. //vv arith_unary_op(!)
  86010. //
  86011. //// call Screen.setColor 1
  86012. //^^ push_constant(RET_ADDR_329)
  86013. // #32686
  86014. @RET_ADDR_329
  86015. // #32687
  86016. D=A
  86017. //^^ push_d_to_stack
  86018. // #32688
  86019. @SP
  86020. // #32689
  86021. A=M
  86022. // #32690
  86023. M=D
  86024. // #32691
  86025. @SP
  86026. // #32692
  86027. M=M+1
  86028. //vv push_d_to_stack
  86029. //vv push_constant(RET_ADDR_329)
  86030. //push return-address
  86031. // #32693
  86032. @LCL
  86033. // #32694
  86034. D=M
  86035. //^^ push_d_to_stack
  86036. // #32695
  86037. @SP
  86038. // #32696
  86039. A=M
  86040. // #32697
  86041. M=D
  86042. // #32698
  86043. @SP
  86044. // #32699
  86045. M=M+1
  86046. //vv push_d_to_stack
  86047. //push LCL
  86048. // #32700
  86049. @ARG
  86050. // #32701
  86051. D=M
  86052. //^^ push_d_to_stack
  86053. // #32702
  86054. @SP
  86055. // #32703
  86056. A=M
  86057. // #32704
  86058. M=D
  86059. // #32705
  86060. @SP
  86061. // #32706
  86062. M=M+1
  86063. //vv push_d_to_stack
  86064. //push ARG
  86065. // #32707
  86066. @THIS
  86067. // #32708
  86068. D=M
  86069. //^^ push_d_to_stack
  86070. // #32709
  86071. @SP
  86072. // #32710
  86073. A=M
  86074. // #32711
  86075. M=D
  86076. // #32712
  86077. @SP
  86078. // #32713
  86079. M=M+1
  86080. //vv push_d_to_stack
  86081. //push THIS
  86082. // #32714
  86083. @THAT
  86084. // #32715
  86085. D=M
  86086. //^^ push_d_to_stack
  86087. // #32716
  86088. @SP
  86089. // #32717
  86090. A=M
  86091. // #32718
  86092. M=D
  86093. // #32719
  86094. @SP
  86095. // #32720
  86096. M=M+1
  86097. //vv push_d_to_stack
  86098. //push THAT
  86099. // #32721
  86100. @SP
  86101. // #32722
  86102. D=M
  86103. // #32723
  86104. @ARG
  86105. // #32724
  86106. M=D
  86107. // #32725
  86108. @6
  86109. // #32726
  86110. D=A
  86111. // #32727
  86112. @ARG
  86113. // #32728
  86114. M=M-D // ARG = SP - args - 5
  86115. // #32729
  86116. @SP
  86117. // #32730
  86118. D=M
  86119. // #32731
  86120. @LCL
  86121. // #32732
  86122. M=D // LCL = SP
  86123. // #32733
  86124. @Screen.setColor
  86125. // #32734
  86126. 0;JMP
  86127. (RET_ADDR_329)
  86128. //
  86129. //// pop temp 0
  86130. //^^ pop_to_loc{5)
  86131. //^^ pop_stack_to_d
  86132. // #32735
  86133. @SP
  86134. // #32736
  86135. M=M-1
  86136. // #32737
  86137. A=M
  86138. // #32738
  86139. D=M
  86140. //vv pop_stack_to_d
  86141. // #32739
  86142. @5
  86143. // #32740
  86144. M=D
  86145. //vv pop_to_loc{5)
  86146. //
  86147. //// push this 0
  86148. //^^ push_from_ram(THIS, 0)
  86149. // #32741
  86150. @THIS
  86151. // #32742
  86152. D=M
  86153. // #32743
  86154. @0
  86155. // #32744
  86156. A=D+A
  86157. // #32745
  86158. D=M
  86159. //^^ push_d_to_stack
  86160. // #32746
  86161. @SP
  86162. // #32747
  86163. A=M
  86164. // #32748
  86165. M=D
  86166. // #32749
  86167. @SP
  86168. // #32750
  86169. M=M+1
  86170. //vv push_d_to_stack
  86171. //vv push_from_ram(THIS, 0)
  86172. //
  86173. //// push this 1
  86174. //^^ push_from_ram(THIS, 1)
  86175. // #32751
  86176. @THIS
  86177. // #32752
  86178. D=M
  86179. // #32753
  86180. @1
  86181. // #32754
  86182. A=D+A
  86183. // #32755
  86184. D=M
  86185. //^^ push_d_to_stack
  86186. // #32756
  86187. @SP
  86188. // #32757
  86189. A=M
  86190. // #32758
  86191. M=D
  86192. // #32759
  86193. @SP
  86194. // #32760
  86195. M=M+1
  86196. //vv push_d_to_stack
  86197. //vv push_from_ram(THIS, 1)
  86198. //
  86199. //// push this 0
  86200. //^^ push_from_ram(THIS, 0)
  86201. // #32761
  86202. @THIS
  86203. // #32762
  86204. D=M
  86205. // #32763
  86206. @0
  86207. // #32764
  86208. A=D+A
  86209. // #32765
  86210. D=M
  86211. //^^ push_d_to_stack
  86212. // #32766
  86213. @SP
  86214. // #32767
  86215. A=M
  86216. // #32768
  86217. M=D
  86218. // #32769
  86219. @SP
  86220. // #32770
  86221. M=M+1
  86222. //vv push_d_to_stack
  86223. //vv push_from_ram(THIS, 0)
  86224. //
  86225. //// push constant 1
  86226. //^^ push_constant(1)
  86227. // #32771
  86228. @1
  86229. // #32772
  86230. D=A
  86231. //^^ push_d_to_stack
  86232. // #32773
  86233. @SP
  86234. // #32774
  86235. A=M
  86236. // #32775
  86237. M=D
  86238. // #32776
  86239. @SP
  86240. // #32777
  86241. M=M+1
  86242. //vv push_d_to_stack
  86243. //vv push_constant(1)
  86244. //
  86245. //// add
  86246. //^^ arith_binary_op(+)
  86247. //^^ pop_stack_to_d
  86248. // #32778
  86249. @SP
  86250. // #32779
  86251. M=M-1
  86252. // #32780
  86253. A=M
  86254. // #32781
  86255. D=M
  86256. //vv pop_stack_to_d
  86257. //^^ arith_d_with_stack_top(D+M)
  86258. // #32782
  86259. @R13
  86260. // #32783
  86261. M=D
  86262. //^^ pop_stack_to_d
  86263. // #32784
  86264. @SP
  86265. // #32785
  86266. M=M-1
  86267. // #32786
  86268. A=M
  86269. // #32787
  86270. D=M
  86271. //vv pop_stack_to_d
  86272. // #32788
  86273. @R13
  86274. // #32789
  86275. D=D+M
  86276. // #32790
  86277. @R13
  86278. // #32791
  86279. M=0
  86280. //vv arith_d_with_stack_top(D+M)
  86281. //^^ push_d_to_stack
  86282. // #32792
  86283. @SP
  86284. // #32793
  86285. A=M
  86286. // #32794
  86287. M=D
  86288. // #32795
  86289. @SP
  86290. // #32796
  86291. M=M+1
  86292. //vv push_d_to_stack
  86293. //vv arith_binary_op(+)
  86294. //
  86295. //// push this 1
  86296. //^^ push_from_ram(THIS, 1)
  86297. // #32797
  86298. @THIS
  86299. // #32798
  86300. D=M
  86301. // #32799
  86302. @1
  86303. // #32800
  86304. A=D+A
  86305. // #32801
  86306. D=M
  86307. //^^ push_d_to_stack
  86308. // #32802
  86309. @SP
  86310. // #32803
  86311. A=M
  86312. // #32804
  86313. M=D
  86314. // #32805
  86315. @SP
  86316. // #32806
  86317. M=M+1
  86318. //vv push_d_to_stack
  86319. //vv push_from_ram(THIS, 1)
  86320. //
  86321. //// push this 2
  86322. //^^ push_from_ram(THIS, 2)
  86323. // #32807
  86324. @THIS
  86325. // #32808
  86326. D=M
  86327. // #32809
  86328. @2
  86329. // #32810
  86330. A=D+A
  86331. // #32811
  86332. D=M
  86333. //^^ push_d_to_stack
  86334. // #32812
  86335. @SP
  86336. // #32813
  86337. A=M
  86338. // #32814
  86339. M=D
  86340. // #32815
  86341. @SP
  86342. // #32816
  86343. M=M+1
  86344. //vv push_d_to_stack
  86345. //vv push_from_ram(THIS, 2)
  86346. //
  86347. //// add
  86348. //^^ arith_binary_op(+)
  86349. //^^ pop_stack_to_d
  86350. // #32817
  86351. @SP
  86352. // #32818
  86353. M=M-1
  86354. // #32819
  86355. A=M
  86356. // #32820
  86357. D=M
  86358. //vv pop_stack_to_d
  86359. //^^ arith_d_with_stack_top(D+M)
  86360. // #32821
  86361. @R13
  86362. // #32822
  86363. M=D
  86364. //^^ pop_stack_to_d
  86365. // #32823
  86366. @SP
  86367. // #32824
  86368. M=M-1
  86369. // #32825
  86370. A=M
  86371. // #32826
  86372. D=M
  86373. //vv pop_stack_to_d
  86374. // #32827
  86375. @R13
  86376. // #32828
  86377. D=D+M
  86378. // #32829
  86379. @R13
  86380. // #32830
  86381. M=0
  86382. //vv arith_d_with_stack_top(D+M)
  86383. //^^ push_d_to_stack
  86384. // #32831
  86385. @SP
  86386. // #32832
  86387. A=M
  86388. // #32833
  86389. M=D
  86390. // #32834
  86391. @SP
  86392. // #32835
  86393. M=M+1
  86394. //vv push_d_to_stack
  86395. //vv arith_binary_op(+)
  86396. //
  86397. //// call Screen.drawRectangle 4
  86398. //^^ push_constant(RET_ADDR_330)
  86399. // #32836
  86400. @RET_ADDR_330
  86401. // #32837
  86402. D=A
  86403. //^^ push_d_to_stack
  86404. // #32838
  86405. @SP
  86406. // #32839
  86407. A=M
  86408. // #32840
  86409. M=D
  86410. // #32841
  86411. @SP
  86412. // #32842
  86413. M=M+1
  86414. //vv push_d_to_stack
  86415. //vv push_constant(RET_ADDR_330)
  86416. //push return-address
  86417. // #32843
  86418. @LCL
  86419. // #32844
  86420. D=M
  86421. //^^ push_d_to_stack
  86422. // #32845
  86423. @SP
  86424. // #32846
  86425. A=M
  86426. // #32847
  86427. M=D
  86428. // #32848
  86429. @SP
  86430. // #32849
  86431. M=M+1
  86432. //vv push_d_to_stack
  86433. //push LCL
  86434. // #32850
  86435. @ARG
  86436. // #32851
  86437. D=M
  86438. //^^ push_d_to_stack
  86439. // #32852
  86440. @SP
  86441. // #32853
  86442. A=M
  86443. // #32854
  86444. M=D
  86445. // #32855
  86446. @SP
  86447. // #32856
  86448. M=M+1
  86449. //vv push_d_to_stack
  86450. //push ARG
  86451. // #32857
  86452. @THIS
  86453. // #32858
  86454. D=M
  86455. //^^ push_d_to_stack
  86456. // #32859
  86457. @SP
  86458. // #32860
  86459. A=M
  86460. // #32861
  86461. M=D
  86462. // #32862
  86463. @SP
  86464. // #32863
  86465. M=M+1
  86466. //vv push_d_to_stack
  86467. //push THIS
  86468. // #32864
  86469. @THAT
  86470. // #32865
  86471. D=M
  86472. //^^ push_d_to_stack
  86473. // #32866
  86474. @SP
  86475. // #32867
  86476. A=M
  86477. // #32868
  86478. M=D
  86479. // #32869
  86480. @SP
  86481. // #32870
  86482. M=M+1
  86483. //vv push_d_to_stack
  86484. //push THAT
  86485. // #32871
  86486. @SP
  86487. // #32872
  86488. D=M
  86489. // #32873
  86490. @ARG
  86491. // #32874
  86492. M=D
  86493. // #32875
  86494. @9
  86495. // #32876
  86496. D=A
  86497. // #32877
  86498. @ARG
  86499. // #32878
  86500. M=M-D // ARG = SP - args - 5
  86501. // #32879
  86502. @SP
  86503. // #32880
  86504. D=M
  86505. // #32881
  86506. @LCL
  86507. // #32882
  86508. M=D // LCL = SP
  86509. // #32883
  86510. @Screen.drawRectangle
  86511. // #32884
  86512. 0;JMP
  86513. (RET_ADDR_330)
  86514. //
  86515. //// pop temp 0
  86516. //^^ pop_to_loc{5)
  86517. //^^ pop_stack_to_d
  86518. // #32885
  86519. @SP
  86520. // #32886
  86521. M=M-1
  86522. // #32887
  86523. A=M
  86524. // #32888
  86525. D=M
  86526. //vv pop_stack_to_d
  86527. // #32889
  86528. @5
  86529. // #32890
  86530. M=D
  86531. //vv pop_to_loc{5)
  86532. //
  86533. //// label IF_FALSE0
  86534. (Square.moveLeft$IF_FALSE0)
  86535. //
  86536. //// push constant 0
  86537. //^^ push_constant(0)
  86538. // #32891
  86539. @0
  86540. // #32892
  86541. D=A
  86542. //^^ push_d_to_stack
  86543. // #32893
  86544. @SP
  86545. // #32894
  86546. A=M
  86547. // #32895
  86548. M=D
  86549. // #32896
  86550. @SP
  86551. // #32897
  86552. M=M+1
  86553. //vv push_d_to_stack
  86554. //vv push_constant(0)
  86555. //
  86556. //// return
  86557. // #32898
  86558. @LCL
  86559. // #32899
  86560. D=M
  86561. // #32900
  86562. @R14
  86563. // #32901
  86564. M=D //R14=LCL
  86565. // #32902
  86566. @5
  86567. // #32903
  86568. A=D-A
  86569. // #32904
  86570. D=M
  86571. // #32905
  86572. @R15
  86573. // #32906
  86574. M=D //R15=*(LCL-5)
  86575. //^^ pop_stack_to_d
  86576. // #32907
  86577. @SP
  86578. // #32908
  86579. M=M-1
  86580. // #32909
  86581. A=M
  86582. // #32910
  86583. D=M
  86584. //vv pop_stack_to_d
  86585. // #32911
  86586. @ARG
  86587. // #32912
  86588. A=M
  86589. // #32913
  86590. M=D //*ARG = pop()
  86591. // #32914
  86592. @ARG
  86593. // #32915
  86594. D=M
  86595. // #32916
  86596. @SP
  86597. // #32917
  86598. M=D+1 //SP=ARG+1
  86599. // #32918
  86600. @R14
  86601. // #32919
  86602. AM=M-1
  86603. // #32920
  86604. D=M
  86605. // #32921
  86606. @THAT
  86607. // #32922
  86608. M=D //THAT = *(--R14)
  86609. // #32923
  86610. @R14
  86611. // #32924
  86612. AM=M-1
  86613. // #32925
  86614. D=M
  86615. // #32926
  86616. @THIS
  86617. // #32927
  86618. M=D //THIS = *(--R14)
  86619. // #32928
  86620. @R14
  86621. // #32929
  86622. AM=M-1
  86623. // #32930
  86624. D=M
  86625. // #32931
  86626. @ARG
  86627. // #32932
  86628. M=D //ARG = *(--R14)
  86629. // #32933
  86630. @R14
  86631. // #32934
  86632. AM=M-1
  86633. // #32935
  86634. D=M
  86635. // #32936
  86636. @LCL
  86637. // #32937
  86638. M=D //LCL = *(--R14)
  86639. // #32938
  86640. @R15
  86641. // #32939
  86642. A=M
  86643. // #32940
  86644. 0;JMP //goto *R15
  86645. //
  86646. //// function Square.moveRight 0
  86647. (Square.moveRight)
  86648. //
  86649. //// push argument 0
  86650. //^^ push_from_ram(ARG, 0)
  86651. // #32941
  86652. @ARG
  86653. // #32942
  86654. D=M
  86655. // #32943
  86656. @0
  86657. // #32944
  86658. A=D+A
  86659. // #32945
  86660. D=M
  86661. //^^ push_d_to_stack
  86662. // #32946
  86663. @SP
  86664. // #32947
  86665. A=M
  86666. // #32948
  86667. M=D
  86668. // #32949
  86669. @SP
  86670. // #32950
  86671. M=M+1
  86672. //vv push_d_to_stack
  86673. //vv push_from_ram(ARG, 0)
  86674. //
  86675. //// pop pointer 0
  86676. //^^ pop_to_loc{3)
  86677. //^^ pop_stack_to_d
  86678. // #32951
  86679. @SP
  86680. // #32952
  86681. M=M-1
  86682. // #32953
  86683. A=M
  86684. // #32954
  86685. D=M
  86686. //vv pop_stack_to_d
  86687. // #32955
  86688. @3
  86689. // #32956
  86690. M=D
  86691. //vv pop_to_loc{3)
  86692. //
  86693. //// push this 0
  86694. //^^ push_from_ram(THIS, 0)
  86695. // #32957
  86696. @THIS
  86697. // #32958
  86698. D=M
  86699. // #32959
  86700. @0
  86701. // #32960
  86702. A=D+A
  86703. // #32961
  86704. D=M
  86705. //^^ push_d_to_stack
  86706. // #32962
  86707. @SP
  86708. // #32963
  86709. A=M
  86710. // #32964
  86711. M=D
  86712. // #32965
  86713. @SP
  86714. // #32966
  86715. M=M+1
  86716. //vv push_d_to_stack
  86717. //vv push_from_ram(THIS, 0)
  86718. //
  86719. //// push this 2
  86720. //^^ push_from_ram(THIS, 2)
  86721. // #32967
  86722. @THIS
  86723. // #32968
  86724. D=M
  86725. // #32969
  86726. @2
  86727. // #32970
  86728. A=D+A
  86729. // #32971
  86730. D=M
  86731. //^^ push_d_to_stack
  86732. // #32972
  86733. @SP
  86734. // #32973
  86735. A=M
  86736. // #32974
  86737. M=D
  86738. // #32975
  86739. @SP
  86740. // #32976
  86741. M=M+1
  86742. //vv push_d_to_stack
  86743. //vv push_from_ram(THIS, 2)
  86744. //
  86745. //// add
  86746. //^^ arith_binary_op(+)
  86747. //^^ pop_stack_to_d
  86748. // #32977
  86749. @SP
  86750. // #32978
  86751. M=M-1
  86752. // #32979
  86753. A=M
  86754. // #32980
  86755. D=M
  86756. //vv pop_stack_to_d
  86757. //^^ arith_d_with_stack_top(D+M)
  86758. // #32981
  86759. @R13
  86760. // #32982
  86761. M=D
  86762. //^^ pop_stack_to_d
  86763. // #32983
  86764. @SP
  86765. // #32984
  86766. M=M-1
  86767. // #32985
  86768. A=M
  86769. // #32986
  86770. D=M
  86771. //vv pop_stack_to_d
  86772. // #32987
  86773. @R13
  86774. // #32988
  86775. D=D+M
  86776. // #32989
  86777. @R13
  86778. // #32990
  86779. M=0
  86780. //vv arith_d_with_stack_top(D+M)
  86781. //^^ push_d_to_stack
  86782. // #32991
  86783. @SP
  86784. // #32992
  86785. A=M
  86786. // #32993
  86787. M=D
  86788. // #32994
  86789. @SP
  86790. // #32995
  86791. M=M+1
  86792. //vv push_d_to_stack
  86793. //vv arith_binary_op(+)
  86794. //
  86795. //// push constant 510
  86796. //^^ push_constant(510)
  86797. // #32996
  86798. @510
  86799. // #32997
  86800. D=A
  86801. //^^ push_d_to_stack
  86802. // #32998
  86803. @SP
  86804. // #32999
  86805. A=M
  86806. // #33000
  86807. M=D
  86808. // #33001
  86809. @SP
  86810. // #33002
  86811. M=M+1
  86812. //vv push_d_to_stack
  86813. //vv push_constant(510)
  86814. //
  86815. //// lt
  86816. //^^ arith_cmp_op(JLT)
  86817. //^^ pop_stack_to_d
  86818. // #33003
  86819. @SP
  86820. // #33004
  86821. M=M-1
  86822. // #33005
  86823. A=M
  86824. // #33006
  86825. D=M
  86826. //vv pop_stack_to_d
  86827. //^^ arith_d_with_stack_top(D-M)
  86828. // #33007
  86829. @R13
  86830. // #33008
  86831. M=D
  86832. //^^ pop_stack_to_d
  86833. // #33009
  86834. @SP
  86835. // #33010
  86836. M=M-1
  86837. // #33011
  86838. A=M
  86839. // #33012
  86840. D=M
  86841. //vv pop_stack_to_d
  86842. // #33013
  86843. @R13
  86844. // #33014
  86845. D=D-M
  86846. // #33015
  86847. @R13
  86848. // #33016
  86849. M=0
  86850. //vv arith_d_with_stack_top(D-M)
  86851. // #33017
  86852. @PUT_TRUE_331
  86853. // #33018
  86854. D;JLT
  86855. // #33019
  86856. @R13
  86857. // #33020
  86858. M=0
  86859. // #33021
  86860. @CONT_331
  86861. // #33022
  86862. 0;JMP
  86863. (PUT_TRUE_331)
  86864. // #33023
  86865. @R13
  86866. // #33024
  86867. M=-1
  86868. (CONT_331)
  86869. // #33025
  86870. @R13
  86871. // #33026
  86872. D=M
  86873. // #33027
  86874. @R13
  86875. // #33028
  86876. M=0
  86877. //^^ push_d_to_stack
  86878. // #33029
  86879. @SP
  86880. // #33030
  86881. A=M
  86882. // #33031
  86883. M=D
  86884. // #33032
  86885. @SP
  86886. // #33033
  86887. M=M+1
  86888. //vv push_d_to_stack
  86889. //vv arith_cmp_op(JLT)
  86890. //
  86891. //// if-goto IF_TRUE0
  86892. //^^ pop_stack_to_d
  86893. // #33034
  86894. @SP
  86895. // #33035
  86896. M=M-1
  86897. // #33036
  86898. A=M
  86899. // #33037
  86900. D=M
  86901. //vv pop_stack_to_d
  86902. // #33038
  86903. @Square.moveRight$IF_TRUE0
  86904. // #33039
  86905. D;JNE
  86906. //
  86907. //// goto IF_FALSE0
  86908. // #33040
  86909. @Square.moveRight$IF_FALSE0
  86910. // #33041
  86911. 0;JMP
  86912. //
  86913. //// label IF_TRUE0
  86914. (Square.moveRight$IF_TRUE0)
  86915. //
  86916. //// push constant 0
  86917. //^^ push_constant(0)
  86918. // #33042
  86919. @0
  86920. // #33043
  86921. D=A
  86922. //^^ push_d_to_stack
  86923. // #33044
  86924. @SP
  86925. // #33045
  86926. A=M
  86927. // #33046
  86928. M=D
  86929. // #33047
  86930. @SP
  86931. // #33048
  86932. M=M+1
  86933. //vv push_d_to_stack
  86934. //vv push_constant(0)
  86935. //
  86936. //// call Screen.setColor 1
  86937. //^^ push_constant(RET_ADDR_332)
  86938. // #33049
  86939. @RET_ADDR_332
  86940. // #33050
  86941. D=A
  86942. //^^ push_d_to_stack
  86943. // #33051
  86944. @SP
  86945. // #33052
  86946. A=M
  86947. // #33053
  86948. M=D
  86949. // #33054
  86950. @SP
  86951. // #33055
  86952. M=M+1
  86953. //vv push_d_to_stack
  86954. //vv push_constant(RET_ADDR_332)
  86955. //push return-address
  86956. // #33056
  86957. @LCL
  86958. // #33057
  86959. D=M
  86960. //^^ push_d_to_stack
  86961. // #33058
  86962. @SP
  86963. // #33059
  86964. A=M
  86965. // #33060
  86966. M=D
  86967. // #33061
  86968. @SP
  86969. // #33062
  86970. M=M+1
  86971. //vv push_d_to_stack
  86972. //push LCL
  86973. // #33063
  86974. @ARG
  86975. // #33064
  86976. D=M
  86977. //^^ push_d_to_stack
  86978. // #33065
  86979. @SP
  86980. // #33066
  86981. A=M
  86982. // #33067
  86983. M=D
  86984. // #33068
  86985. @SP
  86986. // #33069
  86987. M=M+1
  86988. //vv push_d_to_stack
  86989. //push ARG
  86990. // #33070
  86991. @THIS
  86992. // #33071
  86993. D=M
  86994. //^^ push_d_to_stack
  86995. // #33072
  86996. @SP
  86997. // #33073
  86998. A=M
  86999. // #33074
  87000. M=D
  87001. // #33075
  87002. @SP
  87003. // #33076
  87004. M=M+1
  87005. //vv push_d_to_stack
  87006. //push THIS
  87007. // #33077
  87008. @THAT
  87009. // #33078
  87010. D=M
  87011. //^^ push_d_to_stack
  87012. // #33079
  87013. @SP
  87014. // #33080
  87015. A=M
  87016. // #33081
  87017. M=D
  87018. // #33082
  87019. @SP
  87020. // #33083
  87021. M=M+1
  87022. //vv push_d_to_stack
  87023. //push THAT
  87024. // #33084
  87025. @SP
  87026. // #33085
  87027. D=M
  87028. // #33086
  87029. @ARG
  87030. // #33087
  87031. M=D
  87032. // #33088
  87033. @6
  87034. // #33089
  87035. D=A
  87036. // #33090
  87037. @ARG
  87038. // #33091
  87039. M=M-D // ARG = SP - args - 5
  87040. // #33092
  87041. @SP
  87042. // #33093
  87043. D=M
  87044. // #33094
  87045. @LCL
  87046. // #33095
  87047. M=D // LCL = SP
  87048. // #33096
  87049. @Screen.setColor
  87050. // #33097
  87051. 0;JMP
  87052. (RET_ADDR_332)
  87053. //
  87054. //// pop temp 0
  87055. //^^ pop_to_loc{5)
  87056. //^^ pop_stack_to_d
  87057. // #33098
  87058. @SP
  87059. // #33099
  87060. M=M-1
  87061. // #33100
  87062. A=M
  87063. // #33101
  87064. D=M
  87065. //vv pop_stack_to_d
  87066. // #33102
  87067. @5
  87068. // #33103
  87069. M=D
  87070. //vv pop_to_loc{5)
  87071. //
  87072. //// push this 0
  87073. //^^ push_from_ram(THIS, 0)
  87074. // #33104
  87075. @THIS
  87076. // #33105
  87077. D=M
  87078. // #33106
  87079. @0
  87080. // #33107
  87081. A=D+A
  87082. // #33108
  87083. D=M
  87084. //^^ push_d_to_stack
  87085. // #33109
  87086. @SP
  87087. // #33110
  87088. A=M
  87089. // #33111
  87090. M=D
  87091. // #33112
  87092. @SP
  87093. // #33113
  87094. M=M+1
  87095. //vv push_d_to_stack
  87096. //vv push_from_ram(THIS, 0)
  87097. //
  87098. //// push this 1
  87099. //^^ push_from_ram(THIS, 1)
  87100. // #33114
  87101. @THIS
  87102. // #33115
  87103. D=M
  87104. // #33116
  87105. @1
  87106. // #33117
  87107. A=D+A
  87108. // #33118
  87109. D=M
  87110. //^^ push_d_to_stack
  87111. // #33119
  87112. @SP
  87113. // #33120
  87114. A=M
  87115. // #33121
  87116. M=D
  87117. // #33122
  87118. @SP
  87119. // #33123
  87120. M=M+1
  87121. //vv push_d_to_stack
  87122. //vv push_from_ram(THIS, 1)
  87123. //
  87124. //// push this 0
  87125. //^^ push_from_ram(THIS, 0)
  87126. // #33124
  87127. @THIS
  87128. // #33125
  87129. D=M
  87130. // #33126
  87131. @0
  87132. // #33127
  87133. A=D+A
  87134. // #33128
  87135. D=M
  87136. //^^ push_d_to_stack
  87137. // #33129
  87138. @SP
  87139. // #33130
  87140. A=M
  87141. // #33131
  87142. M=D
  87143. // #33132
  87144. @SP
  87145. // #33133
  87146. M=M+1
  87147. //vv push_d_to_stack
  87148. //vv push_from_ram(THIS, 0)
  87149. //
  87150. //// push constant 1
  87151. //^^ push_constant(1)
  87152. // #33134
  87153. @1
  87154. // #33135
  87155. D=A
  87156. //^^ push_d_to_stack
  87157. // #33136
  87158. @SP
  87159. // #33137
  87160. A=M
  87161. // #33138
  87162. M=D
  87163. // #33139
  87164. @SP
  87165. // #33140
  87166. M=M+1
  87167. //vv push_d_to_stack
  87168. //vv push_constant(1)
  87169. //
  87170. //// add
  87171. //^^ arith_binary_op(+)
  87172. //^^ pop_stack_to_d
  87173. // #33141
  87174. @SP
  87175. // #33142
  87176. M=M-1
  87177. // #33143
  87178. A=M
  87179. // #33144
  87180. D=M
  87181. //vv pop_stack_to_d
  87182. //^^ arith_d_with_stack_top(D+M)
  87183. // #33145
  87184. @R13
  87185. // #33146
  87186. M=D
  87187. //^^ pop_stack_to_d
  87188. // #33147
  87189. @SP
  87190. // #33148
  87191. M=M-1
  87192. // #33149
  87193. A=M
  87194. // #33150
  87195. D=M
  87196. //vv pop_stack_to_d
  87197. // #33151
  87198. @R13
  87199. // #33152
  87200. D=D+M
  87201. // #33153
  87202. @R13
  87203. // #33154
  87204. M=0
  87205. //vv arith_d_with_stack_top(D+M)
  87206. //^^ push_d_to_stack
  87207. // #33155
  87208. @SP
  87209. // #33156
  87210. A=M
  87211. // #33157
  87212. M=D
  87213. // #33158
  87214. @SP
  87215. // #33159
  87216. M=M+1
  87217. //vv push_d_to_stack
  87218. //vv arith_binary_op(+)
  87219. //
  87220. //// push this 1
  87221. //^^ push_from_ram(THIS, 1)
  87222. // #33160
  87223. @THIS
  87224. // #33161
  87225. D=M
  87226. // #33162
  87227. @1
  87228. // #33163
  87229. A=D+A
  87230. // #33164
  87231. D=M
  87232. //^^ push_d_to_stack
  87233. // #33165
  87234. @SP
  87235. // #33166
  87236. A=M
  87237. // #33167
  87238. M=D
  87239. // #33168
  87240. @SP
  87241. // #33169
  87242. M=M+1
  87243. //vv push_d_to_stack
  87244. //vv push_from_ram(THIS, 1)
  87245. //
  87246. //// push this 2
  87247. //^^ push_from_ram(THIS, 2)
  87248. // #33170
  87249. @THIS
  87250. // #33171
  87251. D=M
  87252. // #33172
  87253. @2
  87254. // #33173
  87255. A=D+A
  87256. // #33174
  87257. D=M
  87258. //^^ push_d_to_stack
  87259. // #33175
  87260. @SP
  87261. // #33176
  87262. A=M
  87263. // #33177
  87264. M=D
  87265. // #33178
  87266. @SP
  87267. // #33179
  87268. M=M+1
  87269. //vv push_d_to_stack
  87270. //vv push_from_ram(THIS, 2)
  87271. //
  87272. //// add
  87273. //^^ arith_binary_op(+)
  87274. //^^ pop_stack_to_d
  87275. // #33180
  87276. @SP
  87277. // #33181
  87278. M=M-1
  87279. // #33182
  87280. A=M
  87281. // #33183
  87282. D=M
  87283. //vv pop_stack_to_d
  87284. //^^ arith_d_with_stack_top(D+M)
  87285. // #33184
  87286. @R13
  87287. // #33185
  87288. M=D
  87289. //^^ pop_stack_to_d
  87290. // #33186
  87291. @SP
  87292. // #33187
  87293. M=M-1
  87294. // #33188
  87295. A=M
  87296. // #33189
  87297. D=M
  87298. //vv pop_stack_to_d
  87299. // #33190
  87300. @R13
  87301. // #33191
  87302. D=D+M
  87303. // #33192
  87304. @R13
  87305. // #33193
  87306. M=0
  87307. //vv arith_d_with_stack_top(D+M)
  87308. //^^ push_d_to_stack
  87309. // #33194
  87310. @SP
  87311. // #33195
  87312. A=M
  87313. // #33196
  87314. M=D
  87315. // #33197
  87316. @SP
  87317. // #33198
  87318. M=M+1
  87319. //vv push_d_to_stack
  87320. //vv arith_binary_op(+)
  87321. //
  87322. //// call Screen.drawRectangle 4
  87323. //^^ push_constant(RET_ADDR_333)
  87324. // #33199
  87325. @RET_ADDR_333
  87326. // #33200
  87327. D=A
  87328. //^^ push_d_to_stack
  87329. // #33201
  87330. @SP
  87331. // #33202
  87332. A=M
  87333. // #33203
  87334. M=D
  87335. // #33204
  87336. @SP
  87337. // #33205
  87338. M=M+1
  87339. //vv push_d_to_stack
  87340. //vv push_constant(RET_ADDR_333)
  87341. //push return-address
  87342. // #33206
  87343. @LCL
  87344. // #33207
  87345. D=M
  87346. //^^ push_d_to_stack
  87347. // #33208
  87348. @SP
  87349. // #33209
  87350. A=M
  87351. // #33210
  87352. M=D
  87353. // #33211
  87354. @SP
  87355. // #33212
  87356. M=M+1
  87357. //vv push_d_to_stack
  87358. //push LCL
  87359. // #33213
  87360. @ARG
  87361. // #33214
  87362. D=M
  87363. //^^ push_d_to_stack
  87364. // #33215
  87365. @SP
  87366. // #33216
  87367. A=M
  87368. // #33217
  87369. M=D
  87370. // #33218
  87371. @SP
  87372. // #33219
  87373. M=M+1
  87374. //vv push_d_to_stack
  87375. //push ARG
  87376. // #33220
  87377. @THIS
  87378. // #33221
  87379. D=M
  87380. //^^ push_d_to_stack
  87381. // #33222
  87382. @SP
  87383. // #33223
  87384. A=M
  87385. // #33224
  87386. M=D
  87387. // #33225
  87388. @SP
  87389. // #33226
  87390. M=M+1
  87391. //vv push_d_to_stack
  87392. //push THIS
  87393. // #33227
  87394. @THAT
  87395. // #33228
  87396. D=M
  87397. //^^ push_d_to_stack
  87398. // #33229
  87399. @SP
  87400. // #33230
  87401. A=M
  87402. // #33231
  87403. M=D
  87404. // #33232
  87405. @SP
  87406. // #33233
  87407. M=M+1
  87408. //vv push_d_to_stack
  87409. //push THAT
  87410. // #33234
  87411. @SP
  87412. // #33235
  87413. D=M
  87414. // #33236
  87415. @ARG
  87416. // #33237
  87417. M=D
  87418. // #33238
  87419. @9
  87420. // #33239
  87421. D=A
  87422. // #33240
  87423. @ARG
  87424. // #33241
  87425. M=M-D // ARG = SP - args - 5
  87426. // #33242
  87427. @SP
  87428. // #33243
  87429. D=M
  87430. // #33244
  87431. @LCL
  87432. // #33245
  87433. M=D // LCL = SP
  87434. // #33246
  87435. @Screen.drawRectangle
  87436. // #33247
  87437. 0;JMP
  87438. (RET_ADDR_333)
  87439. //
  87440. //// pop temp 0
  87441. //^^ pop_to_loc{5)
  87442. //^^ pop_stack_to_d
  87443. // #33248
  87444. @SP
  87445. // #33249
  87446. M=M-1
  87447. // #33250
  87448. A=M
  87449. // #33251
  87450. D=M
  87451. //vv pop_stack_to_d
  87452. // #33252
  87453. @5
  87454. // #33253
  87455. M=D
  87456. //vv pop_to_loc{5)
  87457. //
  87458. //// push this 0
  87459. //^^ push_from_ram(THIS, 0)
  87460. // #33254
  87461. @THIS
  87462. // #33255
  87463. D=M
  87464. // #33256
  87465. @0
  87466. // #33257
  87467. A=D+A
  87468. // #33258
  87469. D=M
  87470. //^^ push_d_to_stack
  87471. // #33259
  87472. @SP
  87473. // #33260
  87474. A=M
  87475. // #33261
  87476. M=D
  87477. // #33262
  87478. @SP
  87479. // #33263
  87480. M=M+1
  87481. //vv push_d_to_stack
  87482. //vv push_from_ram(THIS, 0)
  87483. //
  87484. //// push constant 2
  87485. //^^ push_constant(2)
  87486. // #33264
  87487. @2
  87488. // #33265
  87489. D=A
  87490. //^^ push_d_to_stack
  87491. // #33266
  87492. @SP
  87493. // #33267
  87494. A=M
  87495. // #33268
  87496. M=D
  87497. // #33269
  87498. @SP
  87499. // #33270
  87500. M=M+1
  87501. //vv push_d_to_stack
  87502. //vv push_constant(2)
  87503. //
  87504. //// add
  87505. //^^ arith_binary_op(+)
  87506. //^^ pop_stack_to_d
  87507. // #33271
  87508. @SP
  87509. // #33272
  87510. M=M-1
  87511. // #33273
  87512. A=M
  87513. // #33274
  87514. D=M
  87515. //vv pop_stack_to_d
  87516. //^^ arith_d_with_stack_top(D+M)
  87517. // #33275
  87518. @R13
  87519. // #33276
  87520. M=D
  87521. //^^ pop_stack_to_d
  87522. // #33277
  87523. @SP
  87524. // #33278
  87525. M=M-1
  87526. // #33279
  87527. A=M
  87528. // #33280
  87529. D=M
  87530. //vv pop_stack_to_d
  87531. // #33281
  87532. @R13
  87533. // #33282
  87534. D=D+M
  87535. // #33283
  87536. @R13
  87537. // #33284
  87538. M=0
  87539. //vv arith_d_with_stack_top(D+M)
  87540. //^^ push_d_to_stack
  87541. // #33285
  87542. @SP
  87543. // #33286
  87544. A=M
  87545. // #33287
  87546. M=D
  87547. // #33288
  87548. @SP
  87549. // #33289
  87550. M=M+1
  87551. //vv push_d_to_stack
  87552. //vv arith_binary_op(+)
  87553. //
  87554. //// pop this 0
  87555. //^^ pop_to_ram(THIS, 0)
  87556. // #33290
  87557. @THIS
  87558. // #33291
  87559. D=M
  87560. // #33292
  87561. @0
  87562. // #33293
  87563. D=D+A
  87564. // #33294
  87565. @R13
  87566. // #33295
  87567. M=D
  87568. //^^ pop_stack_to_d
  87569. // #33296
  87570. @SP
  87571. // #33297
  87572. M=M-1
  87573. // #33298
  87574. A=M
  87575. // #33299
  87576. D=M
  87577. //vv pop_stack_to_d
  87578. // #33300
  87579. @R13
  87580. // #33301
  87581. A=M
  87582. // #33302
  87583. M=D
  87584. // #33303
  87585. @R13
  87586. // #33304
  87587. M=0
  87588. //vv pop_to_ram(THIS, 0)
  87589. //
  87590. //// push constant 0
  87591. //^^ push_constant(0)
  87592. // #33305
  87593. @0
  87594. // #33306
  87595. D=A
  87596. //^^ push_d_to_stack
  87597. // #33307
  87598. @SP
  87599. // #33308
  87600. A=M
  87601. // #33309
  87602. M=D
  87603. // #33310
  87604. @SP
  87605. // #33311
  87606. M=M+1
  87607. //vv push_d_to_stack
  87608. //vv push_constant(0)
  87609. //
  87610. //// not
  87611. //^^ arith_unary_op(!)
  87612. //^^ pop_stack_to_d
  87613. // #33312
  87614. @SP
  87615. // #33313
  87616. M=M-1
  87617. // #33314
  87618. A=M
  87619. // #33315
  87620. D=M
  87621. //vv pop_stack_to_d
  87622. // #33316
  87623. D=!D
  87624. //^^ push_d_to_stack
  87625. // #33317
  87626. @SP
  87627. // #33318
  87628. A=M
  87629. // #33319
  87630. M=D
  87631. // #33320
  87632. @SP
  87633. // #33321
  87634. M=M+1
  87635. //vv push_d_to_stack
  87636. //vv arith_unary_op(!)
  87637. //
  87638. //// call Screen.setColor 1
  87639. //^^ push_constant(RET_ADDR_334)
  87640. // #33322
  87641. @RET_ADDR_334
  87642. // #33323
  87643. D=A
  87644. //^^ push_d_to_stack
  87645. // #33324
  87646. @SP
  87647. // #33325
  87648. A=M
  87649. // #33326
  87650. M=D
  87651. // #33327
  87652. @SP
  87653. // #33328
  87654. M=M+1
  87655. //vv push_d_to_stack
  87656. //vv push_constant(RET_ADDR_334)
  87657. //push return-address
  87658. // #33329
  87659. @LCL
  87660. // #33330
  87661. D=M
  87662. //^^ push_d_to_stack
  87663. // #33331
  87664. @SP
  87665. // #33332
  87666. A=M
  87667. // #33333
  87668. M=D
  87669. // #33334
  87670. @SP
  87671. // #33335
  87672. M=M+1
  87673. //vv push_d_to_stack
  87674. //push LCL
  87675. // #33336
  87676. @ARG
  87677. // #33337
  87678. D=M
  87679. //^^ push_d_to_stack
  87680. // #33338
  87681. @SP
  87682. // #33339
  87683. A=M
  87684. // #33340
  87685. M=D
  87686. // #33341
  87687. @SP
  87688. // #33342
  87689. M=M+1
  87690. //vv push_d_to_stack
  87691. //push ARG
  87692. // #33343
  87693. @THIS
  87694. // #33344
  87695. D=M
  87696. //^^ push_d_to_stack
  87697. // #33345
  87698. @SP
  87699. // #33346
  87700. A=M
  87701. // #33347
  87702. M=D
  87703. // #33348
  87704. @SP
  87705. // #33349
  87706. M=M+1
  87707. //vv push_d_to_stack
  87708. //push THIS
  87709. // #33350
  87710. @THAT
  87711. // #33351
  87712. D=M
  87713. //^^ push_d_to_stack
  87714. // #33352
  87715. @SP
  87716. // #33353
  87717. A=M
  87718. // #33354
  87719. M=D
  87720. // #33355
  87721. @SP
  87722. // #33356
  87723. M=M+1
  87724. //vv push_d_to_stack
  87725. //push THAT
  87726. // #33357
  87727. @SP
  87728. // #33358
  87729. D=M
  87730. // #33359
  87731. @ARG
  87732. // #33360
  87733. M=D
  87734. // #33361
  87735. @6
  87736. // #33362
  87737. D=A
  87738. // #33363
  87739. @ARG
  87740. // #33364
  87741. M=M-D // ARG = SP - args - 5
  87742. // #33365
  87743. @SP
  87744. // #33366
  87745. D=M
  87746. // #33367
  87747. @LCL
  87748. // #33368
  87749. M=D // LCL = SP
  87750. // #33369
  87751. @Screen.setColor
  87752. // #33370
  87753. 0;JMP
  87754. (RET_ADDR_334)
  87755. //
  87756. //// pop temp 0
  87757. //^^ pop_to_loc{5)
  87758. //^^ pop_stack_to_d
  87759. // #33371
  87760. @SP
  87761. // #33372
  87762. M=M-1
  87763. // #33373
  87764. A=M
  87765. // #33374
  87766. D=M
  87767. //vv pop_stack_to_d
  87768. // #33375
  87769. @5
  87770. // #33376
  87771. M=D
  87772. //vv pop_to_loc{5)
  87773. //
  87774. //// push this 0
  87775. //^^ push_from_ram(THIS, 0)
  87776. // #33377
  87777. @THIS
  87778. // #33378
  87779. D=M
  87780. // #33379
  87781. @0
  87782. // #33380
  87783. A=D+A
  87784. // #33381
  87785. D=M
  87786. //^^ push_d_to_stack
  87787. // #33382
  87788. @SP
  87789. // #33383
  87790. A=M
  87791. // #33384
  87792. M=D
  87793. // #33385
  87794. @SP
  87795. // #33386
  87796. M=M+1
  87797. //vv push_d_to_stack
  87798. //vv push_from_ram(THIS, 0)
  87799. //
  87800. //// push this 2
  87801. //^^ push_from_ram(THIS, 2)
  87802. // #33387
  87803. @THIS
  87804. // #33388
  87805. D=M
  87806. // #33389
  87807. @2
  87808. // #33390
  87809. A=D+A
  87810. // #33391
  87811. D=M
  87812. //^^ push_d_to_stack
  87813. // #33392
  87814. @SP
  87815. // #33393
  87816. A=M
  87817. // #33394
  87818. M=D
  87819. // #33395
  87820. @SP
  87821. // #33396
  87822. M=M+1
  87823. //vv push_d_to_stack
  87824. //vv push_from_ram(THIS, 2)
  87825. //
  87826. //// add
  87827. //^^ arith_binary_op(+)
  87828. //^^ pop_stack_to_d
  87829. // #33397
  87830. @SP
  87831. // #33398
  87832. M=M-1
  87833. // #33399
  87834. A=M
  87835. // #33400
  87836. D=M
  87837. //vv pop_stack_to_d
  87838. //^^ arith_d_with_stack_top(D+M)
  87839. // #33401
  87840. @R13
  87841. // #33402
  87842. M=D
  87843. //^^ pop_stack_to_d
  87844. // #33403
  87845. @SP
  87846. // #33404
  87847. M=M-1
  87848. // #33405
  87849. A=M
  87850. // #33406
  87851. D=M
  87852. //vv pop_stack_to_d
  87853. // #33407
  87854. @R13
  87855. // #33408
  87856. D=D+M
  87857. // #33409
  87858. @R13
  87859. // #33410
  87860. M=0
  87861. //vv arith_d_with_stack_top(D+M)
  87862. //^^ push_d_to_stack
  87863. // #33411
  87864. @SP
  87865. // #33412
  87866. A=M
  87867. // #33413
  87868. M=D
  87869. // #33414
  87870. @SP
  87871. // #33415
  87872. M=M+1
  87873. //vv push_d_to_stack
  87874. //vv arith_binary_op(+)
  87875. //
  87876. //// push constant 1
  87877. //^^ push_constant(1)
  87878. // #33416
  87879. @1
  87880. // #33417
  87881. D=A
  87882. //^^ push_d_to_stack
  87883. // #33418
  87884. @SP
  87885. // #33419
  87886. A=M
  87887. // #33420
  87888. M=D
  87889. // #33421
  87890. @SP
  87891. // #33422
  87892. M=M+1
  87893. //vv push_d_to_stack
  87894. //vv push_constant(1)
  87895. //
  87896. //// sub
  87897. //^^ arith_binary_op(-)
  87898. //^^ pop_stack_to_d
  87899. // #33423
  87900. @SP
  87901. // #33424
  87902. M=M-1
  87903. // #33425
  87904. A=M
  87905. // #33426
  87906. D=M
  87907. //vv pop_stack_to_d
  87908. //^^ arith_d_with_stack_top(D-M)
  87909. // #33427
  87910. @R13
  87911. // #33428
  87912. M=D
  87913. //^^ pop_stack_to_d
  87914. // #33429
  87915. @SP
  87916. // #33430
  87917. M=M-1
  87918. // #33431
  87919. A=M
  87920. // #33432
  87921. D=M
  87922. //vv pop_stack_to_d
  87923. // #33433
  87924. @R13
  87925. // #33434
  87926. D=D-M
  87927. // #33435
  87928. @R13
  87929. // #33436
  87930. M=0
  87931. //vv arith_d_with_stack_top(D-M)
  87932. //^^ push_d_to_stack
  87933. // #33437
  87934. @SP
  87935. // #33438
  87936. A=M
  87937. // #33439
  87938. M=D
  87939. // #33440
  87940. @SP
  87941. // #33441
  87942. M=M+1
  87943. //vv push_d_to_stack
  87944. //vv arith_binary_op(-)
  87945. //
  87946. //// push this 1
  87947. //^^ push_from_ram(THIS, 1)
  87948. // #33442
  87949. @THIS
  87950. // #33443
  87951. D=M
  87952. // #33444
  87953. @1
  87954. // #33445
  87955. A=D+A
  87956. // #33446
  87957. D=M
  87958. //^^ push_d_to_stack
  87959. // #33447
  87960. @SP
  87961. // #33448
  87962. A=M
  87963. // #33449
  87964. M=D
  87965. // #33450
  87966. @SP
  87967. // #33451
  87968. M=M+1
  87969. //vv push_d_to_stack
  87970. //vv push_from_ram(THIS, 1)
  87971. //
  87972. //// push this 0
  87973. //^^ push_from_ram(THIS, 0)
  87974. // #33452
  87975. @THIS
  87976. // #33453
  87977. D=M
  87978. // #33454
  87979. @0
  87980. // #33455
  87981. A=D+A
  87982. // #33456
  87983. D=M
  87984. //^^ push_d_to_stack
  87985. // #33457
  87986. @SP
  87987. // #33458
  87988. A=M
  87989. // #33459
  87990. M=D
  87991. // #33460
  87992. @SP
  87993. // #33461
  87994. M=M+1
  87995. //vv push_d_to_stack
  87996. //vv push_from_ram(THIS, 0)
  87997. //
  87998. //// push this 2
  87999. //^^ push_from_ram(THIS, 2)
  88000. // #33462
  88001. @THIS
  88002. // #33463
  88003. D=M
  88004. // #33464
  88005. @2
  88006. // #33465
  88007. A=D+A
  88008. // #33466
  88009. D=M
  88010. //^^ push_d_to_stack
  88011. // #33467
  88012. @SP
  88013. // #33468
  88014. A=M
  88015. // #33469
  88016. M=D
  88017. // #33470
  88018. @SP
  88019. // #33471
  88020. M=M+1
  88021. //vv push_d_to_stack
  88022. //vv push_from_ram(THIS, 2)
  88023. //
  88024. //// add
  88025. //^^ arith_binary_op(+)
  88026. //^^ pop_stack_to_d
  88027. // #33472
  88028. @SP
  88029. // #33473
  88030. M=M-1
  88031. // #33474
  88032. A=M
  88033. // #33475
  88034. D=M
  88035. //vv pop_stack_to_d
  88036. //^^ arith_d_with_stack_top(D+M)
  88037. // #33476
  88038. @R13
  88039. // #33477
  88040. M=D
  88041. //^^ pop_stack_to_d
  88042. // #33478
  88043. @SP
  88044. // #33479
  88045. M=M-1
  88046. // #33480
  88047. A=M
  88048. // #33481
  88049. D=M
  88050. //vv pop_stack_to_d
  88051. // #33482
  88052. @R13
  88053. // #33483
  88054. D=D+M
  88055. // #33484
  88056. @R13
  88057. // #33485
  88058. M=0
  88059. //vv arith_d_with_stack_top(D+M)
  88060. //^^ push_d_to_stack
  88061. // #33486
  88062. @SP
  88063. // #33487
  88064. A=M
  88065. // #33488
  88066. M=D
  88067. // #33489
  88068. @SP
  88069. // #33490
  88070. M=M+1
  88071. //vv push_d_to_stack
  88072. //vv arith_binary_op(+)
  88073. //
  88074. //// push this 1
  88075. //^^ push_from_ram(THIS, 1)
  88076. // #33491
  88077. @THIS
  88078. // #33492
  88079. D=M
  88080. // #33493
  88081. @1
  88082. // #33494
  88083. A=D+A
  88084. // #33495
  88085. D=M
  88086. //^^ push_d_to_stack
  88087. // #33496
  88088. @SP
  88089. // #33497
  88090. A=M
  88091. // #33498
  88092. M=D
  88093. // #33499
  88094. @SP
  88095. // #33500
  88096. M=M+1
  88097. //vv push_d_to_stack
  88098. //vv push_from_ram(THIS, 1)
  88099. //
  88100. //// push this 2
  88101. //^^ push_from_ram(THIS, 2)
  88102. // #33501
  88103. @THIS
  88104. // #33502
  88105. D=M
  88106. // #33503
  88107. @2
  88108. // #33504
  88109. A=D+A
  88110. // #33505
  88111. D=M
  88112. //^^ push_d_to_stack
  88113. // #33506
  88114. @SP
  88115. // #33507
  88116. A=M
  88117. // #33508
  88118. M=D
  88119. // #33509
  88120. @SP
  88121. // #33510
  88122. M=M+1
  88123. //vv push_d_to_stack
  88124. //vv push_from_ram(THIS, 2)
  88125. //
  88126. //// add
  88127. //^^ arith_binary_op(+)
  88128. //^^ pop_stack_to_d
  88129. // #33511
  88130. @SP
  88131. // #33512
  88132. M=M-1
  88133. // #33513
  88134. A=M
  88135. // #33514
  88136. D=M
  88137. //vv pop_stack_to_d
  88138. //^^ arith_d_with_stack_top(D+M)
  88139. // #33515
  88140. @R13
  88141. // #33516
  88142. M=D
  88143. //^^ pop_stack_to_d
  88144. // #33517
  88145. @SP
  88146. // #33518
  88147. M=M-1
  88148. // #33519
  88149. A=M
  88150. // #33520
  88151. D=M
  88152. //vv pop_stack_to_d
  88153. // #33521
  88154. @R13
  88155. // #33522
  88156. D=D+M
  88157. // #33523
  88158. @R13
  88159. // #33524
  88160. M=0
  88161. //vv arith_d_with_stack_top(D+M)
  88162. //^^ push_d_to_stack
  88163. // #33525
  88164. @SP
  88165. // #33526
  88166. A=M
  88167. // #33527
  88168. M=D
  88169. // #33528
  88170. @SP
  88171. // #33529
  88172. M=M+1
  88173. //vv push_d_to_stack
  88174. //vv arith_binary_op(+)
  88175. //
  88176. //// call Screen.drawRectangle 4
  88177. //^^ push_constant(RET_ADDR_335)
  88178. // #33530
  88179. @RET_ADDR_335
  88180. // #33531
  88181. D=A
  88182. //^^ push_d_to_stack
  88183. // #33532
  88184. @SP
  88185. // #33533
  88186. A=M
  88187. // #33534
  88188. M=D
  88189. // #33535
  88190. @SP
  88191. // #33536
  88192. M=M+1
  88193. //vv push_d_to_stack
  88194. //vv push_constant(RET_ADDR_335)
  88195. //push return-address
  88196. // #33537
  88197. @LCL
  88198. // #33538
  88199. D=M
  88200. //^^ push_d_to_stack
  88201. // #33539
  88202. @SP
  88203. // #33540
  88204. A=M
  88205. // #33541
  88206. M=D
  88207. // #33542
  88208. @SP
  88209. // #33543
  88210. M=M+1
  88211. //vv push_d_to_stack
  88212. //push LCL
  88213. // #33544
  88214. @ARG
  88215. // #33545
  88216. D=M
  88217. //^^ push_d_to_stack
  88218. // #33546
  88219. @SP
  88220. // #33547
  88221. A=M
  88222. // #33548
  88223. M=D
  88224. // #33549
  88225. @SP
  88226. // #33550
  88227. M=M+1
  88228. //vv push_d_to_stack
  88229. //push ARG
  88230. // #33551
  88231. @THIS
  88232. // #33552
  88233. D=M
  88234. //^^ push_d_to_stack
  88235. // #33553
  88236. @SP
  88237. // #33554
  88238. A=M
  88239. // #33555
  88240. M=D
  88241. // #33556
  88242. @SP
  88243. // #33557
  88244. M=M+1
  88245. //vv push_d_to_stack
  88246. //push THIS
  88247. // #33558
  88248. @THAT
  88249. // #33559
  88250. D=M
  88251. //^^ push_d_to_stack
  88252. // #33560
  88253. @SP
  88254. // #33561
  88255. A=M
  88256. // #33562
  88257. M=D
  88258. // #33563
  88259. @SP
  88260. // #33564
  88261. M=M+1
  88262. //vv push_d_to_stack
  88263. //push THAT
  88264. // #33565
  88265. @SP
  88266. // #33566
  88267. D=M
  88268. // #33567
  88269. @ARG
  88270. // #33568
  88271. M=D
  88272. // #33569
  88273. @9
  88274. // #33570
  88275. D=A
  88276. // #33571
  88277. @ARG
  88278. // #33572
  88279. M=M-D // ARG = SP - args - 5
  88280. // #33573
  88281. @SP
  88282. // #33574
  88283. D=M
  88284. // #33575
  88285. @LCL
  88286. // #33576
  88287. M=D // LCL = SP
  88288. // #33577
  88289. @Screen.drawRectangle
  88290. // #33578
  88291. 0;JMP
  88292. (RET_ADDR_335)
  88293. //
  88294. //// pop temp 0
  88295. //^^ pop_to_loc{5)
  88296. //^^ pop_stack_to_d
  88297. // #33579
  88298. @SP
  88299. // #33580
  88300. M=M-1
  88301. // #33581
  88302. A=M
  88303. // #33582
  88304. D=M
  88305. //vv pop_stack_to_d
  88306. // #33583
  88307. @5
  88308. // #33584
  88309. M=D
  88310. //vv pop_to_loc{5)
  88311. //
  88312. //// label IF_FALSE0
  88313. (Square.moveRight$IF_FALSE0)
  88314. //
  88315. //// push constant 0
  88316. //^^ push_constant(0)
  88317. // #33585
  88318. @0
  88319. // #33586
  88320. D=A
  88321. //^^ push_d_to_stack
  88322. // #33587
  88323. @SP
  88324. // #33588
  88325. A=M
  88326. // #33589
  88327. M=D
  88328. // #33590
  88329. @SP
  88330. // #33591
  88331. M=M+1
  88332. //vv push_d_to_stack
  88333. //vv push_constant(0)
  88334. //
  88335. //// return
  88336. // #33592
  88337. @LCL
  88338. // #33593
  88339. D=M
  88340. // #33594
  88341. @R14
  88342. // #33595
  88343. M=D //R14=LCL
  88344. // #33596
  88345. @5
  88346. // #33597
  88347. A=D-A
  88348. // #33598
  88349. D=M
  88350. // #33599
  88351. @R15
  88352. // #33600
  88353. M=D //R15=*(LCL-5)
  88354. //^^ pop_stack_to_d
  88355. // #33601
  88356. @SP
  88357. // #33602
  88358. M=M-1
  88359. // #33603
  88360. A=M
  88361. // #33604
  88362. D=M
  88363. //vv pop_stack_to_d
  88364. // #33605
  88365. @ARG
  88366. // #33606
  88367. A=M
  88368. // #33607
  88369. M=D //*ARG = pop()
  88370. // #33608
  88371. @ARG
  88372. // #33609
  88373. D=M
  88374. // #33610
  88375. @SP
  88376. // #33611
  88377. M=D+1 //SP=ARG+1
  88378. // #33612
  88379. @R14
  88380. // #33613
  88381. AM=M-1
  88382. // #33614
  88383. D=M
  88384. // #33615
  88385. @THAT
  88386. // #33616
  88387. M=D //THAT = *(--R14)
  88388. // #33617
  88389. @R14
  88390. // #33618
  88391. AM=M-1
  88392. // #33619
  88393. D=M
  88394. // #33620
  88395. @THIS
  88396. // #33621
  88397. M=D //THIS = *(--R14)
  88398. // #33622
  88399. @R14
  88400. // #33623
  88401. AM=M-1
  88402. // #33624
  88403. D=M
  88404. // #33625
  88405. @ARG
  88406. // #33626
  88407. M=D //ARG = *(--R14)
  88408. // #33627
  88409. @R14
  88410. // #33628
  88411. AM=M-1
  88412. // #33629
  88413. D=M
  88414. // #33630
  88415. @LCL
  88416. // #33631
  88417. M=D //LCL = *(--R14)
  88418. // #33632
  88419. @R15
  88420. // #33633
  88421. A=M
  88422. // #33634
  88423. 0;JMP //goto *R15
  88424. //
  88425. //// function SquareGame.new 0
  88426. (SquareGame.new)
  88427. //
  88428. //// push constant 2
  88429. //^^ push_constant(2)
  88430. // #33635
  88431. @2
  88432. // #33636
  88433. D=A
  88434. //^^ push_d_to_stack
  88435. // #33637
  88436. @SP
  88437. // #33638
  88438. A=M
  88439. // #33639
  88440. M=D
  88441. // #33640
  88442. @SP
  88443. // #33641
  88444. M=M+1
  88445. //vv push_d_to_stack
  88446. //vv push_constant(2)
  88447. //
  88448. //// call Memory.alloc 1
  88449. //^^ push_constant(RET_ADDR_336)
  88450. // #33642
  88451. @RET_ADDR_336
  88452. // #33643
  88453. D=A
  88454. //^^ push_d_to_stack
  88455. // #33644
  88456. @SP
  88457. // #33645
  88458. A=M
  88459. // #33646
  88460. M=D
  88461. // #33647
  88462. @SP
  88463. // #33648
  88464. M=M+1
  88465. //vv push_d_to_stack
  88466. //vv push_constant(RET_ADDR_336)
  88467. //push return-address
  88468. // #33649
  88469. @LCL
  88470. // #33650
  88471. D=M
  88472. //^^ push_d_to_stack
  88473. // #33651
  88474. @SP
  88475. // #33652
  88476. A=M
  88477. // #33653
  88478. M=D
  88479. // #33654
  88480. @SP
  88481. // #33655
  88482. M=M+1
  88483. //vv push_d_to_stack
  88484. //push LCL
  88485. // #33656
  88486. @ARG
  88487. // #33657
  88488. D=M
  88489. //^^ push_d_to_stack
  88490. // #33658
  88491. @SP
  88492. // #33659
  88493. A=M
  88494. // #33660
  88495. M=D
  88496. // #33661
  88497. @SP
  88498. // #33662
  88499. M=M+1
  88500. //vv push_d_to_stack
  88501. //push ARG
  88502. // #33663
  88503. @THIS
  88504. // #33664
  88505. D=M
  88506. //^^ push_d_to_stack
  88507. // #33665
  88508. @SP
  88509. // #33666
  88510. A=M
  88511. // #33667
  88512. M=D
  88513. // #33668
  88514. @SP
  88515. // #33669
  88516. M=M+1
  88517. //vv push_d_to_stack
  88518. //push THIS
  88519. // #33670
  88520. @THAT
  88521. // #33671
  88522. D=M
  88523. //^^ push_d_to_stack
  88524. // #33672
  88525. @SP
  88526. // #33673
  88527. A=M
  88528. // #33674
  88529. M=D
  88530. // #33675
  88531. @SP
  88532. // #33676
  88533. M=M+1
  88534. //vv push_d_to_stack
  88535. //push THAT
  88536. // #33677
  88537. @SP
  88538. // #33678
  88539. D=M
  88540. // #33679
  88541. @ARG
  88542. // #33680
  88543. M=D
  88544. // #33681
  88545. @6
  88546. // #33682
  88547. D=A
  88548. // #33683
  88549. @ARG
  88550. // #33684
  88551. M=M-D // ARG = SP - args - 5
  88552. // #33685
  88553. @SP
  88554. // #33686
  88555. D=M
  88556. // #33687
  88557. @LCL
  88558. // #33688
  88559. M=D // LCL = SP
  88560. // #33689
  88561. @Memory.alloc
  88562. // #33690
  88563. 0;JMP
  88564. (RET_ADDR_336)
  88565. //
  88566. //// pop pointer 0
  88567. //^^ pop_to_loc{3)
  88568. //^^ pop_stack_to_d
  88569. // #33691
  88570. @SP
  88571. // #33692
  88572. M=M-1
  88573. // #33693
  88574. A=M
  88575. // #33694
  88576. D=M
  88577. //vv pop_stack_to_d
  88578. // #33695
  88579. @3
  88580. // #33696
  88581. M=D
  88582. //vv pop_to_loc{3)
  88583. //
  88584. //// push constant 0
  88585. //^^ push_constant(0)
  88586. // #33697
  88587. @0
  88588. // #33698
  88589. D=A
  88590. //^^ push_d_to_stack
  88591. // #33699
  88592. @SP
  88593. // #33700
  88594. A=M
  88595. // #33701
  88596. M=D
  88597. // #33702
  88598. @SP
  88599. // #33703
  88600. M=M+1
  88601. //vv push_d_to_stack
  88602. //vv push_constant(0)
  88603. //
  88604. //// push constant 0
  88605. //^^ push_constant(0)
  88606. // #33704
  88607. @0
  88608. // #33705
  88609. D=A
  88610. //^^ push_d_to_stack
  88611. // #33706
  88612. @SP
  88613. // #33707
  88614. A=M
  88615. // #33708
  88616. M=D
  88617. // #33709
  88618. @SP
  88619. // #33710
  88620. M=M+1
  88621. //vv push_d_to_stack
  88622. //vv push_constant(0)
  88623. //
  88624. //// push constant 30
  88625. //^^ push_constant(30)
  88626. // #33711
  88627. @30
  88628. // #33712
  88629. D=A
  88630. //^^ push_d_to_stack
  88631. // #33713
  88632. @SP
  88633. // #33714
  88634. A=M
  88635. // #33715
  88636. M=D
  88637. // #33716
  88638. @SP
  88639. // #33717
  88640. M=M+1
  88641. //vv push_d_to_stack
  88642. //vv push_constant(30)
  88643. //
  88644. //// call Square.new 3
  88645. //^^ push_constant(RET_ADDR_337)
  88646. // #33718
  88647. @RET_ADDR_337
  88648. // #33719
  88649. D=A
  88650. //^^ push_d_to_stack
  88651. // #33720
  88652. @SP
  88653. // #33721
  88654. A=M
  88655. // #33722
  88656. M=D
  88657. // #33723
  88658. @SP
  88659. // #33724
  88660. M=M+1
  88661. //vv push_d_to_stack
  88662. //vv push_constant(RET_ADDR_337)
  88663. //push return-address
  88664. // #33725
  88665. @LCL
  88666. // #33726
  88667. D=M
  88668. //^^ push_d_to_stack
  88669. // #33727
  88670. @SP
  88671. // #33728
  88672. A=M
  88673. // #33729
  88674. M=D
  88675. // #33730
  88676. @SP
  88677. // #33731
  88678. M=M+1
  88679. //vv push_d_to_stack
  88680. //push LCL
  88681. // #33732
  88682. @ARG
  88683. // #33733
  88684. D=M
  88685. //^^ push_d_to_stack
  88686. // #33734
  88687. @SP
  88688. // #33735
  88689. A=M
  88690. // #33736
  88691. M=D
  88692. // #33737
  88693. @SP
  88694. // #33738
  88695. M=M+1
  88696. //vv push_d_to_stack
  88697. //push ARG
  88698. // #33739
  88699. @THIS
  88700. // #33740
  88701. D=M
  88702. //^^ push_d_to_stack
  88703. // #33741
  88704. @SP
  88705. // #33742
  88706. A=M
  88707. // #33743
  88708. M=D
  88709. // #33744
  88710. @SP
  88711. // #33745
  88712. M=M+1
  88713. //vv push_d_to_stack
  88714. //push THIS
  88715. // #33746
  88716. @THAT
  88717. // #33747
  88718. D=M
  88719. //^^ push_d_to_stack
  88720. // #33748
  88721. @SP
  88722. // #33749
  88723. A=M
  88724. // #33750
  88725. M=D
  88726. // #33751
  88727. @SP
  88728. // #33752
  88729. M=M+1
  88730. //vv push_d_to_stack
  88731. //push THAT
  88732. // #33753
  88733. @SP
  88734. // #33754
  88735. D=M
  88736. // #33755
  88737. @ARG
  88738. // #33756
  88739. M=D
  88740. // #33757
  88741. @8
  88742. // #33758
  88743. D=A
  88744. // #33759
  88745. @ARG
  88746. // #33760
  88747. M=M-D // ARG = SP - args - 5
  88748. // #33761
  88749. @SP
  88750. // #33762
  88751. D=M
  88752. // #33763
  88753. @LCL
  88754. // #33764
  88755. M=D // LCL = SP
  88756. // #33765
  88757. @Square.new
  88758. // #33766
  88759. 0;JMP
  88760. (RET_ADDR_337)
  88761. //
  88762. //// pop this 0
  88763. //^^ pop_to_ram(THIS, 0)
  88764. // #33767
  88765. @THIS
  88766. // #33768
  88767. D=M
  88768. // #33769
  88769. @0
  88770. // #33770
  88771. D=D+A
  88772. // #33771
  88773. @R13
  88774. // #33772
  88775. M=D
  88776. //^^ pop_stack_to_d
  88777. // #33773
  88778. @SP
  88779. // #33774
  88780. M=M-1
  88781. // #33775
  88782. A=M
  88783. // #33776
  88784. D=M
  88785. //vv pop_stack_to_d
  88786. // #33777
  88787. @R13
  88788. // #33778
  88789. A=M
  88790. // #33779
  88791. M=D
  88792. // #33780
  88793. @R13
  88794. // #33781
  88795. M=0
  88796. //vv pop_to_ram(THIS, 0)
  88797. //
  88798. //// push constant 0
  88799. //^^ push_constant(0)
  88800. // #33782
  88801. @0
  88802. // #33783
  88803. D=A
  88804. //^^ push_d_to_stack
  88805. // #33784
  88806. @SP
  88807. // #33785
  88808. A=M
  88809. // #33786
  88810. M=D
  88811. // #33787
  88812. @SP
  88813. // #33788
  88814. M=M+1
  88815. //vv push_d_to_stack
  88816. //vv push_constant(0)
  88817. //
  88818. //// pop this 1
  88819. //^^ pop_to_ram(THIS, 1)
  88820. // #33789
  88821. @THIS
  88822. // #33790
  88823. D=M
  88824. // #33791
  88825. @1
  88826. // #33792
  88827. D=D+A
  88828. // #33793
  88829. @R13
  88830. // #33794
  88831. M=D
  88832. //^^ pop_stack_to_d
  88833. // #33795
  88834. @SP
  88835. // #33796
  88836. M=M-1
  88837. // #33797
  88838. A=M
  88839. // #33798
  88840. D=M
  88841. //vv pop_stack_to_d
  88842. // #33799
  88843. @R13
  88844. // #33800
  88845. A=M
  88846. // #33801
  88847. M=D
  88848. // #33802
  88849. @R13
  88850. // #33803
  88851. M=0
  88852. //vv pop_to_ram(THIS, 1)
  88853. //
  88854. //// push pointer 0
  88855. //^^ push_from_loc(3)
  88856. // #33804
  88857. @3
  88858. // #33805
  88859. D=M
  88860. //^^ push_d_to_stack
  88861. // #33806
  88862. @SP
  88863. // #33807
  88864. A=M
  88865. // #33808
  88866. M=D
  88867. // #33809
  88868. @SP
  88869. // #33810
  88870. M=M+1
  88871. //vv push_d_to_stack
  88872. //vv push_from_loc(3)
  88873. //
  88874. //// return
  88875. // #33811
  88876. @LCL
  88877. // #33812
  88878. D=M
  88879. // #33813
  88880. @R14
  88881. // #33814
  88882. M=D //R14=LCL
  88883. // #33815
  88884. @5
  88885. // #33816
  88886. A=D-A
  88887. // #33817
  88888. D=M
  88889. // #33818
  88890. @R15
  88891. // #33819
  88892. M=D //R15=*(LCL-5)
  88893. //^^ pop_stack_to_d
  88894. // #33820
  88895. @SP
  88896. // #33821
  88897. M=M-1
  88898. // #33822
  88899. A=M
  88900. // #33823
  88901. D=M
  88902. //vv pop_stack_to_d
  88903. // #33824
  88904. @ARG
  88905. // #33825
  88906. A=M
  88907. // #33826
  88908. M=D //*ARG = pop()
  88909. // #33827
  88910. @ARG
  88911. // #33828
  88912. D=M
  88913. // #33829
  88914. @SP
  88915. // #33830
  88916. M=D+1 //SP=ARG+1
  88917. // #33831
  88918. @R14
  88919. // #33832
  88920. AM=M-1
  88921. // #33833
  88922. D=M
  88923. // #33834
  88924. @THAT
  88925. // #33835
  88926. M=D //THAT = *(--R14)
  88927. // #33836
  88928. @R14
  88929. // #33837
  88930. AM=M-1
  88931. // #33838
  88932. D=M
  88933. // #33839
  88934. @THIS
  88935. // #33840
  88936. M=D //THIS = *(--R14)
  88937. // #33841
  88938. @R14
  88939. // #33842
  88940. AM=M-1
  88941. // #33843
  88942. D=M
  88943. // #33844
  88944. @ARG
  88945. // #33845
  88946. M=D //ARG = *(--R14)
  88947. // #33846
  88948. @R14
  88949. // #33847
  88950. AM=M-1
  88951. // #33848
  88952. D=M
  88953. // #33849
  88954. @LCL
  88955. // #33850
  88956. M=D //LCL = *(--R14)
  88957. // #33851
  88958. @R15
  88959. // #33852
  88960. A=M
  88961. // #33853
  88962. 0;JMP //goto *R15
  88963. //
  88964. //// function SquareGame.dispose 0
  88965. (SquareGame.dispose)
  88966. //
  88967. //// push argument 0
  88968. //^^ push_from_ram(ARG, 0)
  88969. // #33854
  88970. @ARG
  88971. // #33855
  88972. D=M
  88973. // #33856
  88974. @0
  88975. // #33857
  88976. A=D+A
  88977. // #33858
  88978. D=M
  88979. //^^ push_d_to_stack
  88980. // #33859
  88981. @SP
  88982. // #33860
  88983. A=M
  88984. // #33861
  88985. M=D
  88986. // #33862
  88987. @SP
  88988. // #33863
  88989. M=M+1
  88990. //vv push_d_to_stack
  88991. //vv push_from_ram(ARG, 0)
  88992. //
  88993. //// pop pointer 0
  88994. //^^ pop_to_loc{3)
  88995. //^^ pop_stack_to_d
  88996. // #33864
  88997. @SP
  88998. // #33865
  88999. M=M-1
  89000. // #33866
  89001. A=M
  89002. // #33867
  89003. D=M
  89004. //vv pop_stack_to_d
  89005. // #33868
  89006. @3
  89007. // #33869
  89008. M=D
  89009. //vv pop_to_loc{3)
  89010. //
  89011. //// push this 0
  89012. //^^ push_from_ram(THIS, 0)
  89013. // #33870
  89014. @THIS
  89015. // #33871
  89016. D=M
  89017. // #33872
  89018. @0
  89019. // #33873
  89020. A=D+A
  89021. // #33874
  89022. D=M
  89023. //^^ push_d_to_stack
  89024. // #33875
  89025. @SP
  89026. // #33876
  89027. A=M
  89028. // #33877
  89029. M=D
  89030. // #33878
  89031. @SP
  89032. // #33879
  89033. M=M+1
  89034. //vv push_d_to_stack
  89035. //vv push_from_ram(THIS, 0)
  89036. //
  89037. //// call Square.dispose 1
  89038. //^^ push_constant(RET_ADDR_338)
  89039. // #33880
  89040. @RET_ADDR_338
  89041. // #33881
  89042. D=A
  89043. //^^ push_d_to_stack
  89044. // #33882
  89045. @SP
  89046. // #33883
  89047. A=M
  89048. // #33884
  89049. M=D
  89050. // #33885
  89051. @SP
  89052. // #33886
  89053. M=M+1
  89054. //vv push_d_to_stack
  89055. //vv push_constant(RET_ADDR_338)
  89056. //push return-address
  89057. // #33887
  89058. @LCL
  89059. // #33888
  89060. D=M
  89061. //^^ push_d_to_stack
  89062. // #33889
  89063. @SP
  89064. // #33890
  89065. A=M
  89066. // #33891
  89067. M=D
  89068. // #33892
  89069. @SP
  89070. // #33893
  89071. M=M+1
  89072. //vv push_d_to_stack
  89073. //push LCL
  89074. // #33894
  89075. @ARG
  89076. // #33895
  89077. D=M
  89078. //^^ push_d_to_stack
  89079. // #33896
  89080. @SP
  89081. // #33897
  89082. A=M
  89083. // #33898
  89084. M=D
  89085. // #33899
  89086. @SP
  89087. // #33900
  89088. M=M+1
  89089. //vv push_d_to_stack
  89090. //push ARG
  89091. // #33901
  89092. @THIS
  89093. // #33902
  89094. D=M
  89095. //^^ push_d_to_stack
  89096. // #33903
  89097. @SP
  89098. // #33904
  89099. A=M
  89100. // #33905
  89101. M=D
  89102. // #33906
  89103. @SP
  89104. // #33907
  89105. M=M+1
  89106. //vv push_d_to_stack
  89107. //push THIS
  89108. // #33908
  89109. @THAT
  89110. // #33909
  89111. D=M
  89112. //^^ push_d_to_stack
  89113. // #33910
  89114. @SP
  89115. // #33911
  89116. A=M
  89117. // #33912
  89118. M=D
  89119. // #33913
  89120. @SP
  89121. // #33914
  89122. M=M+1
  89123. //vv push_d_to_stack
  89124. //push THAT
  89125. // #33915
  89126. @SP
  89127. // #33916
  89128. D=M
  89129. // #33917
  89130. @ARG
  89131. // #33918
  89132. M=D
  89133. // #33919
  89134. @6
  89135. // #33920
  89136. D=A
  89137. // #33921
  89138. @ARG
  89139. // #33922
  89140. M=M-D // ARG = SP - args - 5
  89141. // #33923
  89142. @SP
  89143. // #33924
  89144. D=M
  89145. // #33925
  89146. @LCL
  89147. // #33926
  89148. M=D // LCL = SP
  89149. // #33927
  89150. @Square.dispose
  89151. // #33928
  89152. 0;JMP
  89153. (RET_ADDR_338)
  89154. //
  89155. //// pop temp 0
  89156. //^^ pop_to_loc{5)
  89157. //^^ pop_stack_to_d
  89158. // #33929
  89159. @SP
  89160. // #33930
  89161. M=M-1
  89162. // #33931
  89163. A=M
  89164. // #33932
  89165. D=M
  89166. //vv pop_stack_to_d
  89167. // #33933
  89168. @5
  89169. // #33934
  89170. M=D
  89171. //vv pop_to_loc{5)
  89172. //
  89173. //// push pointer 0
  89174. //^^ push_from_loc(3)
  89175. // #33935
  89176. @3
  89177. // #33936
  89178. D=M
  89179. //^^ push_d_to_stack
  89180. // #33937
  89181. @SP
  89182. // #33938
  89183. A=M
  89184. // #33939
  89185. M=D
  89186. // #33940
  89187. @SP
  89188. // #33941
  89189. M=M+1
  89190. //vv push_d_to_stack
  89191. //vv push_from_loc(3)
  89192. //
  89193. //// call Memory.deAlloc 1
  89194. //^^ push_constant(RET_ADDR_339)
  89195. // #33942
  89196. @RET_ADDR_339
  89197. // #33943
  89198. D=A
  89199. //^^ push_d_to_stack
  89200. // #33944
  89201. @SP
  89202. // #33945
  89203. A=M
  89204. // #33946
  89205. M=D
  89206. // #33947
  89207. @SP
  89208. // #33948
  89209. M=M+1
  89210. //vv push_d_to_stack
  89211. //vv push_constant(RET_ADDR_339)
  89212. //push return-address
  89213. // #33949
  89214. @LCL
  89215. // #33950
  89216. D=M
  89217. //^^ push_d_to_stack
  89218. // #33951
  89219. @SP
  89220. // #33952
  89221. A=M
  89222. // #33953
  89223. M=D
  89224. // #33954
  89225. @SP
  89226. // #33955
  89227. M=M+1
  89228. //vv push_d_to_stack
  89229. //push LCL
  89230. // #33956
  89231. @ARG
  89232. // #33957
  89233. D=M
  89234. //^^ push_d_to_stack
  89235. // #33958
  89236. @SP
  89237. // #33959
  89238. A=M
  89239. // #33960
  89240. M=D
  89241. // #33961
  89242. @SP
  89243. // #33962
  89244. M=M+1
  89245. //vv push_d_to_stack
  89246. //push ARG
  89247. // #33963
  89248. @THIS
  89249. // #33964
  89250. D=M
  89251. //^^ push_d_to_stack
  89252. // #33965
  89253. @SP
  89254. // #33966
  89255. A=M
  89256. // #33967
  89257. M=D
  89258. // #33968
  89259. @SP
  89260. // #33969
  89261. M=M+1
  89262. //vv push_d_to_stack
  89263. //push THIS
  89264. // #33970
  89265. @THAT
  89266. // #33971
  89267. D=M
  89268. //^^ push_d_to_stack
  89269. // #33972
  89270. @SP
  89271. // #33973
  89272. A=M
  89273. // #33974
  89274. M=D
  89275. // #33975
  89276. @SP
  89277. // #33976
  89278. M=M+1
  89279. //vv push_d_to_stack
  89280. //push THAT
  89281. // #33977
  89282. @SP
  89283. // #33978
  89284. D=M
  89285. // #33979
  89286. @ARG
  89287. // #33980
  89288. M=D
  89289. // #33981
  89290. @6
  89291. // #33982
  89292. D=A
  89293. // #33983
  89294. @ARG
  89295. // #33984
  89296. M=M-D // ARG = SP - args - 5
  89297. // #33985
  89298. @SP
  89299. // #33986
  89300. D=M
  89301. // #33987
  89302. @LCL
  89303. // #33988
  89304. M=D // LCL = SP
  89305. // #33989
  89306. @Memory.deAlloc
  89307. // #33990
  89308. 0;JMP
  89309. (RET_ADDR_339)
  89310. //
  89311. //// pop temp 0
  89312. //^^ pop_to_loc{5)
  89313. //^^ pop_stack_to_d
  89314. // #33991
  89315. @SP
  89316. // #33992
  89317. M=M-1
  89318. // #33993
  89319. A=M
  89320. // #33994
  89321. D=M
  89322. //vv pop_stack_to_d
  89323. // #33995
  89324. @5
  89325. // #33996
  89326. M=D
  89327. //vv pop_to_loc{5)
  89328. //
  89329. //// push constant 0
  89330. //^^ push_constant(0)
  89331. // #33997
  89332. @0
  89333. // #33998
  89334. D=A
  89335. //^^ push_d_to_stack
  89336. // #33999
  89337. @SP
  89338. // #34000
  89339. A=M
  89340. // #34001
  89341. M=D
  89342. // #34002
  89343. @SP
  89344. // #34003
  89345. M=M+1
  89346. //vv push_d_to_stack
  89347. //vv push_constant(0)
  89348. //
  89349. //// return
  89350. // #34004
  89351. @LCL
  89352. // #34005
  89353. D=M
  89354. // #34006
  89355. @R14
  89356. // #34007
  89357. M=D //R14=LCL
  89358. // #34008
  89359. @5
  89360. // #34009
  89361. A=D-A
  89362. // #34010
  89363. D=M
  89364. // #34011
  89365. @R15
  89366. // #34012
  89367. M=D //R15=*(LCL-5)
  89368. //^^ pop_stack_to_d
  89369. // #34013
  89370. @SP
  89371. // #34014
  89372. M=M-1
  89373. // #34015
  89374. A=M
  89375. // #34016
  89376. D=M
  89377. //vv pop_stack_to_d
  89378. // #34017
  89379. @ARG
  89380. // #34018
  89381. A=M
  89382. // #34019
  89383. M=D //*ARG = pop()
  89384. // #34020
  89385. @ARG
  89386. // #34021
  89387. D=M
  89388. // #34022
  89389. @SP
  89390. // #34023
  89391. M=D+1 //SP=ARG+1
  89392. // #34024
  89393. @R14
  89394. // #34025
  89395. AM=M-1
  89396. // #34026
  89397. D=M
  89398. // #34027
  89399. @THAT
  89400. // #34028
  89401. M=D //THAT = *(--R14)
  89402. // #34029
  89403. @R14
  89404. // #34030
  89405. AM=M-1
  89406. // #34031
  89407. D=M
  89408. // #34032
  89409. @THIS
  89410. // #34033
  89411. M=D //THIS = *(--R14)
  89412. // #34034
  89413. @R14
  89414. // #34035
  89415. AM=M-1
  89416. // #34036
  89417. D=M
  89418. // #34037
  89419. @ARG
  89420. // #34038
  89421. M=D //ARG = *(--R14)
  89422. // #34039
  89423. @R14
  89424. // #34040
  89425. AM=M-1
  89426. // #34041
  89427. D=M
  89428. // #34042
  89429. @LCL
  89430. // #34043
  89431. M=D //LCL = *(--R14)
  89432. // #34044
  89433. @R15
  89434. // #34045
  89435. A=M
  89436. // #34046
  89437. 0;JMP //goto *R15
  89438. //
  89439. //// function SquareGame.run 2
  89440. (SquareGame.run)
  89441. // #34047
  89442. D=0
  89443. //^^ push_d_to_stack
  89444. // #34048
  89445. @SP
  89446. // #34049
  89447. A=M
  89448. // #34050
  89449. M=D
  89450. // #34051
  89451. @SP
  89452. // #34052
  89453. M=M+1
  89454. //vv push_d_to_stack
  89455. // #34053
  89456. D=0
  89457. //^^ push_d_to_stack
  89458. // #34054
  89459. @SP
  89460. // #34055
  89461. A=M
  89462. // #34056
  89463. M=D
  89464. // #34057
  89465. @SP
  89466. // #34058
  89467. M=M+1
  89468. //vv push_d_to_stack
  89469. //
  89470. //// push argument 0
  89471. //^^ push_from_ram(ARG, 0)
  89472. // #34059
  89473. @ARG
  89474. // #34060
  89475. D=M
  89476. // #34061
  89477. @0
  89478. // #34062
  89479. A=D+A
  89480. // #34063
  89481. D=M
  89482. //^^ push_d_to_stack
  89483. // #34064
  89484. @SP
  89485. // #34065
  89486. A=M
  89487. // #34066
  89488. M=D
  89489. // #34067
  89490. @SP
  89491. // #34068
  89492. M=M+1
  89493. //vv push_d_to_stack
  89494. //vv push_from_ram(ARG, 0)
  89495. //
  89496. //// pop pointer 0
  89497. //^^ pop_to_loc{3)
  89498. //^^ pop_stack_to_d
  89499. // #34069
  89500. @SP
  89501. // #34070
  89502. M=M-1
  89503. // #34071
  89504. A=M
  89505. // #34072
  89506. D=M
  89507. //vv pop_stack_to_d
  89508. // #34073
  89509. @3
  89510. // #34074
  89511. M=D
  89512. //vv pop_to_loc{3)
  89513. //
  89514. //// push constant 0
  89515. //^^ push_constant(0)
  89516. // #34075
  89517. @0
  89518. // #34076
  89519. D=A
  89520. //^^ push_d_to_stack
  89521. // #34077
  89522. @SP
  89523. // #34078
  89524. A=M
  89525. // #34079
  89526. M=D
  89527. // #34080
  89528. @SP
  89529. // #34081
  89530. M=M+1
  89531. //vv push_d_to_stack
  89532. //vv push_constant(0)
  89533. //
  89534. //// pop local 1
  89535. //^^ pop_to_ram(LCL, 1)
  89536. // #34082
  89537. @LCL
  89538. // #34083
  89539. D=M
  89540. // #34084
  89541. @1
  89542. // #34085
  89543. D=D+A
  89544. // #34086
  89545. @R13
  89546. // #34087
  89547. M=D
  89548. //^^ pop_stack_to_d
  89549. // #34088
  89550. @SP
  89551. // #34089
  89552. M=M-1
  89553. // #34090
  89554. A=M
  89555. // #34091
  89556. D=M
  89557. //vv pop_stack_to_d
  89558. // #34092
  89559. @R13
  89560. // #34093
  89561. A=M
  89562. // #34094
  89563. M=D
  89564. // #34095
  89565. @R13
  89566. // #34096
  89567. M=0
  89568. //vv pop_to_ram(LCL, 1)
  89569. //
  89570. //// label WHILE_EXP0
  89571. (SquareGame.run$WHILE_EXP0)
  89572. //
  89573. //// push local 1
  89574. //^^ push_from_ram(LCL, 1)
  89575. // #34097
  89576. @LCL
  89577. // #34098
  89578. D=M
  89579. // #34099
  89580. @1
  89581. // #34100
  89582. A=D+A
  89583. // #34101
  89584. D=M
  89585. //^^ push_d_to_stack
  89586. // #34102
  89587. @SP
  89588. // #34103
  89589. A=M
  89590. // #34104
  89591. M=D
  89592. // #34105
  89593. @SP
  89594. // #34106
  89595. M=M+1
  89596. //vv push_d_to_stack
  89597. //vv push_from_ram(LCL, 1)
  89598. //
  89599. //// not
  89600. //^^ arith_unary_op(!)
  89601. //^^ pop_stack_to_d
  89602. // #34107
  89603. @SP
  89604. // #34108
  89605. M=M-1
  89606. // #34109
  89607. A=M
  89608. // #34110
  89609. D=M
  89610. //vv pop_stack_to_d
  89611. // #34111
  89612. D=!D
  89613. //^^ push_d_to_stack
  89614. // #34112
  89615. @SP
  89616. // #34113
  89617. A=M
  89618. // #34114
  89619. M=D
  89620. // #34115
  89621. @SP
  89622. // #34116
  89623. M=M+1
  89624. //vv push_d_to_stack
  89625. //vv arith_unary_op(!)
  89626. //
  89627. //// not
  89628. //^^ arith_unary_op(!)
  89629. //^^ pop_stack_to_d
  89630. // #34117
  89631. @SP
  89632. // #34118
  89633. M=M-1
  89634. // #34119
  89635. A=M
  89636. // #34120
  89637. D=M
  89638. //vv pop_stack_to_d
  89639. // #34121
  89640. D=!D
  89641. //^^ push_d_to_stack
  89642. // #34122
  89643. @SP
  89644. // #34123
  89645. A=M
  89646. // #34124
  89647. M=D
  89648. // #34125
  89649. @SP
  89650. // #34126
  89651. M=M+1
  89652. //vv push_d_to_stack
  89653. //vv arith_unary_op(!)
  89654. //
  89655. //// if-goto WHILE_END0
  89656. //^^ pop_stack_to_d
  89657. // #34127
  89658. @SP
  89659. // #34128
  89660. M=M-1
  89661. // #34129
  89662. A=M
  89663. // #34130
  89664. D=M
  89665. //vv pop_stack_to_d
  89666. // #34131
  89667. @SquareGame.run$WHILE_END0
  89668. // #34132
  89669. D;JNE
  89670. //
  89671. //// label WHILE_EXP1
  89672. (SquareGame.run$WHILE_EXP1)
  89673. //
  89674. //// push local 0
  89675. //^^ push_from_ram(LCL, 0)
  89676. // #34133
  89677. @LCL
  89678. // #34134
  89679. D=M
  89680. // #34135
  89681. @0
  89682. // #34136
  89683. A=D+A
  89684. // #34137
  89685. D=M
  89686. //^^ push_d_to_stack
  89687. // #34138
  89688. @SP
  89689. // #34139
  89690. A=M
  89691. // #34140
  89692. M=D
  89693. // #34141
  89694. @SP
  89695. // #34142
  89696. M=M+1
  89697. //vv push_d_to_stack
  89698. //vv push_from_ram(LCL, 0)
  89699. //
  89700. //// push constant 0
  89701. //^^ push_constant(0)
  89702. // #34143
  89703. @0
  89704. // #34144
  89705. D=A
  89706. //^^ push_d_to_stack
  89707. // #34145
  89708. @SP
  89709. // #34146
  89710. A=M
  89711. // #34147
  89712. M=D
  89713. // #34148
  89714. @SP
  89715. // #34149
  89716. M=M+1
  89717. //vv push_d_to_stack
  89718. //vv push_constant(0)
  89719. //
  89720. //// eq
  89721. //^^ arith_cmp_op(JEQ)
  89722. //^^ pop_stack_to_d
  89723. // #34150
  89724. @SP
  89725. // #34151
  89726. M=M-1
  89727. // #34152
  89728. A=M
  89729. // #34153
  89730. D=M
  89731. //vv pop_stack_to_d
  89732. //^^ arith_d_with_stack_top(D-M)
  89733. // #34154
  89734. @R13
  89735. // #34155
  89736. M=D
  89737. //^^ pop_stack_to_d
  89738. // #34156
  89739. @SP
  89740. // #34157
  89741. M=M-1
  89742. // #34158
  89743. A=M
  89744. // #34159
  89745. D=M
  89746. //vv pop_stack_to_d
  89747. // #34160
  89748. @R13
  89749. // #34161
  89750. D=D-M
  89751. // #34162
  89752. @R13
  89753. // #34163
  89754. M=0
  89755. //vv arith_d_with_stack_top(D-M)
  89756. // #34164
  89757. @PUT_TRUE_340
  89758. // #34165
  89759. D;JEQ
  89760. // #34166
  89761. @R13
  89762. // #34167
  89763. M=0
  89764. // #34168
  89765. @CONT_340
  89766. // #34169
  89767. 0;JMP
  89768. (PUT_TRUE_340)
  89769. // #34170
  89770. @R13
  89771. // #34171
  89772. M=-1
  89773. (CONT_340)
  89774. // #34172
  89775. @R13
  89776. // #34173
  89777. D=M
  89778. // #34174
  89779. @R13
  89780. // #34175
  89781. M=0
  89782. //^^ push_d_to_stack
  89783. // #34176
  89784. @SP
  89785. // #34177
  89786. A=M
  89787. // #34178
  89788. M=D
  89789. // #34179
  89790. @SP
  89791. // #34180
  89792. M=M+1
  89793. //vv push_d_to_stack
  89794. //vv arith_cmp_op(JEQ)
  89795. //
  89796. //// not
  89797. //^^ arith_unary_op(!)
  89798. //^^ pop_stack_to_d
  89799. // #34181
  89800. @SP
  89801. // #34182
  89802. M=M-1
  89803. // #34183
  89804. A=M
  89805. // #34184
  89806. D=M
  89807. //vv pop_stack_to_d
  89808. // #34185
  89809. D=!D
  89810. //^^ push_d_to_stack
  89811. // #34186
  89812. @SP
  89813. // #34187
  89814. A=M
  89815. // #34188
  89816. M=D
  89817. // #34189
  89818. @SP
  89819. // #34190
  89820. M=M+1
  89821. //vv push_d_to_stack
  89822. //vv arith_unary_op(!)
  89823. //
  89824. //// if-goto WHILE_END1
  89825. //^^ pop_stack_to_d
  89826. // #34191
  89827. @SP
  89828. // #34192
  89829. M=M-1
  89830. // #34193
  89831. A=M
  89832. // #34194
  89833. D=M
  89834. //vv pop_stack_to_d
  89835. // #34195
  89836. @SquareGame.run$WHILE_END1
  89837. // #34196
  89838. D;JNE
  89839. //
  89840. //// call Keyboard.keyPressed 0
  89841. //^^ push_constant(RET_ADDR_341)
  89842. // #34197
  89843. @RET_ADDR_341
  89844. // #34198
  89845. D=A
  89846. //^^ push_d_to_stack
  89847. // #34199
  89848. @SP
  89849. // #34200
  89850. A=M
  89851. // #34201
  89852. M=D
  89853. // #34202
  89854. @SP
  89855. // #34203
  89856. M=M+1
  89857. //vv push_d_to_stack
  89858. //vv push_constant(RET_ADDR_341)
  89859. //push return-address
  89860. // #34204
  89861. @LCL
  89862. // #34205
  89863. D=M
  89864. //^^ push_d_to_stack
  89865. // #34206
  89866. @SP
  89867. // #34207
  89868. A=M
  89869. // #34208
  89870. M=D
  89871. // #34209
  89872. @SP
  89873. // #34210
  89874. M=M+1
  89875. //vv push_d_to_stack
  89876. //push LCL
  89877. // #34211
  89878. @ARG
  89879. // #34212
  89880. D=M
  89881. //^^ push_d_to_stack
  89882. // #34213
  89883. @SP
  89884. // #34214
  89885. A=M
  89886. // #34215
  89887. M=D
  89888. // #34216
  89889. @SP
  89890. // #34217
  89891. M=M+1
  89892. //vv push_d_to_stack
  89893. //push ARG
  89894. // #34218
  89895. @THIS
  89896. // #34219
  89897. D=M
  89898. //^^ push_d_to_stack
  89899. // #34220
  89900. @SP
  89901. // #34221
  89902. A=M
  89903. // #34222
  89904. M=D
  89905. // #34223
  89906. @SP
  89907. // #34224
  89908. M=M+1
  89909. //vv push_d_to_stack
  89910. //push THIS
  89911. // #34225
  89912. @THAT
  89913. // #34226
  89914. D=M
  89915. //^^ push_d_to_stack
  89916. // #34227
  89917. @SP
  89918. // #34228
  89919. A=M
  89920. // #34229
  89921. M=D
  89922. // #34230
  89923. @SP
  89924. // #34231
  89925. M=M+1
  89926. //vv push_d_to_stack
  89927. //push THAT
  89928. // #34232
  89929. @SP
  89930. // #34233
  89931. D=M
  89932. // #34234
  89933. @ARG
  89934. // #34235
  89935. M=D
  89936. // #34236
  89937. @5
  89938. // #34237
  89939. D=A
  89940. // #34238
  89941. @ARG
  89942. // #34239
  89943. M=M-D // ARG = SP - args - 5
  89944. // #34240
  89945. @SP
  89946. // #34241
  89947. D=M
  89948. // #34242
  89949. @LCL
  89950. // #34243
  89951. M=D // LCL = SP
  89952. // #34244
  89953. @Keyboard.keyPressed
  89954. // #34245
  89955. 0;JMP
  89956. (RET_ADDR_341)
  89957. //
  89958. //// pop local 0
  89959. //^^ pop_to_ram(LCL, 0)
  89960. // #34246
  89961. @LCL
  89962. // #34247
  89963. D=M
  89964. // #34248
  89965. @0
  89966. // #34249
  89967. D=D+A
  89968. // #34250
  89969. @R13
  89970. // #34251
  89971. M=D
  89972. //^^ pop_stack_to_d
  89973. // #34252
  89974. @SP
  89975. // #34253
  89976. M=M-1
  89977. // #34254
  89978. A=M
  89979. // #34255
  89980. D=M
  89981. //vv pop_stack_to_d
  89982. // #34256
  89983. @R13
  89984. // #34257
  89985. A=M
  89986. // #34258
  89987. M=D
  89988. // #34259
  89989. @R13
  89990. // #34260
  89991. M=0
  89992. //vv pop_to_ram(LCL, 0)
  89993. //
  89994. //// push pointer 0
  89995. //^^ push_from_loc(3)
  89996. // #34261
  89997. @3
  89998. // #34262
  89999. D=M
  90000. //^^ push_d_to_stack
  90001. // #34263
  90002. @SP
  90003. // #34264
  90004. A=M
  90005. // #34265
  90006. M=D
  90007. // #34266
  90008. @SP
  90009. // #34267
  90010. M=M+1
  90011. //vv push_d_to_stack
  90012. //vv push_from_loc(3)
  90013. //
  90014. //// call SquareGame.moveSquare 1
  90015. //^^ push_constant(RET_ADDR_342)
  90016. // #34268
  90017. @RET_ADDR_342
  90018. // #34269
  90019. D=A
  90020. //^^ push_d_to_stack
  90021. // #34270
  90022. @SP
  90023. // #34271
  90024. A=M
  90025. // #34272
  90026. M=D
  90027. // #34273
  90028. @SP
  90029. // #34274
  90030. M=M+1
  90031. //vv push_d_to_stack
  90032. //vv push_constant(RET_ADDR_342)
  90033. //push return-address
  90034. // #34275
  90035. @LCL
  90036. // #34276
  90037. D=M
  90038. //^^ push_d_to_stack
  90039. // #34277
  90040. @SP
  90041. // #34278
  90042. A=M
  90043. // #34279
  90044. M=D
  90045. // #34280
  90046. @SP
  90047. // #34281
  90048. M=M+1
  90049. //vv push_d_to_stack
  90050. //push LCL
  90051. // #34282
  90052. @ARG
  90053. // #34283
  90054. D=M
  90055. //^^ push_d_to_stack
  90056. // #34284
  90057. @SP
  90058. // #34285
  90059. A=M
  90060. // #34286
  90061. M=D
  90062. // #34287
  90063. @SP
  90064. // #34288
  90065. M=M+1
  90066. //vv push_d_to_stack
  90067. //push ARG
  90068. // #34289
  90069. @THIS
  90070. // #34290
  90071. D=M
  90072. //^^ push_d_to_stack
  90073. // #34291
  90074. @SP
  90075. // #34292
  90076. A=M
  90077. // #34293
  90078. M=D
  90079. // #34294
  90080. @SP
  90081. // #34295
  90082. M=M+1
  90083. //vv push_d_to_stack
  90084. //push THIS
  90085. // #34296
  90086. @THAT
  90087. // #34297
  90088. D=M
  90089. //^^ push_d_to_stack
  90090. // #34298
  90091. @SP
  90092. // #34299
  90093. A=M
  90094. // #34300
  90095. M=D
  90096. // #34301
  90097. @SP
  90098. // #34302
  90099. M=M+1
  90100. //vv push_d_to_stack
  90101. //push THAT
  90102. // #34303
  90103. @SP
  90104. // #34304
  90105. D=M
  90106. // #34305
  90107. @ARG
  90108. // #34306
  90109. M=D
  90110. // #34307
  90111. @6
  90112. // #34308
  90113. D=A
  90114. // #34309
  90115. @ARG
  90116. // #34310
  90117. M=M-D // ARG = SP - args - 5
  90118. // #34311
  90119. @SP
  90120. // #34312
  90121. D=M
  90122. // #34313
  90123. @LCL
  90124. // #34314
  90125. M=D // LCL = SP
  90126. // #34315
  90127. @SquareGame.moveSquare
  90128. // #34316
  90129. 0;JMP
  90130. (RET_ADDR_342)
  90131. //
  90132. //// pop temp 0
  90133. //^^ pop_to_loc{5)
  90134. //^^ pop_stack_to_d
  90135. // #34317
  90136. @SP
  90137. // #34318
  90138. M=M-1
  90139. // #34319
  90140. A=M
  90141. // #34320
  90142. D=M
  90143. //vv pop_stack_to_d
  90144. // #34321
  90145. @5
  90146. // #34322
  90147. M=D
  90148. //vv pop_to_loc{5)
  90149. //
  90150. //// goto WHILE_EXP1
  90151. // #34323
  90152. @SquareGame.run$WHILE_EXP1
  90153. // #34324
  90154. 0;JMP
  90155. //
  90156. //// label WHILE_END1
  90157. (SquareGame.run$WHILE_END1)
  90158. //
  90159. //// push local 0
  90160. //^^ push_from_ram(LCL, 0)
  90161. // #34325
  90162. @LCL
  90163. // #34326
  90164. D=M
  90165. // #34327
  90166. @0
  90167. // #34328
  90168. A=D+A
  90169. // #34329
  90170. D=M
  90171. //^^ push_d_to_stack
  90172. // #34330
  90173. @SP
  90174. // #34331
  90175. A=M
  90176. // #34332
  90177. M=D
  90178. // #34333
  90179. @SP
  90180. // #34334
  90181. M=M+1
  90182. //vv push_d_to_stack
  90183. //vv push_from_ram(LCL, 0)
  90184. //
  90185. //// push constant 81
  90186. //^^ push_constant(81)
  90187. // #34335
  90188. @81
  90189. // #34336
  90190. D=A
  90191. //^^ push_d_to_stack
  90192. // #34337
  90193. @SP
  90194. // #34338
  90195. A=M
  90196. // #34339
  90197. M=D
  90198. // #34340
  90199. @SP
  90200. // #34341
  90201. M=M+1
  90202. //vv push_d_to_stack
  90203. //vv push_constant(81)
  90204. //
  90205. //// eq
  90206. //^^ arith_cmp_op(JEQ)
  90207. //^^ pop_stack_to_d
  90208. // #34342
  90209. @SP
  90210. // #34343
  90211. M=M-1
  90212. // #34344
  90213. A=M
  90214. // #34345
  90215. D=M
  90216. //vv pop_stack_to_d
  90217. //^^ arith_d_with_stack_top(D-M)
  90218. // #34346
  90219. @R13
  90220. // #34347
  90221. M=D
  90222. //^^ pop_stack_to_d
  90223. // #34348
  90224. @SP
  90225. // #34349
  90226. M=M-1
  90227. // #34350
  90228. A=M
  90229. // #34351
  90230. D=M
  90231. //vv pop_stack_to_d
  90232. // #34352
  90233. @R13
  90234. // #34353
  90235. D=D-M
  90236. // #34354
  90237. @R13
  90238. // #34355
  90239. M=0
  90240. //vv arith_d_with_stack_top(D-M)
  90241. // #34356
  90242. @PUT_TRUE_343
  90243. // #34357
  90244. D;JEQ
  90245. // #34358
  90246. @R13
  90247. // #34359
  90248. M=0
  90249. // #34360
  90250. @CONT_343
  90251. // #34361
  90252. 0;JMP
  90253. (PUT_TRUE_343)
  90254. // #34362
  90255. @R13
  90256. // #34363
  90257. M=-1
  90258. (CONT_343)
  90259. // #34364
  90260. @R13
  90261. // #34365
  90262. D=M
  90263. // #34366
  90264. @R13
  90265. // #34367
  90266. M=0
  90267. //^^ push_d_to_stack
  90268. // #34368
  90269. @SP
  90270. // #34369
  90271. A=M
  90272. // #34370
  90273. M=D
  90274. // #34371
  90275. @SP
  90276. // #34372
  90277. M=M+1
  90278. //vv push_d_to_stack
  90279. //vv arith_cmp_op(JEQ)
  90280. //
  90281. //// if-goto IF_TRUE0
  90282. //^^ pop_stack_to_d
  90283. // #34373
  90284. @SP
  90285. // #34374
  90286. M=M-1
  90287. // #34375
  90288. A=M
  90289. // #34376
  90290. D=M
  90291. //vv pop_stack_to_d
  90292. // #34377
  90293. @SquareGame.run$IF_TRUE0
  90294. // #34378
  90295. D;JNE
  90296. //
  90297. //// goto IF_FALSE0
  90298. // #34379
  90299. @SquareGame.run$IF_FALSE0
  90300. // #34380
  90301. 0;JMP
  90302. //
  90303. //// label IF_TRUE0
  90304. (SquareGame.run$IF_TRUE0)
  90305. //
  90306. //// push constant 0
  90307. //^^ push_constant(0)
  90308. // #34381
  90309. @0
  90310. // #34382
  90311. D=A
  90312. //^^ push_d_to_stack
  90313. // #34383
  90314. @SP
  90315. // #34384
  90316. A=M
  90317. // #34385
  90318. M=D
  90319. // #34386
  90320. @SP
  90321. // #34387
  90322. M=M+1
  90323. //vv push_d_to_stack
  90324. //vv push_constant(0)
  90325. //
  90326. //// not
  90327. //^^ arith_unary_op(!)
  90328. //^^ pop_stack_to_d
  90329. // #34388
  90330. @SP
  90331. // #34389
  90332. M=M-1
  90333. // #34390
  90334. A=M
  90335. // #34391
  90336. D=M
  90337. //vv pop_stack_to_d
  90338. // #34392
  90339. D=!D
  90340. //^^ push_d_to_stack
  90341. // #34393
  90342. @SP
  90343. // #34394
  90344. A=M
  90345. // #34395
  90346. M=D
  90347. // #34396
  90348. @SP
  90349. // #34397
  90350. M=M+1
  90351. //vv push_d_to_stack
  90352. //vv arith_unary_op(!)
  90353. //
  90354. //// pop local 1
  90355. //^^ pop_to_ram(LCL, 1)
  90356. // #34398
  90357. @LCL
  90358. // #34399
  90359. D=M
  90360. // #34400
  90361. @1
  90362. // #34401
  90363. D=D+A
  90364. // #34402
  90365. @R13
  90366. // #34403
  90367. M=D
  90368. //^^ pop_stack_to_d
  90369. // #34404
  90370. @SP
  90371. // #34405
  90372. M=M-1
  90373. // #34406
  90374. A=M
  90375. // #34407
  90376. D=M
  90377. //vv pop_stack_to_d
  90378. // #34408
  90379. @R13
  90380. // #34409
  90381. A=M
  90382. // #34410
  90383. M=D
  90384. // #34411
  90385. @R13
  90386. // #34412
  90387. M=0
  90388. //vv pop_to_ram(LCL, 1)
  90389. //
  90390. //// label IF_FALSE0
  90391. (SquareGame.run$IF_FALSE0)
  90392. //
  90393. //// push local 0
  90394. //^^ push_from_ram(LCL, 0)
  90395. // #34413
  90396. @LCL
  90397. // #34414
  90398. D=M
  90399. // #34415
  90400. @0
  90401. // #34416
  90402. A=D+A
  90403. // #34417
  90404. D=M
  90405. //^^ push_d_to_stack
  90406. // #34418
  90407. @SP
  90408. // #34419
  90409. A=M
  90410. // #34420
  90411. M=D
  90412. // #34421
  90413. @SP
  90414. // #34422
  90415. M=M+1
  90416. //vv push_d_to_stack
  90417. //vv push_from_ram(LCL, 0)
  90418. //
  90419. //// push constant 90
  90420. //^^ push_constant(90)
  90421. // #34423
  90422. @90
  90423. // #34424
  90424. D=A
  90425. //^^ push_d_to_stack
  90426. // #34425
  90427. @SP
  90428. // #34426
  90429. A=M
  90430. // #34427
  90431. M=D
  90432. // #34428
  90433. @SP
  90434. // #34429
  90435. M=M+1
  90436. //vv push_d_to_stack
  90437. //vv push_constant(90)
  90438. //
  90439. //// eq
  90440. //^^ arith_cmp_op(JEQ)
  90441. //^^ pop_stack_to_d
  90442. // #34430
  90443. @SP
  90444. // #34431
  90445. M=M-1
  90446. // #34432
  90447. A=M
  90448. // #34433
  90449. D=M
  90450. //vv pop_stack_to_d
  90451. //^^ arith_d_with_stack_top(D-M)
  90452. // #34434
  90453. @R13
  90454. // #34435
  90455. M=D
  90456. //^^ pop_stack_to_d
  90457. // #34436
  90458. @SP
  90459. // #34437
  90460. M=M-1
  90461. // #34438
  90462. A=M
  90463. // #34439
  90464. D=M
  90465. //vv pop_stack_to_d
  90466. // #34440
  90467. @R13
  90468. // #34441
  90469. D=D-M
  90470. // #34442
  90471. @R13
  90472. // #34443
  90473. M=0
  90474. //vv arith_d_with_stack_top(D-M)
  90475. // #34444
  90476. @PUT_TRUE_344
  90477. // #34445
  90478. D;JEQ
  90479. // #34446
  90480. @R13
  90481. // #34447
  90482. M=0
  90483. // #34448
  90484. @CONT_344
  90485. // #34449
  90486. 0;JMP
  90487. (PUT_TRUE_344)
  90488. // #34450
  90489. @R13
  90490. // #34451
  90491. M=-1
  90492. (CONT_344)
  90493. // #34452
  90494. @R13
  90495. // #34453
  90496. D=M
  90497. // #34454
  90498. @R13
  90499. // #34455
  90500. M=0
  90501. //^^ push_d_to_stack
  90502. // #34456
  90503. @SP
  90504. // #34457
  90505. A=M
  90506. // #34458
  90507. M=D
  90508. // #34459
  90509. @SP
  90510. // #34460
  90511. M=M+1
  90512. //vv push_d_to_stack
  90513. //vv arith_cmp_op(JEQ)
  90514. //
  90515. //// if-goto IF_TRUE1
  90516. //^^ pop_stack_to_d
  90517. // #34461
  90518. @SP
  90519. // #34462
  90520. M=M-1
  90521. // #34463
  90522. A=M
  90523. // #34464
  90524. D=M
  90525. //vv pop_stack_to_d
  90526. // #34465
  90527. @SquareGame.run$IF_TRUE1
  90528. // #34466
  90529. D;JNE
  90530. //
  90531. //// goto IF_FALSE1
  90532. // #34467
  90533. @SquareGame.run$IF_FALSE1
  90534. // #34468
  90535. 0;JMP
  90536. //
  90537. //// label IF_TRUE1
  90538. (SquareGame.run$IF_TRUE1)
  90539. //
  90540. //// push this 0
  90541. //^^ push_from_ram(THIS, 0)
  90542. // #34469
  90543. @THIS
  90544. // #34470
  90545. D=M
  90546. // #34471
  90547. @0
  90548. // #34472
  90549. A=D+A
  90550. // #34473
  90551. D=M
  90552. //^^ push_d_to_stack
  90553. // #34474
  90554. @SP
  90555. // #34475
  90556. A=M
  90557. // #34476
  90558. M=D
  90559. // #34477
  90560. @SP
  90561. // #34478
  90562. M=M+1
  90563. //vv push_d_to_stack
  90564. //vv push_from_ram(THIS, 0)
  90565. //
  90566. //// call Square.decSize 1
  90567. //^^ push_constant(RET_ADDR_345)
  90568. // #34479
  90569. @RET_ADDR_345
  90570. // #34480
  90571. D=A
  90572. //^^ push_d_to_stack
  90573. // #34481
  90574. @SP
  90575. // #34482
  90576. A=M
  90577. // #34483
  90578. M=D
  90579. // #34484
  90580. @SP
  90581. // #34485
  90582. M=M+1
  90583. //vv push_d_to_stack
  90584. //vv push_constant(RET_ADDR_345)
  90585. //push return-address
  90586. // #34486
  90587. @LCL
  90588. // #34487
  90589. D=M
  90590. //^^ push_d_to_stack
  90591. // #34488
  90592. @SP
  90593. // #34489
  90594. A=M
  90595. // #34490
  90596. M=D
  90597. // #34491
  90598. @SP
  90599. // #34492
  90600. M=M+1
  90601. //vv push_d_to_stack
  90602. //push LCL
  90603. // #34493
  90604. @ARG
  90605. // #34494
  90606. D=M
  90607. //^^ push_d_to_stack
  90608. // #34495
  90609. @SP
  90610. // #34496
  90611. A=M
  90612. // #34497
  90613. M=D
  90614. // #34498
  90615. @SP
  90616. // #34499
  90617. M=M+1
  90618. //vv push_d_to_stack
  90619. //push ARG
  90620. // #34500
  90621. @THIS
  90622. // #34501
  90623. D=M
  90624. //^^ push_d_to_stack
  90625. // #34502
  90626. @SP
  90627. // #34503
  90628. A=M
  90629. // #34504
  90630. M=D
  90631. // #34505
  90632. @SP
  90633. // #34506
  90634. M=M+1
  90635. //vv push_d_to_stack
  90636. //push THIS
  90637. // #34507
  90638. @THAT
  90639. // #34508
  90640. D=M
  90641. //^^ push_d_to_stack
  90642. // #34509
  90643. @SP
  90644. // #34510
  90645. A=M
  90646. // #34511
  90647. M=D
  90648. // #34512
  90649. @SP
  90650. // #34513
  90651. M=M+1
  90652. //vv push_d_to_stack
  90653. //push THAT
  90654. // #34514
  90655. @SP
  90656. // #34515
  90657. D=M
  90658. // #34516
  90659. @ARG
  90660. // #34517
  90661. M=D
  90662. // #34518
  90663. @6
  90664. // #34519
  90665. D=A
  90666. // #34520
  90667. @ARG
  90668. // #34521
  90669. M=M-D // ARG = SP - args - 5
  90670. // #34522
  90671. @SP
  90672. // #34523
  90673. D=M
  90674. // #34524
  90675. @LCL
  90676. // #34525
  90677. M=D // LCL = SP
  90678. // #34526
  90679. @Square.decSize
  90680. // #34527
  90681. 0;JMP
  90682. (RET_ADDR_345)
  90683. //
  90684. //// pop temp 0
  90685. //^^ pop_to_loc{5)
  90686. //^^ pop_stack_to_d
  90687. // #34528
  90688. @SP
  90689. // #34529
  90690. M=M-1
  90691. // #34530
  90692. A=M
  90693. // #34531
  90694. D=M
  90695. //vv pop_stack_to_d
  90696. // #34532
  90697. @5
  90698. // #34533
  90699. M=D
  90700. //vv pop_to_loc{5)
  90701. //
  90702. //// label IF_FALSE1
  90703. (SquareGame.run$IF_FALSE1)
  90704. //
  90705. //// push local 0
  90706. //^^ push_from_ram(LCL, 0)
  90707. // #34534
  90708. @LCL
  90709. // #34535
  90710. D=M
  90711. // #34536
  90712. @0
  90713. // #34537
  90714. A=D+A
  90715. // #34538
  90716. D=M
  90717. //^^ push_d_to_stack
  90718. // #34539
  90719. @SP
  90720. // #34540
  90721. A=M
  90722. // #34541
  90723. M=D
  90724. // #34542
  90725. @SP
  90726. // #34543
  90727. M=M+1
  90728. //vv push_d_to_stack
  90729. //vv push_from_ram(LCL, 0)
  90730. //
  90731. //// push constant 88
  90732. //^^ push_constant(88)
  90733. // #34544
  90734. @88
  90735. // #34545
  90736. D=A
  90737. //^^ push_d_to_stack
  90738. // #34546
  90739. @SP
  90740. // #34547
  90741. A=M
  90742. // #34548
  90743. M=D
  90744. // #34549
  90745. @SP
  90746. // #34550
  90747. M=M+1
  90748. //vv push_d_to_stack
  90749. //vv push_constant(88)
  90750. //
  90751. //// eq
  90752. //^^ arith_cmp_op(JEQ)
  90753. //^^ pop_stack_to_d
  90754. // #34551
  90755. @SP
  90756. // #34552
  90757. M=M-1
  90758. // #34553
  90759. A=M
  90760. // #34554
  90761. D=M
  90762. //vv pop_stack_to_d
  90763. //^^ arith_d_with_stack_top(D-M)
  90764. // #34555
  90765. @R13
  90766. // #34556
  90767. M=D
  90768. //^^ pop_stack_to_d
  90769. // #34557
  90770. @SP
  90771. // #34558
  90772. M=M-1
  90773. // #34559
  90774. A=M
  90775. // #34560
  90776. D=M
  90777. //vv pop_stack_to_d
  90778. // #34561
  90779. @R13
  90780. // #34562
  90781. D=D-M
  90782. // #34563
  90783. @R13
  90784. // #34564
  90785. M=0
  90786. //vv arith_d_with_stack_top(D-M)
  90787. // #34565
  90788. @PUT_TRUE_346
  90789. // #34566
  90790. D;JEQ
  90791. // #34567
  90792. @R13
  90793. // #34568
  90794. M=0
  90795. // #34569
  90796. @CONT_346
  90797. // #34570
  90798. 0;JMP
  90799. (PUT_TRUE_346)
  90800. // #34571
  90801. @R13
  90802. // #34572
  90803. M=-1
  90804. (CONT_346)
  90805. // #34573
  90806. @R13
  90807. // #34574
  90808. D=M
  90809. // #34575
  90810. @R13
  90811. // #34576
  90812. M=0
  90813. //^^ push_d_to_stack
  90814. // #34577
  90815. @SP
  90816. // #34578
  90817. A=M
  90818. // #34579
  90819. M=D
  90820. // #34580
  90821. @SP
  90822. // #34581
  90823. M=M+1
  90824. //vv push_d_to_stack
  90825. //vv arith_cmp_op(JEQ)
  90826. //
  90827. //// if-goto IF_TRUE2
  90828. //^^ pop_stack_to_d
  90829. // #34582
  90830. @SP
  90831. // #34583
  90832. M=M-1
  90833. // #34584
  90834. A=M
  90835. // #34585
  90836. D=M
  90837. //vv pop_stack_to_d
  90838. // #34586
  90839. @SquareGame.run$IF_TRUE2
  90840. // #34587
  90841. D;JNE
  90842. //
  90843. //// goto IF_FALSE2
  90844. // #34588
  90845. @SquareGame.run$IF_FALSE2
  90846. // #34589
  90847. 0;JMP
  90848. //
  90849. //// label IF_TRUE2
  90850. (SquareGame.run$IF_TRUE2)
  90851. //
  90852. //// push this 0
  90853. //^^ push_from_ram(THIS, 0)
  90854. // #34590
  90855. @THIS
  90856. // #34591
  90857. D=M
  90858. // #34592
  90859. @0
  90860. // #34593
  90861. A=D+A
  90862. // #34594
  90863. D=M
  90864. //^^ push_d_to_stack
  90865. // #34595
  90866. @SP
  90867. // #34596
  90868. A=M
  90869. // #34597
  90870. M=D
  90871. // #34598
  90872. @SP
  90873. // #34599
  90874. M=M+1
  90875. //vv push_d_to_stack
  90876. //vv push_from_ram(THIS, 0)
  90877. //
  90878. //// call Square.incSize 1
  90879. //^^ push_constant(RET_ADDR_347)
  90880. // #34600
  90881. @RET_ADDR_347
  90882. // #34601
  90883. D=A
  90884. //^^ push_d_to_stack
  90885. // #34602
  90886. @SP
  90887. // #34603
  90888. A=M
  90889. // #34604
  90890. M=D
  90891. // #34605
  90892. @SP
  90893. // #34606
  90894. M=M+1
  90895. //vv push_d_to_stack
  90896. //vv push_constant(RET_ADDR_347)
  90897. //push return-address
  90898. // #34607
  90899. @LCL
  90900. // #34608
  90901. D=M
  90902. //^^ push_d_to_stack
  90903. // #34609
  90904. @SP
  90905. // #34610
  90906. A=M
  90907. // #34611
  90908. M=D
  90909. // #34612
  90910. @SP
  90911. // #34613
  90912. M=M+1
  90913. //vv push_d_to_stack
  90914. //push LCL
  90915. // #34614
  90916. @ARG
  90917. // #34615
  90918. D=M
  90919. //^^ push_d_to_stack
  90920. // #34616
  90921. @SP
  90922. // #34617
  90923. A=M
  90924. // #34618
  90925. M=D
  90926. // #34619
  90927. @SP
  90928. // #34620
  90929. M=M+1
  90930. //vv push_d_to_stack
  90931. //push ARG
  90932. // #34621
  90933. @THIS
  90934. // #34622
  90935. D=M
  90936. //^^ push_d_to_stack
  90937. // #34623
  90938. @SP
  90939. // #34624
  90940. A=M
  90941. // #34625
  90942. M=D
  90943. // #34626
  90944. @SP
  90945. // #34627
  90946. M=M+1
  90947. //vv push_d_to_stack
  90948. //push THIS
  90949. // #34628
  90950. @THAT
  90951. // #34629
  90952. D=M
  90953. //^^ push_d_to_stack
  90954. // #34630
  90955. @SP
  90956. // #34631
  90957. A=M
  90958. // #34632
  90959. M=D
  90960. // #34633
  90961. @SP
  90962. // #34634
  90963. M=M+1
  90964. //vv push_d_to_stack
  90965. //push THAT
  90966. // #34635
  90967. @SP
  90968. // #34636
  90969. D=M
  90970. // #34637
  90971. @ARG
  90972. // #34638
  90973. M=D
  90974. // #34639
  90975. @6
  90976. // #34640
  90977. D=A
  90978. // #34641
  90979. @ARG
  90980. // #34642
  90981. M=M-D // ARG = SP - args - 5
  90982. // #34643
  90983. @SP
  90984. // #34644
  90985. D=M
  90986. // #34645
  90987. @LCL
  90988. // #34646
  90989. M=D // LCL = SP
  90990. // #34647
  90991. @Square.incSize
  90992. // #34648
  90993. 0;JMP
  90994. (RET_ADDR_347)
  90995. //
  90996. //// pop temp 0
  90997. //^^ pop_to_loc{5)
  90998. //^^ pop_stack_to_d
  90999. // #34649
  91000. @SP
  91001. // #34650
  91002. M=M-1
  91003. // #34651
  91004. A=M
  91005. // #34652
  91006. D=M
  91007. //vv pop_stack_to_d
  91008. // #34653
  91009. @5
  91010. // #34654
  91011. M=D
  91012. //vv pop_to_loc{5)
  91013. //
  91014. //// label IF_FALSE2
  91015. (SquareGame.run$IF_FALSE2)
  91016. //
  91017. //// push local 0
  91018. //^^ push_from_ram(LCL, 0)
  91019. // #34655
  91020. @LCL
  91021. // #34656
  91022. D=M
  91023. // #34657
  91024. @0
  91025. // #34658
  91026. A=D+A
  91027. // #34659
  91028. D=M
  91029. //^^ push_d_to_stack
  91030. // #34660
  91031. @SP
  91032. // #34661
  91033. A=M
  91034. // #34662
  91035. M=D
  91036. // #34663
  91037. @SP
  91038. // #34664
  91039. M=M+1
  91040. //vv push_d_to_stack
  91041. //vv push_from_ram(LCL, 0)
  91042. //
  91043. //// push constant 131
  91044. //^^ push_constant(131)
  91045. // #34665
  91046. @131
  91047. // #34666
  91048. D=A
  91049. //^^ push_d_to_stack
  91050. // #34667
  91051. @SP
  91052. // #34668
  91053. A=M
  91054. // #34669
  91055. M=D
  91056. // #34670
  91057. @SP
  91058. // #34671
  91059. M=M+1
  91060. //vv push_d_to_stack
  91061. //vv push_constant(131)
  91062. //
  91063. //// eq
  91064. //^^ arith_cmp_op(JEQ)
  91065. //^^ pop_stack_to_d
  91066. // #34672
  91067. @SP
  91068. // #34673
  91069. M=M-1
  91070. // #34674
  91071. A=M
  91072. // #34675
  91073. D=M
  91074. //vv pop_stack_to_d
  91075. //^^ arith_d_with_stack_top(D-M)
  91076. // #34676
  91077. @R13
  91078. // #34677
  91079. M=D
  91080. //^^ pop_stack_to_d
  91081. // #34678
  91082. @SP
  91083. // #34679
  91084. M=M-1
  91085. // #34680
  91086. A=M
  91087. // #34681
  91088. D=M
  91089. //vv pop_stack_to_d
  91090. // #34682
  91091. @R13
  91092. // #34683
  91093. D=D-M
  91094. // #34684
  91095. @R13
  91096. // #34685
  91097. M=0
  91098. //vv arith_d_with_stack_top(D-M)
  91099. // #34686
  91100. @PUT_TRUE_348
  91101. // #34687
  91102. D;JEQ
  91103. // #34688
  91104. @R13
  91105. // #34689
  91106. M=0
  91107. // #34690
  91108. @CONT_348
  91109. // #34691
  91110. 0;JMP
  91111. (PUT_TRUE_348)
  91112. // #34692
  91113. @R13
  91114. // #34693
  91115. M=-1
  91116. (CONT_348)
  91117. // #34694
  91118. @R13
  91119. // #34695
  91120. D=M
  91121. // #34696
  91122. @R13
  91123. // #34697
  91124. M=0
  91125. //^^ push_d_to_stack
  91126. // #34698
  91127. @SP
  91128. // #34699
  91129. A=M
  91130. // #34700
  91131. M=D
  91132. // #34701
  91133. @SP
  91134. // #34702
  91135. M=M+1
  91136. //vv push_d_to_stack
  91137. //vv arith_cmp_op(JEQ)
  91138. //
  91139. //// if-goto IF_TRUE3
  91140. //^^ pop_stack_to_d
  91141. // #34703
  91142. @SP
  91143. // #34704
  91144. M=M-1
  91145. // #34705
  91146. A=M
  91147. // #34706
  91148. D=M
  91149. //vv pop_stack_to_d
  91150. // #34707
  91151. @SquareGame.run$IF_TRUE3
  91152. // #34708
  91153. D;JNE
  91154. //
  91155. //// goto IF_FALSE3
  91156. // #34709
  91157. @SquareGame.run$IF_FALSE3
  91158. // #34710
  91159. 0;JMP
  91160. //
  91161. //// label IF_TRUE3
  91162. (SquareGame.run$IF_TRUE3)
  91163. //
  91164. //// push constant 1
  91165. //^^ push_constant(1)
  91166. // #34711
  91167. @1
  91168. // #34712
  91169. D=A
  91170. //^^ push_d_to_stack
  91171. // #34713
  91172. @SP
  91173. // #34714
  91174. A=M
  91175. // #34715
  91176. M=D
  91177. // #34716
  91178. @SP
  91179. // #34717
  91180. M=M+1
  91181. //vv push_d_to_stack
  91182. //vv push_constant(1)
  91183. //
  91184. //// pop this 1
  91185. //^^ pop_to_ram(THIS, 1)
  91186. // #34718
  91187. @THIS
  91188. // #34719
  91189. D=M
  91190. // #34720
  91191. @1
  91192. // #34721
  91193. D=D+A
  91194. // #34722
  91195. @R13
  91196. // #34723
  91197. M=D
  91198. //^^ pop_stack_to_d
  91199. // #34724
  91200. @SP
  91201. // #34725
  91202. M=M-1
  91203. // #34726
  91204. A=M
  91205. // #34727
  91206. D=M
  91207. //vv pop_stack_to_d
  91208. // #34728
  91209. @R13
  91210. // #34729
  91211. A=M
  91212. // #34730
  91213. M=D
  91214. // #34731
  91215. @R13
  91216. // #34732
  91217. M=0
  91218. //vv pop_to_ram(THIS, 1)
  91219. //
  91220. //// label IF_FALSE3
  91221. (SquareGame.run$IF_FALSE3)
  91222. //
  91223. //// push local 0
  91224. //^^ push_from_ram(LCL, 0)
  91225. // #34733
  91226. @LCL
  91227. // #34734
  91228. D=M
  91229. // #34735
  91230. @0
  91231. // #34736
  91232. A=D+A
  91233. // #34737
  91234. D=M
  91235. //^^ push_d_to_stack
  91236. // #34738
  91237. @SP
  91238. // #34739
  91239. A=M
  91240. // #34740
  91241. M=D
  91242. // #34741
  91243. @SP
  91244. // #34742
  91245. M=M+1
  91246. //vv push_d_to_stack
  91247. //vv push_from_ram(LCL, 0)
  91248. //
  91249. //// push constant 133
  91250. //^^ push_constant(133)
  91251. // #34743
  91252. @133
  91253. // #34744
  91254. D=A
  91255. //^^ push_d_to_stack
  91256. // #34745
  91257. @SP
  91258. // #34746
  91259. A=M
  91260. // #34747
  91261. M=D
  91262. // #34748
  91263. @SP
  91264. // #34749
  91265. M=M+1
  91266. //vv push_d_to_stack
  91267. //vv push_constant(133)
  91268. //
  91269. //// eq
  91270. //^^ arith_cmp_op(JEQ)
  91271. //^^ pop_stack_to_d
  91272. // #34750
  91273. @SP
  91274. // #34751
  91275. M=M-1
  91276. // #34752
  91277. A=M
  91278. // #34753
  91279. D=M
  91280. //vv pop_stack_to_d
  91281. //^^ arith_d_with_stack_top(D-M)
  91282. // #34754
  91283. @R13
  91284. // #34755
  91285. M=D
  91286. //^^ pop_stack_to_d
  91287. // #34756
  91288. @SP
  91289. // #34757
  91290. M=M-1
  91291. // #34758
  91292. A=M
  91293. // #34759
  91294. D=M
  91295. //vv pop_stack_to_d
  91296. // #34760
  91297. @R13
  91298. // #34761
  91299. D=D-M
  91300. // #34762
  91301. @R13
  91302. // #34763
  91303. M=0
  91304. //vv arith_d_with_stack_top(D-M)
  91305. // #34764
  91306. @PUT_TRUE_349
  91307. // #34765
  91308. D;JEQ
  91309. // #34766
  91310. @R13
  91311. // #34767
  91312. M=0
  91313. // #34768
  91314. @CONT_349
  91315. // #34769
  91316. 0;JMP
  91317. (PUT_TRUE_349)
  91318. // #34770
  91319. @R13
  91320. // #34771
  91321. M=-1
  91322. (CONT_349)
  91323. // #34772
  91324. @R13
  91325. // #34773
  91326. D=M
  91327. // #34774
  91328. @R13
  91329. // #34775
  91330. M=0
  91331. //^^ push_d_to_stack
  91332. // #34776
  91333. @SP
  91334. // #34777
  91335. A=M
  91336. // #34778
  91337. M=D
  91338. // #34779
  91339. @SP
  91340. // #34780
  91341. M=M+1
  91342. //vv push_d_to_stack
  91343. //vv arith_cmp_op(JEQ)
  91344. //
  91345. //// if-goto IF_TRUE4
  91346. //^^ pop_stack_to_d
  91347. // #34781
  91348. @SP
  91349. // #34782
  91350. M=M-1
  91351. // #34783
  91352. A=M
  91353. // #34784
  91354. D=M
  91355. //vv pop_stack_to_d
  91356. // #34785
  91357. @SquareGame.run$IF_TRUE4
  91358. // #34786
  91359. D;JNE
  91360. //
  91361. //// goto IF_FALSE4
  91362. // #34787
  91363. @SquareGame.run$IF_FALSE4
  91364. // #34788
  91365. 0;JMP
  91366. //
  91367. //// label IF_TRUE4
  91368. (SquareGame.run$IF_TRUE4)
  91369. //
  91370. //// push constant 2
  91371. //^^ push_constant(2)
  91372. // #34789
  91373. @2
  91374. // #34790
  91375. D=A
  91376. //^^ push_d_to_stack
  91377. // #34791
  91378. @SP
  91379. // #34792
  91380. A=M
  91381. // #34793
  91382. M=D
  91383. // #34794
  91384. @SP
  91385. // #34795
  91386. M=M+1
  91387. //vv push_d_to_stack
  91388. //vv push_constant(2)
  91389. //
  91390. //// pop this 1
  91391. //^^ pop_to_ram(THIS, 1)
  91392. // #34796
  91393. @THIS
  91394. // #34797
  91395. D=M
  91396. // #34798
  91397. @1
  91398. // #34799
  91399. D=D+A
  91400. // #34800
  91401. @R13
  91402. // #34801
  91403. M=D
  91404. //^^ pop_stack_to_d
  91405. // #34802
  91406. @SP
  91407. // #34803
  91408. M=M-1
  91409. // #34804
  91410. A=M
  91411. // #34805
  91412. D=M
  91413. //vv pop_stack_to_d
  91414. // #34806
  91415. @R13
  91416. // #34807
  91417. A=M
  91418. // #34808
  91419. M=D
  91420. // #34809
  91421. @R13
  91422. // #34810
  91423. M=0
  91424. //vv pop_to_ram(THIS, 1)
  91425. //
  91426. //// label IF_FALSE4
  91427. (SquareGame.run$IF_FALSE4)
  91428. //
  91429. //// push local 0
  91430. //^^ push_from_ram(LCL, 0)
  91431. // #34811
  91432. @LCL
  91433. // #34812
  91434. D=M
  91435. // #34813
  91436. @0
  91437. // #34814
  91438. A=D+A
  91439. // #34815
  91440. D=M
  91441. //^^ push_d_to_stack
  91442. // #34816
  91443. @SP
  91444. // #34817
  91445. A=M
  91446. // #34818
  91447. M=D
  91448. // #34819
  91449. @SP
  91450. // #34820
  91451. M=M+1
  91452. //vv push_d_to_stack
  91453. //vv push_from_ram(LCL, 0)
  91454. //
  91455. //// push constant 130
  91456. //^^ push_constant(130)
  91457. // #34821
  91458. @130
  91459. // #34822
  91460. D=A
  91461. //^^ push_d_to_stack
  91462. // #34823
  91463. @SP
  91464. // #34824
  91465. A=M
  91466. // #34825
  91467. M=D
  91468. // #34826
  91469. @SP
  91470. // #34827
  91471. M=M+1
  91472. //vv push_d_to_stack
  91473. //vv push_constant(130)
  91474. //
  91475. //// eq
  91476. //^^ arith_cmp_op(JEQ)
  91477. //^^ pop_stack_to_d
  91478. // #34828
  91479. @SP
  91480. // #34829
  91481. M=M-1
  91482. // #34830
  91483. A=M
  91484. // #34831
  91485. D=M
  91486. //vv pop_stack_to_d
  91487. //^^ arith_d_with_stack_top(D-M)
  91488. // #34832
  91489. @R13
  91490. // #34833
  91491. M=D
  91492. //^^ pop_stack_to_d
  91493. // #34834
  91494. @SP
  91495. // #34835
  91496. M=M-1
  91497. // #34836
  91498. A=M
  91499. // #34837
  91500. D=M
  91501. //vv pop_stack_to_d
  91502. // #34838
  91503. @R13
  91504. // #34839
  91505. D=D-M
  91506. // #34840
  91507. @R13
  91508. // #34841
  91509. M=0
  91510. //vv arith_d_with_stack_top(D-M)
  91511. // #34842
  91512. @PUT_TRUE_350
  91513. // #34843
  91514. D;JEQ
  91515. // #34844
  91516. @R13
  91517. // #34845
  91518. M=0
  91519. // #34846
  91520. @CONT_350
  91521. // #34847
  91522. 0;JMP
  91523. (PUT_TRUE_350)
  91524. // #34848
  91525. @R13
  91526. // #34849
  91527. M=-1
  91528. (CONT_350)
  91529. // #34850
  91530. @R13
  91531. // #34851
  91532. D=M
  91533. // #34852
  91534. @R13
  91535. // #34853
  91536. M=0
  91537. //^^ push_d_to_stack
  91538. // #34854
  91539. @SP
  91540. // #34855
  91541. A=M
  91542. // #34856
  91543. M=D
  91544. // #34857
  91545. @SP
  91546. // #34858
  91547. M=M+1
  91548. //vv push_d_to_stack
  91549. //vv arith_cmp_op(JEQ)
  91550. //
  91551. //// if-goto IF_TRUE5
  91552. //^^ pop_stack_to_d
  91553. // #34859
  91554. @SP
  91555. // #34860
  91556. M=M-1
  91557. // #34861
  91558. A=M
  91559. // #34862
  91560. D=M
  91561. //vv pop_stack_to_d
  91562. // #34863
  91563. @SquareGame.run$IF_TRUE5
  91564. // #34864
  91565. D;JNE
  91566. //
  91567. //// goto IF_FALSE5
  91568. // #34865
  91569. @SquareGame.run$IF_FALSE5
  91570. // #34866
  91571. 0;JMP
  91572. //
  91573. //// label IF_TRUE5
  91574. (SquareGame.run$IF_TRUE5)
  91575. //
  91576. //// push constant 3
  91577. //^^ push_constant(3)
  91578. // #34867
  91579. @3
  91580. // #34868
  91581. D=A
  91582. //^^ push_d_to_stack
  91583. // #34869
  91584. @SP
  91585. // #34870
  91586. A=M
  91587. // #34871
  91588. M=D
  91589. // #34872
  91590. @SP
  91591. // #34873
  91592. M=M+1
  91593. //vv push_d_to_stack
  91594. //vv push_constant(3)
  91595. //
  91596. //// pop this 1
  91597. //^^ pop_to_ram(THIS, 1)
  91598. // #34874
  91599. @THIS
  91600. // #34875
  91601. D=M
  91602. // #34876
  91603. @1
  91604. // #34877
  91605. D=D+A
  91606. // #34878
  91607. @R13
  91608. // #34879
  91609. M=D
  91610. //^^ pop_stack_to_d
  91611. // #34880
  91612. @SP
  91613. // #34881
  91614. M=M-1
  91615. // #34882
  91616. A=M
  91617. // #34883
  91618. D=M
  91619. //vv pop_stack_to_d
  91620. // #34884
  91621. @R13
  91622. // #34885
  91623. A=M
  91624. // #34886
  91625. M=D
  91626. // #34887
  91627. @R13
  91628. // #34888
  91629. M=0
  91630. //vv pop_to_ram(THIS, 1)
  91631. //
  91632. //// label IF_FALSE5
  91633. (SquareGame.run$IF_FALSE5)
  91634. //
  91635. //// push local 0
  91636. //^^ push_from_ram(LCL, 0)
  91637. // #34889
  91638. @LCL
  91639. // #34890
  91640. D=M
  91641. // #34891
  91642. @0
  91643. // #34892
  91644. A=D+A
  91645. // #34893
  91646. D=M
  91647. //^^ push_d_to_stack
  91648. // #34894
  91649. @SP
  91650. // #34895
  91651. A=M
  91652. // #34896
  91653. M=D
  91654. // #34897
  91655. @SP
  91656. // #34898
  91657. M=M+1
  91658. //vv push_d_to_stack
  91659. //vv push_from_ram(LCL, 0)
  91660. //
  91661. //// push constant 132
  91662. //^^ push_constant(132)
  91663. // #34899
  91664. @132
  91665. // #34900
  91666. D=A
  91667. //^^ push_d_to_stack
  91668. // #34901
  91669. @SP
  91670. // #34902
  91671. A=M
  91672. // #34903
  91673. M=D
  91674. // #34904
  91675. @SP
  91676. // #34905
  91677. M=M+1
  91678. //vv push_d_to_stack
  91679. //vv push_constant(132)
  91680. //
  91681. //// eq
  91682. //^^ arith_cmp_op(JEQ)
  91683. //^^ pop_stack_to_d
  91684. // #34906
  91685. @SP
  91686. // #34907
  91687. M=M-1
  91688. // #34908
  91689. A=M
  91690. // #34909
  91691. D=M
  91692. //vv pop_stack_to_d
  91693. //^^ arith_d_with_stack_top(D-M)
  91694. // #34910
  91695. @R13
  91696. // #34911
  91697. M=D
  91698. //^^ pop_stack_to_d
  91699. // #34912
  91700. @SP
  91701. // #34913
  91702. M=M-1
  91703. // #34914
  91704. A=M
  91705. // #34915
  91706. D=M
  91707. //vv pop_stack_to_d
  91708. // #34916
  91709. @R13
  91710. // #34917
  91711. D=D-M
  91712. // #34918
  91713. @R13
  91714. // #34919
  91715. M=0
  91716. //vv arith_d_with_stack_top(D-M)
  91717. // #34920
  91718. @PUT_TRUE_351
  91719. // #34921
  91720. D;JEQ
  91721. // #34922
  91722. @R13
  91723. // #34923
  91724. M=0
  91725. // #34924
  91726. @CONT_351
  91727. // #34925
  91728. 0;JMP
  91729. (PUT_TRUE_351)
  91730. // #34926
  91731. @R13
  91732. // #34927
  91733. M=-1
  91734. (CONT_351)
  91735. // #34928
  91736. @R13
  91737. // #34929
  91738. D=M
  91739. // #34930
  91740. @R13
  91741. // #34931
  91742. M=0
  91743. //^^ push_d_to_stack
  91744. // #34932
  91745. @SP
  91746. // #34933
  91747. A=M
  91748. // #34934
  91749. M=D
  91750. // #34935
  91751. @SP
  91752. // #34936
  91753. M=M+1
  91754. //vv push_d_to_stack
  91755. //vv arith_cmp_op(JEQ)
  91756. //
  91757. //// if-goto IF_TRUE6
  91758. //^^ pop_stack_to_d
  91759. // #34937
  91760. @SP
  91761. // #34938
  91762. M=M-1
  91763. // #34939
  91764. A=M
  91765. // #34940
  91766. D=M
  91767. //vv pop_stack_to_d
  91768. // #34941
  91769. @SquareGame.run$IF_TRUE6
  91770. // #34942
  91771. D;JNE
  91772. //
  91773. //// goto IF_FALSE6
  91774. // #34943
  91775. @SquareGame.run$IF_FALSE6
  91776. // #34944
  91777. 0;JMP
  91778. //
  91779. //// label IF_TRUE6
  91780. (SquareGame.run$IF_TRUE6)
  91781. //
  91782. //// push constant 4
  91783. //^^ push_constant(4)
  91784. // #34945
  91785. @4
  91786. // #34946
  91787. D=A
  91788. //^^ push_d_to_stack
  91789. // #34947
  91790. @SP
  91791. // #34948
  91792. A=M
  91793. // #34949
  91794. M=D
  91795. // #34950
  91796. @SP
  91797. // #34951
  91798. M=M+1
  91799. //vv push_d_to_stack
  91800. //vv push_constant(4)
  91801. //
  91802. //// pop this 1
  91803. //^^ pop_to_ram(THIS, 1)
  91804. // #34952
  91805. @THIS
  91806. // #34953
  91807. D=M
  91808. // #34954
  91809. @1
  91810. // #34955
  91811. D=D+A
  91812. // #34956
  91813. @R13
  91814. // #34957
  91815. M=D
  91816. //^^ pop_stack_to_d
  91817. // #34958
  91818. @SP
  91819. // #34959
  91820. M=M-1
  91821. // #34960
  91822. A=M
  91823. // #34961
  91824. D=M
  91825. //vv pop_stack_to_d
  91826. // #34962
  91827. @R13
  91828. // #34963
  91829. A=M
  91830. // #34964
  91831. M=D
  91832. // #34965
  91833. @R13
  91834. // #34966
  91835. M=0
  91836. //vv pop_to_ram(THIS, 1)
  91837. //
  91838. //// label IF_FALSE6
  91839. (SquareGame.run$IF_FALSE6)
  91840. //
  91841. //// label WHILE_EXP2
  91842. (SquareGame.run$WHILE_EXP2)
  91843. //
  91844. //// push local 0
  91845. //^^ push_from_ram(LCL, 0)
  91846. // #34967
  91847. @LCL
  91848. // #34968
  91849. D=M
  91850. // #34969
  91851. @0
  91852. // #34970
  91853. A=D+A
  91854. // #34971
  91855. D=M
  91856. //^^ push_d_to_stack
  91857. // #34972
  91858. @SP
  91859. // #34973
  91860. A=M
  91861. // #34974
  91862. M=D
  91863. // #34975
  91864. @SP
  91865. // #34976
  91866. M=M+1
  91867. //vv push_d_to_stack
  91868. //vv push_from_ram(LCL, 0)
  91869. //
  91870. //// push constant 0
  91871. //^^ push_constant(0)
  91872. // #34977
  91873. @0
  91874. // #34978
  91875. D=A
  91876. //^^ push_d_to_stack
  91877. // #34979
  91878. @SP
  91879. // #34980
  91880. A=M
  91881. // #34981
  91882. M=D
  91883. // #34982
  91884. @SP
  91885. // #34983
  91886. M=M+1
  91887. //vv push_d_to_stack
  91888. //vv push_constant(0)
  91889. //
  91890. //// eq
  91891. //^^ arith_cmp_op(JEQ)
  91892. //^^ pop_stack_to_d
  91893. // #34984
  91894. @SP
  91895. // #34985
  91896. M=M-1
  91897. // #34986
  91898. A=M
  91899. // #34987
  91900. D=M
  91901. //vv pop_stack_to_d
  91902. //^^ arith_d_with_stack_top(D-M)
  91903. // #34988
  91904. @R13
  91905. // #34989
  91906. M=D
  91907. //^^ pop_stack_to_d
  91908. // #34990
  91909. @SP
  91910. // #34991
  91911. M=M-1
  91912. // #34992
  91913. A=M
  91914. // #34993
  91915. D=M
  91916. //vv pop_stack_to_d
  91917. // #34994
  91918. @R13
  91919. // #34995
  91920. D=D-M
  91921. // #34996
  91922. @R13
  91923. // #34997
  91924. M=0
  91925. //vv arith_d_with_stack_top(D-M)
  91926. // #34998
  91927. @PUT_TRUE_352
  91928. // #34999
  91929. D;JEQ
  91930. // #35000
  91931. @R13
  91932. // #35001
  91933. M=0
  91934. // #35002
  91935. @CONT_352
  91936. // #35003
  91937. 0;JMP
  91938. (PUT_TRUE_352)
  91939. // #35004
  91940. @R13
  91941. // #35005
  91942. M=-1
  91943. (CONT_352)
  91944. // #35006
  91945. @R13
  91946. // #35007
  91947. D=M
  91948. // #35008
  91949. @R13
  91950. // #35009
  91951. M=0
  91952. //^^ push_d_to_stack
  91953. // #35010
  91954. @SP
  91955. // #35011
  91956. A=M
  91957. // #35012
  91958. M=D
  91959. // #35013
  91960. @SP
  91961. // #35014
  91962. M=M+1
  91963. //vv push_d_to_stack
  91964. //vv arith_cmp_op(JEQ)
  91965. //
  91966. //// not
  91967. //^^ arith_unary_op(!)
  91968. //^^ pop_stack_to_d
  91969. // #35015
  91970. @SP
  91971. // #35016
  91972. M=M-1
  91973. // #35017
  91974. A=M
  91975. // #35018
  91976. D=M
  91977. //vv pop_stack_to_d
  91978. // #35019
  91979. D=!D
  91980. //^^ push_d_to_stack
  91981. // #35020
  91982. @SP
  91983. // #35021
  91984. A=M
  91985. // #35022
  91986. M=D
  91987. // #35023
  91988. @SP
  91989. // #35024
  91990. M=M+1
  91991. //vv push_d_to_stack
  91992. //vv arith_unary_op(!)
  91993. //
  91994. //// not
  91995. //^^ arith_unary_op(!)
  91996. //^^ pop_stack_to_d
  91997. // #35025
  91998. @SP
  91999. // #35026
  92000. M=M-1
  92001. // #35027
  92002. A=M
  92003. // #35028
  92004. D=M
  92005. //vv pop_stack_to_d
  92006. // #35029
  92007. D=!D
  92008. //^^ push_d_to_stack
  92009. // #35030
  92010. @SP
  92011. // #35031
  92012. A=M
  92013. // #35032
  92014. M=D
  92015. // #35033
  92016. @SP
  92017. // #35034
  92018. M=M+1
  92019. //vv push_d_to_stack
  92020. //vv arith_unary_op(!)
  92021. //
  92022. //// if-goto WHILE_END2
  92023. //^^ pop_stack_to_d
  92024. // #35035
  92025. @SP
  92026. // #35036
  92027. M=M-1
  92028. // #35037
  92029. A=M
  92030. // #35038
  92031. D=M
  92032. //vv pop_stack_to_d
  92033. // #35039
  92034. @SquareGame.run$WHILE_END2
  92035. // #35040
  92036. D;JNE
  92037. //
  92038. //// call Keyboard.keyPressed 0
  92039. //^^ push_constant(RET_ADDR_353)
  92040. // #35041
  92041. @RET_ADDR_353
  92042. // #35042
  92043. D=A
  92044. //^^ push_d_to_stack
  92045. // #35043
  92046. @SP
  92047. // #35044
  92048. A=M
  92049. // #35045
  92050. M=D
  92051. // #35046
  92052. @SP
  92053. // #35047
  92054. M=M+1
  92055. //vv push_d_to_stack
  92056. //vv push_constant(RET_ADDR_353)
  92057. //push return-address
  92058. // #35048
  92059. @LCL
  92060. // #35049
  92061. D=M
  92062. //^^ push_d_to_stack
  92063. // #35050
  92064. @SP
  92065. // #35051
  92066. A=M
  92067. // #35052
  92068. M=D
  92069. // #35053
  92070. @SP
  92071. // #35054
  92072. M=M+1
  92073. //vv push_d_to_stack
  92074. //push LCL
  92075. // #35055
  92076. @ARG
  92077. // #35056
  92078. D=M
  92079. //^^ push_d_to_stack
  92080. // #35057
  92081. @SP
  92082. // #35058
  92083. A=M
  92084. // #35059
  92085. M=D
  92086. // #35060
  92087. @SP
  92088. // #35061
  92089. M=M+1
  92090. //vv push_d_to_stack
  92091. //push ARG
  92092. // #35062
  92093. @THIS
  92094. // #35063
  92095. D=M
  92096. //^^ push_d_to_stack
  92097. // #35064
  92098. @SP
  92099. // #35065
  92100. A=M
  92101. // #35066
  92102. M=D
  92103. // #35067
  92104. @SP
  92105. // #35068
  92106. M=M+1
  92107. //vv push_d_to_stack
  92108. //push THIS
  92109. // #35069
  92110. @THAT
  92111. // #35070
  92112. D=M
  92113. //^^ push_d_to_stack
  92114. // #35071
  92115. @SP
  92116. // #35072
  92117. A=M
  92118. // #35073
  92119. M=D
  92120. // #35074
  92121. @SP
  92122. // #35075
  92123. M=M+1
  92124. //vv push_d_to_stack
  92125. //push THAT
  92126. // #35076
  92127. @SP
  92128. // #35077
  92129. D=M
  92130. // #35078
  92131. @ARG
  92132. // #35079
  92133. M=D
  92134. // #35080
  92135. @5
  92136. // #35081
  92137. D=A
  92138. // #35082
  92139. @ARG
  92140. // #35083
  92141. M=M-D // ARG = SP - args - 5
  92142. // #35084
  92143. @SP
  92144. // #35085
  92145. D=M
  92146. // #35086
  92147. @LCL
  92148. // #35087
  92149. M=D // LCL = SP
  92150. // #35088
  92151. @Keyboard.keyPressed
  92152. // #35089
  92153. 0;JMP
  92154. (RET_ADDR_353)
  92155. //
  92156. //// pop local 0
  92157. //^^ pop_to_ram(LCL, 0)
  92158. // #35090
  92159. @LCL
  92160. // #35091
  92161. D=M
  92162. // #35092
  92163. @0
  92164. // #35093
  92165. D=D+A
  92166. // #35094
  92167. @R13
  92168. // #35095
  92169. M=D
  92170. //^^ pop_stack_to_d
  92171. // #35096
  92172. @SP
  92173. // #35097
  92174. M=M-1
  92175. // #35098
  92176. A=M
  92177. // #35099
  92178. D=M
  92179. //vv pop_stack_to_d
  92180. // #35100
  92181. @R13
  92182. // #35101
  92183. A=M
  92184. // #35102
  92185. M=D
  92186. // #35103
  92187. @R13
  92188. // #35104
  92189. M=0
  92190. //vv pop_to_ram(LCL, 0)
  92191. //
  92192. //// push pointer 0
  92193. //^^ push_from_loc(3)
  92194. // #35105
  92195. @3
  92196. // #35106
  92197. D=M
  92198. //^^ push_d_to_stack
  92199. // #35107
  92200. @SP
  92201. // #35108
  92202. A=M
  92203. // #35109
  92204. M=D
  92205. // #35110
  92206. @SP
  92207. // #35111
  92208. M=M+1
  92209. //vv push_d_to_stack
  92210. //vv push_from_loc(3)
  92211. //
  92212. //// call SquareGame.moveSquare 1
  92213. //^^ push_constant(RET_ADDR_354)
  92214. // #35112
  92215. @RET_ADDR_354
  92216. // #35113
  92217. D=A
  92218. //^^ push_d_to_stack
  92219. // #35114
  92220. @SP
  92221. // #35115
  92222. A=M
  92223. // #35116
  92224. M=D
  92225. // #35117
  92226. @SP
  92227. // #35118
  92228. M=M+1
  92229. //vv push_d_to_stack
  92230. //vv push_constant(RET_ADDR_354)
  92231. //push return-address
  92232. // #35119
  92233. @LCL
  92234. // #35120
  92235. D=M
  92236. //^^ push_d_to_stack
  92237. // #35121
  92238. @SP
  92239. // #35122
  92240. A=M
  92241. // #35123
  92242. M=D
  92243. // #35124
  92244. @SP
  92245. // #35125
  92246. M=M+1
  92247. //vv push_d_to_stack
  92248. //push LCL
  92249. // #35126
  92250. @ARG
  92251. // #35127
  92252. D=M
  92253. //^^ push_d_to_stack
  92254. // #35128
  92255. @SP
  92256. // #35129
  92257. A=M
  92258. // #35130
  92259. M=D
  92260. // #35131
  92261. @SP
  92262. // #35132
  92263. M=M+1
  92264. //vv push_d_to_stack
  92265. //push ARG
  92266. // #35133
  92267. @THIS
  92268. // #35134
  92269. D=M
  92270. //^^ push_d_to_stack
  92271. // #35135
  92272. @SP
  92273. // #35136
  92274. A=M
  92275. // #35137
  92276. M=D
  92277. // #35138
  92278. @SP
  92279. // #35139
  92280. M=M+1
  92281. //vv push_d_to_stack
  92282. //push THIS
  92283. // #35140
  92284. @THAT
  92285. // #35141
  92286. D=M
  92287. //^^ push_d_to_stack
  92288. // #35142
  92289. @SP
  92290. // #35143
  92291. A=M
  92292. // #35144
  92293. M=D
  92294. // #35145
  92295. @SP
  92296. // #35146
  92297. M=M+1
  92298. //vv push_d_to_stack
  92299. //push THAT
  92300. // #35147
  92301. @SP
  92302. // #35148
  92303. D=M
  92304. // #35149
  92305. @ARG
  92306. // #35150
  92307. M=D
  92308. // #35151
  92309. @6
  92310. // #35152
  92311. D=A
  92312. // #35153
  92313. @ARG
  92314. // #35154
  92315. M=M-D // ARG = SP - args - 5
  92316. // #35155
  92317. @SP
  92318. // #35156
  92319. D=M
  92320. // #35157
  92321. @LCL
  92322. // #35158
  92323. M=D // LCL = SP
  92324. // #35159
  92325. @SquareGame.moveSquare
  92326. // #35160
  92327. 0;JMP
  92328. (RET_ADDR_354)
  92329. //
  92330. //// pop temp 0
  92331. //^^ pop_to_loc{5)
  92332. //^^ pop_stack_to_d
  92333. // #35161
  92334. @SP
  92335. // #35162
  92336. M=M-1
  92337. // #35163
  92338. A=M
  92339. // #35164
  92340. D=M
  92341. //vv pop_stack_to_d
  92342. // #35165
  92343. @5
  92344. // #35166
  92345. M=D
  92346. //vv pop_to_loc{5)
  92347. //
  92348. //// goto WHILE_EXP2
  92349. // #35167
  92350. @SquareGame.run$WHILE_EXP2
  92351. // #35168
  92352. 0;JMP
  92353. //
  92354. //// label WHILE_END2
  92355. (SquareGame.run$WHILE_END2)
  92356. //
  92357. //// goto WHILE_EXP0
  92358. // #35169
  92359. @SquareGame.run$WHILE_EXP0
  92360. // #35170
  92361. 0;JMP
  92362. //
  92363. //// label WHILE_END0
  92364. (SquareGame.run$WHILE_END0)
  92365. //
  92366. //// push constant 0
  92367. //^^ push_constant(0)
  92368. // #35171
  92369. @0
  92370. // #35172
  92371. D=A
  92372. //^^ push_d_to_stack
  92373. // #35173
  92374. @SP
  92375. // #35174
  92376. A=M
  92377. // #35175
  92378. M=D
  92379. // #35176
  92380. @SP
  92381. // #35177
  92382. M=M+1
  92383. //vv push_d_to_stack
  92384. //vv push_constant(0)
  92385. //
  92386. //// return
  92387. // #35178
  92388. @LCL
  92389. // #35179
  92390. D=M
  92391. // #35180
  92392. @R14
  92393. // #35181
  92394. M=D //R14=LCL
  92395. // #35182
  92396. @5
  92397. // #35183
  92398. A=D-A
  92399. // #35184
  92400. D=M
  92401. // #35185
  92402. @R15
  92403. // #35186
  92404. M=D //R15=*(LCL-5)
  92405. //^^ pop_stack_to_d
  92406. // #35187
  92407. @SP
  92408. // #35188
  92409. M=M-1
  92410. // #35189
  92411. A=M
  92412. // #35190
  92413. D=M
  92414. //vv pop_stack_to_d
  92415. // #35191
  92416. @ARG
  92417. // #35192
  92418. A=M
  92419. // #35193
  92420. M=D //*ARG = pop()
  92421. // #35194
  92422. @ARG
  92423. // #35195
  92424. D=M
  92425. // #35196
  92426. @SP
  92427. // #35197
  92428. M=D+1 //SP=ARG+1
  92429. // #35198
  92430. @R14
  92431. // #35199
  92432. AM=M-1
  92433. // #35200
  92434. D=M
  92435. // #35201
  92436. @THAT
  92437. // #35202
  92438. M=D //THAT = *(--R14)
  92439. // #35203
  92440. @R14
  92441. // #35204
  92442. AM=M-1
  92443. // #35205
  92444. D=M
  92445. // #35206
  92446. @THIS
  92447. // #35207
  92448. M=D //THIS = *(--R14)
  92449. // #35208
  92450. @R14
  92451. // #35209
  92452. AM=M-1
  92453. // #35210
  92454. D=M
  92455. // #35211
  92456. @ARG
  92457. // #35212
  92458. M=D //ARG = *(--R14)
  92459. // #35213
  92460. @R14
  92461. // #35214
  92462. AM=M-1
  92463. // #35215
  92464. D=M
  92465. // #35216
  92466. @LCL
  92467. // #35217
  92468. M=D //LCL = *(--R14)
  92469. // #35218
  92470. @R15
  92471. // #35219
  92472. A=M
  92473. // #35220
  92474. 0;JMP //goto *R15
  92475. //
  92476. //// function SquareGame.moveSquare 0
  92477. (SquareGame.moveSquare)
  92478. //
  92479. //// push argument 0
  92480. //^^ push_from_ram(ARG, 0)
  92481. // #35221
  92482. @ARG
  92483. // #35222
  92484. D=M
  92485. // #35223
  92486. @0
  92487. // #35224
  92488. A=D+A
  92489. // #35225
  92490. D=M
  92491. //^^ push_d_to_stack
  92492. // #35226
  92493. @SP
  92494. // #35227
  92495. A=M
  92496. // #35228
  92497. M=D
  92498. // #35229
  92499. @SP
  92500. // #35230
  92501. M=M+1
  92502. //vv push_d_to_stack
  92503. //vv push_from_ram(ARG, 0)
  92504. //
  92505. //// pop pointer 0
  92506. //^^ pop_to_loc{3)
  92507. //^^ pop_stack_to_d
  92508. // #35231
  92509. @SP
  92510. // #35232
  92511. M=M-1
  92512. // #35233
  92513. A=M
  92514. // #35234
  92515. D=M
  92516. //vv pop_stack_to_d
  92517. // #35235
  92518. @3
  92519. // #35236
  92520. M=D
  92521. //vv pop_to_loc{3)
  92522. //
  92523. //// push this 1
  92524. //^^ push_from_ram(THIS, 1)
  92525. // #35237
  92526. @THIS
  92527. // #35238
  92528. D=M
  92529. // #35239
  92530. @1
  92531. // #35240
  92532. A=D+A
  92533. // #35241
  92534. D=M
  92535. //^^ push_d_to_stack
  92536. // #35242
  92537. @SP
  92538. // #35243
  92539. A=M
  92540. // #35244
  92541. M=D
  92542. // #35245
  92543. @SP
  92544. // #35246
  92545. M=M+1
  92546. //vv push_d_to_stack
  92547. //vv push_from_ram(THIS, 1)
  92548. //
  92549. //// push constant 1
  92550. //^^ push_constant(1)
  92551. // #35247
  92552. @1
  92553. // #35248
  92554. D=A
  92555. //^^ push_d_to_stack
  92556. // #35249
  92557. @SP
  92558. // #35250
  92559. A=M
  92560. // #35251
  92561. M=D
  92562. // #35252
  92563. @SP
  92564. // #35253
  92565. M=M+1
  92566. //vv push_d_to_stack
  92567. //vv push_constant(1)
  92568. //
  92569. //// eq
  92570. //^^ arith_cmp_op(JEQ)
  92571. //^^ pop_stack_to_d
  92572. // #35254
  92573. @SP
  92574. // #35255
  92575. M=M-1
  92576. // #35256
  92577. A=M
  92578. // #35257
  92579. D=M
  92580. //vv pop_stack_to_d
  92581. //^^ arith_d_with_stack_top(D-M)
  92582. // #35258
  92583. @R13
  92584. // #35259
  92585. M=D
  92586. //^^ pop_stack_to_d
  92587. // #35260
  92588. @SP
  92589. // #35261
  92590. M=M-1
  92591. // #35262
  92592. A=M
  92593. // #35263
  92594. D=M
  92595. //vv pop_stack_to_d
  92596. // #35264
  92597. @R13
  92598. // #35265
  92599. D=D-M
  92600. // #35266
  92601. @R13
  92602. // #35267
  92603. M=0
  92604. //vv arith_d_with_stack_top(D-M)
  92605. // #35268
  92606. @PUT_TRUE_355
  92607. // #35269
  92608. D;JEQ
  92609. // #35270
  92610. @R13
  92611. // #35271
  92612. M=0
  92613. // #35272
  92614. @CONT_355
  92615. // #35273
  92616. 0;JMP
  92617. (PUT_TRUE_355)
  92618. // #35274
  92619. @R13
  92620. // #35275
  92621. M=-1
  92622. (CONT_355)
  92623. // #35276
  92624. @R13
  92625. // #35277
  92626. D=M
  92627. // #35278
  92628. @R13
  92629. // #35279
  92630. M=0
  92631. //^^ push_d_to_stack
  92632. // #35280
  92633. @SP
  92634. // #35281
  92635. A=M
  92636. // #35282
  92637. M=D
  92638. // #35283
  92639. @SP
  92640. // #35284
  92641. M=M+1
  92642. //vv push_d_to_stack
  92643. //vv arith_cmp_op(JEQ)
  92644. //
  92645. //// if-goto IF_TRUE0
  92646. //^^ pop_stack_to_d
  92647. // #35285
  92648. @SP
  92649. // #35286
  92650. M=M-1
  92651. // #35287
  92652. A=M
  92653. // #35288
  92654. D=M
  92655. //vv pop_stack_to_d
  92656. // #35289
  92657. @SquareGame.moveSquare$IF_TRUE0
  92658. // #35290
  92659. D;JNE
  92660. //
  92661. //// goto IF_FALSE0
  92662. // #35291
  92663. @SquareGame.moveSquare$IF_FALSE0
  92664. // #35292
  92665. 0;JMP
  92666. //
  92667. //// label IF_TRUE0
  92668. (SquareGame.moveSquare$IF_TRUE0)
  92669. //
  92670. //// push this 0
  92671. //^^ push_from_ram(THIS, 0)
  92672. // #35293
  92673. @THIS
  92674. // #35294
  92675. D=M
  92676. // #35295
  92677. @0
  92678. // #35296
  92679. A=D+A
  92680. // #35297
  92681. D=M
  92682. //^^ push_d_to_stack
  92683. // #35298
  92684. @SP
  92685. // #35299
  92686. A=M
  92687. // #35300
  92688. M=D
  92689. // #35301
  92690. @SP
  92691. // #35302
  92692. M=M+1
  92693. //vv push_d_to_stack
  92694. //vv push_from_ram(THIS, 0)
  92695. //
  92696. //// call Square.moveUp 1
  92697. //^^ push_constant(RET_ADDR_356)
  92698. // #35303
  92699. @RET_ADDR_356
  92700. // #35304
  92701. D=A
  92702. //^^ push_d_to_stack
  92703. // #35305
  92704. @SP
  92705. // #35306
  92706. A=M
  92707. // #35307
  92708. M=D
  92709. // #35308
  92710. @SP
  92711. // #35309
  92712. M=M+1
  92713. //vv push_d_to_stack
  92714. //vv push_constant(RET_ADDR_356)
  92715. //push return-address
  92716. // #35310
  92717. @LCL
  92718. // #35311
  92719. D=M
  92720. //^^ push_d_to_stack
  92721. // #35312
  92722. @SP
  92723. // #35313
  92724. A=M
  92725. // #35314
  92726. M=D
  92727. // #35315
  92728. @SP
  92729. // #35316
  92730. M=M+1
  92731. //vv push_d_to_stack
  92732. //push LCL
  92733. // #35317
  92734. @ARG
  92735. // #35318
  92736. D=M
  92737. //^^ push_d_to_stack
  92738. // #35319
  92739. @SP
  92740. // #35320
  92741. A=M
  92742. // #35321
  92743. M=D
  92744. // #35322
  92745. @SP
  92746. // #35323
  92747. M=M+1
  92748. //vv push_d_to_stack
  92749. //push ARG
  92750. // #35324
  92751. @THIS
  92752. // #35325
  92753. D=M
  92754. //^^ push_d_to_stack
  92755. // #35326
  92756. @SP
  92757. // #35327
  92758. A=M
  92759. // #35328
  92760. M=D
  92761. // #35329
  92762. @SP
  92763. // #35330
  92764. M=M+1
  92765. //vv push_d_to_stack
  92766. //push THIS
  92767. // #35331
  92768. @THAT
  92769. // #35332
  92770. D=M
  92771. //^^ push_d_to_stack
  92772. // #35333
  92773. @SP
  92774. // #35334
  92775. A=M
  92776. // #35335
  92777. M=D
  92778. // #35336
  92779. @SP
  92780. // #35337
  92781. M=M+1
  92782. //vv push_d_to_stack
  92783. //push THAT
  92784. // #35338
  92785. @SP
  92786. // #35339
  92787. D=M
  92788. // #35340
  92789. @ARG
  92790. // #35341
  92791. M=D
  92792. // #35342
  92793. @6
  92794. // #35343
  92795. D=A
  92796. // #35344
  92797. @ARG
  92798. // #35345
  92799. M=M-D // ARG = SP - args - 5
  92800. // #35346
  92801. @SP
  92802. // #35347
  92803. D=M
  92804. // #35348
  92805. @LCL
  92806. // #35349
  92807. M=D // LCL = SP
  92808. // #35350
  92809. @Square.moveUp
  92810. // #35351
  92811. 0;JMP
  92812. (RET_ADDR_356)
  92813. //
  92814. //// pop temp 0
  92815. //^^ pop_to_loc{5)
  92816. //^^ pop_stack_to_d
  92817. // #35352
  92818. @SP
  92819. // #35353
  92820. M=M-1
  92821. // #35354
  92822. A=M
  92823. // #35355
  92824. D=M
  92825. //vv pop_stack_to_d
  92826. // #35356
  92827. @5
  92828. // #35357
  92829. M=D
  92830. //vv pop_to_loc{5)
  92831. //
  92832. //// label IF_FALSE0
  92833. (SquareGame.moveSquare$IF_FALSE0)
  92834. //
  92835. //// push this 1
  92836. //^^ push_from_ram(THIS, 1)
  92837. // #35358
  92838. @THIS
  92839. // #35359
  92840. D=M
  92841. // #35360
  92842. @1
  92843. // #35361
  92844. A=D+A
  92845. // #35362
  92846. D=M
  92847. //^^ push_d_to_stack
  92848. // #35363
  92849. @SP
  92850. // #35364
  92851. A=M
  92852. // #35365
  92853. M=D
  92854. // #35366
  92855. @SP
  92856. // #35367
  92857. M=M+1
  92858. //vv push_d_to_stack
  92859. //vv push_from_ram(THIS, 1)
  92860. //
  92861. //// push constant 2
  92862. //^^ push_constant(2)
  92863. // #35368
  92864. @2
  92865. // #35369
  92866. D=A
  92867. //^^ push_d_to_stack
  92868. // #35370
  92869. @SP
  92870. // #35371
  92871. A=M
  92872. // #35372
  92873. M=D
  92874. // #35373
  92875. @SP
  92876. // #35374
  92877. M=M+1
  92878. //vv push_d_to_stack
  92879. //vv push_constant(2)
  92880. //
  92881. //// eq
  92882. //^^ arith_cmp_op(JEQ)
  92883. //^^ pop_stack_to_d
  92884. // #35375
  92885. @SP
  92886. // #35376
  92887. M=M-1
  92888. // #35377
  92889. A=M
  92890. // #35378
  92891. D=M
  92892. //vv pop_stack_to_d
  92893. //^^ arith_d_with_stack_top(D-M)
  92894. // #35379
  92895. @R13
  92896. // #35380
  92897. M=D
  92898. //^^ pop_stack_to_d
  92899. // #35381
  92900. @SP
  92901. // #35382
  92902. M=M-1
  92903. // #35383
  92904. A=M
  92905. // #35384
  92906. D=M
  92907. //vv pop_stack_to_d
  92908. // #35385
  92909. @R13
  92910. // #35386
  92911. D=D-M
  92912. // #35387
  92913. @R13
  92914. // #35388
  92915. M=0
  92916. //vv arith_d_with_stack_top(D-M)
  92917. // #35389
  92918. @PUT_TRUE_357
  92919. // #35390
  92920. D;JEQ
  92921. // #35391
  92922. @R13
  92923. // #35392
  92924. M=0
  92925. // #35393
  92926. @CONT_357
  92927. // #35394
  92928. 0;JMP
  92929. (PUT_TRUE_357)
  92930. // #35395
  92931. @R13
  92932. // #35396
  92933. M=-1
  92934. (CONT_357)
  92935. // #35397
  92936. @R13
  92937. // #35398
  92938. D=M
  92939. // #35399
  92940. @R13
  92941. // #35400
  92942. M=0
  92943. //^^ push_d_to_stack
  92944. // #35401
  92945. @SP
  92946. // #35402
  92947. A=M
  92948. // #35403
  92949. M=D
  92950. // #35404
  92951. @SP
  92952. // #35405
  92953. M=M+1
  92954. //vv push_d_to_stack
  92955. //vv arith_cmp_op(JEQ)
  92956. //
  92957. //// if-goto IF_TRUE1
  92958. //^^ pop_stack_to_d
  92959. // #35406
  92960. @SP
  92961. // #35407
  92962. M=M-1
  92963. // #35408
  92964. A=M
  92965. // #35409
  92966. D=M
  92967. //vv pop_stack_to_d
  92968. // #35410
  92969. @SquareGame.moveSquare$IF_TRUE1
  92970. // #35411
  92971. D;JNE
  92972. //
  92973. //// goto IF_FALSE1
  92974. // #35412
  92975. @SquareGame.moveSquare$IF_FALSE1
  92976. // #35413
  92977. 0;JMP
  92978. //
  92979. //// label IF_TRUE1
  92980. (SquareGame.moveSquare$IF_TRUE1)
  92981. //
  92982. //// push this 0
  92983. //^^ push_from_ram(THIS, 0)
  92984. // #35414
  92985. @THIS
  92986. // #35415
  92987. D=M
  92988. // #35416
  92989. @0
  92990. // #35417
  92991. A=D+A
  92992. // #35418
  92993. D=M
  92994. //^^ push_d_to_stack
  92995. // #35419
  92996. @SP
  92997. // #35420
  92998. A=M
  92999. // #35421
  93000. M=D
  93001. // #35422
  93002. @SP
  93003. // #35423
  93004. M=M+1
  93005. //vv push_d_to_stack
  93006. //vv push_from_ram(THIS, 0)
  93007. //
  93008. //// call Square.moveDown 1
  93009. //^^ push_constant(RET_ADDR_358)
  93010. // #35424
  93011. @RET_ADDR_358
  93012. // #35425
  93013. D=A
  93014. //^^ push_d_to_stack
  93015. // #35426
  93016. @SP
  93017. // #35427
  93018. A=M
  93019. // #35428
  93020. M=D
  93021. // #35429
  93022. @SP
  93023. // #35430
  93024. M=M+1
  93025. //vv push_d_to_stack
  93026. //vv push_constant(RET_ADDR_358)
  93027. //push return-address
  93028. // #35431
  93029. @LCL
  93030. // #35432
  93031. D=M
  93032. //^^ push_d_to_stack
  93033. // #35433
  93034. @SP
  93035. // #35434
  93036. A=M
  93037. // #35435
  93038. M=D
  93039. // #35436
  93040. @SP
  93041. // #35437
  93042. M=M+1
  93043. //vv push_d_to_stack
  93044. //push LCL
  93045. // #35438
  93046. @ARG
  93047. // #35439
  93048. D=M
  93049. //^^ push_d_to_stack
  93050. // #35440
  93051. @SP
  93052. // #35441
  93053. A=M
  93054. // #35442
  93055. M=D
  93056. // #35443
  93057. @SP
  93058. // #35444
  93059. M=M+1
  93060. //vv push_d_to_stack
  93061. //push ARG
  93062. // #35445
  93063. @THIS
  93064. // #35446
  93065. D=M
  93066. //^^ push_d_to_stack
  93067. // #35447
  93068. @SP
  93069. // #35448
  93070. A=M
  93071. // #35449
  93072. M=D
  93073. // #35450
  93074. @SP
  93075. // #35451
  93076. M=M+1
  93077. //vv push_d_to_stack
  93078. //push THIS
  93079. // #35452
  93080. @THAT
  93081. // #35453
  93082. D=M
  93083. //^^ push_d_to_stack
  93084. // #35454
  93085. @SP
  93086. // #35455
  93087. A=M
  93088. // #35456
  93089. M=D
  93090. // #35457
  93091. @SP
  93092. // #35458
  93093. M=M+1
  93094. //vv push_d_to_stack
  93095. //push THAT
  93096. // #35459
  93097. @SP
  93098. // #35460
  93099. D=M
  93100. // #35461
  93101. @ARG
  93102. // #35462
  93103. M=D
  93104. // #35463
  93105. @6
  93106. // #35464
  93107. D=A
  93108. // #35465
  93109. @ARG
  93110. // #35466
  93111. M=M-D // ARG = SP - args - 5
  93112. // #35467
  93113. @SP
  93114. // #35468
  93115. D=M
  93116. // #35469
  93117. @LCL
  93118. // #35470
  93119. M=D // LCL = SP
  93120. // #35471
  93121. @Square.moveDown
  93122. // #35472
  93123. 0;JMP
  93124. (RET_ADDR_358)
  93125. //
  93126. //// pop temp 0
  93127. //^^ pop_to_loc{5)
  93128. //^^ pop_stack_to_d
  93129. // #35473
  93130. @SP
  93131. // #35474
  93132. M=M-1
  93133. // #35475
  93134. A=M
  93135. // #35476
  93136. D=M
  93137. //vv pop_stack_to_d
  93138. // #35477
  93139. @5
  93140. // #35478
  93141. M=D
  93142. //vv pop_to_loc{5)
  93143. //
  93144. //// label IF_FALSE1
  93145. (SquareGame.moveSquare$IF_FALSE1)
  93146. //
  93147. //// push this 1
  93148. //^^ push_from_ram(THIS, 1)
  93149. // #35479
  93150. @THIS
  93151. // #35480
  93152. D=M
  93153. // #35481
  93154. @1
  93155. // #35482
  93156. A=D+A
  93157. // #35483
  93158. D=M
  93159. //^^ push_d_to_stack
  93160. // #35484
  93161. @SP
  93162. // #35485
  93163. A=M
  93164. // #35486
  93165. M=D
  93166. // #35487
  93167. @SP
  93168. // #35488
  93169. M=M+1
  93170. //vv push_d_to_stack
  93171. //vv push_from_ram(THIS, 1)
  93172. //
  93173. //// push constant 3
  93174. //^^ push_constant(3)
  93175. // #35489
  93176. @3
  93177. // #35490
  93178. D=A
  93179. //^^ push_d_to_stack
  93180. // #35491
  93181. @SP
  93182. // #35492
  93183. A=M
  93184. // #35493
  93185. M=D
  93186. // #35494
  93187. @SP
  93188. // #35495
  93189. M=M+1
  93190. //vv push_d_to_stack
  93191. //vv push_constant(3)
  93192. //
  93193. //// eq
  93194. //^^ arith_cmp_op(JEQ)
  93195. //^^ pop_stack_to_d
  93196. // #35496
  93197. @SP
  93198. // #35497
  93199. M=M-1
  93200. // #35498
  93201. A=M
  93202. // #35499
  93203. D=M
  93204. //vv pop_stack_to_d
  93205. //^^ arith_d_with_stack_top(D-M)
  93206. // #35500
  93207. @R13
  93208. // #35501
  93209. M=D
  93210. //^^ pop_stack_to_d
  93211. // #35502
  93212. @SP
  93213. // #35503
  93214. M=M-1
  93215. // #35504
  93216. A=M
  93217. // #35505
  93218. D=M
  93219. //vv pop_stack_to_d
  93220. // #35506
  93221. @R13
  93222. // #35507
  93223. D=D-M
  93224. // #35508
  93225. @R13
  93226. // #35509
  93227. M=0
  93228. //vv arith_d_with_stack_top(D-M)
  93229. // #35510
  93230. @PUT_TRUE_359
  93231. // #35511
  93232. D;JEQ
  93233. // #35512
  93234. @R13
  93235. // #35513
  93236. M=0
  93237. // #35514
  93238. @CONT_359
  93239. // #35515
  93240. 0;JMP
  93241. (PUT_TRUE_359)
  93242. // #35516
  93243. @R13
  93244. // #35517
  93245. M=-1
  93246. (CONT_359)
  93247. // #35518
  93248. @R13
  93249. // #35519
  93250. D=M
  93251. // #35520
  93252. @R13
  93253. // #35521
  93254. M=0
  93255. //^^ push_d_to_stack
  93256. // #35522
  93257. @SP
  93258. // #35523
  93259. A=M
  93260. // #35524
  93261. M=D
  93262. // #35525
  93263. @SP
  93264. // #35526
  93265. M=M+1
  93266. //vv push_d_to_stack
  93267. //vv arith_cmp_op(JEQ)
  93268. //
  93269. //// if-goto IF_TRUE2
  93270. //^^ pop_stack_to_d
  93271. // #35527
  93272. @SP
  93273. // #35528
  93274. M=M-1
  93275. // #35529
  93276. A=M
  93277. // #35530
  93278. D=M
  93279. //vv pop_stack_to_d
  93280. // #35531
  93281. @SquareGame.moveSquare$IF_TRUE2
  93282. // #35532
  93283. D;JNE
  93284. //
  93285. //// goto IF_FALSE2
  93286. // #35533
  93287. @SquareGame.moveSquare$IF_FALSE2
  93288. // #35534
  93289. 0;JMP
  93290. //
  93291. //// label IF_TRUE2
  93292. (SquareGame.moveSquare$IF_TRUE2)
  93293. //
  93294. //// push this 0
  93295. //^^ push_from_ram(THIS, 0)
  93296. // #35535
  93297. @THIS
  93298. // #35536
  93299. D=M
  93300. // #35537
  93301. @0
  93302. // #35538
  93303. A=D+A
  93304. // #35539
  93305. D=M
  93306. //^^ push_d_to_stack
  93307. // #35540
  93308. @SP
  93309. // #35541
  93310. A=M
  93311. // #35542
  93312. M=D
  93313. // #35543
  93314. @SP
  93315. // #35544
  93316. M=M+1
  93317. //vv push_d_to_stack
  93318. //vv push_from_ram(THIS, 0)
  93319. //
  93320. //// call Square.moveLeft 1
  93321. //^^ push_constant(RET_ADDR_360)
  93322. // #35545
  93323. @RET_ADDR_360
  93324. // #35546
  93325. D=A
  93326. //^^ push_d_to_stack
  93327. // #35547
  93328. @SP
  93329. // #35548
  93330. A=M
  93331. // #35549
  93332. M=D
  93333. // #35550
  93334. @SP
  93335. // #35551
  93336. M=M+1
  93337. //vv push_d_to_stack
  93338. //vv push_constant(RET_ADDR_360)
  93339. //push return-address
  93340. // #35552
  93341. @LCL
  93342. // #35553
  93343. D=M
  93344. //^^ push_d_to_stack
  93345. // #35554
  93346. @SP
  93347. // #35555
  93348. A=M
  93349. // #35556
  93350. M=D
  93351. // #35557
  93352. @SP
  93353. // #35558
  93354. M=M+1
  93355. //vv push_d_to_stack
  93356. //push LCL
  93357. // #35559
  93358. @ARG
  93359. // #35560
  93360. D=M
  93361. //^^ push_d_to_stack
  93362. // #35561
  93363. @SP
  93364. // #35562
  93365. A=M
  93366. // #35563
  93367. M=D
  93368. // #35564
  93369. @SP
  93370. // #35565
  93371. M=M+1
  93372. //vv push_d_to_stack
  93373. //push ARG
  93374. // #35566
  93375. @THIS
  93376. // #35567
  93377. D=M
  93378. //^^ push_d_to_stack
  93379. // #35568
  93380. @SP
  93381. // #35569
  93382. A=M
  93383. // #35570
  93384. M=D
  93385. // #35571
  93386. @SP
  93387. // #35572
  93388. M=M+1
  93389. //vv push_d_to_stack
  93390. //push THIS
  93391. // #35573
  93392. @THAT
  93393. // #35574
  93394. D=M
  93395. //^^ push_d_to_stack
  93396. // #35575
  93397. @SP
  93398. // #35576
  93399. A=M
  93400. // #35577
  93401. M=D
  93402. // #35578
  93403. @SP
  93404. // #35579
  93405. M=M+1
  93406. //vv push_d_to_stack
  93407. //push THAT
  93408. // #35580
  93409. @SP
  93410. // #35581
  93411. D=M
  93412. // #35582
  93413. @ARG
  93414. // #35583
  93415. M=D
  93416. // #35584
  93417. @6
  93418. // #35585
  93419. D=A
  93420. // #35586
  93421. @ARG
  93422. // #35587
  93423. M=M-D // ARG = SP - args - 5
  93424. // #35588
  93425. @SP
  93426. // #35589
  93427. D=M
  93428. // #35590
  93429. @LCL
  93430. // #35591
  93431. M=D // LCL = SP
  93432. // #35592
  93433. @Square.moveLeft
  93434. // #35593
  93435. 0;JMP
  93436. (RET_ADDR_360)
  93437. //
  93438. //// pop temp 0
  93439. //^^ pop_to_loc{5)
  93440. //^^ pop_stack_to_d
  93441. // #35594
  93442. @SP
  93443. // #35595
  93444. M=M-1
  93445. // #35596
  93446. A=M
  93447. // #35597
  93448. D=M
  93449. //vv pop_stack_to_d
  93450. // #35598
  93451. @5
  93452. // #35599
  93453. M=D
  93454. //vv pop_to_loc{5)
  93455. //
  93456. //// label IF_FALSE2
  93457. (SquareGame.moveSquare$IF_FALSE2)
  93458. //
  93459. //// push this 1
  93460. //^^ push_from_ram(THIS, 1)
  93461. // #35600
  93462. @THIS
  93463. // #35601
  93464. D=M
  93465. // #35602
  93466. @1
  93467. // #35603
  93468. A=D+A
  93469. // #35604
  93470. D=M
  93471. //^^ push_d_to_stack
  93472. // #35605
  93473. @SP
  93474. // #35606
  93475. A=M
  93476. // #35607
  93477. M=D
  93478. // #35608
  93479. @SP
  93480. // #35609
  93481. M=M+1
  93482. //vv push_d_to_stack
  93483. //vv push_from_ram(THIS, 1)
  93484. //
  93485. //// push constant 4
  93486. //^^ push_constant(4)
  93487. // #35610
  93488. @4
  93489. // #35611
  93490. D=A
  93491. //^^ push_d_to_stack
  93492. // #35612
  93493. @SP
  93494. // #35613
  93495. A=M
  93496. // #35614
  93497. M=D
  93498. // #35615
  93499. @SP
  93500. // #35616
  93501. M=M+1
  93502. //vv push_d_to_stack
  93503. //vv push_constant(4)
  93504. //
  93505. //// eq
  93506. //^^ arith_cmp_op(JEQ)
  93507. //^^ pop_stack_to_d
  93508. // #35617
  93509. @SP
  93510. // #35618
  93511. M=M-1
  93512. // #35619
  93513. A=M
  93514. // #35620
  93515. D=M
  93516. //vv pop_stack_to_d
  93517. //^^ arith_d_with_stack_top(D-M)
  93518. // #35621
  93519. @R13
  93520. // #35622
  93521. M=D
  93522. //^^ pop_stack_to_d
  93523. // #35623
  93524. @SP
  93525. // #35624
  93526. M=M-1
  93527. // #35625
  93528. A=M
  93529. // #35626
  93530. D=M
  93531. //vv pop_stack_to_d
  93532. // #35627
  93533. @R13
  93534. // #35628
  93535. D=D-M
  93536. // #35629
  93537. @R13
  93538. // #35630
  93539. M=0
  93540. //vv arith_d_with_stack_top(D-M)
  93541. // #35631
  93542. @PUT_TRUE_361
  93543. // #35632
  93544. D;JEQ
  93545. // #35633
  93546. @R13
  93547. // #35634
  93548. M=0
  93549. // #35635
  93550. @CONT_361
  93551. // #35636
  93552. 0;JMP
  93553. (PUT_TRUE_361)
  93554. // #35637
  93555. @R13
  93556. // #35638
  93557. M=-1
  93558. (CONT_361)
  93559. // #35639
  93560. @R13
  93561. // #35640
  93562. D=M
  93563. // #35641
  93564. @R13
  93565. // #35642
  93566. M=0
  93567. //^^ push_d_to_stack
  93568. // #35643
  93569. @SP
  93570. // #35644
  93571. A=M
  93572. // #35645
  93573. M=D
  93574. // #35646
  93575. @SP
  93576. // #35647
  93577. M=M+1
  93578. //vv push_d_to_stack
  93579. //vv arith_cmp_op(JEQ)
  93580. //
  93581. //// if-goto IF_TRUE3
  93582. //^^ pop_stack_to_d
  93583. // #35648
  93584. @SP
  93585. // #35649
  93586. M=M-1
  93587. // #35650
  93588. A=M
  93589. // #35651
  93590. D=M
  93591. //vv pop_stack_to_d
  93592. // #35652
  93593. @SquareGame.moveSquare$IF_TRUE3
  93594. // #35653
  93595. D;JNE
  93596. //
  93597. //// goto IF_FALSE3
  93598. // #35654
  93599. @SquareGame.moveSquare$IF_FALSE3
  93600. // #35655
  93601. 0;JMP
  93602. //
  93603. //// label IF_TRUE3
  93604. (SquareGame.moveSquare$IF_TRUE3)
  93605. //
  93606. //// push this 0
  93607. //^^ push_from_ram(THIS, 0)
  93608. // #35656
  93609. @THIS
  93610. // #35657
  93611. D=M
  93612. // #35658
  93613. @0
  93614. // #35659
  93615. A=D+A
  93616. // #35660
  93617. D=M
  93618. //^^ push_d_to_stack
  93619. // #35661
  93620. @SP
  93621. // #35662
  93622. A=M
  93623. // #35663
  93624. M=D
  93625. // #35664
  93626. @SP
  93627. // #35665
  93628. M=M+1
  93629. //vv push_d_to_stack
  93630. //vv push_from_ram(THIS, 0)
  93631. //
  93632. //// call Square.moveRight 1
  93633. //^^ push_constant(RET_ADDR_362)
  93634. // #35666
  93635. @RET_ADDR_362
  93636. // #35667
  93637. D=A
  93638. //^^ push_d_to_stack
  93639. // #35668
  93640. @SP
  93641. // #35669
  93642. A=M
  93643. // #35670
  93644. M=D
  93645. // #35671
  93646. @SP
  93647. // #35672
  93648. M=M+1
  93649. //vv push_d_to_stack
  93650. //vv push_constant(RET_ADDR_362)
  93651. //push return-address
  93652. // #35673
  93653. @LCL
  93654. // #35674
  93655. D=M
  93656. //^^ push_d_to_stack
  93657. // #35675
  93658. @SP
  93659. // #35676
  93660. A=M
  93661. // #35677
  93662. M=D
  93663. // #35678
  93664. @SP
  93665. // #35679
  93666. M=M+1
  93667. //vv push_d_to_stack
  93668. //push LCL
  93669. // #35680
  93670. @ARG
  93671. // #35681
  93672. D=M
  93673. //^^ push_d_to_stack
  93674. // #35682
  93675. @SP
  93676. // #35683
  93677. A=M
  93678. // #35684
  93679. M=D
  93680. // #35685
  93681. @SP
  93682. // #35686
  93683. M=M+1
  93684. //vv push_d_to_stack
  93685. //push ARG
  93686. // #35687
  93687. @THIS
  93688. // #35688
  93689. D=M
  93690. //^^ push_d_to_stack
  93691. // #35689
  93692. @SP
  93693. // #35690
  93694. A=M
  93695. // #35691
  93696. M=D
  93697. // #35692
  93698. @SP
  93699. // #35693
  93700. M=M+1
  93701. //vv push_d_to_stack
  93702. //push THIS
  93703. // #35694
  93704. @THAT
  93705. // #35695
  93706. D=M
  93707. //^^ push_d_to_stack
  93708. // #35696
  93709. @SP
  93710. // #35697
  93711. A=M
  93712. // #35698
  93713. M=D
  93714. // #35699
  93715. @SP
  93716. // #35700
  93717. M=M+1
  93718. //vv push_d_to_stack
  93719. //push THAT
  93720. // #35701
  93721. @SP
  93722. // #35702
  93723. D=M
  93724. // #35703
  93725. @ARG
  93726. // #35704
  93727. M=D
  93728. // #35705
  93729. @6
  93730. // #35706
  93731. D=A
  93732. // #35707
  93733. @ARG
  93734. // #35708
  93735. M=M-D // ARG = SP - args - 5
  93736. // #35709
  93737. @SP
  93738. // #35710
  93739. D=M
  93740. // #35711
  93741. @LCL
  93742. // #35712
  93743. M=D // LCL = SP
  93744. // #35713
  93745. @Square.moveRight
  93746. // #35714
  93747. 0;JMP
  93748. (RET_ADDR_362)
  93749. //
  93750. //// pop temp 0
  93751. //^^ pop_to_loc{5)
  93752. //^^ pop_stack_to_d
  93753. // #35715
  93754. @SP
  93755. // #35716
  93756. M=M-1
  93757. // #35717
  93758. A=M
  93759. // #35718
  93760. D=M
  93761. //vv pop_stack_to_d
  93762. // #35719
  93763. @5
  93764. // #35720
  93765. M=D
  93766. //vv pop_to_loc{5)
  93767. //
  93768. //// label IF_FALSE3
  93769. (SquareGame.moveSquare$IF_FALSE3)
  93770. //
  93771. //// push constant 5
  93772. //^^ push_constant(5)
  93773. // #35721
  93774. @5
  93775. // #35722
  93776. D=A
  93777. //^^ push_d_to_stack
  93778. // #35723
  93779. @SP
  93780. // #35724
  93781. A=M
  93782. // #35725
  93783. M=D
  93784. // #35726
  93785. @SP
  93786. // #35727
  93787. M=M+1
  93788. //vv push_d_to_stack
  93789. //vv push_constant(5)
  93790. //
  93791. //// call Sys.wait 1
  93792. //^^ push_constant(RET_ADDR_363)
  93793. // #35728
  93794. @RET_ADDR_363
  93795. // #35729
  93796. D=A
  93797. //^^ push_d_to_stack
  93798. // #35730
  93799. @SP
  93800. // #35731
  93801. A=M
  93802. // #35732
  93803. M=D
  93804. // #35733
  93805. @SP
  93806. // #35734
  93807. M=M+1
  93808. //vv push_d_to_stack
  93809. //vv push_constant(RET_ADDR_363)
  93810. //push return-address
  93811. // #35735
  93812. @LCL
  93813. // #35736
  93814. D=M
  93815. //^^ push_d_to_stack
  93816. // #35737
  93817. @SP
  93818. // #35738
  93819. A=M
  93820. // #35739
  93821. M=D
  93822. // #35740
  93823. @SP
  93824. // #35741
  93825. M=M+1
  93826. //vv push_d_to_stack
  93827. //push LCL
  93828. // #35742
  93829. @ARG
  93830. // #35743
  93831. D=M
  93832. //^^ push_d_to_stack
  93833. // #35744
  93834. @SP
  93835. // #35745
  93836. A=M
  93837. // #35746
  93838. M=D
  93839. // #35747
  93840. @SP
  93841. // #35748
  93842. M=M+1
  93843. //vv push_d_to_stack
  93844. //push ARG
  93845. // #35749
  93846. @THIS
  93847. // #35750
  93848. D=M
  93849. //^^ push_d_to_stack
  93850. // #35751
  93851. @SP
  93852. // #35752
  93853. A=M
  93854. // #35753
  93855. M=D
  93856. // #35754
  93857. @SP
  93858. // #35755
  93859. M=M+1
  93860. //vv push_d_to_stack
  93861. //push THIS
  93862. // #35756
  93863. @THAT
  93864. // #35757
  93865. D=M
  93866. //^^ push_d_to_stack
  93867. // #35758
  93868. @SP
  93869. // #35759
  93870. A=M
  93871. // #35760
  93872. M=D
  93873. // #35761
  93874. @SP
  93875. // #35762
  93876. M=M+1
  93877. //vv push_d_to_stack
  93878. //push THAT
  93879. // #35763
  93880. @SP
  93881. // #35764
  93882. D=M
  93883. // #35765
  93884. @ARG
  93885. // #35766
  93886. M=D
  93887. // #35767
  93888. @6
  93889. // #35768
  93890. D=A
  93891. // #35769
  93892. @ARG
  93893. // #35770
  93894. M=M-D // ARG = SP - args - 5
  93895. // #35771
  93896. @SP
  93897. // #35772
  93898. D=M
  93899. // #35773
  93900. @LCL
  93901. // #35774
  93902. M=D // LCL = SP
  93903. // #35775
  93904. @Sys.wait
  93905. // #35776
  93906. 0;JMP
  93907. (RET_ADDR_363)
  93908. //
  93909. //// pop temp 0
  93910. //^^ pop_to_loc{5)
  93911. //^^ pop_stack_to_d
  93912. // #35777
  93913. @SP
  93914. // #35778
  93915. M=M-1
  93916. // #35779
  93917. A=M
  93918. // #35780
  93919. D=M
  93920. //vv pop_stack_to_d
  93921. // #35781
  93922. @5
  93923. // #35782
  93924. M=D
  93925. //vv pop_to_loc{5)
  93926. //
  93927. //// push constant 0
  93928. //^^ push_constant(0)
  93929. // #35783
  93930. @0
  93931. // #35784
  93932. D=A
  93933. //^^ push_d_to_stack
  93934. // #35785
  93935. @SP
  93936. // #35786
  93937. A=M
  93938. // #35787
  93939. M=D
  93940. // #35788
  93941. @SP
  93942. // #35789
  93943. M=M+1
  93944. //vv push_d_to_stack
  93945. //vv push_constant(0)
  93946. //
  93947. //// return
  93948. // #35790
  93949. @LCL
  93950. // #35791
  93951. D=M
  93952. // #35792
  93953. @R14
  93954. // #35793
  93955. M=D //R14=LCL
  93956. // #35794
  93957. @5
  93958. // #35795
  93959. A=D-A
  93960. // #35796
  93961. D=M
  93962. // #35797
  93963. @R15
  93964. // #35798
  93965. M=D //R15=*(LCL-5)
  93966. //^^ pop_stack_to_d
  93967. // #35799
  93968. @SP
  93969. // #35800
  93970. M=M-1
  93971. // #35801
  93972. A=M
  93973. // #35802
  93974. D=M
  93975. //vv pop_stack_to_d
  93976. // #35803
  93977. @ARG
  93978. // #35804
  93979. A=M
  93980. // #35805
  93981. M=D //*ARG = pop()
  93982. // #35806
  93983. @ARG
  93984. // #35807
  93985. D=M
  93986. // #35808
  93987. @SP
  93988. // #35809
  93989. M=D+1 //SP=ARG+1
  93990. // #35810
  93991. @R14
  93992. // #35811
  93993. AM=M-1
  93994. // #35812
  93995. D=M
  93996. // #35813
  93997. @THAT
  93998. // #35814
  93999. M=D //THAT = *(--R14)
  94000. // #35815
  94001. @R14
  94002. // #35816
  94003. AM=M-1
  94004. // #35817
  94005. D=M
  94006. // #35818
  94007. @THIS
  94008. // #35819
  94009. M=D //THIS = *(--R14)
  94010. // #35820
  94011. @R14
  94012. // #35821
  94013. AM=M-1
  94014. // #35822
  94015. D=M
  94016. // #35823
  94017. @ARG
  94018. // #35824
  94019. M=D //ARG = *(--R14)
  94020. // #35825
  94021. @R14
  94022. // #35826
  94023. AM=M-1
  94024. // #35827
  94025. D=M
  94026. // #35828
  94027. @LCL
  94028. // #35829
  94029. M=D //LCL = *(--R14)
  94030. // #35830
  94031. @R15
  94032. // #35831
  94033. A=M
  94034. // #35832
  94035. 0;JMP //goto *R15
  94036. //
  94037. //// function String.new 0
  94038. (String.new)
  94039. //
  94040. //// push constant 3
  94041. //^^ push_constant(3)
  94042. // #35833
  94043. @3
  94044. // #35834
  94045. D=A
  94046. //^^ push_d_to_stack
  94047. // #35835
  94048. @SP
  94049. // #35836
  94050. A=M
  94051. // #35837
  94052. M=D
  94053. // #35838
  94054. @SP
  94055. // #35839
  94056. M=M+1
  94057. //vv push_d_to_stack
  94058. //vv push_constant(3)
  94059. //
  94060. //// call Memory.alloc 1
  94061. //^^ push_constant(RET_ADDR_364)
  94062. // #35840
  94063. @RET_ADDR_364
  94064. // #35841
  94065. D=A
  94066. //^^ push_d_to_stack
  94067. // #35842
  94068. @SP
  94069. // #35843
  94070. A=M
  94071. // #35844
  94072. M=D
  94073. // #35845
  94074. @SP
  94075. // #35846
  94076. M=M+1
  94077. //vv push_d_to_stack
  94078. //vv push_constant(RET_ADDR_364)
  94079. //push return-address
  94080. // #35847
  94081. @LCL
  94082. // #35848
  94083. D=M
  94084. //^^ push_d_to_stack
  94085. // #35849
  94086. @SP
  94087. // #35850
  94088. A=M
  94089. // #35851
  94090. M=D
  94091. // #35852
  94092. @SP
  94093. // #35853
  94094. M=M+1
  94095. //vv push_d_to_stack
  94096. //push LCL
  94097. // #35854
  94098. @ARG
  94099. // #35855
  94100. D=M
  94101. //^^ push_d_to_stack
  94102. // #35856
  94103. @SP
  94104. // #35857
  94105. A=M
  94106. // #35858
  94107. M=D
  94108. // #35859
  94109. @SP
  94110. // #35860
  94111. M=M+1
  94112. //vv push_d_to_stack
  94113. //push ARG
  94114. // #35861
  94115. @THIS
  94116. // #35862
  94117. D=M
  94118. //^^ push_d_to_stack
  94119. // #35863
  94120. @SP
  94121. // #35864
  94122. A=M
  94123. // #35865
  94124. M=D
  94125. // #35866
  94126. @SP
  94127. // #35867
  94128. M=M+1
  94129. //vv push_d_to_stack
  94130. //push THIS
  94131. // #35868
  94132. @THAT
  94133. // #35869
  94134. D=M
  94135. //^^ push_d_to_stack
  94136. // #35870
  94137. @SP
  94138. // #35871
  94139. A=M
  94140. // #35872
  94141. M=D
  94142. // #35873
  94143. @SP
  94144. // #35874
  94145. M=M+1
  94146. //vv push_d_to_stack
  94147. //push THAT
  94148. // #35875
  94149. @SP
  94150. // #35876
  94151. D=M
  94152. // #35877
  94153. @ARG
  94154. // #35878
  94155. M=D
  94156. // #35879
  94157. @6
  94158. // #35880
  94159. D=A
  94160. // #35881
  94161. @ARG
  94162. // #35882
  94163. M=M-D // ARG = SP - args - 5
  94164. // #35883
  94165. @SP
  94166. // #35884
  94167. D=M
  94168. // #35885
  94169. @LCL
  94170. // #35886
  94171. M=D // LCL = SP
  94172. // #35887
  94173. @Memory.alloc
  94174. // #35888
  94175. 0;JMP
  94176. (RET_ADDR_364)
  94177. //
  94178. //// pop pointer 0
  94179. //^^ pop_to_loc{3)
  94180. //^^ pop_stack_to_d
  94181. // #35889
  94182. @SP
  94183. // #35890
  94184. M=M-1
  94185. // #35891
  94186. A=M
  94187. // #35892
  94188. D=M
  94189. //vv pop_stack_to_d
  94190. // #35893
  94191. @3
  94192. // #35894
  94193. M=D
  94194. //vv pop_to_loc{3)
  94195. //
  94196. //// push argument 0
  94197. //^^ push_from_ram(ARG, 0)
  94198. // #35895
  94199. @ARG
  94200. // #35896
  94201. D=M
  94202. // #35897
  94203. @0
  94204. // #35898
  94205. A=D+A
  94206. // #35899
  94207. D=M
  94208. //^^ push_d_to_stack
  94209. // #35900
  94210. @SP
  94211. // #35901
  94212. A=M
  94213. // #35902
  94214. M=D
  94215. // #35903
  94216. @SP
  94217. // #35904
  94218. M=M+1
  94219. //vv push_d_to_stack
  94220. //vv push_from_ram(ARG, 0)
  94221. //
  94222. //// push constant 0
  94223. //^^ push_constant(0)
  94224. // #35905
  94225. @0
  94226. // #35906
  94227. D=A
  94228. //^^ push_d_to_stack
  94229. // #35907
  94230. @SP
  94231. // #35908
  94232. A=M
  94233. // #35909
  94234. M=D
  94235. // #35910
  94236. @SP
  94237. // #35911
  94238. M=M+1
  94239. //vv push_d_to_stack
  94240. //vv push_constant(0)
  94241. //
  94242. //// lt
  94243. //^^ arith_cmp_op(JLT)
  94244. //^^ pop_stack_to_d
  94245. // #35912
  94246. @SP
  94247. // #35913
  94248. M=M-1
  94249. // #35914
  94250. A=M
  94251. // #35915
  94252. D=M
  94253. //vv pop_stack_to_d
  94254. //^^ arith_d_with_stack_top(D-M)
  94255. // #35916
  94256. @R13
  94257. // #35917
  94258. M=D
  94259. //^^ pop_stack_to_d
  94260. // #35918
  94261. @SP
  94262. // #35919
  94263. M=M-1
  94264. // #35920
  94265. A=M
  94266. // #35921
  94267. D=M
  94268. //vv pop_stack_to_d
  94269. // #35922
  94270. @R13
  94271. // #35923
  94272. D=D-M
  94273. // #35924
  94274. @R13
  94275. // #35925
  94276. M=0
  94277. //vv arith_d_with_stack_top(D-M)
  94278. // #35926
  94279. @PUT_TRUE_365
  94280. // #35927
  94281. D;JLT
  94282. // #35928
  94283. @R13
  94284. // #35929
  94285. M=0
  94286. // #35930
  94287. @CONT_365
  94288. // #35931
  94289. 0;JMP
  94290. (PUT_TRUE_365)
  94291. // #35932
  94292. @R13
  94293. // #35933
  94294. M=-1
  94295. (CONT_365)
  94296. // #35934
  94297. @R13
  94298. // #35935
  94299. D=M
  94300. // #35936
  94301. @R13
  94302. // #35937
  94303. M=0
  94304. //^^ push_d_to_stack
  94305. // #35938
  94306. @SP
  94307. // #35939
  94308. A=M
  94309. // #35940
  94310. M=D
  94311. // #35941
  94312. @SP
  94313. // #35942
  94314. M=M+1
  94315. //vv push_d_to_stack
  94316. //vv arith_cmp_op(JLT)
  94317. //
  94318. //// if-goto IF_TRUE0
  94319. //^^ pop_stack_to_d
  94320. // #35943
  94321. @SP
  94322. // #35944
  94323. M=M-1
  94324. // #35945
  94325. A=M
  94326. // #35946
  94327. D=M
  94328. //vv pop_stack_to_d
  94329. // #35947
  94330. @String.new$IF_TRUE0
  94331. // #35948
  94332. D;JNE
  94333. //
  94334. //// goto IF_FALSE0
  94335. // #35949
  94336. @String.new$IF_FALSE0
  94337. // #35950
  94338. 0;JMP
  94339. //
  94340. //// label IF_TRUE0
  94341. (String.new$IF_TRUE0)
  94342. //
  94343. //// push constant 14
  94344. //^^ push_constant(14)
  94345. // #35951
  94346. @14
  94347. // #35952
  94348. D=A
  94349. //^^ push_d_to_stack
  94350. // #35953
  94351. @SP
  94352. // #35954
  94353. A=M
  94354. // #35955
  94355. M=D
  94356. // #35956
  94357. @SP
  94358. // #35957
  94359. M=M+1
  94360. //vv push_d_to_stack
  94361. //vv push_constant(14)
  94362. //
  94363. //// call Sys.error 1
  94364. //^^ push_constant(RET_ADDR_366)
  94365. // #35958
  94366. @RET_ADDR_366
  94367. // #35959
  94368. D=A
  94369. //^^ push_d_to_stack
  94370. // #35960
  94371. @SP
  94372. // #35961
  94373. A=M
  94374. // #35962
  94375. M=D
  94376. // #35963
  94377. @SP
  94378. // #35964
  94379. M=M+1
  94380. //vv push_d_to_stack
  94381. //vv push_constant(RET_ADDR_366)
  94382. //push return-address
  94383. // #35965
  94384. @LCL
  94385. // #35966
  94386. D=M
  94387. //^^ push_d_to_stack
  94388. // #35967
  94389. @SP
  94390. // #35968
  94391. A=M
  94392. // #35969
  94393. M=D
  94394. // #35970
  94395. @SP
  94396. // #35971
  94397. M=M+1
  94398. //vv push_d_to_stack
  94399. //push LCL
  94400. // #35972
  94401. @ARG
  94402. // #35973
  94403. D=M
  94404. //^^ push_d_to_stack
  94405. // #35974
  94406. @SP
  94407. // #35975
  94408. A=M
  94409. // #35976
  94410. M=D
  94411. // #35977
  94412. @SP
  94413. // #35978
  94414. M=M+1
  94415. //vv push_d_to_stack
  94416. //push ARG
  94417. // #35979
  94418. @THIS
  94419. // #35980
  94420. D=M
  94421. //^^ push_d_to_stack
  94422. // #35981
  94423. @SP
  94424. // #35982
  94425. A=M
  94426. // #35983
  94427. M=D
  94428. // #35984
  94429. @SP
  94430. // #35985
  94431. M=M+1
  94432. //vv push_d_to_stack
  94433. //push THIS
  94434. // #35986
  94435. @THAT
  94436. // #35987
  94437. D=M
  94438. //^^ push_d_to_stack
  94439. // #35988
  94440. @SP
  94441. // #35989
  94442. A=M
  94443. // #35990
  94444. M=D
  94445. // #35991
  94446. @SP
  94447. // #35992
  94448. M=M+1
  94449. //vv push_d_to_stack
  94450. //push THAT
  94451. // #35993
  94452. @SP
  94453. // #35994
  94454. D=M
  94455. // #35995
  94456. @ARG
  94457. // #35996
  94458. M=D
  94459. // #35997
  94460. @6
  94461. // #35998
  94462. D=A
  94463. // #35999
  94464. @ARG
  94465. // #36000
  94466. M=M-D // ARG = SP - args - 5
  94467. // #36001
  94468. @SP
  94469. // #36002
  94470. D=M
  94471. // #36003
  94472. @LCL
  94473. // #36004
  94474. M=D // LCL = SP
  94475. // #36005
  94476. @Sys.error
  94477. // #36006
  94478. 0;JMP
  94479. (RET_ADDR_366)
  94480. //
  94481. //// pop temp 0
  94482. //^^ pop_to_loc{5)
  94483. //^^ pop_stack_to_d
  94484. // #36007
  94485. @SP
  94486. // #36008
  94487. M=M-1
  94488. // #36009
  94489. A=M
  94490. // #36010
  94491. D=M
  94492. //vv pop_stack_to_d
  94493. // #36011
  94494. @5
  94495. // #36012
  94496. M=D
  94497. //vv pop_to_loc{5)
  94498. //
  94499. //// label IF_FALSE0
  94500. (String.new$IF_FALSE0)
  94501. //
  94502. //// push argument 0
  94503. //^^ push_from_ram(ARG, 0)
  94504. // #36013
  94505. @ARG
  94506. // #36014
  94507. D=M
  94508. // #36015
  94509. @0
  94510. // #36016
  94511. A=D+A
  94512. // #36017
  94513. D=M
  94514. //^^ push_d_to_stack
  94515. // #36018
  94516. @SP
  94517. // #36019
  94518. A=M
  94519. // #36020
  94520. M=D
  94521. // #36021
  94522. @SP
  94523. // #36022
  94524. M=M+1
  94525. //vv push_d_to_stack
  94526. //vv push_from_ram(ARG, 0)
  94527. //
  94528. //// push constant 0
  94529. //^^ push_constant(0)
  94530. // #36023
  94531. @0
  94532. // #36024
  94533. D=A
  94534. //^^ push_d_to_stack
  94535. // #36025
  94536. @SP
  94537. // #36026
  94538. A=M
  94539. // #36027
  94540. M=D
  94541. // #36028
  94542. @SP
  94543. // #36029
  94544. M=M+1
  94545. //vv push_d_to_stack
  94546. //vv push_constant(0)
  94547. //
  94548. //// gt
  94549. //^^ arith_cmp_op(JGT)
  94550. //^^ pop_stack_to_d
  94551. // #36030
  94552. @SP
  94553. // #36031
  94554. M=M-1
  94555. // #36032
  94556. A=M
  94557. // #36033
  94558. D=M
  94559. //vv pop_stack_to_d
  94560. //^^ arith_d_with_stack_top(D-M)
  94561. // #36034
  94562. @R13
  94563. // #36035
  94564. M=D
  94565. //^^ pop_stack_to_d
  94566. // #36036
  94567. @SP
  94568. // #36037
  94569. M=M-1
  94570. // #36038
  94571. A=M
  94572. // #36039
  94573. D=M
  94574. //vv pop_stack_to_d
  94575. // #36040
  94576. @R13
  94577. // #36041
  94578. D=D-M
  94579. // #36042
  94580. @R13
  94581. // #36043
  94582. M=0
  94583. //vv arith_d_with_stack_top(D-M)
  94584. // #36044
  94585. @PUT_TRUE_367
  94586. // #36045
  94587. D;JGT
  94588. // #36046
  94589. @R13
  94590. // #36047
  94591. M=0
  94592. // #36048
  94593. @CONT_367
  94594. // #36049
  94595. 0;JMP
  94596. (PUT_TRUE_367)
  94597. // #36050
  94598. @R13
  94599. // #36051
  94600. M=-1
  94601. (CONT_367)
  94602. // #36052
  94603. @R13
  94604. // #36053
  94605. D=M
  94606. // #36054
  94607. @R13
  94608. // #36055
  94609. M=0
  94610. //^^ push_d_to_stack
  94611. // #36056
  94612. @SP
  94613. // #36057
  94614. A=M
  94615. // #36058
  94616. M=D
  94617. // #36059
  94618. @SP
  94619. // #36060
  94620. M=M+1
  94621. //vv push_d_to_stack
  94622. //vv arith_cmp_op(JGT)
  94623. //
  94624. //// if-goto IF_TRUE1
  94625. //^^ pop_stack_to_d
  94626. // #36061
  94627. @SP
  94628. // #36062
  94629. M=M-1
  94630. // #36063
  94631. A=M
  94632. // #36064
  94633. D=M
  94634. //vv pop_stack_to_d
  94635. // #36065
  94636. @String.new$IF_TRUE1
  94637. // #36066
  94638. D;JNE
  94639. //
  94640. //// goto IF_FALSE1
  94641. // #36067
  94642. @String.new$IF_FALSE1
  94643. // #36068
  94644. 0;JMP
  94645. //
  94646. //// label IF_TRUE1
  94647. (String.new$IF_TRUE1)
  94648. //
  94649. //// push argument 0
  94650. //^^ push_from_ram(ARG, 0)
  94651. // #36069
  94652. @ARG
  94653. // #36070
  94654. D=M
  94655. // #36071
  94656. @0
  94657. // #36072
  94658. A=D+A
  94659. // #36073
  94660. D=M
  94661. //^^ push_d_to_stack
  94662. // #36074
  94663. @SP
  94664. // #36075
  94665. A=M
  94666. // #36076
  94667. M=D
  94668. // #36077
  94669. @SP
  94670. // #36078
  94671. M=M+1
  94672. //vv push_d_to_stack
  94673. //vv push_from_ram(ARG, 0)
  94674. //
  94675. //// call Array.new 1
  94676. //^^ push_constant(RET_ADDR_368)
  94677. // #36079
  94678. @RET_ADDR_368
  94679. // #36080
  94680. D=A
  94681. //^^ push_d_to_stack
  94682. // #36081
  94683. @SP
  94684. // #36082
  94685. A=M
  94686. // #36083
  94687. M=D
  94688. // #36084
  94689. @SP
  94690. // #36085
  94691. M=M+1
  94692. //vv push_d_to_stack
  94693. //vv push_constant(RET_ADDR_368)
  94694. //push return-address
  94695. // #36086
  94696. @LCL
  94697. // #36087
  94698. D=M
  94699. //^^ push_d_to_stack
  94700. // #36088
  94701. @SP
  94702. // #36089
  94703. A=M
  94704. // #36090
  94705. M=D
  94706. // #36091
  94707. @SP
  94708. // #36092
  94709. M=M+1
  94710. //vv push_d_to_stack
  94711. //push LCL
  94712. // #36093
  94713. @ARG
  94714. // #36094
  94715. D=M
  94716. //^^ push_d_to_stack
  94717. // #36095
  94718. @SP
  94719. // #36096
  94720. A=M
  94721. // #36097
  94722. M=D
  94723. // #36098
  94724. @SP
  94725. // #36099
  94726. M=M+1
  94727. //vv push_d_to_stack
  94728. //push ARG
  94729. // #36100
  94730. @THIS
  94731. // #36101
  94732. D=M
  94733. //^^ push_d_to_stack
  94734. // #36102
  94735. @SP
  94736. // #36103
  94737. A=M
  94738. // #36104
  94739. M=D
  94740. // #36105
  94741. @SP
  94742. // #36106
  94743. M=M+1
  94744. //vv push_d_to_stack
  94745. //push THIS
  94746. // #36107
  94747. @THAT
  94748. // #36108
  94749. D=M
  94750. //^^ push_d_to_stack
  94751. // #36109
  94752. @SP
  94753. // #36110
  94754. A=M
  94755. // #36111
  94756. M=D
  94757. // #36112
  94758. @SP
  94759. // #36113
  94760. M=M+1
  94761. //vv push_d_to_stack
  94762. //push THAT
  94763. // #36114
  94764. @SP
  94765. // #36115
  94766. D=M
  94767. // #36116
  94768. @ARG
  94769. // #36117
  94770. M=D
  94771. // #36118
  94772. @6
  94773. // #36119
  94774. D=A
  94775. // #36120
  94776. @ARG
  94777. // #36121
  94778. M=M-D // ARG = SP - args - 5
  94779. // #36122
  94780. @SP
  94781. // #36123
  94782. D=M
  94783. // #36124
  94784. @LCL
  94785. // #36125
  94786. M=D // LCL = SP
  94787. // #36126
  94788. @Array.new
  94789. // #36127
  94790. 0;JMP
  94791. (RET_ADDR_368)
  94792. //
  94793. //// pop this 1
  94794. //^^ pop_to_ram(THIS, 1)
  94795. // #36128
  94796. @THIS
  94797. // #36129
  94798. D=M
  94799. // #36130
  94800. @1
  94801. // #36131
  94802. D=D+A
  94803. // #36132
  94804. @R13
  94805. // #36133
  94806. M=D
  94807. //^^ pop_stack_to_d
  94808. // #36134
  94809. @SP
  94810. // #36135
  94811. M=M-1
  94812. // #36136
  94813. A=M
  94814. // #36137
  94815. D=M
  94816. //vv pop_stack_to_d
  94817. // #36138
  94818. @R13
  94819. // #36139
  94820. A=M
  94821. // #36140
  94822. M=D
  94823. // #36141
  94824. @R13
  94825. // #36142
  94826. M=0
  94827. //vv pop_to_ram(THIS, 1)
  94828. //
  94829. //// label IF_FALSE1
  94830. (String.new$IF_FALSE1)
  94831. //
  94832. //// push argument 0
  94833. //^^ push_from_ram(ARG, 0)
  94834. // #36143
  94835. @ARG
  94836. // #36144
  94837. D=M
  94838. // #36145
  94839. @0
  94840. // #36146
  94841. A=D+A
  94842. // #36147
  94843. D=M
  94844. //^^ push_d_to_stack
  94845. // #36148
  94846. @SP
  94847. // #36149
  94848. A=M
  94849. // #36150
  94850. M=D
  94851. // #36151
  94852. @SP
  94853. // #36152
  94854. M=M+1
  94855. //vv push_d_to_stack
  94856. //vv push_from_ram(ARG, 0)
  94857. //
  94858. //// pop this 0
  94859. //^^ pop_to_ram(THIS, 0)
  94860. // #36153
  94861. @THIS
  94862. // #36154
  94863. D=M
  94864. // #36155
  94865. @0
  94866. // #36156
  94867. D=D+A
  94868. // #36157
  94869. @R13
  94870. // #36158
  94871. M=D
  94872. //^^ pop_stack_to_d
  94873. // #36159
  94874. @SP
  94875. // #36160
  94876. M=M-1
  94877. // #36161
  94878. A=M
  94879. // #36162
  94880. D=M
  94881. //vv pop_stack_to_d
  94882. // #36163
  94883. @R13
  94884. // #36164
  94885. A=M
  94886. // #36165
  94887. M=D
  94888. // #36166
  94889. @R13
  94890. // #36167
  94891. M=0
  94892. //vv pop_to_ram(THIS, 0)
  94893. //
  94894. //// push constant 0
  94895. //^^ push_constant(0)
  94896. // #36168
  94897. @0
  94898. // #36169
  94899. D=A
  94900. //^^ push_d_to_stack
  94901. // #36170
  94902. @SP
  94903. // #36171
  94904. A=M
  94905. // #36172
  94906. M=D
  94907. // #36173
  94908. @SP
  94909. // #36174
  94910. M=M+1
  94911. //vv push_d_to_stack
  94912. //vv push_constant(0)
  94913. //
  94914. //// pop this 2
  94915. //^^ pop_to_ram(THIS, 2)
  94916. // #36175
  94917. @THIS
  94918. // #36176
  94919. D=M
  94920. // #36177
  94921. @2
  94922. // #36178
  94923. D=D+A
  94924. // #36179
  94925. @R13
  94926. // #36180
  94927. M=D
  94928. //^^ pop_stack_to_d
  94929. // #36181
  94930. @SP
  94931. // #36182
  94932. M=M-1
  94933. // #36183
  94934. A=M
  94935. // #36184
  94936. D=M
  94937. //vv pop_stack_to_d
  94938. // #36185
  94939. @R13
  94940. // #36186
  94941. A=M
  94942. // #36187
  94943. M=D
  94944. // #36188
  94945. @R13
  94946. // #36189
  94947. M=0
  94948. //vv pop_to_ram(THIS, 2)
  94949. //
  94950. //// push pointer 0
  94951. //^^ push_from_loc(3)
  94952. // #36190
  94953. @3
  94954. // #36191
  94955. D=M
  94956. //^^ push_d_to_stack
  94957. // #36192
  94958. @SP
  94959. // #36193
  94960. A=M
  94961. // #36194
  94962. M=D
  94963. // #36195
  94964. @SP
  94965. // #36196
  94966. M=M+1
  94967. //vv push_d_to_stack
  94968. //vv push_from_loc(3)
  94969. //
  94970. //// return
  94971. // #36197
  94972. @LCL
  94973. // #36198
  94974. D=M
  94975. // #36199
  94976. @R14
  94977. // #36200
  94978. M=D //R14=LCL
  94979. // #36201
  94980. @5
  94981. // #36202
  94982. A=D-A
  94983. // #36203
  94984. D=M
  94985. // #36204
  94986. @R15
  94987. // #36205
  94988. M=D //R15=*(LCL-5)
  94989. //^^ pop_stack_to_d
  94990. // #36206
  94991. @SP
  94992. // #36207
  94993. M=M-1
  94994. // #36208
  94995. A=M
  94996. // #36209
  94997. D=M
  94998. //vv pop_stack_to_d
  94999. // #36210
  95000. @ARG
  95001. // #36211
  95002. A=M
  95003. // #36212
  95004. M=D //*ARG = pop()
  95005. // #36213
  95006. @ARG
  95007. // #36214
  95008. D=M
  95009. // #36215
  95010. @SP
  95011. // #36216
  95012. M=D+1 //SP=ARG+1
  95013. // #36217
  95014. @R14
  95015. // #36218
  95016. AM=M-1
  95017. // #36219
  95018. D=M
  95019. // #36220
  95020. @THAT
  95021. // #36221
  95022. M=D //THAT = *(--R14)
  95023. // #36222
  95024. @R14
  95025. // #36223
  95026. AM=M-1
  95027. // #36224
  95028. D=M
  95029. // #36225
  95030. @THIS
  95031. // #36226
  95032. M=D //THIS = *(--R14)
  95033. // #36227
  95034. @R14
  95035. // #36228
  95036. AM=M-1
  95037. // #36229
  95038. D=M
  95039. // #36230
  95040. @ARG
  95041. // #36231
  95042. M=D //ARG = *(--R14)
  95043. // #36232
  95044. @R14
  95045. // #36233
  95046. AM=M-1
  95047. // #36234
  95048. D=M
  95049. // #36235
  95050. @LCL
  95051. // #36236
  95052. M=D //LCL = *(--R14)
  95053. // #36237
  95054. @R15
  95055. // #36238
  95056. A=M
  95057. // #36239
  95058. 0;JMP //goto *R15
  95059. //
  95060. //// function String.dispose 0
  95061. (String.dispose)
  95062. //
  95063. //// push argument 0
  95064. //^^ push_from_ram(ARG, 0)
  95065. // #36240
  95066. @ARG
  95067. // #36241
  95068. D=M
  95069. // #36242
  95070. @0
  95071. // #36243
  95072. A=D+A
  95073. // #36244
  95074. D=M
  95075. //^^ push_d_to_stack
  95076. // #36245
  95077. @SP
  95078. // #36246
  95079. A=M
  95080. // #36247
  95081. M=D
  95082. // #36248
  95083. @SP
  95084. // #36249
  95085. M=M+1
  95086. //vv push_d_to_stack
  95087. //vv push_from_ram(ARG, 0)
  95088. //
  95089. //// pop pointer 0
  95090. //^^ pop_to_loc{3)
  95091. //^^ pop_stack_to_d
  95092. // #36250
  95093. @SP
  95094. // #36251
  95095. M=M-1
  95096. // #36252
  95097. A=M
  95098. // #36253
  95099. D=M
  95100. //vv pop_stack_to_d
  95101. // #36254
  95102. @3
  95103. // #36255
  95104. M=D
  95105. //vv pop_to_loc{3)
  95106. //
  95107. //// push this 2
  95108. //^^ push_from_ram(THIS, 2)
  95109. // #36256
  95110. @THIS
  95111. // #36257
  95112. D=M
  95113. // #36258
  95114. @2
  95115. // #36259
  95116. A=D+A
  95117. // #36260
  95118. D=M
  95119. //^^ push_d_to_stack
  95120. // #36261
  95121. @SP
  95122. // #36262
  95123. A=M
  95124. // #36263
  95125. M=D
  95126. // #36264
  95127. @SP
  95128. // #36265
  95129. M=M+1
  95130. //vv push_d_to_stack
  95131. //vv push_from_ram(THIS, 2)
  95132. //
  95133. //// return
  95134. // #36266
  95135. @LCL
  95136. // #36267
  95137. D=M
  95138. // #36268
  95139. @R14
  95140. // #36269
  95141. M=D //R14=LCL
  95142. // #36270
  95143. @5
  95144. // #36271
  95145. A=D-A
  95146. // #36272
  95147. D=M
  95148. // #36273
  95149. @R15
  95150. // #36274
  95151. M=D //R15=*(LCL-5)
  95152. //^^ pop_stack_to_d
  95153. // #36275
  95154. @SP
  95155. // #36276
  95156. M=M-1
  95157. // #36277
  95158. A=M
  95159. // #36278
  95160. D=M
  95161. //vv pop_stack_to_d
  95162. // #36279
  95163. @ARG
  95164. // #36280
  95165. A=M
  95166. // #36281
  95167. M=D //*ARG = pop()
  95168. // #36282
  95169. @ARG
  95170. // #36283
  95171. D=M
  95172. // #36284
  95173. @SP
  95174. // #36285
  95175. M=D+1 //SP=ARG+1
  95176. // #36286
  95177. @R14
  95178. // #36287
  95179. AM=M-1
  95180. // #36288
  95181. D=M
  95182. // #36289
  95183. @THAT
  95184. // #36290
  95185. M=D //THAT = *(--R14)
  95186. // #36291
  95187. @R14
  95188. // #36292
  95189. AM=M-1
  95190. // #36293
  95191. D=M
  95192. // #36294
  95193. @THIS
  95194. // #36295
  95195. M=D //THIS = *(--R14)
  95196. // #36296
  95197. @R14
  95198. // #36297
  95199. AM=M-1
  95200. // #36298
  95201. D=M
  95202. // #36299
  95203. @ARG
  95204. // #36300
  95205. M=D //ARG = *(--R14)
  95206. // #36301
  95207. @R14
  95208. // #36302
  95209. AM=M-1
  95210. // #36303
  95211. D=M
  95212. // #36304
  95213. @LCL
  95214. // #36305
  95215. M=D //LCL = *(--R14)
  95216. // #36306
  95217. @R15
  95218. // #36307
  95219. A=M
  95220. // #36308
  95221. 0;JMP //goto *R15
  95222. //
  95223. //// function String.charAt 0
  95224. (String.charAt)
  95225. //
  95226. //// push argument 0
  95227. //^^ push_from_ram(ARG, 0)
  95228. // #36309
  95229. @ARG
  95230. // #36310
  95231. D=M
  95232. // #36311
  95233. @0
  95234. // #36312
  95235. A=D+A
  95236. // #36313
  95237. D=M
  95238. //^^ push_d_to_stack
  95239. // #36314
  95240. @SP
  95241. // #36315
  95242. A=M
  95243. // #36316
  95244. M=D
  95245. // #36317
  95246. @SP
  95247. // #36318
  95248. M=M+1
  95249. //vv push_d_to_stack
  95250. //vv push_from_ram(ARG, 0)
  95251. //
  95252. //// pop pointer 0
  95253. //^^ pop_to_loc{3)
  95254. //^^ pop_stack_to_d
  95255. // #36319
  95256. @SP
  95257. // #36320
  95258. M=M-1
  95259. // #36321
  95260. A=M
  95261. // #36322
  95262. D=M
  95263. //vv pop_stack_to_d
  95264. // #36323
  95265. @3
  95266. // #36324
  95267. M=D
  95268. //vv pop_to_loc{3)
  95269. //
  95270. //// push argument 1
  95271. //^^ push_from_ram(ARG, 1)
  95272. // #36325
  95273. @ARG
  95274. // #36326
  95275. D=M
  95276. // #36327
  95277. @1
  95278. // #36328
  95279. A=D+A
  95280. // #36329
  95281. D=M
  95282. //^^ push_d_to_stack
  95283. // #36330
  95284. @SP
  95285. // #36331
  95286. A=M
  95287. // #36332
  95288. M=D
  95289. // #36333
  95290. @SP
  95291. // #36334
  95292. M=M+1
  95293. //vv push_d_to_stack
  95294. //vv push_from_ram(ARG, 1)
  95295. //
  95296. //// push constant 0
  95297. //^^ push_constant(0)
  95298. // #36335
  95299. @0
  95300. // #36336
  95301. D=A
  95302. //^^ push_d_to_stack
  95303. // #36337
  95304. @SP
  95305. // #36338
  95306. A=M
  95307. // #36339
  95308. M=D
  95309. // #36340
  95310. @SP
  95311. // #36341
  95312. M=M+1
  95313. //vv push_d_to_stack
  95314. //vv push_constant(0)
  95315. //
  95316. //// lt
  95317. //^^ arith_cmp_op(JLT)
  95318. //^^ pop_stack_to_d
  95319. // #36342
  95320. @SP
  95321. // #36343
  95322. M=M-1
  95323. // #36344
  95324. A=M
  95325. // #36345
  95326. D=M
  95327. //vv pop_stack_to_d
  95328. //^^ arith_d_with_stack_top(D-M)
  95329. // #36346
  95330. @R13
  95331. // #36347
  95332. M=D
  95333. //^^ pop_stack_to_d
  95334. // #36348
  95335. @SP
  95336. // #36349
  95337. M=M-1
  95338. // #36350
  95339. A=M
  95340. // #36351
  95341. D=M
  95342. //vv pop_stack_to_d
  95343. // #36352
  95344. @R13
  95345. // #36353
  95346. D=D-M
  95347. // #36354
  95348. @R13
  95349. // #36355
  95350. M=0
  95351. //vv arith_d_with_stack_top(D-M)
  95352. // #36356
  95353. @PUT_TRUE_372
  95354. // #36357
  95355. D;JLT
  95356. // #36358
  95357. @R13
  95358. // #36359
  95359. M=0
  95360. // #36360
  95361. @CONT_372
  95362. // #36361
  95363. 0;JMP
  95364. (PUT_TRUE_372)
  95365. // #36362
  95366. @R13
  95367. // #36363
  95368. M=-1
  95369. (CONT_372)
  95370. // #36364
  95371. @R13
  95372. // #36365
  95373. D=M
  95374. // #36366
  95375. @R13
  95376. // #36367
  95377. M=0
  95378. //^^ push_d_to_stack
  95379. // #36368
  95380. @SP
  95381. // #36369
  95382. A=M
  95383. // #36370
  95384. M=D
  95385. // #36371
  95386. @SP
  95387. // #36372
  95388. M=M+1
  95389. //vv push_d_to_stack
  95390. //vv arith_cmp_op(JLT)
  95391. //
  95392. //// push argument 1
  95393. //^^ push_from_ram(ARG, 1)
  95394. // #36373
  95395. @ARG
  95396. // #36374
  95397. D=M
  95398. // #36375
  95399. @1
  95400. // #36376
  95401. A=D+A
  95402. // #36377
  95403. D=M
  95404. //^^ push_d_to_stack
  95405. // #36378
  95406. @SP
  95407. // #36379
  95408. A=M
  95409. // #36380
  95410. M=D
  95411. // #36381
  95412. @SP
  95413. // #36382
  95414. M=M+1
  95415. //vv push_d_to_stack
  95416. //vv push_from_ram(ARG, 1)
  95417. //
  95418. //// push this 2
  95419. //^^ push_from_ram(THIS, 2)
  95420. // #36383
  95421. @THIS
  95422. // #36384
  95423. D=M
  95424. // #36385
  95425. @2
  95426. // #36386
  95427. A=D+A
  95428. // #36387
  95429. D=M
  95430. //^^ push_d_to_stack
  95431. // #36388
  95432. @SP
  95433. // #36389
  95434. A=M
  95435. // #36390
  95436. M=D
  95437. // #36391
  95438. @SP
  95439. // #36392
  95440. M=M+1
  95441. //vv push_d_to_stack
  95442. //vv push_from_ram(THIS, 2)
  95443. //
  95444. //// gt
  95445. //^^ arith_cmp_op(JGT)
  95446. //^^ pop_stack_to_d
  95447. // #36393
  95448. @SP
  95449. // #36394
  95450. M=M-1
  95451. // #36395
  95452. A=M
  95453. // #36396
  95454. D=M
  95455. //vv pop_stack_to_d
  95456. //^^ arith_d_with_stack_top(D-M)
  95457. // #36397
  95458. @R13
  95459. // #36398
  95460. M=D
  95461. //^^ pop_stack_to_d
  95462. // #36399
  95463. @SP
  95464. // #36400
  95465. M=M-1
  95466. // #36401
  95467. A=M
  95468. // #36402
  95469. D=M
  95470. //vv pop_stack_to_d
  95471. // #36403
  95472. @R13
  95473. // #36404
  95474. D=D-M
  95475. // #36405
  95476. @R13
  95477. // #36406
  95478. M=0
  95479. //vv arith_d_with_stack_top(D-M)
  95480. // #36407
  95481. @PUT_TRUE_373
  95482. // #36408
  95483. D;JGT
  95484. // #36409
  95485. @R13
  95486. // #36410
  95487. M=0
  95488. // #36411
  95489. @CONT_373
  95490. // #36412
  95491. 0;JMP
  95492. (PUT_TRUE_373)
  95493. // #36413
  95494. @R13
  95495. // #36414
  95496. M=-1
  95497. (CONT_373)
  95498. // #36415
  95499. @R13
  95500. // #36416
  95501. D=M
  95502. // #36417
  95503. @R13
  95504. // #36418
  95505. M=0
  95506. //^^ push_d_to_stack
  95507. // #36419
  95508. @SP
  95509. // #36420
  95510. A=M
  95511. // #36421
  95512. M=D
  95513. // #36422
  95514. @SP
  95515. // #36423
  95516. M=M+1
  95517. //vv push_d_to_stack
  95518. //vv arith_cmp_op(JGT)
  95519. //
  95520. //// or
  95521. //^^ arith_binary_op(|)
  95522. //^^ pop_stack_to_d
  95523. // #36424
  95524. @SP
  95525. // #36425
  95526. M=M-1
  95527. // #36426
  95528. A=M
  95529. // #36427
  95530. D=M
  95531. //vv pop_stack_to_d
  95532. //^^ arith_d_with_stack_top(D|M)
  95533. // #36428
  95534. @R13
  95535. // #36429
  95536. M=D
  95537. //^^ pop_stack_to_d
  95538. // #36430
  95539. @SP
  95540. // #36431
  95541. M=M-1
  95542. // #36432
  95543. A=M
  95544. // #36433
  95545. D=M
  95546. //vv pop_stack_to_d
  95547. // #36434
  95548. @R13
  95549. // #36435
  95550. D=D|M
  95551. // #36436
  95552. @R13
  95553. // #36437
  95554. M=0
  95555. //vv arith_d_with_stack_top(D|M)
  95556. //^^ push_d_to_stack
  95557. // #36438
  95558. @SP
  95559. // #36439
  95560. A=M
  95561. // #36440
  95562. M=D
  95563. // #36441
  95564. @SP
  95565. // #36442
  95566. M=M+1
  95567. //vv push_d_to_stack
  95568. //vv arith_binary_op(|)
  95569. //
  95570. //// push argument 1
  95571. //^^ push_from_ram(ARG, 1)
  95572. // #36443
  95573. @ARG
  95574. // #36444
  95575. D=M
  95576. // #36445
  95577. @1
  95578. // #36446
  95579. A=D+A
  95580. // #36447
  95581. D=M
  95582. //^^ push_d_to_stack
  95583. // #36448
  95584. @SP
  95585. // #36449
  95586. A=M
  95587. // #36450
  95588. M=D
  95589. // #36451
  95590. @SP
  95591. // #36452
  95592. M=M+1
  95593. //vv push_d_to_stack
  95594. //vv push_from_ram(ARG, 1)
  95595. //
  95596. //// push this 2
  95597. //^^ push_from_ram(THIS, 2)
  95598. // #36453
  95599. @THIS
  95600. // #36454
  95601. D=M
  95602. // #36455
  95603. @2
  95604. // #36456
  95605. A=D+A
  95606. // #36457
  95607. D=M
  95608. //^^ push_d_to_stack
  95609. // #36458
  95610. @SP
  95611. // #36459
  95612. A=M
  95613. // #36460
  95614. M=D
  95615. // #36461
  95616. @SP
  95617. // #36462
  95618. M=M+1
  95619. //vv push_d_to_stack
  95620. //vv push_from_ram(THIS, 2)
  95621. //
  95622. //// eq
  95623. //^^ arith_cmp_op(JEQ)
  95624. //^^ pop_stack_to_d
  95625. // #36463
  95626. @SP
  95627. // #36464
  95628. M=M-1
  95629. // #36465
  95630. A=M
  95631. // #36466
  95632. D=M
  95633. //vv pop_stack_to_d
  95634. //^^ arith_d_with_stack_top(D-M)
  95635. // #36467
  95636. @R13
  95637. // #36468
  95638. M=D
  95639. //^^ pop_stack_to_d
  95640. // #36469
  95641. @SP
  95642. // #36470
  95643. M=M-1
  95644. // #36471
  95645. A=M
  95646. // #36472
  95647. D=M
  95648. //vv pop_stack_to_d
  95649. // #36473
  95650. @R13
  95651. // #36474
  95652. D=D-M
  95653. // #36475
  95654. @R13
  95655. // #36476
  95656. M=0
  95657. //vv arith_d_with_stack_top(D-M)
  95658. // #36477
  95659. @PUT_TRUE_374
  95660. // #36478
  95661. D;JEQ
  95662. // #36479
  95663. @R13
  95664. // #36480
  95665. M=0
  95666. // #36481
  95667. @CONT_374
  95668. // #36482
  95669. 0;JMP
  95670. (PUT_TRUE_374)
  95671. // #36483
  95672. @R13
  95673. // #36484
  95674. M=-1
  95675. (CONT_374)
  95676. // #36485
  95677. @R13
  95678. // #36486
  95679. D=M
  95680. // #36487
  95681. @R13
  95682. // #36488
  95683. M=0
  95684. //^^ push_d_to_stack
  95685. // #36489
  95686. @SP
  95687. // #36490
  95688. A=M
  95689. // #36491
  95690. M=D
  95691. // #36492
  95692. @SP
  95693. // #36493
  95694. M=M+1
  95695. //vv push_d_to_stack
  95696. //vv arith_cmp_op(JEQ)
  95697. //
  95698. //// or
  95699. //^^ arith_binary_op(|)
  95700. //^^ pop_stack_to_d
  95701. // #36494
  95702. @SP
  95703. // #36495
  95704. M=M-1
  95705. // #36496
  95706. A=M
  95707. // #36497
  95708. D=M
  95709. //vv pop_stack_to_d
  95710. //^^ arith_d_with_stack_top(D|M)
  95711. // #36498
  95712. @R13
  95713. // #36499
  95714. M=D
  95715. //^^ pop_stack_to_d
  95716. // #36500
  95717. @SP
  95718. // #36501
  95719. M=M-1
  95720. // #36502
  95721. A=M
  95722. // #36503
  95723. D=M
  95724. //vv pop_stack_to_d
  95725. // #36504
  95726. @R13
  95727. // #36505
  95728. D=D|M
  95729. // #36506
  95730. @R13
  95731. // #36507
  95732. M=0
  95733. //vv arith_d_with_stack_top(D|M)
  95734. //^^ push_d_to_stack
  95735. // #36508
  95736. @SP
  95737. // #36509
  95738. A=M
  95739. // #36510
  95740. M=D
  95741. // #36511
  95742. @SP
  95743. // #36512
  95744. M=M+1
  95745. //vv push_d_to_stack
  95746. //vv arith_binary_op(|)
  95747. //
  95748. //// if-goto IF_TRUE0
  95749. //^^ pop_stack_to_d
  95750. // #36513
  95751. @SP
  95752. // #36514
  95753. M=M-1
  95754. // #36515
  95755. A=M
  95756. // #36516
  95757. D=M
  95758. //vv pop_stack_to_d
  95759. // #36517
  95760. @String.charAt$IF_TRUE0
  95761. // #36518
  95762. D;JNE
  95763. //
  95764. //// goto IF_FALSE0
  95765. // #36519
  95766. @String.charAt$IF_FALSE0
  95767. // #36520
  95768. 0;JMP
  95769. //
  95770. //// label IF_TRUE0
  95771. (String.charAt$IF_TRUE0)
  95772. //
  95773. //// push constant 15
  95774. //^^ push_constant(15)
  95775. // #36521
  95776. @15
  95777. // #36522
  95778. D=A
  95779. //^^ push_d_to_stack
  95780. // #36523
  95781. @SP
  95782. // #36524
  95783. A=M
  95784. // #36525
  95785. M=D
  95786. // #36526
  95787. @SP
  95788. // #36527
  95789. M=M+1
  95790. //vv push_d_to_stack
  95791. //vv push_constant(15)
  95792. //
  95793. //// call Sys.error 1
  95794. //^^ push_constant(RET_ADDR_375)
  95795. // #36528
  95796. @RET_ADDR_375
  95797. // #36529
  95798. D=A
  95799. //^^ push_d_to_stack
  95800. // #36530
  95801. @SP
  95802. // #36531
  95803. A=M
  95804. // #36532
  95805. M=D
  95806. // #36533
  95807. @SP
  95808. // #36534
  95809. M=M+1
  95810. //vv push_d_to_stack
  95811. //vv push_constant(RET_ADDR_375)
  95812. //push return-address
  95813. // #36535
  95814. @LCL
  95815. // #36536
  95816. D=M
  95817. //^^ push_d_to_stack
  95818. // #36537
  95819. @SP
  95820. // #36538
  95821. A=M
  95822. // #36539
  95823. M=D
  95824. // #36540
  95825. @SP
  95826. // #36541
  95827. M=M+1
  95828. //vv push_d_to_stack
  95829. //push LCL
  95830. // #36542
  95831. @ARG
  95832. // #36543
  95833. D=M
  95834. //^^ push_d_to_stack
  95835. // #36544
  95836. @SP
  95837. // #36545
  95838. A=M
  95839. // #36546
  95840. M=D
  95841. // #36547
  95842. @SP
  95843. // #36548
  95844. M=M+1
  95845. //vv push_d_to_stack
  95846. //push ARG
  95847. // #36549
  95848. @THIS
  95849. // #36550
  95850. D=M
  95851. //^^ push_d_to_stack
  95852. // #36551
  95853. @SP
  95854. // #36552
  95855. A=M
  95856. // #36553
  95857. M=D
  95858. // #36554
  95859. @SP
  95860. // #36555
  95861. M=M+1
  95862. //vv push_d_to_stack
  95863. //push THIS
  95864. // #36556
  95865. @THAT
  95866. // #36557
  95867. D=M
  95868. //^^ push_d_to_stack
  95869. // #36558
  95870. @SP
  95871. // #36559
  95872. A=M
  95873. // #36560
  95874. M=D
  95875. // #36561
  95876. @SP
  95877. // #36562
  95878. M=M+1
  95879. //vv push_d_to_stack
  95880. //push THAT
  95881. // #36563
  95882. @SP
  95883. // #36564
  95884. D=M
  95885. // #36565
  95886. @ARG
  95887. // #36566
  95888. M=D
  95889. // #36567
  95890. @6
  95891. // #36568
  95892. D=A
  95893. // #36569
  95894. @ARG
  95895. // #36570
  95896. M=M-D // ARG = SP - args - 5
  95897. // #36571
  95898. @SP
  95899. // #36572
  95900. D=M
  95901. // #36573
  95902. @LCL
  95903. // #36574
  95904. M=D // LCL = SP
  95905. // #36575
  95906. @Sys.error
  95907. // #36576
  95908. 0;JMP
  95909. (RET_ADDR_375)
  95910. //
  95911. //// pop temp 0
  95912. //^^ pop_to_loc{5)
  95913. //^^ pop_stack_to_d
  95914. // #36577
  95915. @SP
  95916. // #36578
  95917. M=M-1
  95918. // #36579
  95919. A=M
  95920. // #36580
  95921. D=M
  95922. //vv pop_stack_to_d
  95923. // #36581
  95924. @5
  95925. // #36582
  95926. M=D
  95927. //vv pop_to_loc{5)
  95928. //
  95929. //// label IF_FALSE0
  95930. (String.charAt$IF_FALSE0)
  95931. //
  95932. //// push argument 1
  95933. //^^ push_from_ram(ARG, 1)
  95934. // #36583
  95935. @ARG
  95936. // #36584
  95937. D=M
  95938. // #36585
  95939. @1
  95940. // #36586
  95941. A=D+A
  95942. // #36587
  95943. D=M
  95944. //^^ push_d_to_stack
  95945. // #36588
  95946. @SP
  95947. // #36589
  95948. A=M
  95949. // #36590
  95950. M=D
  95951. // #36591
  95952. @SP
  95953. // #36592
  95954. M=M+1
  95955. //vv push_d_to_stack
  95956. //vv push_from_ram(ARG, 1)
  95957. //
  95958. //// push this 1
  95959. //^^ push_from_ram(THIS, 1)
  95960. // #36593
  95961. @THIS
  95962. // #36594
  95963. D=M
  95964. // #36595
  95965. @1
  95966. // #36596
  95967. A=D+A
  95968. // #36597
  95969. D=M
  95970. //^^ push_d_to_stack
  95971. // #36598
  95972. @SP
  95973. // #36599
  95974. A=M
  95975. // #36600
  95976. M=D
  95977. // #36601
  95978. @SP
  95979. // #36602
  95980. M=M+1
  95981. //vv push_d_to_stack
  95982. //vv push_from_ram(THIS, 1)
  95983. //
  95984. //// add
  95985. //^^ arith_binary_op(+)
  95986. //^^ pop_stack_to_d
  95987. // #36603
  95988. @SP
  95989. // #36604
  95990. M=M-1
  95991. // #36605
  95992. A=M
  95993. // #36606
  95994. D=M
  95995. //vv pop_stack_to_d
  95996. //^^ arith_d_with_stack_top(D+M)
  95997. // #36607
  95998. @R13
  95999. // #36608
  96000. M=D
  96001. //^^ pop_stack_to_d
  96002. // #36609
  96003. @SP
  96004. // #36610
  96005. M=M-1
  96006. // #36611
  96007. A=M
  96008. // #36612
  96009. D=M
  96010. //vv pop_stack_to_d
  96011. // #36613
  96012. @R13
  96013. // #36614
  96014. D=D+M
  96015. // #36615
  96016. @R13
  96017. // #36616
  96018. M=0
  96019. //vv arith_d_with_stack_top(D+M)
  96020. //^^ push_d_to_stack
  96021. // #36617
  96022. @SP
  96023. // #36618
  96024. A=M
  96025. // #36619
  96026. M=D
  96027. // #36620
  96028. @SP
  96029. // #36621
  96030. M=M+1
  96031. //vv push_d_to_stack
  96032. //vv arith_binary_op(+)
  96033. //
  96034. //// pop pointer 1
  96035. //^^ pop_to_loc{4)
  96036. //^^ pop_stack_to_d
  96037. // #36622
  96038. @SP
  96039. // #36623
  96040. M=M-1
  96041. // #36624
  96042. A=M
  96043. // #36625
  96044. D=M
  96045. //vv pop_stack_to_d
  96046. // #36626
  96047. @4
  96048. // #36627
  96049. M=D
  96050. //vv pop_to_loc{4)
  96051. //
  96052. //// push that 0
  96053. //^^ push_from_ram(THAT, 0)
  96054. // #36628
  96055. @THAT
  96056. // #36629
  96057. D=M
  96058. // #36630
  96059. @0
  96060. // #36631
  96061. A=D+A
  96062. // #36632
  96063. D=M
  96064. //^^ push_d_to_stack
  96065. // #36633
  96066. @SP
  96067. // #36634
  96068. A=M
  96069. // #36635
  96070. M=D
  96071. // #36636
  96072. @SP
  96073. // #36637
  96074. M=M+1
  96075. //vv push_d_to_stack
  96076. //vv push_from_ram(THAT, 0)
  96077. //
  96078. //// return
  96079. // #36638
  96080. @LCL
  96081. // #36639
  96082. D=M
  96083. // #36640
  96084. @R14
  96085. // #36641
  96086. M=D //R14=LCL
  96087. // #36642
  96088. @5
  96089. // #36643
  96090. A=D-A
  96091. // #36644
  96092. D=M
  96093. // #36645
  96094. @R15
  96095. // #36646
  96096. M=D //R15=*(LCL-5)
  96097. //^^ pop_stack_to_d
  96098. // #36647
  96099. @SP
  96100. // #36648
  96101. M=M-1
  96102. // #36649
  96103. A=M
  96104. // #36650
  96105. D=M
  96106. //vv pop_stack_to_d
  96107. // #36651
  96108. @ARG
  96109. // #36652
  96110. A=M
  96111. // #36653
  96112. M=D //*ARG = pop()
  96113. // #36654
  96114. @ARG
  96115. // #36655
  96116. D=M
  96117. // #36656
  96118. @SP
  96119. // #36657
  96120. M=D+1 //SP=ARG+1
  96121. // #36658
  96122. @R14
  96123. // #36659
  96124. AM=M-1
  96125. // #36660
  96126. D=M
  96127. // #36661
  96128. @THAT
  96129. // #36662
  96130. M=D //THAT = *(--R14)
  96131. // #36663
  96132. @R14
  96133. // #36664
  96134. AM=M-1
  96135. // #36665
  96136. D=M
  96137. // #36666
  96138. @THIS
  96139. // #36667
  96140. M=D //THIS = *(--R14)
  96141. // #36668
  96142. @R14
  96143. // #36669
  96144. AM=M-1
  96145. // #36670
  96146. D=M
  96147. // #36671
  96148. @ARG
  96149. // #36672
  96150. M=D //ARG = *(--R14)
  96151. // #36673
  96152. @R14
  96153. // #36674
  96154. AM=M-1
  96155. // #36675
  96156. D=M
  96157. // #36676
  96158. @LCL
  96159. // #36677
  96160. M=D //LCL = *(--R14)
  96161. // #36678
  96162. @R15
  96163. // #36679
  96164. A=M
  96165. // #36680
  96166. 0;JMP //goto *R15
  96167. //
  96168. //// function String.setCharAt 0
  96169. (String.setCharAt)
  96170. //
  96171. //// push argument 0
  96172. //^^ push_from_ram(ARG, 0)
  96173. // #36681
  96174. @ARG
  96175. // #36682
  96176. D=M
  96177. // #36683
  96178. @0
  96179. // #36684
  96180. A=D+A
  96181. // #36685
  96182. D=M
  96183. //^^ push_d_to_stack
  96184. // #36686
  96185. @SP
  96186. // #36687
  96187. A=M
  96188. // #36688
  96189. M=D
  96190. // #36689
  96191. @SP
  96192. // #36690
  96193. M=M+1
  96194. //vv push_d_to_stack
  96195. //vv push_from_ram(ARG, 0)
  96196. //
  96197. //// pop pointer 0
  96198. //^^ pop_to_loc{3)
  96199. //^^ pop_stack_to_d
  96200. // #36691
  96201. @SP
  96202. // #36692
  96203. M=M-1
  96204. // #36693
  96205. A=M
  96206. // #36694
  96207. D=M
  96208. //vv pop_stack_to_d
  96209. // #36695
  96210. @3
  96211. // #36696
  96212. M=D
  96213. //vv pop_to_loc{3)
  96214. //
  96215. //// push this 2
  96216. //^^ push_from_ram(THIS, 2)
  96217. // #36697
  96218. @THIS
  96219. // #36698
  96220. D=M
  96221. // #36699
  96222. @2
  96223. // #36700
  96224. A=D+A
  96225. // #36701
  96226. D=M
  96227. //^^ push_d_to_stack
  96228. // #36702
  96229. @SP
  96230. // #36703
  96231. A=M
  96232. // #36704
  96233. M=D
  96234. // #36705
  96235. @SP
  96236. // #36706
  96237. M=M+1
  96238. //vv push_d_to_stack
  96239. //vv push_from_ram(THIS, 2)
  96240. //
  96241. //// push this 0
  96242. //^^ push_from_ram(THIS, 0)
  96243. // #36707
  96244. @THIS
  96245. // #36708
  96246. D=M
  96247. // #36709
  96248. @0
  96249. // #36710
  96250. A=D+A
  96251. // #36711
  96252. D=M
  96253. //^^ push_d_to_stack
  96254. // #36712
  96255. @SP
  96256. // #36713
  96257. A=M
  96258. // #36714
  96259. M=D
  96260. // #36715
  96261. @SP
  96262. // #36716
  96263. M=M+1
  96264. //vv push_d_to_stack
  96265. //vv push_from_ram(THIS, 0)
  96266. //
  96267. //// eq
  96268. //^^ arith_cmp_op(JEQ)
  96269. //^^ pop_stack_to_d
  96270. // #36717
  96271. @SP
  96272. // #36718
  96273. M=M-1
  96274. // #36719
  96275. A=M
  96276. // #36720
  96277. D=M
  96278. //vv pop_stack_to_d
  96279. //^^ arith_d_with_stack_top(D-M)
  96280. // #36721
  96281. @R13
  96282. // #36722
  96283. M=D
  96284. //^^ pop_stack_to_d
  96285. // #36723
  96286. @SP
  96287. // #36724
  96288. M=M-1
  96289. // #36725
  96290. A=M
  96291. // #36726
  96292. D=M
  96293. //vv pop_stack_to_d
  96294. // #36727
  96295. @R13
  96296. // #36728
  96297. D=D-M
  96298. // #36729
  96299. @R13
  96300. // #36730
  96301. M=0
  96302. //vv arith_d_with_stack_top(D-M)
  96303. // #36731
  96304. @PUT_TRUE_380
  96305. // #36732
  96306. D;JEQ
  96307. // #36733
  96308. @R13
  96309. // #36734
  96310. M=0
  96311. // #36735
  96312. @CONT_380
  96313. // #36736
  96314. 0;JMP
  96315. (PUT_TRUE_380)
  96316. // #36737
  96317. @R13
  96318. // #36738
  96319. M=-1
  96320. (CONT_380)
  96321. // #36739
  96322. @R13
  96323. // #36740
  96324. D=M
  96325. // #36741
  96326. @R13
  96327. // #36742
  96328. M=0
  96329. //^^ push_d_to_stack
  96330. // #36743
  96331. @SP
  96332. // #36744
  96333. A=M
  96334. // #36745
  96335. M=D
  96336. // #36746
  96337. @SP
  96338. // #36747
  96339. M=M+1
  96340. //vv push_d_to_stack
  96341. //vv arith_cmp_op(JEQ)
  96342. //
  96343. //// if-goto IF_TRUE0
  96344. //^^ pop_stack_to_d
  96345. // #36748
  96346. @SP
  96347. // #36749
  96348. M=M-1
  96349. // #36750
  96350. A=M
  96351. // #36751
  96352. D=M
  96353. //vv pop_stack_to_d
  96354. // #36752
  96355. @String.appendChar$IF_TRUE0
  96356. // #36753
  96357. D;JNE
  96358. //
  96359. //// goto IF_FALSE0
  96360. // #36754
  96361. @String.appendChar$IF_FALSE0
  96362. // #36755
  96363. 0;JMP
  96364. //
  96365. //// label IF_TRUE0
  96366. (String.appendChar$IF_TRUE0)
  96367. //
  96368. //// push constant 17
  96369. //^^ push_constant(17)
  96370. // #36756
  96371. @17
  96372. // #36757
  96373. D=A
  96374. //^^ push_d_to_stack
  96375. // #36758
  96376. @SP
  96377. // #36759
  96378. A=M
  96379. // #36760
  96380. M=D
  96381. // #36761
  96382. @SP
  96383. // #36762
  96384. M=M+1
  96385. //vv push_d_to_stack
  96386. //vv push_constant(17)
  96387. //
  96388. //// call Sys.error 1
  96389. //^^ push_constant(RET_ADDR_381)
  96390. // #36763
  96391. @RET_ADDR_381
  96392. // #36764
  96393. D=A
  96394. //^^ push_d_to_stack
  96395. // #36765
  96396. @SP
  96397. // #36766
  96398. A=M
  96399. // #36767
  96400. M=D
  96401. // #36768
  96402. @SP
  96403. // #36769
  96404. M=M+1
  96405. //vv push_d_to_stack
  96406. //vv push_constant(RET_ADDR_381)
  96407. //push return-address
  96408. // #36770
  96409. @LCL
  96410. // #36771
  96411. D=M
  96412. //^^ push_d_to_stack
  96413. // #36772
  96414. @SP
  96415. // #36773
  96416. A=M
  96417. // #36774
  96418. M=D
  96419. // #36775
  96420. @SP
  96421. // #36776
  96422. M=M+1
  96423. //vv push_d_to_stack
  96424. //push LCL
  96425. // #36777
  96426. @ARG
  96427. // #36778
  96428. D=M
  96429. //^^ push_d_to_stack
  96430. // #36779
  96431. @SP
  96432. // #36780
  96433. A=M
  96434. // #36781
  96435. M=D
  96436. // #36782
  96437. @SP
  96438. // #36783
  96439. M=M+1
  96440. //vv push_d_to_stack
  96441. //push ARG
  96442. // #36784
  96443. @THIS
  96444. // #36785
  96445. D=M
  96446. //^^ push_d_to_stack
  96447. // #36786
  96448. @SP
  96449. // #36787
  96450. A=M
  96451. // #36788
  96452. M=D
  96453. // #36789
  96454. @SP
  96455. // #36790
  96456. M=M+1
  96457. //vv push_d_to_stack
  96458. //push THIS
  96459. // #36791
  96460. @THAT
  96461. // #36792
  96462. D=M
  96463. //^^ push_d_to_stack
  96464. // #36793
  96465. @SP
  96466. // #36794
  96467. A=M
  96468. // #36795
  96469. M=D
  96470. // #36796
  96471. @SP
  96472. // #36797
  96473. M=M+1
  96474. //vv push_d_to_stack
  96475. //push THAT
  96476. // #36798
  96477. @SP
  96478. // #36799
  96479. D=M
  96480. // #36800
  96481. @ARG
  96482. // #36801
  96483. M=D
  96484. // #36802
  96485. @6
  96486. // #36803
  96487. D=A
  96488. // #36804
  96489. @ARG
  96490. // #36805
  96491. M=M-D // ARG = SP - args - 5
  96492. // #36806
  96493. @SP
  96494. // #36807
  96495. D=M
  96496. // #36808
  96497. @LCL
  96498. // #36809
  96499. M=D // LCL = SP
  96500. // #36810
  96501. @Sys.error
  96502. // #36811
  96503. 0;JMP
  96504. (RET_ADDR_381)
  96505. //
  96506. //// pop temp 0
  96507. //^^ pop_to_loc{5)
  96508. //^^ pop_stack_to_d
  96509. // #36812
  96510. @SP
  96511. // #36813
  96512. M=M-1
  96513. // #36814
  96514. A=M
  96515. // #36815
  96516. D=M
  96517. //vv pop_stack_to_d
  96518. // #36816
  96519. @5
  96520. // #36817
  96521. M=D
  96522. //vv pop_to_loc{5)
  96523. //
  96524. //// label IF_FALSE0
  96525. (String.appendChar$IF_FALSE0)
  96526. //
  96527. //// push this 2
  96528. //^^ push_from_ram(THIS, 2)
  96529. // #36818
  96530. @THIS
  96531. // #36819
  96532. D=M
  96533. // #36820
  96534. @2
  96535. // #36821
  96536. A=D+A
  96537. // #36822
  96538. D=M
  96539. //^^ push_d_to_stack
  96540. // #36823
  96541. @SP
  96542. // #36824
  96543. A=M
  96544. // #36825
  96545. M=D
  96546. // #36826
  96547. @SP
  96548. // #36827
  96549. M=M+1
  96550. //vv push_d_to_stack
  96551. //vv push_from_ram(THIS, 2)
  96552. //
  96553. //// push this 1
  96554. //^^ push_from_ram(THIS, 1)
  96555. // #36828
  96556. @THIS
  96557. // #36829
  96558. D=M
  96559. // #36830
  96560. @1
  96561. // #36831
  96562. A=D+A
  96563. // #36832
  96564. D=M
  96565. //^^ push_d_to_stack
  96566. // #36833
  96567. @SP
  96568. // #36834
  96569. A=M
  96570. // #36835
  96571. M=D
  96572. // #36836
  96573. @SP
  96574. // #36837
  96575. M=M+1
  96576. //vv push_d_to_stack
  96577. //vv push_from_ram(THIS, 1)
  96578. //
  96579. //// add
  96580. //^^ arith_binary_op(+)
  96581. //^^ pop_stack_to_d
  96582. // #36838
  96583. @SP
  96584. // #36839
  96585. M=M-1
  96586. // #36840
  96587. A=M
  96588. // #36841
  96589. D=M
  96590. //vv pop_stack_to_d
  96591. //^^ arith_d_with_stack_top(D+M)
  96592. // #36842
  96593. @R13
  96594. // #36843
  96595. M=D
  96596. //^^ pop_stack_to_d
  96597. // #36844
  96598. @SP
  96599. // #36845
  96600. M=M-1
  96601. // #36846
  96602. A=M
  96603. // #36847
  96604. D=M
  96605. //vv pop_stack_to_d
  96606. // #36848
  96607. @R13
  96608. // #36849
  96609. D=D+M
  96610. // #36850
  96611. @R13
  96612. // #36851
  96613. M=0
  96614. //vv arith_d_with_stack_top(D+M)
  96615. //^^ push_d_to_stack
  96616. // #36852
  96617. @SP
  96618. // #36853
  96619. A=M
  96620. // #36854
  96621. M=D
  96622. // #36855
  96623. @SP
  96624. // #36856
  96625. M=M+1
  96626. //vv push_d_to_stack
  96627. //vv arith_binary_op(+)
  96628. //
  96629. //// push argument 1
  96630. //^^ push_from_ram(ARG, 1)
  96631. // #36857
  96632. @ARG
  96633. // #36858
  96634. D=M
  96635. // #36859
  96636. @1
  96637. // #36860
  96638. A=D+A
  96639. // #36861
  96640. D=M
  96641. //^^ push_d_to_stack
  96642. // #36862
  96643. @SP
  96644. // #36863
  96645. A=M
  96646. // #36864
  96647. M=D
  96648. // #36865
  96649. @SP
  96650. // #36866
  96651. M=M+1
  96652. //vv push_d_to_stack
  96653. //vv push_from_ram(ARG, 1)
  96654. //
  96655. //// pop temp 0
  96656. //^^ pop_to_loc{5)
  96657. //^^ pop_stack_to_d
  96658. // #36867
  96659. @SP
  96660. // #36868
  96661. M=M-1
  96662. // #36869
  96663. A=M
  96664. // #36870
  96665. D=M
  96666. //vv pop_stack_to_d
  96667. // #36871
  96668. @5
  96669. // #36872
  96670. M=D
  96671. //vv pop_to_loc{5)
  96672. //
  96673. //// pop pointer 1
  96674. //^^ pop_to_loc{4)
  96675. //^^ pop_stack_to_d
  96676. // #36873
  96677. @SP
  96678. // #36874
  96679. M=M-1
  96680. // #36875
  96681. A=M
  96682. // #36876
  96683. D=M
  96684. //vv pop_stack_to_d
  96685. // #36877
  96686. @4
  96687. // #36878
  96688. M=D
  96689. //vv pop_to_loc{4)
  96690. //
  96691. //// push temp 0
  96692. //^^ push_from_loc(5)
  96693. // #36879
  96694. @5
  96695. // #36880
  96696. D=M
  96697. //^^ push_d_to_stack
  96698. // #36881
  96699. @SP
  96700. // #36882
  96701. A=M
  96702. // #36883
  96703. M=D
  96704. // #36884
  96705. @SP
  96706. // #36885
  96707. M=M+1
  96708. //vv push_d_to_stack
  96709. //vv push_from_loc(5)
  96710. //
  96711. //// pop that 0
  96712. //^^ pop_to_ram(THAT, 0)
  96713. // #36886
  96714. @THAT
  96715. // #36887
  96716. D=M
  96717. // #36888
  96718. @0
  96719. // #36889
  96720. D=D+A
  96721. // #36890
  96722. @R13
  96723. // #36891
  96724. M=D
  96725. //^^ pop_stack_to_d
  96726. // #36892
  96727. @SP
  96728. // #36893
  96729. M=M-1
  96730. // #36894
  96731. A=M
  96732. // #36895
  96733. D=M
  96734. //vv pop_stack_to_d
  96735. // #36896
  96736. @R13
  96737. // #36897
  96738. A=M
  96739. // #36898
  96740. M=D
  96741. // #36899
  96742. @R13
  96743. // #36900
  96744. M=0
  96745. //vv pop_to_ram(THAT, 0)
  96746. //
  96747. //// push this 2
  96748. //^^ push_from_ram(THIS, 2)
  96749. // #36901
  96750. @THIS
  96751. // #36902
  96752. D=M
  96753. // #36903
  96754. @2
  96755. // #36904
  96756. A=D+A
  96757. // #36905
  96758. D=M
  96759. //^^ push_d_to_stack
  96760. // #36906
  96761. @SP
  96762. // #36907
  96763. A=M
  96764. // #36908
  96765. M=D
  96766. // #36909
  96767. @SP
  96768. // #36910
  96769. M=M+1
  96770. //vv push_d_to_stack
  96771. //vv push_from_ram(THIS, 2)
  96772. //
  96773. //// push constant 1
  96774. //^^ push_constant(1)
  96775. // #36911
  96776. @1
  96777. // #36912
  96778. D=A
  96779. //^^ push_d_to_stack
  96780. // #36913
  96781. @SP
  96782. // #36914
  96783. A=M
  96784. // #36915
  96785. M=D
  96786. // #36916
  96787. @SP
  96788. // #36917
  96789. M=M+1
  96790. //vv push_d_to_stack
  96791. //vv push_constant(1)
  96792. //
  96793. //// add
  96794. //^^ arith_binary_op(+)
  96795. //^^ pop_stack_to_d
  96796. // #36918
  96797. @SP
  96798. // #36919
  96799. M=M-1
  96800. // #36920
  96801. A=M
  96802. // #36921
  96803. D=M
  96804. //vv pop_stack_to_d
  96805. //^^ arith_d_with_stack_top(D+M)
  96806. // #36922
  96807. @R13
  96808. // #36923
  96809. M=D
  96810. //^^ pop_stack_to_d
  96811. // #36924
  96812. @SP
  96813. // #36925
  96814. M=M-1
  96815. // #36926
  96816. A=M
  96817. // #36927
  96818. D=M
  96819. //vv pop_stack_to_d
  96820. // #36928
  96821. @R13
  96822. // #36929
  96823. D=D+M
  96824. // #36930
  96825. @R13
  96826. // #36931
  96827. M=0
  96828. //vv arith_d_with_stack_top(D+M)
  96829. //^^ push_d_to_stack
  96830. // #36932
  96831. @SP
  96832. // #36933
  96833. A=M
  96834. // #36934
  96835. M=D
  96836. // #36935
  96837. @SP
  96838. // #36936
  96839. M=M+1
  96840. //vv push_d_to_stack
  96841. //vv arith_binary_op(+)
  96842. //
  96843. //// pop this 2
  96844. //^^ pop_to_ram(THIS, 2)
  96845. // #36937
  96846. @THIS
  96847. // #36938
  96848. D=M
  96849. // #36939
  96850. @2
  96851. // #36940
  96852. D=D+A
  96853. // #36941
  96854. @R13
  96855. // #36942
  96856. M=D
  96857. //^^ pop_stack_to_d
  96858. // #36943
  96859. @SP
  96860. // #36944
  96861. M=M-1
  96862. // #36945
  96863. A=M
  96864. // #36946
  96865. D=M
  96866. //vv pop_stack_to_d
  96867. // #36947
  96868. @R13
  96869. // #36948
  96870. A=M
  96871. // #36949
  96872. M=D
  96873. // #36950
  96874. @R13
  96875. // #36951
  96876. M=0
  96877. //vv pop_to_ram(THIS, 2)
  96878. //
  96879. //// push pointer 0
  96880. //^^ push_from_loc(3)
  96881. // #36952
  96882. @3
  96883. // #36953
  96884. D=M
  96885. //^^ push_d_to_stack
  96886. // #36954
  96887. @SP
  96888. // #36955
  96889. A=M
  96890. // #36956
  96891. M=D
  96892. // #36957
  96893. @SP
  96894. // #36958
  96895. M=M+1
  96896. //vv push_d_to_stack
  96897. //vv push_from_loc(3)
  96898. //
  96899. //// return
  96900. // #36959
  96901. @LCL
  96902. // #36960
  96903. D=M
  96904. // #36961
  96905. @R14
  96906. // #36962
  96907. M=D //R14=LCL
  96908. // #36963
  96909. @5
  96910. // #36964
  96911. A=D-A
  96912. // #36965
  96913. D=M
  96914. // #36966
  96915. @R15
  96916. // #36967
  96917. M=D //R15=*(LCL-5)
  96918. //^^ pop_stack_to_d
  96919. // #36968
  96920. @SP
  96921. // #36969
  96922. M=M-1
  96923. // #36970
  96924. A=M
  96925. // #36971
  96926. D=M
  96927. //vv pop_stack_to_d
  96928. // #36972
  96929. @ARG
  96930. // #36973
  96931. A=M
  96932. // #36974
  96933. M=D //*ARG = pop()
  96934. // #36975
  96935. @ARG
  96936. // #36976
  96937. D=M
  96938. // #36977
  96939. @SP
  96940. // #36978
  96941. M=D+1 //SP=ARG+1
  96942. // #36979
  96943. @R14
  96944. // #36980
  96945. AM=M-1
  96946. // #36981
  96947. D=M
  96948. // #36982
  96949. @THAT
  96950. // #36983
  96951. M=D //THAT = *(--R14)
  96952. // #36984
  96953. @R14
  96954. // #36985
  96955. AM=M-1
  96956. // #36986
  96957. D=M
  96958. // #36987
  96959. @THIS
  96960. // #36988
  96961. M=D //THIS = *(--R14)
  96962. // #36989
  96963. @R14
  96964. // #36990
  96965. AM=M-1
  96966. // #36991
  96967. D=M
  96968. // #36992
  96969. @ARG
  96970. // #36993
  96971. M=D //ARG = *(--R14)
  96972. // #36994
  96973. @R14
  96974. // #36995
  96975. AM=M-1
  96976. // #36996
  96977. D=M
  96978. // #36997
  96979. @LCL
  96980. // #36998
  96981. M=D //LCL = *(--R14)
  96982. // #36999
  96983. @R15
  96984. // #37000
  96985. A=M
  96986. // #37001
  96987. 0;JMP //goto *R15
  96988. //
  96989. //// function String.eraseLastChar 0
  96990. (String.eraseLastChar)
  96991. //
  96992. //// push argument 0
  96993. //^^ push_from_ram(ARG, 0)
  96994. // #37002
  96995. @ARG
  96996. // #37003
  96997. D=M
  96998. // #37004
  96999. @0
  97000. // #37005
  97001. A=D+A
  97002. // #37006
  97003. D=M
  97004. //^^ push_d_to_stack
  97005. // #37007
  97006. @SP
  97007. // #37008
  97008. A=M
  97009. // #37009
  97010. M=D
  97011. // #37010
  97012. @SP
  97013. // #37011
  97014. M=M+1
  97015. //vv push_d_to_stack
  97016. //vv push_from_ram(ARG, 0)
  97017. //
  97018. //// pop pointer 0
  97019. //^^ pop_to_loc{3)
  97020. //^^ pop_stack_to_d
  97021. // #37012
  97022. @SP
  97023. // #37013
  97024. M=M-1
  97025. // #37014
  97026. A=M
  97027. // #37015
  97028. D=M
  97029. //vv pop_stack_to_d
  97030. // #37016
  97031. @3
  97032. // #37017
  97033. M=D
  97034. //vv pop_to_loc{3)
  97035. //
  97036. //// push this 0
  97037. //^^ push_from_ram(THIS, 0)
  97038. // #37018
  97039. @THIS
  97040. // #37019
  97041. D=M
  97042. // #37020
  97043. @0
  97044. // #37021
  97045. A=D+A
  97046. // #37022
  97047. D=M
  97048. //^^ push_d_to_stack
  97049. // #37023
  97050. @SP
  97051. // #37024
  97052. A=M
  97053. // #37025
  97054. M=D
  97055. // #37026
  97056. @SP
  97057. // #37027
  97058. M=M+1
  97059. //vv push_d_to_stack
  97060. //vv push_from_ram(THIS, 0)
  97061. //
  97062. //// push constant 0
  97063. //^^ push_constant(0)
  97064. // #37028
  97065. @0
  97066. // #37029
  97067. D=A
  97068. //^^ push_d_to_stack
  97069. // #37030
  97070. @SP
  97071. // #37031
  97072. A=M
  97073. // #37032
  97074. M=D
  97075. // #37033
  97076. @SP
  97077. // #37034
  97078. M=M+1
  97079. //vv push_d_to_stack
  97080. //vv push_constant(0)
  97081. //
  97082. //// eq
  97083. //^^ arith_cmp_op(JEQ)
  97084. //^^ pop_stack_to_d
  97085. // #37035
  97086. @SP
  97087. // #37036
  97088. M=M-1
  97089. // #37037
  97090. A=M
  97091. // #37038
  97092. D=M
  97093. //vv pop_stack_to_d
  97094. //^^ arith_d_with_stack_top(D-M)
  97095. // #37039
  97096. @R13
  97097. // #37040
  97098. M=D
  97099. //^^ pop_stack_to_d
  97100. // #37041
  97101. @SP
  97102. // #37042
  97103. M=M-1
  97104. // #37043
  97105. A=M
  97106. // #37044
  97107. D=M
  97108. //vv pop_stack_to_d
  97109. // #37045
  97110. @R13
  97111. // #37046
  97112. D=D-M
  97113. // #37047
  97114. @R13
  97115. // #37048
  97116. M=0
  97117. //vv arith_d_with_stack_top(D-M)
  97118. // #37049
  97119. @PUT_TRUE_390
  97120. // #37050
  97121. D;JEQ
  97122. // #37051
  97123. @R13
  97124. // #37052
  97125. M=0
  97126. // #37053
  97127. @CONT_390
  97128. // #37054
  97129. 0;JMP
  97130. (PUT_TRUE_390)
  97131. // #37055
  97132. @R13
  97133. // #37056
  97134. M=-1
  97135. (CONT_390)
  97136. // #37057
  97137. @R13
  97138. // #37058
  97139. D=M
  97140. // #37059
  97141. @R13
  97142. // #37060
  97143. M=0
  97144. //^^ push_d_to_stack
  97145. // #37061
  97146. @SP
  97147. // #37062
  97148. A=M
  97149. // #37063
  97150. M=D
  97151. // #37064
  97152. @SP
  97153. // #37065
  97154. M=M+1
  97155. //vv push_d_to_stack
  97156. //vv arith_cmp_op(JEQ)
  97157. //
  97158. //// if-goto IF_TRUE0
  97159. //^^ pop_stack_to_d
  97160. // #37066
  97161. @SP
  97162. // #37067
  97163. M=M-1
  97164. // #37068
  97165. A=M
  97166. // #37069
  97167. D=M
  97168. //vv pop_stack_to_d
  97169. // #37070
  97170. @String.setInt$IF_TRUE0
  97171. // #37071
  97172. D;JNE
  97173. //
  97174. //// goto IF_FALSE0
  97175. // #37072
  97176. @String.setInt$IF_FALSE0
  97177. // #37073
  97178. 0;JMP
  97179. //
  97180. //// label IF_TRUE0
  97181. (String.setInt$IF_TRUE0)
  97182. //
  97183. //// push constant 19
  97184. //^^ push_constant(19)
  97185. // #37074
  97186. @19
  97187. // #37075
  97188. D=A
  97189. //^^ push_d_to_stack
  97190. // #37076
  97191. @SP
  97192. // #37077
  97193. A=M
  97194. // #37078
  97195. M=D
  97196. // #37079
  97197. @SP
  97198. // #37080
  97199. M=M+1
  97200. //vv push_d_to_stack
  97201. //vv push_constant(19)
  97202. //
  97203. //// call Sys.error 1
  97204. //^^ push_constant(RET_ADDR_391)
  97205. // #37081
  97206. @RET_ADDR_391
  97207. // #37082
  97208. D=A
  97209. //^^ push_d_to_stack
  97210. // #37083
  97211. @SP
  97212. // #37084
  97213. A=M
  97214. // #37085
  97215. M=D
  97216. // #37086
  97217. @SP
  97218. // #37087
  97219. M=M+1
  97220. //vv push_d_to_stack
  97221. //vv push_constant(RET_ADDR_391)
  97222. //push return-address
  97223. // #37088
  97224. @LCL
  97225. // #37089
  97226. D=M
  97227. //^^ push_d_to_stack
  97228. // #37090
  97229. @SP
  97230. // #37091
  97231. A=M
  97232. // #37092
  97233. M=D
  97234. // #37093
  97235. @SP
  97236. // #37094
  97237. M=M+1
  97238. //vv push_d_to_stack
  97239. //push LCL
  97240. // #37095
  97241. @ARG
  97242. // #37096
  97243. D=M
  97244. //^^ push_d_to_stack
  97245. // #37097
  97246. @SP
  97247. // #37098
  97248. A=M
  97249. // #37099
  97250. M=D
  97251. // #37100
  97252. @SP
  97253. // #37101
  97254. M=M+1
  97255. //vv push_d_to_stack
  97256. //push ARG
  97257. // #37102
  97258. @THIS
  97259. // #37103
  97260. D=M
  97261. //^^ push_d_to_stack
  97262. // #37104
  97263. @SP
  97264. // #37105
  97265. A=M
  97266. // #37106
  97267. M=D
  97268. // #37107
  97269. @SP
  97270. // #37108
  97271. M=M+1
  97272. //vv push_d_to_stack
  97273. //push THIS
  97274. // #37109
  97275. @THAT
  97276. // #37110
  97277. D=M
  97278. //^^ push_d_to_stack
  97279. // #37111
  97280. @SP
  97281. // #37112
  97282. A=M
  97283. // #37113
  97284. M=D
  97285. // #37114
  97286. @SP
  97287. // #37115
  97288. M=M+1
  97289. //vv push_d_to_stack
  97290. //push THAT
  97291. // #37116
  97292. @SP
  97293. // #37117
  97294. D=M
  97295. // #37118
  97296. @ARG
  97297. // #37119
  97298. M=D
  97299. // #37120
  97300. @6
  97301. // #37121
  97302. D=A
  97303. // #37122
  97304. @ARG
  97305. // #37123
  97306. M=M-D // ARG = SP - args - 5
  97307. // #37124
  97308. @SP
  97309. // #37125
  97310. D=M
  97311. // #37126
  97312. @LCL
  97313. // #37127
  97314. M=D // LCL = SP
  97315. // #37128
  97316. @Sys.error
  97317. // #37129
  97318. 0;JMP
  97319. (RET_ADDR_391)
  97320. //
  97321. //// pop temp 0
  97322. //^^ pop_to_loc{5)
  97323. //^^ pop_stack_to_d
  97324. // #37130
  97325. @SP
  97326. // #37131
  97327. M=M-1
  97328. // #37132
  97329. A=M
  97330. // #37133
  97331. D=M
  97332. //vv pop_stack_to_d
  97333. // #37134
  97334. @5
  97335. // #37135
  97336. M=D
  97337. //vv pop_to_loc{5)
  97338. //
  97339. //// label IF_FALSE0
  97340. (String.setInt$IF_FALSE0)
  97341. //
  97342. //// push constant 6
  97343. //^^ push_constant(6)
  97344. // #37136
  97345. @6
  97346. // #37137
  97347. D=A
  97348. //^^ push_d_to_stack
  97349. // #37138
  97350. @SP
  97351. // #37139
  97352. A=M
  97353. // #37140
  97354. M=D
  97355. // #37141
  97356. @SP
  97357. // #37142
  97358. M=M+1
  97359. //vv push_d_to_stack
  97360. //vv push_constant(6)
  97361. //
  97362. //// call Array.new 1
  97363. //^^ push_constant(RET_ADDR_392)
  97364. // #37143
  97365. @RET_ADDR_392
  97366. // #37144
  97367. D=A
  97368. //^^ push_d_to_stack
  97369. // #37145
  97370. @SP
  97371. // #37146
  97372. A=M
  97373. // #37147
  97374. M=D
  97375. // #37148
  97376. @SP
  97377. // #37149
  97378. M=M+1
  97379. //vv push_d_to_stack
  97380. //vv push_constant(RET_ADDR_392)
  97381. //push return-address
  97382. // #37150
  97383. @LCL
  97384. // #37151
  97385. D=M
  97386. //^^ push_d_to_stack
  97387. // #37152
  97388. @SP
  97389. // #37153
  97390. A=M
  97391. // #37154
  97392. M=D
  97393. // #37155
  97394. @SP
  97395. // #37156
  97396. M=M+1
  97397. //vv push_d_to_stack
  97398. //push LCL
  97399. // #37157
  97400. @ARG
  97401. // #37158
  97402. D=M
  97403. //^^ push_d_to_stack
  97404. // #37159
  97405. @SP
  97406. // #37160
  97407. A=M
  97408. // #37161
  97409. M=D
  97410. // #37162
  97411. @SP
  97412. // #37163
  97413. M=M+1
  97414. //vv push_d_to_stack
  97415. //push ARG
  97416. // #37164
  97417. @THIS
  97418. // #37165
  97419. D=M
  97420. //^^ push_d_to_stack
  97421. // #37166
  97422. @SP
  97423. // #37167
  97424. A=M
  97425. // #37168
  97426. M=D
  97427. // #37169
  97428. @SP
  97429. // #37170
  97430. M=M+1
  97431. //vv push_d_to_stack
  97432. //push THIS
  97433. // #37171
  97434. @THAT
  97435. // #37172
  97436. D=M
  97437. //^^ push_d_to_stack
  97438. // #37173
  97439. @SP
  97440. // #37174
  97441. A=M
  97442. // #37175
  97443. M=D
  97444. // #37176
  97445. @SP
  97446. // #37177
  97447. M=M+1
  97448. //vv push_d_to_stack
  97449. //push THAT
  97450. // #37178
  97451. @SP
  97452. // #37179
  97453. D=M
  97454. // #37180
  97455. @ARG
  97456. // #37181
  97457. M=D
  97458. // #37182
  97459. @6
  97460. // #37183
  97461. D=A
  97462. // #37184
  97463. @ARG
  97464. // #37185
  97465. M=M-D // ARG = SP - args - 5
  97466. // #37186
  97467. @SP
  97468. // #37187
  97469. D=M
  97470. // #37188
  97471. @LCL
  97472. // #37189
  97473. M=D // LCL = SP
  97474. // #37190
  97475. @Array.new
  97476. // #37191
  97477. 0;JMP
  97478. (RET_ADDR_392)
  97479. //
  97480. //// pop local 2
  97481. //^^ pop_to_ram(LCL, 2)
  97482. // #37192
  97483. @LCL
  97484. // #37193
  97485. D=M
  97486. // #37194
  97487. @2
  97488. // #37195
  97489. D=D+A
  97490. // #37196
  97491. @R13
  97492. // #37197
  97493. M=D
  97494. //^^ pop_stack_to_d
  97495. // #37198
  97496. @SP
  97497. // #37199
  97498. M=M-1
  97499. // #37200
  97500. A=M
  97501. // #37201
  97502. D=M
  97503. //vv pop_stack_to_d
  97504. // #37202
  97505. @R13
  97506. // #37203
  97507. A=M
  97508. // #37204
  97509. M=D
  97510. // #37205
  97511. @R13
  97512. // #37206
  97513. M=0
  97514. //vv pop_to_ram(LCL, 2)
  97515. //
  97516. //// push argument 1
  97517. //^^ push_from_ram(ARG, 1)
  97518. // #37207
  97519. @ARG
  97520. // #37208
  97521. D=M
  97522. // #37209
  97523. @1
  97524. // #37210
  97525. A=D+A
  97526. // #37211
  97527. D=M
  97528. //^^ push_d_to_stack
  97529. // #37212
  97530. @SP
  97531. // #37213
  97532. A=M
  97533. // #37214
  97534. M=D
  97535. // #37215
  97536. @SP
  97537. // #37216
  97538. M=M+1
  97539. //vv push_d_to_stack
  97540. //vv push_from_ram(ARG, 1)
  97541. //
  97542. //// push constant 0
  97543. //^^ push_constant(0)
  97544. // #37217
  97545. @0
  97546. // #37218
  97547. D=A
  97548. //^^ push_d_to_stack
  97549. // #37219
  97550. @SP
  97551. // #37220
  97552. A=M
  97553. // #37221
  97554. M=D
  97555. // #37222
  97556. @SP
  97557. // #37223
  97558. M=M+1
  97559. //vv push_d_to_stack
  97560. //vv push_constant(0)
  97561. //
  97562. //// lt
  97563. //^^ arith_cmp_op(JLT)
  97564. //^^ pop_stack_to_d
  97565. // #37224
  97566. @SP
  97567. // #37225
  97568. M=M-1
  97569. // #37226
  97570. A=M
  97571. // #37227
  97572. D=M
  97573. //vv pop_stack_to_d
  97574. //^^ arith_d_with_stack_top(D-M)
  97575. // #37228
  97576. @R13
  97577. // #37229
  97578. M=D
  97579. //^^ pop_stack_to_d
  97580. // #37230
  97581. @SP
  97582. // #37231
  97583. M=M-1
  97584. // #37232
  97585. A=M
  97586. // #37233
  97587. D=M
  97588. //vv pop_stack_to_d
  97589. // #37234
  97590. @R13
  97591. // #37235
  97592. D=D-M
  97593. // #37236
  97594. @R13
  97595. // #37237
  97596. M=0
  97597. //vv arith_d_with_stack_top(D-M)
  97598. // #37238
  97599. @PUT_TRUE_393
  97600. // #37239
  97601. D;JLT
  97602. // #37240
  97603. @R13
  97604. // #37241
  97605. M=0
  97606. // #37242
  97607. @CONT_393
  97608. // #37243
  97609. 0;JMP
  97610. (PUT_TRUE_393)
  97611. // #37244
  97612. @R13
  97613. // #37245
  97614. M=-1
  97615. (CONT_393)
  97616. // #37246
  97617. @R13
  97618. // #37247
  97619. D=M
  97620. // #37248
  97621. @R13
  97622. // #37249
  97623. M=0
  97624. //^^ push_d_to_stack
  97625. // #37250
  97626. @SP
  97627. // #37251
  97628. A=M
  97629. // #37252
  97630. M=D
  97631. // #37253
  97632. @SP
  97633. // #37254
  97634. M=M+1
  97635. //vv push_d_to_stack
  97636. //vv arith_cmp_op(JLT)
  97637. //
  97638. //// if-goto IF_TRUE1
  97639. //^^ pop_stack_to_d
  97640. // #37255
  97641. @SP
  97642. // #37256
  97643. M=M-1
  97644. // #37257
  97645. A=M
  97646. // #37258
  97647. D=M
  97648. //vv pop_stack_to_d
  97649. // #37259
  97650. @String.setInt$IF_TRUE1
  97651. // #37260
  97652. D;JNE
  97653. //
  97654. //// goto IF_FALSE1
  97655. // #37261
  97656. @String.setInt$IF_FALSE1
  97657. // #37262
  97658. 0;JMP
  97659. //
  97660. //// label IF_TRUE1
  97661. (String.setInt$IF_TRUE1)
  97662. //
  97663. //// push constant 0
  97664. //^^ push_constant(0)
  97665. // #37263
  97666. @0
  97667. // #37264
  97668. D=A
  97669. //^^ push_d_to_stack
  97670. // #37265
  97671. @SP
  97672. // #37266
  97673. A=M
  97674. // #37267
  97675. M=D
  97676. // #37268
  97677. @SP
  97678. // #37269
  97679. M=M+1
  97680. //vv push_d_to_stack
  97681. //vv push_constant(0)
  97682. //
  97683. //// not
  97684. //^^ arith_unary_op(!)
  97685. //^^ pop_stack_to_d
  97686. // #37270
  97687. @SP
  97688. // #37271
  97689. M=M-1
  97690. // #37272
  97691. A=M
  97692. // #37273
  97693. D=M
  97694. //vv pop_stack_to_d
  97695. // #37274
  97696. D=!D
  97697. //^^ push_d_to_stack
  97698. // #37275
  97699. @SP
  97700. // #37276
  97701. A=M
  97702. // #37277
  97703. M=D
  97704. // #37278
  97705. @SP
  97706. // #37279
  97707. M=M+1
  97708. //vv push_d_to_stack
  97709. //vv arith_unary_op(!)
  97710. //
  97711. //// pop local 3
  97712. //^^ pop_to_ram(LCL, 3)
  97713. // #37280
  97714. @LCL
  97715. // #37281
  97716. D=M
  97717. // #37282
  97718. @3
  97719. // #37283
  97720. D=D+A
  97721. // #37284
  97722. @R13
  97723. // #37285
  97724. M=D
  97725. //^^ pop_stack_to_d
  97726. // #37286
  97727. @SP
  97728. // #37287
  97729. M=M-1
  97730. // #37288
  97731. A=M
  97732. // #37289
  97733. D=M
  97734. //vv pop_stack_to_d
  97735. // #37290
  97736. @R13
  97737. // #37291
  97738. A=M
  97739. // #37292
  97740. M=D
  97741. // #37293
  97742. @R13
  97743. // #37294
  97744. M=0
  97745. //vv pop_to_ram(LCL, 3)
  97746. //
  97747. //// push argument 1
  97748. //^^ push_from_ram(ARG, 1)
  97749. // #37295
  97750. @ARG
  97751. // #37296
  97752. D=M
  97753. // #37297
  97754. @1
  97755. // #37298
  97756. A=D+A
  97757. // #37299
  97758. D=M
  97759. //^^ push_d_to_stack
  97760. // #37300
  97761. @SP
  97762. // #37301
  97763. A=M
  97764. // #37302
  97765. M=D
  97766. // #37303
  97767. @SP
  97768. // #37304
  97769. M=M+1
  97770. //vv push_d_to_stack
  97771. //vv push_from_ram(ARG, 1)
  97772. //
  97773. //// neg
  97774. //^^ arith_unary_op(-)
  97775. //^^ pop_stack_to_d
  97776. // #37305
  97777. @SP
  97778. // #37306
  97779. M=M-1
  97780. // #37307
  97781. A=M
  97782. // #37308
  97783. D=M
  97784. //vv pop_stack_to_d
  97785. // #37309
  97786. D=-D
  97787. //^^ push_d_to_stack
  97788. // #37310
  97789. @SP
  97790. // #37311
  97791. A=M
  97792. // #37312
  97793. M=D
  97794. // #37313
  97795. @SP
  97796. // #37314
  97797. M=M+1
  97798. //vv push_d_to_stack
  97799. //vv arith_unary_op(-)
  97800. //
  97801. //// pop argument 1
  97802. //^^ pop_to_ram(ARG, 1)
  97803. // #37315
  97804. @ARG
  97805. // #37316
  97806. D=M
  97807. // #37317
  97808. @1
  97809. // #37318
  97810. D=D+A
  97811. // #37319
  97812. @R13
  97813. // #37320
  97814. M=D
  97815. //^^ pop_stack_to_d
  97816. // #37321
  97817. @SP
  97818. // #37322
  97819. M=M-1
  97820. // #37323
  97821. A=M
  97822. // #37324
  97823. D=M
  97824. //vv pop_stack_to_d
  97825. // #37325
  97826. @R13
  97827. // #37326
  97828. A=M
  97829. // #37327
  97830. M=D
  97831. // #37328
  97832. @R13
  97833. // #37329
  97834. M=0
  97835. //vv pop_to_ram(ARG, 1)
  97836. //
  97837. //// label IF_FALSE1
  97838. (String.setInt$IF_FALSE1)
  97839. //
  97840. //// push argument 1
  97841. //^^ push_from_ram(ARG, 1)
  97842. // #37330
  97843. @ARG
  97844. // #37331
  97845. D=M
  97846. // #37332
  97847. @1
  97848. // #37333
  97849. A=D+A
  97850. // #37334
  97851. D=M
  97852. //^^ push_d_to_stack
  97853. // #37335
  97854. @SP
  97855. // #37336
  97856. A=M
  97857. // #37337
  97858. M=D
  97859. // #37338
  97860. @SP
  97861. // #37339
  97862. M=M+1
  97863. //vv push_d_to_stack
  97864. //vv push_from_ram(ARG, 1)
  97865. //
  97866. //// pop local 1
  97867. //^^ pop_to_ram(LCL, 1)
  97868. // #37340
  97869. @LCL
  97870. // #37341
  97871. D=M
  97872. // #37342
  97873. @1
  97874. // #37343
  97875. D=D+A
  97876. // #37344
  97877. @R13
  97878. // #37345
  97879. M=D
  97880. //^^ pop_stack_to_d
  97881. // #37346
  97882. @SP
  97883. // #37347
  97884. M=M-1
  97885. // #37348
  97886. A=M
  97887. // #37349
  97888. D=M
  97889. //vv pop_stack_to_d
  97890. // #37350
  97891. @R13
  97892. // #37351
  97893. A=M
  97894. // #37352
  97895. M=D
  97896. // #37353
  97897. @R13
  97898. // #37354
  97899. M=0
  97900. //vv pop_to_ram(LCL, 1)
  97901. //
  97902. //// label WHILE_EXP0
  97903. (String.setInt$WHILE_EXP0)
  97904. //
  97905. //// push local 1
  97906. //^^ push_from_ram(LCL, 1)
  97907. // #37355
  97908. @LCL
  97909. // #37356
  97910. D=M
  97911. // #37357
  97912. @1
  97913. // #37358
  97914. A=D+A
  97915. // #37359
  97916. D=M
  97917. //^^ push_d_to_stack
  97918. // #37360
  97919. @SP
  97920. // #37361
  97921. A=M
  97922. // #37362
  97923. M=D
  97924. // #37363
  97925. @SP
  97926. // #37364
  97927. M=M+1
  97928. //vv push_d_to_stack
  97929. //vv push_from_ram(LCL, 1)
  97930. //
  97931. //// push constant 0
  97932. //^^ push_constant(0)
  97933. // #37365
  97934. @0
  97935. // #37366
  97936. D=A
  97937. //^^ push_d_to_stack
  97938. // #37367
  97939. @SP
  97940. // #37368
  97941. A=M
  97942. // #37369
  97943. M=D
  97944. // #37370
  97945. @SP
  97946. // #37371
  97947. M=M+1
  97948. //vv push_d_to_stack
  97949. //vv push_constant(0)
  97950. //
  97951. //// gt
  97952. //^^ arith_cmp_op(JGT)
  97953. //^^ pop_stack_to_d
  97954. // #37372
  97955. @SP
  97956. // #37373
  97957. M=M-1
  97958. // #37374
  97959. A=M
  97960. // #37375
  97961. D=M
  97962. //vv pop_stack_to_d
  97963. //^^ arith_d_with_stack_top(D-M)
  97964. // #37376
  97965. @R13
  97966. // #37377
  97967. M=D
  97968. //^^ pop_stack_to_d
  97969. // #37378
  97970. @SP
  97971. // #37379
  97972. M=M-1
  97973. // #37380
  97974. A=M
  97975. // #37381
  97976. D=M
  97977. //vv pop_stack_to_d
  97978. // #37382
  97979. @R13
  97980. // #37383
  97981. D=D-M
  97982. // #37384
  97983. @R13
  97984. // #37385
  97985. M=0
  97986. //vv arith_d_with_stack_top(D-M)
  97987. // #37386
  97988. @PUT_TRUE_394
  97989. // #37387
  97990. D;JGT
  97991. // #37388
  97992. @R13
  97993. // #37389
  97994. M=0
  97995. // #37390
  97996. @CONT_394
  97997. // #37391
  97998. 0;JMP
  97999. (PUT_TRUE_394)
  98000. // #37392
  98001. @R13
  98002. // #37393
  98003. M=-1
  98004. (CONT_394)
  98005. // #37394
  98006. @R13
  98007. // #37395
  98008. D=M
  98009. // #37396
  98010. @R13
  98011. // #37397
  98012. M=0
  98013. //^^ push_d_to_stack
  98014. // #37398
  98015. @SP
  98016. // #37399
  98017. A=M
  98018. // #37400
  98019. M=D
  98020. // #37401
  98021. @SP
  98022. // #37402
  98023. M=M+1
  98024. //vv push_d_to_stack
  98025. //vv arith_cmp_op(JGT)
  98026. //
  98027. //// not
  98028. //^^ arith_unary_op(!)
  98029. //^^ pop_stack_to_d
  98030. // #37403
  98031. @SP
  98032. // #37404
  98033. M=M-1
  98034. // #37405
  98035. A=M
  98036. // #37406
  98037. D=M
  98038. //vv pop_stack_to_d
  98039. // #37407
  98040. D=!D
  98041. //^^ push_d_to_stack
  98042. // #37408
  98043. @SP
  98044. // #37409
  98045. A=M
  98046. // #37410
  98047. M=D
  98048. // #37411
  98049. @SP
  98050. // #37412
  98051. M=M+1
  98052. //vv push_d_to_stack
  98053. //vv arith_unary_op(!)
  98054. //
  98055. //// if-goto WHILE_END0
  98056. //^^ pop_stack_to_d
  98057. // #37413
  98058. @SP
  98059. // #37414
  98060. M=M-1
  98061. // #37415
  98062. A=M
  98063. // #37416
  98064. D=M
  98065. //vv pop_stack_to_d
  98066. // #37417
  98067. @String.setInt$WHILE_END0
  98068. // #37418
  98069. D;JNE
  98070. //
  98071. //// push argument 1
  98072. //^^ push_from_ram(ARG, 1)
  98073. // #37419
  98074. @ARG
  98075. // #37420
  98076. D=M
  98077. // #37421
  98078. @1
  98079. // #37422
  98080. A=D+A
  98081. // #37423
  98082. D=M
  98083. //^^ push_d_to_stack
  98084. // #37424
  98085. @SP
  98086. // #37425
  98087. A=M
  98088. // #37426
  98089. M=D
  98090. // #37427
  98091. @SP
  98092. // #37428
  98093. M=M+1
  98094. //vv push_d_to_stack
  98095. //vv push_from_ram(ARG, 1)
  98096. //
  98097. //// push constant 10
  98098. //^^ push_constant(10)
  98099. // #37429
  98100. @10
  98101. // #37430
  98102. D=A
  98103. //^^ push_d_to_stack
  98104. // #37431
  98105. @SP
  98106. // #37432
  98107. A=M
  98108. // #37433
  98109. M=D
  98110. // #37434
  98111. @SP
  98112. // #37435
  98113. M=M+1
  98114. //vv push_d_to_stack
  98115. //vv push_constant(10)
  98116. //
  98117. //// call Math.divide 2
  98118. //^^ push_constant(RET_ADDR_395)
  98119. // #37436
  98120. @RET_ADDR_395
  98121. // #37437
  98122. D=A
  98123. //^^ push_d_to_stack
  98124. // #37438
  98125. @SP
  98126. // #37439
  98127. A=M
  98128. // #37440
  98129. M=D
  98130. // #37441
  98131. @SP
  98132. // #37442
  98133. M=M+1
  98134. //vv push_d_to_stack
  98135. //vv push_constant(RET_ADDR_395)
  98136. //push return-address
  98137. // #37443
  98138. @LCL
  98139. // #37444
  98140. D=M
  98141. //^^ push_d_to_stack
  98142. // #37445
  98143. @SP
  98144. // #37446
  98145. A=M
  98146. // #37447
  98147. M=D
  98148. // #37448
  98149. @SP
  98150. // #37449
  98151. M=M+1
  98152. //vv push_d_to_stack
  98153. //push LCL
  98154. // #37450
  98155. @ARG
  98156. // #37451
  98157. D=M
  98158. //^^ push_d_to_stack
  98159. // #37452
  98160. @SP
  98161. // #37453
  98162. A=M
  98163. // #37454
  98164. M=D
  98165. // #37455
  98166. @SP
  98167. // #37456
  98168. M=M+1
  98169. //vv push_d_to_stack
  98170. //push ARG
  98171. // #37457
  98172. @THIS
  98173. // #37458
  98174. D=M
  98175. //^^ push_d_to_stack
  98176. // #37459
  98177. @SP
  98178. // #37460
  98179. A=M
  98180. // #37461
  98181. M=D
  98182. // #37462
  98183. @SP
  98184. // #37463
  98185. M=M+1
  98186. //vv push_d_to_stack
  98187. //push THIS
  98188. // #37464
  98189. @THAT
  98190. // #37465
  98191. D=M
  98192. //^^ push_d_to_stack
  98193. // #37466
  98194. @SP
  98195. // #37467
  98196. A=M
  98197. // #37468
  98198. M=D
  98199. // #37469
  98200. @SP
  98201. // #37470
  98202. M=M+1
  98203. //vv push_d_to_stack
  98204. //push THAT
  98205. // #37471
  98206. @SP
  98207. // #37472
  98208. D=M
  98209. // #37473
  98210. @ARG
  98211. // #37474
  98212. M=D
  98213. // #37475
  98214. @7
  98215. // #37476
  98216. D=A
  98217. // #37477
  98218. @ARG
  98219. // #37478
  98220. M=M-D // ARG = SP - args - 5
  98221. // #37479
  98222. @SP
  98223. // #37480
  98224. D=M
  98225. // #37481
  98226. @LCL
  98227. // #37482
  98228. M=D // LCL = SP
  98229. // #37483
  98230. @Math.divide
  98231. // #37484
  98232. 0;JMP
  98233. (RET_ADDR_395)
  98234. //
  98235. //// pop local 1
  98236. //^^ pop_to_ram(LCL, 1)
  98237. // #37485
  98238. @LCL
  98239. // #37486
  98240. D=M
  98241. // #37487
  98242. @1
  98243. // #37488
  98244. D=D+A
  98245. // #37489
  98246. @R13
  98247. // #37490
  98248. M=D
  98249. //^^ pop_stack_to_d
  98250. // #37491
  98251. @SP
  98252. // #37492
  98253. M=M-1
  98254. // #37493
  98255. A=M
  98256. // #37494
  98257. D=M
  98258. //vv pop_stack_to_d
  98259. // #37495
  98260. @R13
  98261. // #37496
  98262. A=M
  98263. // #37497
  98264. M=D
  98265. // #37498
  98266. @R13
  98267. // #37499
  98268. M=0
  98269. //vv pop_to_ram(LCL, 1)
  98270. //
  98271. //// push local 0
  98272. //^^ push_from_ram(LCL, 0)
  98273. // #37500
  98274. @LCL
  98275. // #37501
  98276. D=M
  98277. // #37502
  98278. @0
  98279. // #37503
  98280. A=D+A
  98281. // #37504
  98282. D=M
  98283. //^^ push_d_to_stack
  98284. // #37505
  98285. @SP
  98286. // #37506
  98287. A=M
  98288. // #37507
  98289. M=D
  98290. // #37508
  98291. @SP
  98292. // #37509
  98293. M=M+1
  98294. //vv push_d_to_stack
  98295. //vv push_from_ram(LCL, 0)
  98296. //
  98297. //// push local 2
  98298. //^^ push_from_ram(LCL, 2)
  98299. // #37510
  98300. @LCL
  98301. // #37511
  98302. D=M
  98303. // #37512
  98304. @2
  98305. // #37513
  98306. A=D+A
  98307. // #37514
  98308. D=M
  98309. //^^ push_d_to_stack
  98310. // #37515
  98311. @SP
  98312. // #37516
  98313. A=M
  98314. // #37517
  98315. M=D
  98316. // #37518
  98317. @SP
  98318. // #37519
  98319. M=M+1
  98320. //vv push_d_to_stack
  98321. //vv push_from_ram(LCL, 2)
  98322. //
  98323. //// add
  98324. //^^ arith_binary_op(+)
  98325. //^^ pop_stack_to_d
  98326. // #37520
  98327. @SP
  98328. // #37521
  98329. M=M-1
  98330. // #37522
  98331. A=M
  98332. // #37523
  98333. D=M
  98334. //vv pop_stack_to_d
  98335. //^^ arith_d_with_stack_top(D+M)
  98336. // #37524
  98337. @R13
  98338. // #37525
  98339. M=D
  98340. //^^ pop_stack_to_d
  98341. // #37526
  98342. @SP
  98343. // #37527
  98344. M=M-1
  98345. // #37528
  98346. A=M
  98347. // #37529
  98348. D=M
  98349. //vv pop_stack_to_d
  98350. // #37530
  98351. @R13
  98352. // #37531
  98353. D=D+M
  98354. // #37532
  98355. @R13
  98356. // #37533
  98357. M=0
  98358. //vv arith_d_with_stack_top(D+M)
  98359. //^^ push_d_to_stack
  98360. // #37534
  98361. @SP
  98362. // #37535
  98363. A=M
  98364. // #37536
  98365. M=D
  98366. // #37537
  98367. @SP
  98368. // #37538
  98369. M=M+1
  98370. //vv push_d_to_stack
  98371. //vv arith_binary_op(+)
  98372. //
  98373. //// push constant 48
  98374. //^^ push_constant(48)
  98375. // #37539
  98376. @48
  98377. // #37540
  98378. D=A
  98379. //^^ push_d_to_stack
  98380. // #37541
  98381. @SP
  98382. // #37542
  98383. A=M
  98384. // #37543
  98385. M=D
  98386. // #37544
  98387. @SP
  98388. // #37545
  98389. M=M+1
  98390. //vv push_d_to_stack
  98391. //vv push_constant(48)
  98392. //
  98393. //// push argument 1
  98394. //^^ push_from_ram(ARG, 1)
  98395. // #37546
  98396. @ARG
  98397. // #37547
  98398. D=M
  98399. // #37548
  98400. @1
  98401. // #37549
  98402. A=D+A
  98403. // #37550
  98404. D=M
  98405. //^^ push_d_to_stack
  98406. // #37551
  98407. @SP
  98408. // #37552
  98409. A=M
  98410. // #37553
  98411. M=D
  98412. // #37554
  98413. @SP
  98414. // #37555
  98415. M=M+1
  98416. //vv push_d_to_stack
  98417. //vv push_from_ram(ARG, 1)
  98418. //
  98419. //// push local 1
  98420. //^^ push_from_ram(LCL, 1)
  98421. // #37556
  98422. @LCL
  98423. // #37557
  98424. D=M
  98425. // #37558
  98426. @1
  98427. // #37559
  98428. A=D+A
  98429. // #37560
  98430. D=M
  98431. //^^ push_d_to_stack
  98432. // #37561
  98433. @SP
  98434. // #37562
  98435. A=M
  98436. // #37563
  98437. M=D
  98438. // #37564
  98439. @SP
  98440. // #37565
  98441. M=M+1
  98442. //vv push_d_to_stack
  98443. //vv push_from_ram(LCL, 1)
  98444. //
  98445. //// push constant 10
  98446. //^^ push_constant(10)
  98447. // #37566
  98448. @10
  98449. // #37567
  98450. D=A
  98451. //^^ push_d_to_stack
  98452. // #37568
  98453. @SP
  98454. // #37569
  98455. A=M
  98456. // #37570
  98457. M=D
  98458. // #37571
  98459. @SP
  98460. // #37572
  98461. M=M+1
  98462. //vv push_d_to_stack
  98463. //vv push_constant(10)
  98464. //
  98465. //// call Math.multiply 2
  98466. //^^ push_constant(RET_ADDR_396)
  98467. // #37573
  98468. @RET_ADDR_396
  98469. // #37574
  98470. D=A
  98471. //^^ push_d_to_stack
  98472. // #37575
  98473. @SP
  98474. // #37576
  98475. A=M
  98476. // #37577
  98477. M=D
  98478. // #37578
  98479. @SP
  98480. // #37579
  98481. M=M+1
  98482. //vv push_d_to_stack
  98483. //vv push_constant(RET_ADDR_396)
  98484. //push return-address
  98485. // #37580
  98486. @LCL
  98487. // #37581
  98488. D=M
  98489. //^^ push_d_to_stack
  98490. // #37582
  98491. @SP
  98492. // #37583
  98493. A=M
  98494. // #37584
  98495. M=D
  98496. // #37585
  98497. @SP
  98498. // #37586
  98499. M=M+1
  98500. //vv push_d_to_stack
  98501. //push LCL
  98502. // #37587
  98503. @ARG
  98504. // #37588
  98505. D=M
  98506. //^^ push_d_to_stack
  98507. // #37589
  98508. @SP
  98509. // #37590
  98510. A=M
  98511. // #37591
  98512. M=D
  98513. // #37592
  98514. @SP
  98515. // #37593
  98516. M=M+1
  98517. //vv push_d_to_stack
  98518. //push ARG
  98519. // #37594
  98520. @THIS
  98521. // #37595
  98522. D=M
  98523. //^^ push_d_to_stack
  98524. // #37596
  98525. @SP
  98526. // #37597
  98527. A=M
  98528. // #37598
  98529. M=D
  98530. // #37599
  98531. @SP
  98532. // #37600
  98533. M=M+1
  98534. //vv push_d_to_stack
  98535. //push THIS
  98536. // #37601
  98537. @THAT
  98538. // #37602
  98539. D=M
  98540. //^^ push_d_to_stack
  98541. // #37603
  98542. @SP
  98543. // #37604
  98544. A=M
  98545. // #37605
  98546. M=D
  98547. // #37606
  98548. @SP
  98549. // #37607
  98550. M=M+1
  98551. //vv push_d_to_stack
  98552. //push THAT
  98553. // #37608
  98554. @SP
  98555. // #37609
  98556. D=M
  98557. // #37610
  98558. @ARG
  98559. // #37611
  98560. M=D
  98561. // #37612
  98562. @7
  98563. // #37613
  98564. D=A
  98565. // #37614
  98566. @ARG
  98567. // #37615
  98568. M=M-D // ARG = SP - args - 5
  98569. // #37616
  98570. @SP
  98571. // #37617
  98572. D=M
  98573. // #37618
  98574. @LCL
  98575. // #37619
  98576. M=D // LCL = SP
  98577. // #37620
  98578. @Math.multiply
  98579. // #37621
  98580. 0;JMP
  98581. (RET_ADDR_396)
  98582. //
  98583. //// sub
  98584. //^^ arith_binary_op(-)
  98585. //^^ pop_stack_to_d
  98586. // #37622
  98587. @SP
  98588. // #37623
  98589. M=M-1
  98590. // #37624
  98591. A=M
  98592. // #37625
  98593. D=M
  98594. //vv pop_stack_to_d
  98595. //^^ arith_d_with_stack_top(D-M)
  98596. // #37626
  98597. @R13
  98598. // #37627
  98599. M=D
  98600. //^^ pop_stack_to_d
  98601. // #37628
  98602. @SP
  98603. // #37629
  98604. M=M-1
  98605. // #37630
  98606. A=M
  98607. // #37631
  98608. D=M
  98609. //vv pop_stack_to_d
  98610. // #37632
  98611. @R13
  98612. // #37633
  98613. D=D-M
  98614. // #37634
  98615. @R13
  98616. // #37635
  98617. M=0
  98618. //vv arith_d_with_stack_top(D-M)
  98619. //^^ push_d_to_stack
  98620. // #37636
  98621. @SP
  98622. // #37637
  98623. A=M
  98624. // #37638
  98625. M=D
  98626. // #37639
  98627. @SP
  98628. // #37640
  98629. M=M+1
  98630. //vv push_d_to_stack
  98631. //vv arith_binary_op(-)
  98632. //
  98633. //// add
  98634. //^^ arith_binary_op(+)
  98635. //^^ pop_stack_to_d
  98636. // #37641
  98637. @SP
  98638. // #37642
  98639. M=M-1
  98640. // #37643
  98641. A=M
  98642. // #37644
  98643. D=M
  98644. //vv pop_stack_to_d
  98645. //^^ arith_d_with_stack_top(D+M)
  98646. // #37645
  98647. @R13
  98648. // #37646
  98649. M=D
  98650. //^^ pop_stack_to_d
  98651. // #37647
  98652. @SP
  98653. // #37648
  98654. M=M-1
  98655. // #37649
  98656. A=M
  98657. // #37650
  98658. D=M
  98659. //vv pop_stack_to_d
  98660. // #37651
  98661. @R13
  98662. // #37652
  98663. D=D+M
  98664. // #37653
  98665. @R13
  98666. // #37654
  98667. M=0
  98668. //vv arith_d_with_stack_top(D+M)
  98669. //^^ push_d_to_stack
  98670. // #37655
  98671. @SP
  98672. // #37656
  98673. A=M
  98674. // #37657
  98675. M=D
  98676. // #37658
  98677. @SP
  98678. // #37659
  98679. M=M+1
  98680. //vv push_d_to_stack
  98681. //vv arith_binary_op(+)
  98682. //
  98683. //// pop temp 0
  98684. //^^ pop_to_loc{5)
  98685. //^^ pop_stack_to_d
  98686. // #37660
  98687. @SP
  98688. // #37661
  98689. M=M-1
  98690. // #37662
  98691. A=M
  98692. // #37663
  98693. D=M
  98694. //vv pop_stack_to_d
  98695. // #37664
  98696. @5
  98697. // #37665
  98698. M=D
  98699. //vv pop_to_loc{5)
  98700. //
  98701. //// pop pointer 1
  98702. //^^ pop_to_loc{4)
  98703. //^^ pop_stack_to_d
  98704. // #37666
  98705. @SP
  98706. // #37667
  98707. M=M-1
  98708. // #37668
  98709. A=M
  98710. // #37669
  98711. D=M
  98712. //vv pop_stack_to_d
  98713. // #37670
  98714. @4
  98715. // #37671
  98716. M=D
  98717. //vv pop_to_loc{4)
  98718. //
  98719. //// push temp 0
  98720. //^^ push_from_loc(5)
  98721. // #37672
  98722. @5
  98723. // #37673
  98724. D=M
  98725. //^^ push_d_to_stack
  98726. // #37674
  98727. @SP
  98728. // #37675
  98729. A=M
  98730. // #37676
  98731. M=D
  98732. // #37677
  98733. @SP
  98734. // #37678
  98735. M=M+1
  98736. //vv push_d_to_stack
  98737. //vv push_from_loc(5)
  98738. //
  98739. //// pop that 0
  98740. //^^ pop_to_ram(THAT, 0)
  98741. // #37679
  98742. @THAT
  98743. // #37680
  98744. D=M
  98745. // #37681
  98746. @0
  98747. // #37682
  98748. D=D+A
  98749. // #37683
  98750. @R13
  98751. // #37684
  98752. M=D
  98753. //^^ pop_stack_to_d
  98754. // #37685
  98755. @SP
  98756. // #37686
  98757. M=M-1
  98758. // #37687
  98759. A=M
  98760. // #37688
  98761. D=M
  98762. //vv pop_stack_to_d
  98763. // #37689
  98764. @R13
  98765. // #37690
  98766. A=M
  98767. // #37691
  98768. M=D
  98769. // #37692
  98770. @R13
  98771. // #37693
  98772. M=0
  98773. //vv pop_to_ram(THAT, 0)
  98774. //
  98775. //// push local 0
  98776. //^^ push_from_ram(LCL, 0)
  98777. // #37694
  98778. @LCL
  98779. // #37695
  98780. D=M
  98781. // #37696
  98782. @0
  98783. // #37697
  98784. A=D+A
  98785. // #37698
  98786. D=M
  98787. //^^ push_d_to_stack
  98788. // #37699
  98789. @SP
  98790. // #37700
  98791. A=M
  98792. // #37701
  98793. M=D
  98794. // #37702
  98795. @SP
  98796. // #37703
  98797. M=M+1
  98798. //vv push_d_to_stack
  98799. //vv push_from_ram(LCL, 0)
  98800. //
  98801. //// push constant 1
  98802. //^^ push_constant(1)
  98803. // #37704
  98804. @1
  98805. // #37705
  98806. D=A
  98807. //^^ push_d_to_stack
  98808. // #37706
  98809. @SP
  98810. // #37707
  98811. A=M
  98812. // #37708
  98813. M=D
  98814. // #37709
  98815. @SP
  98816. // #37710
  98817. M=M+1
  98818. //vv push_d_to_stack
  98819. //vv push_constant(1)
  98820. //
  98821. //// add
  98822. //^^ arith_binary_op(+)
  98823. //^^ pop_stack_to_d
  98824. // #37711
  98825. @SP
  98826. // #37712
  98827. M=M-1
  98828. // #37713
  98829. A=M
  98830. // #37714
  98831. D=M
  98832. //vv pop_stack_to_d
  98833. //^^ arith_d_with_stack_top(D+M)
  98834. // #37715
  98835. @R13
  98836. // #37716
  98837. M=D
  98838. //^^ pop_stack_to_d
  98839. // #37717
  98840. @SP
  98841. // #37718
  98842. M=M-1
  98843. // #37719
  98844. A=M
  98845. // #37720
  98846. D=M
  98847. //vv pop_stack_to_d
  98848. // #37721
  98849. @R13
  98850. // #37722
  98851. D=D+M
  98852. // #37723
  98853. @R13
  98854. // #37724
  98855. M=0
  98856. //vv arith_d_with_stack_top(D+M)
  98857. //^^ push_d_to_stack
  98858. // #37725
  98859. @SP
  98860. // #37726
  98861. A=M
  98862. // #37727
  98863. M=D
  98864. // #37728
  98865. @SP
  98866. // #37729
  98867. M=M+1
  98868. //vv push_d_to_stack
  98869. //vv arith_binary_op(+)
  98870. //
  98871. //// pop local 0
  98872. //^^ pop_to_ram(LCL, 0)
  98873. // #37730
  98874. @LCL
  98875. // #37731
  98876. D=M
  98877. // #37732
  98878. @0
  98879. // #37733
  98880. D=D+A
  98881. // #37734
  98882. @R13
  98883. // #37735
  98884. M=D
  98885. //^^ pop_stack_to_d
  98886. // #37736
  98887. @SP
  98888. // #37737
  98889. M=M-1
  98890. // #37738
  98891. A=M
  98892. // #37739
  98893. D=M
  98894. //vv pop_stack_to_d
  98895. // #37740
  98896. @R13
  98897. // #37741
  98898. A=M
  98899. // #37742
  98900. M=D
  98901. // #37743
  98902. @R13
  98903. // #37744
  98904. M=0
  98905. //vv pop_to_ram(LCL, 0)
  98906. //
  98907. //// push local 1
  98908. //^^ push_from_ram(LCL, 1)
  98909. // #37745
  98910. @LCL
  98911. // #37746
  98912. D=M
  98913. // #37747
  98914. @1
  98915. // #37748
  98916. A=D+A
  98917. // #37749
  98918. D=M
  98919. //^^ push_d_to_stack
  98920. // #37750
  98921. @SP
  98922. // #37751
  98923. A=M
  98924. // #37752
  98925. M=D
  98926. // #37753
  98927. @SP
  98928. // #37754
  98929. M=M+1
  98930. //vv push_d_to_stack
  98931. //vv push_from_ram(LCL, 1)
  98932. //
  98933. //// pop argument 1
  98934. //^^ pop_to_ram(ARG, 1)
  98935. // #37755
  98936. @ARG
  98937. // #37756
  98938. D=M
  98939. // #37757
  98940. @1
  98941. // #37758
  98942. D=D+A
  98943. // #37759
  98944. @R13
  98945. // #37760
  98946. M=D
  98947. //^^ pop_stack_to_d
  98948. // #37761
  98949. @SP
  98950. // #37762
  98951. M=M-1
  98952. // #37763
  98953. A=M
  98954. // #37764
  98955. D=M
  98956. //vv pop_stack_to_d
  98957. // #37765
  98958. @R13
  98959. // #37766
  98960. A=M
  98961. // #37767
  98962. M=D
  98963. // #37768
  98964. @R13
  98965. // #37769
  98966. M=0
  98967. //vv pop_to_ram(ARG, 1)
  98968. //
  98969. //// goto WHILE_EXP0
  98970. // #37770
  98971. @String.setInt$WHILE_EXP0
  98972. // #37771
  98973. 0;JMP
  98974. //
  98975. //// label WHILE_END0
  98976. (String.setInt$WHILE_END0)
  98977. //
  98978. //// push local 3
  98979. //^^ push_from_ram(LCL, 3)
  98980. // #37772
  98981. @LCL
  98982. // #37773
  98983. D=M
  98984. // #37774
  98985. @3
  98986. // #37775
  98987. A=D+A
  98988. // #37776
  98989. D=M
  98990. //^^ push_d_to_stack
  98991. // #37777
  98992. @SP
  98993. // #37778
  98994. A=M
  98995. // #37779
  98996. M=D
  98997. // #37780
  98998. @SP
  98999. // #37781
  99000. M=M+1
  99001. //vv push_d_to_stack
  99002. //vv push_from_ram(LCL, 3)
  99003. //
  99004. //// if-goto IF_TRUE2
  99005. //^^ pop_stack_to_d
  99006. // #37782
  99007. @SP
  99008. // #37783
  99009. M=M-1
  99010. // #37784
  99011. A=M
  99012. // #37785
  99013. D=M
  99014. //vv pop_stack_to_d
  99015. // #37786
  99016. @String.setInt$IF_TRUE2
  99017. // #37787
  99018. D;JNE
  99019. //
  99020. //// goto IF_FALSE2
  99021. // #37788
  99022. @String.setInt$IF_FALSE2
  99023. // #37789
  99024. 0;JMP
  99025. //
  99026. //// label IF_TRUE2
  99027. (String.setInt$IF_TRUE2)
  99028. //
  99029. //// push local 0
  99030. //^^ push_from_ram(LCL, 0)
  99031. // #37790
  99032. @LCL
  99033. // #37791
  99034. D=M
  99035. // #37792
  99036. @0
  99037. // #37793
  99038. A=D+A
  99039. // #37794
  99040. D=M
  99041. //^^ push_d_to_stack
  99042. // #37795
  99043. @SP
  99044. // #37796
  99045. A=M
  99046. // #37797
  99047. M=D
  99048. // #37798
  99049. @SP
  99050. // #37799
  99051. M=M+1
  99052. //vv push_d_to_stack
  99053. //vv push_from_ram(LCL, 0)
  99054. //
  99055. //// push local 2
  99056. //^^ push_from_ram(LCL, 2)
  99057. // #37800
  99058. @LCL
  99059. // #37801
  99060. D=M
  99061. // #37802
  99062. @2
  99063. // #37803
  99064. A=D+A
  99065. // #37804
  99066. D=M
  99067. //^^ push_d_to_stack
  99068. // #37805
  99069. @SP
  99070. // #37806
  99071. A=M
  99072. // #37807
  99073. M=D
  99074. // #37808
  99075. @SP
  99076. // #37809
  99077. M=M+1
  99078. //vv push_d_to_stack
  99079. //vv push_from_ram(LCL, 2)
  99080. //
  99081. //// add
  99082. //^^ arith_binary_op(+)
  99083. //^^ pop_stack_to_d
  99084. // #37810
  99085. @SP
  99086. // #37811
  99087. M=M-1
  99088. // #37812
  99089. A=M
  99090. // #37813
  99091. D=M
  99092. //vv pop_stack_to_d
  99093. //^^ arith_d_with_stack_top(D+M)
  99094. // #37814
  99095. @R13
  99096. // #37815
  99097. M=D
  99098. //^^ pop_stack_to_d
  99099. // #37816
  99100. @SP
  99101. // #37817
  99102. M=M-1
  99103. // #37818
  99104. A=M
  99105. // #37819
  99106. D=M
  99107. //vv pop_stack_to_d
  99108. // #37820
  99109. @R13
  99110. // #37821
  99111. D=D+M
  99112. // #37822
  99113. @R13
  99114. // #37823
  99115. M=0
  99116. //vv arith_d_with_stack_top(D+M)
  99117. //^^ push_d_to_stack
  99118. // #37824
  99119. @SP
  99120. // #37825
  99121. A=M
  99122. // #37826
  99123. M=D
  99124. // #37827
  99125. @SP
  99126. // #37828
  99127. M=M+1
  99128. //vv push_d_to_stack
  99129. //vv arith_binary_op(+)
  99130. //
  99131. //// push constant 45
  99132. //^^ push_constant(45)
  99133. // #37829
  99134. @45
  99135. // #37830
  99136. D=A
  99137. //^^ push_d_to_stack
  99138. // #37831
  99139. @SP
  99140. // #37832
  99141. A=M
  99142. // #37833
  99143. M=D
  99144. // #37834
  99145. @SP
  99146. // #37835
  99147. M=M+1
  99148. //vv push_d_to_stack
  99149. //vv push_constant(45)
  99150. //
  99151. //// pop temp 0
  99152. //^^ pop_to_loc{5)
  99153. //^^ pop_stack_to_d
  99154. // #37836
  99155. @SP
  99156. // #37837
  99157. M=M-1
  99158. // #37838
  99159. A=M
  99160. // #37839
  99161. D=M
  99162. //vv pop_stack_to_d
  99163. // #37840
  99164. @5
  99165. // #37841
  99166. M=D
  99167. //vv pop_to_loc{5)
  99168. //
  99169. //// pop pointer 1
  99170. //^^ pop_to_loc{4)
  99171. //^^ pop_stack_to_d
  99172. // #37842
  99173. @SP
  99174. // #37843
  99175. M=M-1
  99176. // #37844
  99177. A=M
  99178. // #37845
  99179. D=M
  99180. //vv pop_stack_to_d
  99181. // #37846
  99182. @4
  99183. // #37847
  99184. M=D
  99185. //vv pop_to_loc{4)
  99186. //
  99187. //// push temp 0
  99188. //^^ push_from_loc(5)
  99189. // #37848
  99190. @5
  99191. // #37849
  99192. D=M
  99193. //^^ push_d_to_stack
  99194. // #37850
  99195. @SP
  99196. // #37851
  99197. A=M
  99198. // #37852
  99199. M=D
  99200. // #37853
  99201. @SP
  99202. // #37854
  99203. M=M+1
  99204. //vv push_d_to_stack
  99205. //vv push_from_loc(5)
  99206. //
  99207. //// pop that 0
  99208. //^^ pop_to_ram(THAT, 0)
  99209. // #37855
  99210. @THAT
  99211. // #37856
  99212. D=M
  99213. // #37857
  99214. @0
  99215. // #37858
  99216. D=D+A
  99217. // #37859
  99218. @R13
  99219. // #37860
  99220. M=D
  99221. //^^ pop_stack_to_d
  99222. // #37861
  99223. @SP
  99224. // #37862
  99225. M=M-1
  99226. // #37863
  99227. A=M
  99228. // #37864
  99229. D=M
  99230. //vv pop_stack_to_d
  99231. // #37865
  99232. @R13
  99233. // #37866
  99234. A=M
  99235. // #37867
  99236. M=D
  99237. // #37868
  99238. @R13
  99239. // #37869
  99240. M=0
  99241. //vv pop_to_ram(THAT, 0)
  99242. //
  99243. //// push local 0
  99244. //^^ push_from_ram(LCL, 0)
  99245. // #37870
  99246. @LCL
  99247. // #37871
  99248. D=M
  99249. // #37872
  99250. @0
  99251. // #37873
  99252. A=D+A
  99253. // #37874
  99254. D=M
  99255. //^^ push_d_to_stack
  99256. // #37875
  99257. @SP
  99258. // #37876
  99259. A=M
  99260. // #37877
  99261. M=D
  99262. // #37878
  99263. @SP
  99264. // #37879
  99265. M=M+1
  99266. //vv push_d_to_stack
  99267. //vv push_from_ram(LCL, 0)
  99268. //
  99269. //// push constant 1
  99270. //^^ push_constant(1)
  99271. // #37880
  99272. @1
  99273. // #37881
  99274. D=A
  99275. //^^ push_d_to_stack
  99276. // #37882
  99277. @SP
  99278. // #37883
  99279. A=M
  99280. // #37884
  99281. M=D
  99282. // #37885
  99283. @SP
  99284. // #37886
  99285. M=M+1
  99286. //vv push_d_to_stack
  99287. //vv push_constant(1)
  99288. //
  99289. //// add
  99290. //^^ arith_binary_op(+)
  99291. //^^ pop_stack_to_d
  99292. // #37887
  99293. @SP
  99294. // #37888
  99295. M=M-1
  99296. // #37889
  99297. A=M
  99298. // #37890
  99299. D=M
  99300. //vv pop_stack_to_d
  99301. //^^ arith_d_with_stack_top(D+M)
  99302. // #37891
  99303. @R13
  99304. // #37892
  99305. M=D
  99306. //^^ pop_stack_to_d
  99307. // #37893
  99308. @SP
  99309. // #37894
  99310. M=M-1
  99311. // #37895
  99312. A=M
  99313. // #37896
  99314. D=M
  99315. //vv pop_stack_to_d
  99316. // #37897
  99317. @R13
  99318. // #37898
  99319. D=D+M
  99320. // #37899
  99321. @R13
  99322. // #37900
  99323. M=0
  99324. //vv arith_d_with_stack_top(D+M)
  99325. //^^ push_d_to_stack
  99326. // #37901
  99327. @SP
  99328. // #37902
  99329. A=M
  99330. // #37903
  99331. M=D
  99332. // #37904
  99333. @SP
  99334. // #37905
  99335. M=M+1
  99336. //vv push_d_to_stack
  99337. //vv arith_binary_op(+)
  99338. //
  99339. //// pop local 0
  99340. //^^ pop_to_ram(LCL, 0)
  99341. // #37906
  99342. @LCL
  99343. // #37907
  99344. D=M
  99345. // #37908
  99346. @0
  99347. // #37909
  99348. D=D+A
  99349. // #37910
  99350. @R13
  99351. // #37911
  99352. M=D
  99353. //^^ pop_stack_to_d
  99354. // #37912
  99355. @SP
  99356. // #37913
  99357. M=M-1
  99358. // #37914
  99359. A=M
  99360. // #37915
  99361. D=M
  99362. //vv pop_stack_to_d
  99363. // #37916
  99364. @R13
  99365. // #37917
  99366. A=M
  99367. // #37918
  99368. M=D
  99369. // #37919
  99370. @R13
  99371. // #37920
  99372. M=0
  99373. //vv pop_to_ram(LCL, 0)
  99374. //
  99375. //// label IF_FALSE2
  99376. (String.setInt$IF_FALSE2)
  99377. //
  99378. //// push this 0
  99379. //^^ push_from_ram(THIS, 0)
  99380. // #37921
  99381. @THIS
  99382. // #37922
  99383. D=M
  99384. // #37923
  99385. @0
  99386. // #37924
  99387. A=D+A
  99388. // #37925
  99389. D=M
  99390. //^^ push_d_to_stack
  99391. // #37926
  99392. @SP
  99393. // #37927
  99394. A=M
  99395. // #37928
  99396. M=D
  99397. // #37929
  99398. @SP
  99399. // #37930
  99400. M=M+1
  99401. //vv push_d_to_stack
  99402. //vv push_from_ram(THIS, 0)
  99403. //
  99404. //// push local 0
  99405. //^^ push_from_ram(LCL, 0)
  99406. // #37931
  99407. @LCL
  99408. // #37932
  99409. D=M
  99410. // #37933
  99411. @0
  99412. // #37934
  99413. A=D+A
  99414. // #37935
  99415. D=M
  99416. //^^ push_d_to_stack
  99417. // #37936
  99418. @SP
  99419. // #37937
  99420. A=M
  99421. // #37938
  99422. M=D
  99423. // #37939
  99424. @SP
  99425. // #37940
  99426. M=M+1
  99427. //vv push_d_to_stack
  99428. //vv push_from_ram(LCL, 0)
  99429. //
  99430. //// lt
  99431. //^^ arith_cmp_op(JLT)
  99432. //^^ pop_stack_to_d
  99433. // #37941
  99434. @SP
  99435. // #37942
  99436. M=M-1
  99437. // #37943
  99438. A=M
  99439. // #37944
  99440. D=M
  99441. //vv pop_stack_to_d
  99442. //^^ arith_d_with_stack_top(D-M)
  99443. // #37945
  99444. @R13
  99445. // #37946
  99446. M=D
  99447. //^^ pop_stack_to_d
  99448. // #37947
  99449. @SP
  99450. // #37948
  99451. M=M-1
  99452. // #37949
  99453. A=M
  99454. // #37950
  99455. D=M
  99456. //vv pop_stack_to_d
  99457. // #37951
  99458. @R13
  99459. // #37952
  99460. D=D-M
  99461. // #37953
  99462. @R13
  99463. // #37954
  99464. M=0
  99465. //vv arith_d_with_stack_top(D-M)
  99466. // #37955
  99467. @PUT_TRUE_397
  99468. // #37956
  99469. D;JLT
  99470. // #37957
  99471. @R13
  99472. // #37958
  99473. M=0
  99474. // #37959
  99475. @CONT_397
  99476. // #37960
  99477. 0;JMP
  99478. (PUT_TRUE_397)
  99479. // #37961
  99480. @R13
  99481. // #37962
  99482. M=-1
  99483. (CONT_397)
  99484. // #37963
  99485. @R13
  99486. // #37964
  99487. D=M
  99488. // #37965
  99489. @R13
  99490. // #37966
  99491. M=0
  99492. //^^ push_d_to_stack
  99493. // #37967
  99494. @SP
  99495. // #37968
  99496. A=M
  99497. // #37969
  99498. M=D
  99499. // #37970
  99500. @SP
  99501. // #37971
  99502. M=M+1
  99503. //vv push_d_to_stack
  99504. //vv arith_cmp_op(JLT)
  99505. //
  99506. //// if-goto IF_TRUE3
  99507. //^^ pop_stack_to_d
  99508. // #37972
  99509. @SP
  99510. // #37973
  99511. M=M-1
  99512. // #37974
  99513. A=M
  99514. // #37975
  99515. D=M
  99516. //vv pop_stack_to_d
  99517. // #37976
  99518. @String.setInt$IF_TRUE3
  99519. // #37977
  99520. D;JNE
  99521. //
  99522. //// goto IF_FALSE3
  99523. // #37978
  99524. @String.setInt$IF_FALSE3
  99525. // #37979
  99526. 0;JMP
  99527. //
  99528. //// label IF_TRUE3
  99529. (String.setInt$IF_TRUE3)
  99530. //
  99531. //// push constant 19
  99532. //^^ push_constant(19)
  99533. // #37980
  99534. @19
  99535. // #37981
  99536. D=A
  99537. //^^ push_d_to_stack
  99538. // #37982
  99539. @SP
  99540. // #37983
  99541. A=M
  99542. // #37984
  99543. M=D
  99544. // #37985
  99545. @SP
  99546. // #37986
  99547. M=M+1
  99548. //vv push_d_to_stack
  99549. //vv push_constant(19)
  99550. //
  99551. //// call Sys.error 1
  99552. //^^ push_constant(RET_ADDR_398)
  99553. // #37987
  99554. @RET_ADDR_398
  99555. // #37988
  99556. D=A
  99557. //^^ push_d_to_stack
  99558. // #37989
  99559. @SP
  99560. // #37990
  99561. A=M
  99562. // #37991
  99563. M=D
  99564. // #37992
  99565. @SP
  99566. // #37993
  99567. M=M+1
  99568. //vv push_d_to_stack
  99569. //vv push_constant(RET_ADDR_398)
  99570. //push return-address
  99571. // #37994
  99572. @LCL
  99573. // #37995
  99574. D=M
  99575. //^^ push_d_to_stack
  99576. // #37996
  99577. @SP
  99578. // #37997
  99579. A=M
  99580. // #37998
  99581. M=D
  99582. // #37999
  99583. @SP
  99584. // #38000
  99585. M=M+1
  99586. //vv push_d_to_stack
  99587. //push LCL
  99588. // #38001
  99589. @ARG
  99590. // #38002
  99591. D=M
  99592. //^^ push_d_to_stack
  99593. // #38003
  99594. @SP
  99595. // #38004
  99596. A=M
  99597. // #38005
  99598. M=D
  99599. // #38006
  99600. @SP
  99601. // #38007
  99602. M=M+1
  99603. //vv push_d_to_stack
  99604. //push ARG
  99605. // #38008
  99606. @THIS
  99607. // #38009
  99608. D=M
  99609. //^^ push_d_to_stack
  99610. // #38010
  99611. @SP
  99612. // #38011
  99613. A=M
  99614. // #38012
  99615. M=D
  99616. // #38013
  99617. @SP
  99618. // #38014
  99619. M=M+1
  99620. //vv push_d_to_stack
  99621. //push THIS
  99622. // #38015
  99623. @THAT
  99624. // #38016
  99625. D=M
  99626. //^^ push_d_to_stack
  99627. // #38017
  99628. @SP
  99629. // #38018
  99630. A=M
  99631. // #38019
  99632. M=D
  99633. // #38020
  99634. @SP
  99635. // #38021
  99636. M=M+1
  99637. //vv push_d_to_stack
  99638. //push THAT
  99639. // #38022
  99640. @SP
  99641. // #38023
  99642. D=M
  99643. // #38024
  99644. @ARG
  99645. // #38025
  99646. M=D
  99647. // #38026
  99648. @6
  99649. // #38027
  99650. D=A
  99651. // #38028
  99652. @ARG
  99653. // #38029
  99654. M=M-D // ARG = SP - args - 5
  99655. // #38030
  99656. @SP
  99657. // #38031
  99658. D=M
  99659. // #38032
  99660. @LCL
  99661. // #38033
  99662. M=D // LCL = SP
  99663. // #38034
  99664. @Sys.error
  99665. // #38035
  99666. 0;JMP
  99667. (RET_ADDR_398)
  99668. //
  99669. //// pop temp 0
  99670. //^^ pop_to_loc{5)
  99671. //^^ pop_stack_to_d
  99672. // #38036
  99673. @SP
  99674. // #38037
  99675. M=M-1
  99676. // #38038
  99677. A=M
  99678. // #38039
  99679. D=M
  99680. //vv pop_stack_to_d
  99681. // #38040
  99682. @5
  99683. // #38041
  99684. M=D
  99685. //vv pop_to_loc{5)
  99686. //
  99687. //// label IF_FALSE3
  99688. (String.setInt$IF_FALSE3)
  99689. //
  99690. //// push local 0
  99691. //^^ push_from_ram(LCL, 0)
  99692. // #38042
  99693. @LCL
  99694. // #38043
  99695. D=M
  99696. // #38044
  99697. @0
  99698. // #38045
  99699. A=D+A
  99700. // #38046
  99701. D=M
  99702. //^^ push_d_to_stack
  99703. // #38047
  99704. @SP
  99705. // #38048
  99706. A=M
  99707. // #38049
  99708. M=D
  99709. // #38050
  99710. @SP
  99711. // #38051
  99712. M=M+1
  99713. //vv push_d_to_stack
  99714. //vv push_from_ram(LCL, 0)
  99715. //
  99716. //// push constant 0
  99717. //^^ push_constant(0)
  99718. // #38052
  99719. @0
  99720. // #38053
  99721. D=A
  99722. //^^ push_d_to_stack
  99723. // #38054
  99724. @SP
  99725. // #38055
  99726. A=M
  99727. // #38056
  99728. M=D
  99729. // #38057
  99730. @SP
  99731. // #38058
  99732. M=M+1
  99733. //vv push_d_to_stack
  99734. //vv push_constant(0)
  99735. //
  99736. //// eq
  99737. //^^ arith_cmp_op(JEQ)
  99738. //^^ pop_stack_to_d
  99739. // #38059
  99740. @SP
  99741. // #38060
  99742. M=M-1
  99743. // #38061
  99744. A=M
  99745. // #38062
  99746. D=M
  99747. //vv pop_stack_to_d
  99748. //^^ arith_d_with_stack_top(D-M)
  99749. // #38063
  99750. @R13
  99751. // #38064
  99752. M=D
  99753. //^^ pop_stack_to_d
  99754. // #38065
  99755. @SP
  99756. // #38066
  99757. M=M-1
  99758. // #38067
  99759. A=M
  99760. // #38068
  99761. D=M
  99762. //vv pop_stack_to_d
  99763. // #38069
  99764. @R13
  99765. // #38070
  99766. D=D-M
  99767. // #38071
  99768. @R13
  99769. // #38072
  99770. M=0
  99771. //vv arith_d_with_stack_top(D-M)
  99772. // #38073
  99773. @PUT_TRUE_399
  99774. // #38074
  99775. D;JEQ
  99776. // #38075
  99777. @R13
  99778. // #38076
  99779. M=0
  99780. // #38077
  99781. @CONT_399
  99782. // #38078
  99783. 0;JMP
  99784. (PUT_TRUE_399)
  99785. // #38079
  99786. @R13
  99787. // #38080
  99788. M=-1
  99789. (CONT_399)
  99790. // #38081
  99791. @R13
  99792. // #38082
  99793. D=M
  99794. // #38083
  99795. @R13
  99796. // #38084
  99797. M=0
  99798. //^^ push_d_to_stack
  99799. // #38085
  99800. @SP
  99801. // #38086
  99802. A=M
  99803. // #38087
  99804. M=D
  99805. // #38088
  99806. @SP
  99807. // #38089
  99808. M=M+1
  99809. //vv push_d_to_stack
  99810. //vv arith_cmp_op(JEQ)
  99811. //
  99812. //// if-goto IF_TRUE4
  99813. //^^ pop_stack_to_d
  99814. // #38090
  99815. @SP
  99816. // #38091
  99817. M=M-1
  99818. // #38092
  99819. A=M
  99820. // #38093
  99821. D=M
  99822. //vv pop_stack_to_d
  99823. // #38094
  99824. @String.setInt$IF_TRUE4
  99825. // #38095
  99826. D;JNE
  99827. //
  99828. //// goto IF_FALSE4
  99829. // #38096
  99830. @String.setInt$IF_FALSE4
  99831. // #38097
  99832. 0;JMP
  99833. //
  99834. //// label IF_TRUE4
  99835. (String.setInt$IF_TRUE4)
  99836. //
  99837. //// push constant 0
  99838. //^^ push_constant(0)
  99839. // #38098
  99840. @0
  99841. // #38099
  99842. D=A
  99843. //^^ push_d_to_stack
  99844. // #38100
  99845. @SP
  99846. // #38101
  99847. A=M
  99848. // #38102
  99849. M=D
  99850. // #38103
  99851. @SP
  99852. // #38104
  99853. M=M+1
  99854. //vv push_d_to_stack
  99855. //vv push_constant(0)
  99856. //
  99857. //// push this 1
  99858. //^^ push_from_ram(THIS, 1)
  99859. // #38105
  99860. @THIS
  99861. // #38106
  99862. D=M
  99863. // #38107
  99864. @1
  99865. // #38108
  99866. A=D+A
  99867. // #38109
  99868. D=M
  99869. //^^ push_d_to_stack
  99870. // #38110
  99871. @SP
  99872. // #38111
  99873. A=M
  99874. // #38112
  99875. M=D
  99876. // #38113
  99877. @SP
  99878. // #38114
  99879. M=M+1
  99880. //vv push_d_to_stack
  99881. //vv push_from_ram(THIS, 1)
  99882. //
  99883. //// add
  99884. //^^ arith_binary_op(+)
  99885. //^^ pop_stack_to_d
  99886. // #38115
  99887. @SP
  99888. // #38116
  99889. M=M-1
  99890. // #38117
  99891. A=M
  99892. // #38118
  99893. D=M
  99894. //vv pop_stack_to_d
  99895. //^^ arith_d_with_stack_top(D+M)
  99896. // #38119
  99897. @R13
  99898. // #38120
  99899. M=D
  99900. //^^ pop_stack_to_d
  99901. // #38121
  99902. @SP
  99903. // #38122
  99904. M=M-1
  99905. // #38123
  99906. A=M
  99907. // #38124
  99908. D=M
  99909. //vv pop_stack_to_d
  99910. // #38125
  99911. @R13
  99912. // #38126
  99913. D=D+M
  99914. // #38127
  99915. @R13
  99916. // #38128
  99917. M=0
  99918. //vv arith_d_with_stack_top(D+M)
  99919. //^^ push_d_to_stack
  99920. // #38129
  99921. @SP
  99922. // #38130
  99923. A=M
  99924. // #38131
  99925. M=D
  99926. // #38132
  99927. @SP
  99928. // #38133
  99929. M=M+1
  99930. //vv push_d_to_stack
  99931. //vv arith_binary_op(+)
  99932. //
  99933. //// push constant 48
  99934. //^^ push_constant(48)
  99935. // #38134
  99936. @48
  99937. // #38135
  99938. D=A
  99939. //^^ push_d_to_stack
  99940. // #38136
  99941. @SP
  99942. // #38137
  99943. A=M
  99944. // #38138
  99945. M=D
  99946. // #38139
  99947. @SP
  99948. // #38140
  99949. M=M+1
  99950. //vv push_d_to_stack
  99951. //vv push_constant(48)
  99952. //
  99953. //// pop temp 0
  99954. //^^ pop_to_loc{5)
  99955. //^^ pop_stack_to_d
  99956. // #38141
  99957. @SP
  99958. // #38142
  99959. M=M-1
  99960. // #38143
  99961. A=M
  99962. // #38144
  99963. D=M
  99964. //vv pop_stack_to_d
  99965. // #38145
  99966. @5
  99967. // #38146
  99968. M=D
  99969. //vv pop_to_loc{5)
  99970. //
  99971. //// pop pointer 1
  99972. //^^ pop_to_loc{4)
  99973. //^^ pop_stack_to_d
  99974. // #38147
  99975. @SP
  99976. // #38148
  99977. M=M-1
  99978. // #38149
  99979. A=M
  99980. // #38150
  99981. D=M
  99982. //vv pop_stack_to_d
  99983. // #38151
  99984. @4
  99985. // #38152
  99986. M=D
  99987. //vv pop_to_loc{4)
  99988. //
  99989. //// push temp 0
  99990. //^^ push_from_loc(5)
  99991. // #38153
  99992. @5
  99993. // #38154
  99994. D=M
  99995. //^^ push_d_to_stack
  99996. // #38155
  99997. @SP
  99998. // #38156
  99999. A=M
  100000. // #38157
  100001. M=D
  100002. // #38158
  100003. @SP
  100004. // #38159
  100005. M=M+1
  100006. //vv push_d_to_stack
  100007. //vv push_from_loc(5)
  100008. //
  100009. //// pop that 0
  100010. //^^ pop_to_ram(THAT, 0)
  100011. // #38160
  100012. @THAT
  100013. // #38161
  100014. D=M
  100015. // #38162
  100016. @0
  100017. // #38163
  100018. D=D+A
  100019. // #38164
  100020. @R13
  100021. // #38165
  100022. M=D
  100023. //^^ pop_stack_to_d
  100024. // #38166
  100025. @SP
  100026. // #38167
  100027. M=M-1
  100028. // #38168
  100029. A=M
  100030. // #38169
  100031. D=M
  100032. //vv pop_stack_to_d
  100033. // #38170
  100034. @R13
  100035. // #38171
  100036. A=M
  100037. // #38172
  100038. M=D
  100039. // #38173
  100040. @R13
  100041. // #38174
  100042. M=0
  100043. //vv pop_to_ram(THAT, 0)
  100044. //
  100045. //// push constant 1
  100046. //^^ push_constant(1)
  100047. // #38175
  100048. @1
  100049. // #38176
  100050. D=A
  100051. //^^ push_d_to_stack
  100052. // #38177
  100053. @SP
  100054. // #38178
  100055. A=M
  100056. // #38179
  100057. M=D
  100058. // #38180
  100059. @SP
  100060. // #38181
  100061. M=M+1
  100062. //vv push_d_to_stack
  100063. //vv push_constant(1)
  100064. //
  100065. //// pop this 2
  100066. //^^ pop_to_ram(THIS, 2)
  100067. // #38182
  100068. @THIS
  100069. // #38183
  100070. D=M
  100071. // #38184
  100072. @2
  100073. // #38185
  100074. D=D+A
  100075. // #38186
  100076. @R13
  100077. // #38187
  100078. M=D
  100079. //^^ pop_stack_to_d
  100080. // #38188
  100081. @SP
  100082. // #38189
  100083. M=M-1
  100084. // #38190
  100085. A=M
  100086. // #38191
  100087. D=M
  100088. //vv pop_stack_to_d
  100089. // #38192
  100090. @R13
  100091. // #38193
  100092. A=M
  100093. // #38194
  100094. M=D
  100095. // #38195
  100096. @R13
  100097. // #38196
  100098. M=0
  100099. //vv pop_to_ram(THIS, 2)
  100100. //
  100101. //// goto IF_END4
  100102. // #38197
  100103. @String.setInt$IF_END4
  100104. // #38198
  100105. 0;JMP
  100106. //
  100107. //// label IF_FALSE4
  100108. (String.setInt$IF_FALSE4)
  100109. //
  100110. //// push constant 0
  100111. //^^ push_constant(0)
  100112. // #38199
  100113. @0
  100114. // #38200
  100115. D=A
  100116. //^^ push_d_to_stack
  100117. // #38201
  100118. @SP
  100119. // #38202
  100120. A=M
  100121. // #38203
  100122. M=D
  100123. // #38204
  100124. @SP
  100125. // #38205
  100126. M=M+1
  100127. //vv push_d_to_stack
  100128. //vv push_constant(0)
  100129. //
  100130. //// pop this 2
  100131. //^^ pop_to_ram(THIS, 2)
  100132. // #38206
  100133. @THIS
  100134. // #38207
  100135. D=M
  100136. // #38208
  100137. @2
  100138. // #38209
  100139. D=D+A
  100140. // #38210
  100141. @R13
  100142. // #38211
  100143. M=D
  100144. //^^ pop_stack_to_d
  100145. // #38212
  100146. @SP
  100147. // #38213
  100148. M=M-1
  100149. // #38214
  100150. A=M
  100151. // #38215
  100152. D=M
  100153. //vv pop_stack_to_d
  100154. // #38216
  100155. @R13
  100156. // #38217
  100157. A=M
  100158. // #38218
  100159. M=D
  100160. // #38219
  100161. @R13
  100162. // #38220
  100163. M=0
  100164. //vv pop_to_ram(THIS, 2)
  100165. //
  100166. //// label WHILE_EXP1
  100167. (String.setInt$WHILE_EXP1)
  100168. //
  100169. //// push this 2
  100170. //^^ push_from_ram(THIS, 2)
  100171. // #38221
  100172. @THIS
  100173. // #38222
  100174. D=M
  100175. // #38223
  100176. @2
  100177. // #38224
  100178. A=D+A
  100179. // #38225
  100180. D=M
  100181. //^^ push_d_to_stack
  100182. // #38226
  100183. @SP
  100184. // #38227
  100185. A=M
  100186. // #38228
  100187. M=D
  100188. // #38229
  100189. @SP
  100190. // #38230
  100191. M=M+1
  100192. //vv push_d_to_stack
  100193. //vv push_from_ram(THIS, 2)
  100194. //
  100195. //// push local 0
  100196. //^^ push_from_ram(LCL, 0)
  100197. // #38231
  100198. @LCL
  100199. // #38232
  100200. D=M
  100201. // #38233
  100202. @0
  100203. // #38234
  100204. A=D+A
  100205. // #38235
  100206. D=M
  100207. //^^ push_d_to_stack
  100208. // #38236
  100209. @SP
  100210. // #38237
  100211. A=M
  100212. // #38238
  100213. M=D
  100214. // #38239
  100215. @SP
  100216. // #38240
  100217. M=M+1
  100218. //vv push_d_to_stack
  100219. //vv push_from_ram(LCL, 0)
  100220. //
  100221. //// lt
  100222. //^^ arith_cmp_op(JLT)
  100223. //^^ pop_stack_to_d
  100224. // #38241
  100225. @SP
  100226. // #38242
  100227. M=M-1
  100228. // #38243
  100229. A=M
  100230. // #38244
  100231. D=M
  100232. //vv pop_stack_to_d
  100233. //^^ arith_d_with_stack_top(D-M)
  100234. // #38245
  100235. @R13
  100236. // #38246
  100237. M=D
  100238. //^^ pop_stack_to_d
  100239. // #38247
  100240. @SP
  100241. // #38248
  100242. M=M-1
  100243. // #38249
  100244. A=M
  100245. // #38250
  100246. D=M
  100247. //vv pop_stack_to_d
  100248. // #38251
  100249. @R13
  100250. // #38252
  100251. D=D-M
  100252. // #38253
  100253. @R13
  100254. // #38254
  100255. M=0
  100256. //vv arith_d_with_stack_top(D-M)
  100257. // #38255
  100258. @PUT_TRUE_400
  100259. // #38256
  100260. D;JLT
  100261. // #38257
  100262. @R13
  100263. // #38258
  100264. M=0
  100265. // #38259
  100266. @CONT_400
  100267. // #38260
  100268. 0;JMP
  100269. (PUT_TRUE_400)
  100270. // #38261
  100271. @R13
  100272. // #38262
  100273. M=-1
  100274. (CONT_400)
  100275. // #38263
  100276. @R13
  100277. // #38264
  100278. D=M
  100279. // #38265
  100280. @R13
  100281. // #38266
  100282. M=0
  100283. //^^ push_d_to_stack
  100284. // #38267
  100285. @SP
  100286. // #38268
  100287. A=M
  100288. // #38269
  100289. M=D
  100290. // #38270
  100291. @SP
  100292. // #38271
  100293. M=M+1
  100294. //vv push_d_to_stack
  100295. //vv arith_cmp_op(JLT)
  100296. //
  100297. //// not
  100298. //^^ arith_unary_op(!)
  100299. //^^ pop_stack_to_d
  100300. // #38272
  100301. @SP
  100302. // #38273
  100303. M=M-1
  100304. // #38274
  100305. A=M
  100306. // #38275
  100307. D=M
  100308. //vv pop_stack_to_d
  100309. // #38276
  100310. D=!D
  100311. //^^ push_d_to_stack
  100312. // #38277
  100313. @SP
  100314. // #38278
  100315. A=M
  100316. // #38279
  100317. M=D
  100318. // #38280
  100319. @SP
  100320. // #38281
  100321. M=M+1
  100322. //vv push_d_to_stack
  100323. //vv arith_unary_op(!)
  100324. //
  100325. //// if-goto WHILE_END1
  100326. //^^ pop_stack_to_d
  100327. // #38282
  100328. @SP
  100329. // #38283
  100330. M=M-1
  100331. // #38284
  100332. A=M
  100333. // #38285
  100334. D=M
  100335. //vv pop_stack_to_d
  100336. // #38286
  100337. @String.setInt$WHILE_END1
  100338. // #38287
  100339. D;JNE
  100340. //
  100341. //// push this 2
  100342. //^^ push_from_ram(THIS, 2)
  100343. // #38288
  100344. @THIS
  100345. // #38289
  100346. D=M
  100347. // #38290
  100348. @2
  100349. // #38291
  100350. A=D+A
  100351. // #38292
  100352. D=M
  100353. //^^ push_d_to_stack
  100354. // #38293
  100355. @SP
  100356. // #38294
  100357. A=M
  100358. // #38295
  100359. M=D
  100360. // #38296
  100361. @SP
  100362. // #38297
  100363. M=M+1
  100364. //vv push_d_to_stack
  100365. //vv push_from_ram(THIS, 2)
  100366. //
  100367. //// push this 1
  100368. //^^ push_from_ram(THIS, 1)
  100369. // #38298
  100370. @THIS
  100371. // #38299
  100372. D=M
  100373. // #38300
  100374. @1
  100375. // #38301
  100376. A=D+A
  100377. // #38302
  100378. D=M
  100379. //^^ push_d_to_stack
  100380. // #38303
  100381. @SP
  100382. // #38304
  100383. A=M
  100384. // #38305
  100385. M=D
  100386. // #38306
  100387. @SP
  100388. // #38307
  100389. M=M+1
  100390. //vv push_d_to_stack
  100391. //vv push_from_ram(THIS, 1)
  100392. //
  100393. //// add
  100394. //^^ arith_binary_op(+)
  100395. //^^ pop_stack_to_d
  100396. // #38308
  100397. @SP
  100398. // #38309
  100399. M=M-1
  100400. // #38310
  100401. A=M
  100402. // #38311
  100403. D=M
  100404. //vv pop_stack_to_d
  100405. //^^ arith_d_with_stack_top(D+M)
  100406. // #38312
  100407. @R13
  100408. // #38313
  100409. M=D
  100410. //^^ pop_stack_to_d
  100411. // #38314
  100412. @SP
  100413. // #38315
  100414. M=M-1
  100415. // #38316
  100416. A=M
  100417. // #38317
  100418. D=M
  100419. //vv pop_stack_to_d
  100420. // #38318
  100421. @R13
  100422. // #38319
  100423. D=D+M
  100424. // #38320
  100425. @R13
  100426. // #38321
  100427. M=0
  100428. //vv arith_d_with_stack_top(D+M)
  100429. //^^ push_d_to_stack
  100430. // #38322
  100431. @SP
  100432. // #38323
  100433. A=M
  100434. // #38324
  100435. M=D
  100436. // #38325
  100437. @SP
  100438. // #38326
  100439. M=M+1
  100440. //vv push_d_to_stack
  100441. //vv arith_binary_op(+)
  100442. //
  100443. //// push local 0
  100444. //^^ push_from_ram(LCL, 0)
  100445. // #38327
  100446. @LCL
  100447. // #38328
  100448. D=M
  100449. // #38329
  100450. @0
  100451. // #38330
  100452. A=D+A
  100453. // #38331
  100454. D=M
  100455. //^^ push_d_to_stack
  100456. // #38332
  100457. @SP
  100458. // #38333
  100459. A=M
  100460. // #38334
  100461. M=D
  100462. // #38335
  100463. @SP
  100464. // #38336
  100465. M=M+1
  100466. //vv push_d_to_stack
  100467. //vv push_from_ram(LCL, 0)
  100468. //
  100469. //// push this 2
  100470. //^^ push_from_ram(THIS, 2)
  100471. // #38337
  100472. @THIS
  100473. // #38338
  100474. D=M
  100475. // #38339
  100476. @2
  100477. // #38340
  100478. A=D+A
  100479. // #38341
  100480. D=M
  100481. //^^ push_d_to_stack
  100482. // #38342
  100483. @SP
  100484. // #38343
  100485. A=M
  100486. // #38344
  100487. M=D
  100488. // #38345
  100489. @SP
  100490. // #38346
  100491. M=M+1
  100492. //vv push_d_to_stack
  100493. //vv push_from_ram(THIS, 2)
  100494. //
  100495. //// push constant 1
  100496. //^^ push_constant(1)
  100497. // #38347
  100498. @1
  100499. // #38348
  100500. D=A
  100501. //^^ push_d_to_stack
  100502. // #38349
  100503. @SP
  100504. // #38350
  100505. A=M
  100506. // #38351
  100507. M=D
  100508. // #38352
  100509. @SP
  100510. // #38353
  100511. M=M+1
  100512. //vv push_d_to_stack
  100513. //vv push_constant(1)
  100514. //
  100515. //// add
  100516. //^^ arith_binary_op(+)
  100517. //^^ pop_stack_to_d
  100518. // #38354
  100519. @SP
  100520. // #38355
  100521. M=M-1
  100522. // #38356
  100523. A=M
  100524. // #38357
  100525. D=M
  100526. //vv pop_stack_to_d
  100527. //^^ arith_d_with_stack_top(D+M)
  100528. // #38358
  100529. @R13
  100530. // #38359
  100531. M=D
  100532. //^^ pop_stack_to_d
  100533. // #38360
  100534. @SP
  100535. // #38361
  100536. M=M-1
  100537. // #38362
  100538. A=M
  100539. // #38363
  100540. D=M
  100541. //vv pop_stack_to_d
  100542. // #38364
  100543. @R13
  100544. // #38365
  100545. D=D+M
  100546. // #38366
  100547. @R13
  100548. // #38367
  100549. M=0
  100550. //vv arith_d_with_stack_top(D+M)
  100551. //^^ push_d_to_stack
  100552. // #38368
  100553. @SP
  100554. // #38369
  100555. A=M
  100556. // #38370
  100557. M=D
  100558. // #38371
  100559. @SP
  100560. // #38372
  100561. M=M+1
  100562. //vv push_d_to_stack
  100563. //vv arith_binary_op(+)
  100564. //
  100565. //// sub
  100566. //^^ arith_binary_op(-)
  100567. //^^ pop_stack_to_d
  100568. // #38373
  100569. @SP
  100570. // #38374
  100571. M=M-1
  100572. // #38375
  100573. A=M
  100574. // #38376
  100575. D=M
  100576. //vv pop_stack_to_d
  100577. //^^ arith_d_with_stack_top(D-M)
  100578. // #38377
  100579. @R13
  100580. // #38378
  100581. M=D
  100582. //^^ pop_stack_to_d
  100583. // #38379
  100584. @SP
  100585. // #38380
  100586. M=M-1
  100587. // #38381
  100588. A=M
  100589. // #38382
  100590. D=M
  100591. //vv pop_stack_to_d
  100592. // #38383
  100593. @R13
  100594. // #38384
  100595. D=D-M
  100596. // #38385
  100597. @R13
  100598. // #38386
  100599. M=0
  100600. //vv arith_d_with_stack_top(D-M)
  100601. //^^ push_d_to_stack
  100602. // #38387
  100603. @SP
  100604. // #38388
  100605. A=M
  100606. // #38389
  100607. M=D
  100608. // #38390
  100609. @SP
  100610. // #38391
  100611. M=M+1
  100612. //vv push_d_to_stack
  100613. //vv arith_binary_op(-)
  100614. //
  100615. //// push local 2
  100616. //^^ push_from_ram(LCL, 2)
  100617. // #38392
  100618. @LCL
  100619. // #38393
  100620. D=M
  100621. // #38394
  100622. @2
  100623. // #38395
  100624. A=D+A
  100625. // #38396
  100626. D=M
  100627. //^^ push_d_to_stack
  100628. // #38397
  100629. @SP
  100630. // #38398
  100631. A=M
  100632. // #38399
  100633. M=D
  100634. // #38400
  100635. @SP
  100636. // #38401
  100637. M=M+1
  100638. //vv push_d_to_stack
  100639. //vv push_from_ram(LCL, 2)
  100640. //
  100641. //// add
  100642. //^^ arith_binary_op(+)
  100643. //^^ pop_stack_to_d
  100644. // #38402
  100645. @SP
  100646. // #38403
  100647. M=M-1
  100648. // #38404
  100649. A=M
  100650. // #38405
  100651. D=M
  100652. //vv pop_stack_to_d
  100653. //^^ arith_d_with_stack_top(D+M)
  100654. // #38406
  100655. @R13
  100656. // #38407
  100657. M=D
  100658. //^^ pop_stack_to_d
  100659. // #38408
  100660. @SP
  100661. // #38409
  100662. M=M-1
  100663. // #38410
  100664. A=M
  100665. // #38411
  100666. D=M
  100667. //vv pop_stack_to_d
  100668. // #38412
  100669. @R13
  100670. // #38413
  100671. D=D+M
  100672. // #38414
  100673. @R13
  100674. // #38415
  100675. M=0
  100676. //vv arith_d_with_stack_top(D+M)
  100677. //^^ push_d_to_stack
  100678. // #38416
  100679. @SP
  100680. // #38417
  100681. A=M
  100682. // #38418
  100683. M=D
  100684. // #38419
  100685. @SP
  100686. // #38420
  100687. M=M+1
  100688. //vv push_d_to_stack
  100689. //vv arith_binary_op(+)
  100690. //
  100691. //// pop pointer 1
  100692. //^^ pop_to_loc{4)
  100693. //^^ pop_stack_to_d
  100694. // #38421
  100695. @SP
  100696. // #38422
  100697. M=M-1
  100698. // #38423
  100699. A=M
  100700. // #38424
  100701. D=M
  100702. //vv pop_stack_to_d
  100703. // #38425
  100704. @4
  100705. // #38426
  100706. M=D
  100707. //vv pop_to_loc{4)
  100708. //
  100709. //// push that 0
  100710. //^^ push_from_ram(THAT, 0)
  100711. // #38427
  100712. @THAT
  100713. // #38428
  100714. D=M
  100715. // #38429
  100716. @0
  100717. // #38430
  100718. A=D+A
  100719. // #38431
  100720. D=M
  100721. //^^ push_d_to_stack
  100722. // #38432
  100723. @SP
  100724. // #38433
  100725. A=M
  100726. // #38434
  100727. M=D
  100728. // #38435
  100729. @SP
  100730. // #38436
  100731. M=M+1
  100732. //vv push_d_to_stack
  100733. //vv push_from_ram(THAT, 0)
  100734. //
  100735. //// pop temp 0
  100736. //^^ pop_to_loc{5)
  100737. //^^ pop_stack_to_d
  100738. // #38437
  100739. @SP
  100740. // #38438
  100741. M=M-1
  100742. // #38439
  100743. A=M
  100744. // #38440
  100745. D=M
  100746. //vv pop_stack_to_d
  100747. // #38441
  100748. @5
  100749. // #38442
  100750. M=D
  100751. //vv pop_to_loc{5)
  100752. //
  100753. //// pop pointer 1
  100754. //^^ pop_to_loc{4)
  100755. //^^ pop_stack_to_d
  100756. // #38443
  100757. @SP
  100758. // #38444
  100759. M=M-1
  100760. // #38445
  100761. A=M
  100762. // #38446
  100763. D=M
  100764. //vv pop_stack_to_d
  100765. // #38447
  100766. @4
  100767. // #38448
  100768. M=D
  100769. //vv pop_to_loc{4)
  100770. //
  100771. //// push temp 0
  100772. //^^ push_from_loc(5)
  100773. // #38449
  100774. @5
  100775. // #38450
  100776. D=M
  100777. //^^ push_d_to_stack
  100778. // #38451
  100779. @SP
  100780. // #38452
  100781. A=M
  100782. // #38453
  100783. M=D
  100784. // #38454
  100785. @SP
  100786. // #38455
  100787. M=M+1
  100788. //vv push_d_to_stack
  100789. //vv push_from_loc(5)
  100790. //
  100791. //// pop that 0
  100792. //^^ pop_to_ram(THAT, 0)
  100793. // #38456
  100794. @THAT
  100795. // #38457
  100796. D=M
  100797. // #38458
  100798. @0
  100799. // #38459
  100800. D=D+A
  100801. // #38460
  100802. @R13
  100803. // #38461
  100804. M=D
  100805. //^^ pop_stack_to_d
  100806. // #38462
  100807. @SP
  100808. // #38463
  100809. M=M-1
  100810. // #38464
  100811. A=M
  100812. // #38465
  100813. D=M
  100814. //vv pop_stack_to_d
  100815. // #38466
  100816. @R13
  100817. // #38467
  100818. A=M
  100819. // #38468
  100820. M=D
  100821. // #38469
  100822. @R13
  100823. // #38470
  100824. M=0
  100825. //vv pop_to_ram(THAT, 0)
  100826. //
  100827. //// push this 2
  100828. //^^ push_from_ram(THIS, 2)
  100829. // #38471
  100830. @THIS
  100831. // #38472
  100832. D=M
  100833. // #38473
  100834. @2
  100835. // #38474
  100836. A=D+A
  100837. // #38475
  100838. D=M
  100839. //^^ push_d_to_stack
  100840. // #38476
  100841. @SP
  100842. // #38477
  100843. A=M
  100844. // #38478
  100845. M=D
  100846. // #38479
  100847. @SP
  100848. // #38480
  100849. M=M+1
  100850. //vv push_d_to_stack
  100851. //vv push_from_ram(THIS, 2)
  100852. //
  100853. //// push constant 1
  100854. //^^ push_constant(1)
  100855. // #38481
  100856. @1
  100857. // #38482
  100858. D=A
  100859. //^^ push_d_to_stack
  100860. // #38483
  100861. @SP
  100862. // #38484
  100863. A=M
  100864. // #38485
  100865. M=D
  100866. // #38486
  100867. @SP
  100868. // #38487
  100869. M=M+1
  100870. //vv push_d_to_stack
  100871. //vv push_constant(1)
  100872. //
  100873. //// add
  100874. //^^ arith_binary_op(+)
  100875. //^^ pop_stack_to_d
  100876. // #38488
  100877. @SP
  100878. // #38489
  100879. M=M-1
  100880. // #38490
  100881. A=M
  100882. // #38491
  100883. D=M
  100884. //vv pop_stack_to_d
  100885. //^^ arith_d_with_stack_top(D+M)
  100886. // #38492
  100887. @R13
  100888. // #38493
  100889. M=D
  100890. //^^ pop_stack_to_d
  100891. // #38494
  100892. @SP
  100893. // #38495
  100894. M=M-1
  100895. // #38496
  100896. A=M
  100897. // #38497
  100898. D=M
  100899. //vv pop_stack_to_d
  100900. // #38498
  100901. @R13
  100902. // #38499
  100903. D=D+M
  100904. // #38500
  100905. @R13
  100906. // #38501
  100907. M=0
  100908. //vv arith_d_with_stack_top(D+M)
  100909. //^^ push_d_to_stack
  100910. // #38502
  100911. @SP
  100912. // #38503
  100913. A=M
  100914. // #38504
  100915. M=D
  100916. // #38505
  100917. @SP
  100918. // #38506
  100919. M=M+1
  100920. //vv push_d_to_stack
  100921. //vv arith_binary_op(+)
  100922. //
  100923. //// pop this 2
  100924. //^^ pop_to_ram(THIS, 2)
  100925. // #38507
  100926. @THIS
  100927. // #38508
  100928. D=M
  100929. // #38509
  100930. @2
  100931. // #38510
  100932. D=D+A
  100933. // #38511
  100934. @R13
  100935. // #38512
  100936. M=D
  100937. //^^ pop_stack_to_d
  100938. // #38513
  100939. @SP
  100940. // #38514
  100941. M=M-1
  100942. // #38515
  100943. A=M
  100944. // #38516
  100945. D=M
  100946. //vv pop_stack_to_d
  100947. // #38517
  100948. @R13
  100949. // #38518
  100950. A=M
  100951. // #38519
  100952. M=D
  100953. // #38520
  100954. @R13
  100955. // #38521
  100956. M=0
  100957. //vv pop_to_ram(THIS, 2)
  100958. //
  100959. //// goto WHILE_EXP1
  100960. // #38522
  100961. @String.setInt$WHILE_EXP1
  100962. // #38523
  100963. 0;JMP
  100964. //
  100965. //// label WHILE_END1
  100966. (String.setInt$WHILE_END1)
  100967. //
  100968. //// label IF_END4
  100969. (String.setInt$IF_END4)
  100970. //
  100971. //// push local 2
  100972. //^^ push_from_ram(LCL, 2)
  100973. // #38524
  100974. @LCL
  100975. // #38525
  100976. D=M
  100977. // #38526
  100978. @2
  100979. // #38527
  100980. A=D+A
  100981. // #38528
  100982. D=M
  100983. //^^ push_d_to_stack
  100984. // #38529
  100985. @SP
  100986. // #38530
  100987. A=M
  100988. // #38531
  100989. M=D
  100990. // #38532
  100991. @SP
  100992. // #38533
  100993. M=M+1
  100994. //vv push_d_to_stack
  100995. //vv push_from_ram(LCL, 2)
  100996. //
  100997. //// call Array.dispose 1
  100998. //^^ push_constant(RET_ADDR_401)
  100999. // #38534
  101000. @RET_ADDR_401
  101001. // #38535
  101002. D=A
  101003. //^^ push_d_to_stack
  101004. // #38536
  101005. @SP
  101006. // #38537
  101007. A=M
  101008. // #38538
  101009. M=D
  101010. // #38539
  101011. @SP
  101012. // #38540
  101013. M=M+1
  101014. //vv push_d_to_stack
  101015. //vv push_constant(RET_ADDR_401)
  101016. //push return-address
  101017. // #38541
  101018. @LCL
  101019. // #38542
  101020. D=M
  101021. //^^ push_d_to_stack
  101022. // #38543
  101023. @SP
  101024. // #38544
  101025. A=M
  101026. // #38545
  101027. M=D
  101028. // #38546
  101029. @SP
  101030. // #38547
  101031. M=M+1
  101032. //vv push_d_to_stack
  101033. //push LCL
  101034. // #38548
  101035. @ARG
  101036. // #38549
  101037. D=M
  101038. //^^ push_d_to_stack
  101039. // #38550
  101040. @SP
  101041. // #38551
  101042. A=M
  101043. // #38552
  101044. M=D
  101045. // #38553
  101046. @SP
  101047. // #38554
  101048. M=M+1
  101049. //vv push_d_to_stack
  101050. //push ARG
  101051. // #38555
  101052. @THIS
  101053. // #38556
  101054. D=M
  101055. //^^ push_d_to_stack
  101056. // #38557
  101057. @SP
  101058. // #38558
  101059. A=M
  101060. // #38559
  101061. M=D
  101062. // #38560
  101063. @SP
  101064. // #38561
  101065. M=M+1
  101066. //vv push_d_to_stack
  101067. //push THIS
  101068. // #38562
  101069. @THAT
  101070. // #38563
  101071. D=M
  101072. //^^ push_d_to_stack
  101073. // #38564
  101074. @SP
  101075. // #38565
  101076. A=M
  101077. // #38566
  101078. M=D
  101079. // #38567
  101080. @SP
  101081. // #38568
  101082. M=M+1
  101083. //vv push_d_to_stack
  101084. //push THAT
  101085. // #38569
  101086. @SP
  101087. // #38570
  101088. D=M
  101089. // #38571
  101090. @ARG
  101091. // #38572
  101092. M=D
  101093. // #38573
  101094. @6
  101095. // #38574
  101096. D=A
  101097. // #38575
  101098. @ARG
  101099. // #38576
  101100. M=M-D // ARG = SP - args - 5
  101101. // #38577
  101102. @SP
  101103. // #38578
  101104. D=M
  101105. // #38579
  101106. @LCL
  101107. // #38580
  101108. M=D // LCL = SP
  101109. // #38581
  101110. @Array.dispose
  101111. // #38582
  101112. 0;JMP
  101113. (RET_ADDR_401)
  101114. //
  101115. //// pop temp 0
  101116. //^^ pop_to_loc{5)
  101117. //^^ pop_stack_to_d
  101118. // #38583
  101119. @SP
  101120. // #38584
  101121. M=M-1
  101122. // #38585
  101123. A=M
  101124. // #38586
  101125. D=M
  101126. //vv pop_stack_to_d
  101127. // #38587
  101128. @5
  101129. // #38588
  101130. M=D
  101131. //vv pop_to_loc{5)
  101132. //
  101133. //// push constant 0
  101134. //^^ push_constant(0)
  101135. // #38589
  101136. @0
  101137. // #38590
  101138. D=A
  101139. //^^ push_d_to_stack
  101140. // #38591
  101141. @SP
  101142. // #38592
  101143. A=M
  101144. // #38593
  101145. M=D
  101146. // #38594
  101147. @SP
  101148. // #38595
  101149. M=M+1
  101150. //vv push_d_to_stack
  101151. //vv push_constant(0)
  101152. //
  101153. //// return
  101154. // #38596
  101155. @LCL
  101156. // #38597
  101157. D=M
  101158. // #38598
  101159. @R14
  101160. // #38599
  101161. M=D //R14=LCL
  101162. // #38600
  101163. @5
  101164. // #38601
  101165. A=D-A
  101166. // #38602
  101167. D=M
  101168. // #38603
  101169. @R15
  101170. // #38604
  101171. M=D //R15=*(LCL-5)
  101172. //^^ pop_stack_to_d
  101173. // #38605
  101174. @SP
  101175. // #38606
  101176. M=M-1
  101177. // #38607
  101178. A=M
  101179. // #38608
  101180. D=M
  101181. //vv pop_stack_to_d
  101182. // #38609
  101183. @ARG
  101184. // #38610
  101185. A=M
  101186. // #38611
  101187. M=D //*ARG = pop()
  101188. // #38612
  101189. @ARG
  101190. // #38613
  101191. D=M
  101192. // #38614
  101193. @SP
  101194. // #38615
  101195. M=D+1 //SP=ARG+1
  101196. // #38616
  101197. @R14
  101198. // #38617
  101199. AM=M-1
  101200. // #38618
  101201. D=M
  101202. // #38619
  101203. @THAT
  101204. // #38620
  101205. M=D //THAT = *(--R14)
  101206. // #38621
  101207. @R14
  101208. // #38622
  101209. AM=M-1
  101210. // #38623
  101211. D=M
  101212. // #38624
  101213. @THIS
  101214. // #38625
  101215. M=D //THIS = *(--R14)
  101216. // #38626
  101217. @R14
  101218. // #38627
  101219. AM=M-1
  101220. // #38628
  101221. D=M
  101222. // #38629
  101223. @ARG
  101224. // #38630
  101225. M=D //ARG = *(--R14)
  101226. // #38631
  101227. @R14
  101228. // #38632
  101229. AM=M-1
  101230. // #38633
  101231. D=M
  101232. // #38634
  101233. @LCL
  101234. // #38635
  101235. M=D //LCL = *(--R14)
  101236. // #38636
  101237. @R15
  101238. // #38637
  101239. A=M
  101240. // #38638
  101241. 0;JMP //goto *R15
  101242. //
  101243. //// function String.newLine 0
  101244. (String.newLine)
  101245. //
  101246. //// push constant 128
  101247. //^^ push_constant(128)
  101248. // #38639
  101249. @128
  101250. // #38640
  101251. D=A
  101252. //^^ push_d_to_stack
  101253. // #38641
  101254. @SP
  101255. // #38642
  101256. A=M
  101257. // #38643
  101258. M=D
  101259. // #38644
  101260. @SP
  101261. // #38645
  101262. M=M+1
  101263. //vv push_d_to_stack
  101264. //vv push_constant(128)
  101265. //
  101266. //// return
  101267. // #38646
  101268. @LCL
  101269. // #38647
  101270. D=M
  101271. // #38648
  101272. @R14
  101273. // #38649
  101274. M=D //R14=LCL
  101275. // #38650
  101276. @5
  101277. // #38651
  101278. A=D-A
  101279. // #38652
  101280. D=M
  101281. // #38653
  101282. @R15
  101283. // #38654
  101284. M=D //R15=*(LCL-5)
  101285. //^^ pop_stack_to_d
  101286. // #38655
  101287. @SP
  101288. // #38656
  101289. M=M-1
  101290. // #38657
  101291. A=M
  101292. // #38658
  101293. D=M
  101294. //vv pop_stack_to_d
  101295. // #38659
  101296. @ARG
  101297. // #38660
  101298. A=M
  101299. // #38661
  101300. M=D //*ARG = pop()
  101301. // #38662
  101302. @ARG
  101303. // #38663
  101304. D=M
  101305. // #38664
  101306. @SP
  101307. // #38665
  101308. M=D+1 //SP=ARG+1
  101309. // #38666
  101310. @R14
  101311. // #38667
  101312. AM=M-1
  101313. // #38668
  101314. D=M
  101315. // #38669
  101316. @THAT
  101317. // #38670
  101318. M=D //THAT = *(--R14)
  101319. // #38671
  101320. @R14
  101321. // #38672
  101322. AM=M-1
  101323. // #38673
  101324. D=M
  101325. // #38674
  101326. @THIS
  101327. // #38675
  101328. M=D //THIS = *(--R14)
  101329. // #38676
  101330. @R14
  101331. // #38677
  101332. AM=M-1
  101333. // #38678
  101334. D=M
  101335. // #38679
  101336. @ARG
  101337. // #38680
  101338. M=D //ARG = *(--R14)
  101339. // #38681
  101340. @R14
  101341. // #38682
  101342. AM=M-1
  101343. // #38683
  101344. D=M
  101345. // #38684
  101346. @LCL
  101347. // #38685
  101348. M=D //LCL = *(--R14)
  101349. // #38686
  101350. @R15
  101351. // #38687
  101352. A=M
  101353. // #38688
  101354. 0;JMP //goto *R15
  101355. //
  101356. //// function String.backSpace 0
  101357. (String.backSpace)
  101358. //
  101359. //// push constant 129
  101360. //^^ push_constant(129)
  101361. // #38689
  101362. @129
  101363. // #38690
  101364. D=A
  101365. //^^ push_d_to_stack
  101366. // #38691
  101367. @SP
  101368. // #38692
  101369. A=M
  101370. // #38693
  101371. M=D
  101372. // #38694
  101373. @SP
  101374. // #38695
  101375. M=M+1
  101376. //vv push_d_to_stack
  101377. //vv push_constant(129)
  101378. //
  101379. //// return
  101380. // #38696
  101381. @LCL
  101382. // #38697
  101383. D=M
  101384. // #38698
  101385. @R14
  101386. // #38699
  101387. M=D //R14=LCL
  101388. // #38700
  101389. @5
  101390. // #38701
  101391. A=D-A
  101392. // #38702
  101393. D=M
  101394. // #38703
  101395. @R15
  101396. // #38704
  101397. M=D //R15=*(LCL-5)
  101398. //^^ pop_stack_to_d
  101399. // #38705
  101400. @SP
  101401. // #38706
  101402. M=M-1
  101403. // #38707
  101404. A=M
  101405. // #38708
  101406. D=M
  101407. //vv pop_stack_to_d
  101408. // #38709
  101409. @ARG
  101410. // #38710
  101411. A=M
  101412. // #38711
  101413. M=D //*ARG = pop()
  101414. // #38712
  101415. @ARG
  101416. // #38713
  101417. D=M
  101418. // #38714
  101419. @SP
  101420. // #38715
  101421. M=D+1 //SP=ARG+1
  101422. // #38716
  101423. @R14
  101424. // #38717
  101425. AM=M-1
  101426. // #38718
  101427. D=M
  101428. // #38719
  101429. @THAT
  101430. // #38720
  101431. M=D //THAT = *(--R14)
  101432. // #38721
  101433. @R14
  101434. // #38722
  101435. AM=M-1
  101436. // #38723
  101437. D=M
  101438. // #38724
  101439. @THIS
  101440. // #38725
  101441. M=D //THIS = *(--R14)
  101442. // #38726
  101443. @R14
  101444. // #38727
  101445. AM=M-1
  101446. // #38728
  101447. D=M
  101448. // #38729
  101449. @ARG
  101450. // #38730
  101451. M=D //ARG = *(--R14)
  101452. // #38731
  101453. @R14
  101454. // #38732
  101455. AM=M-1
  101456. // #38733
  101457. D=M
  101458. // #38734
  101459. @LCL
  101460. // #38735
  101461. M=D //LCL = *(--R14)
  101462. // #38736
  101463. @R15
  101464. // #38737
  101465. A=M
  101466. // #38738
  101467. 0;JMP //goto *R15
  101468. //
  101469. //// function String.doubleQuote 0
  101470. (String.doubleQuote)
  101471. //
  101472. //// call Memory.init 0
  101473. //^^ push_constant(RET_ADDR_402)
  101474. // #38739
  101475. @RET_ADDR_402
  101476. // #38740
  101477. D=A
  101478. //^^ push_d_to_stack
  101479. // #38741
  101480. @SP
  101481. // #38742
  101482. A=M
  101483. // #38743
  101484. M=D
  101485. // #38744
  101486. @SP
  101487. // #38745
  101488. M=M+1
  101489. //vv push_d_to_stack
  101490. //vv push_constant(RET_ADDR_402)
  101491. //push return-address
  101492. // #38746
  101493. @LCL
  101494. // #38747
  101495. D=M
  101496. //^^ push_d_to_stack
  101497. // #38748
  101498. @SP
  101499. // #38749
  101500. A=M
  101501. // #38750
  101502. M=D
  101503. // #38751
  101504. @SP
  101505. // #38752
  101506. M=M+1
  101507. //vv push_d_to_stack
  101508. //push LCL
  101509. // #38753
  101510. @ARG
  101511. // #38754
  101512. D=M
  101513. //^^ push_d_to_stack
  101514. // #38755
  101515. @SP
  101516. // #38756
  101517. A=M
  101518. // #38757
  101519. M=D
  101520. // #38758
  101521. @SP
  101522. // #38759
  101523. M=M+1
  101524. //vv push_d_to_stack
  101525. //push ARG
  101526. // #38760
  101527. @THIS
  101528. // #38761
  101529. D=M
  101530. //^^ push_d_to_stack
  101531. // #38762
  101532. @SP
  101533. // #38763
  101534. A=M
  101535. // #38764
  101536. M=D
  101537. // #38765
  101538. @SP
  101539. // #38766
  101540. M=M+1
  101541. //vv push_d_to_stack
  101542. //push THIS
  101543. // #38767
  101544. @THAT
  101545. // #38768
  101546. D=M
  101547. //^^ push_d_to_stack
  101548. // #38769
  101549. @SP
  101550. // #38770
  101551. A=M
  101552. // #38771
  101553. M=D
  101554. // #38772
  101555. @SP
  101556. // #38773
  101557. M=M+1
  101558. //vv push_d_to_stack
  101559. //push THAT
  101560. // #38774
  101561. @SP
  101562. // #38775
  101563. D=M
  101564. // #38776
  101565. @ARG
  101566. // #38777
  101567. M=D
  101568. // #38778
  101569. @5
  101570. // #38779
  101571. D=A
  101572. // #38780
  101573. @ARG
  101574. // #38781
  101575. M=M-D // ARG = SP - args - 5
  101576. // #38782
  101577. @SP
  101578. // #38783
  101579. D=M
  101580. // #38784
  101581. @LCL
  101582. // #38785
  101583. M=D // LCL = SP
  101584. // #38786
  101585. @Memory.init
  101586. // #38787
  101587. 0;JMP
  101588. (RET_ADDR_402)
  101589. //
  101590. //// pop temp 0
  101591. //^^ pop_to_loc{5)
  101592. //^^ pop_stack_to_d
  101593. // #38788
  101594. @SP
  101595. // #38789
  101596. M=M-1
  101597. // #38790
  101598. A=M
  101599. // #38791
  101600. D=M
  101601. //vv pop_stack_to_d
  101602. // #38792
  101603. @5
  101604. // #38793
  101605. M=D
  101606. //vv pop_to_loc{5)
  101607. //
  101608. //// call Math.init 0
  101609. //^^ push_constant(RET_ADDR_403)
  101610. // #38794
  101611. @RET_ADDR_403
  101612. // #38795
  101613. D=A
  101614. //^^ push_d_to_stack
  101615. // #38796
  101616. @SP
  101617. // #38797
  101618. A=M
  101619. // #38798
  101620. M=D
  101621. // #38799
  101622. @SP
  101623. // #38800
  101624. M=M+1
  101625. //vv push_d_to_stack
  101626. //vv push_constant(RET_ADDR_403)
  101627. //push return-address
  101628. // #38801
  101629. @LCL
  101630. // #38802
  101631. D=M
  101632. //^^ push_d_to_stack
  101633. // #38803
  101634. @SP
  101635. // #38804
  101636. A=M
  101637. // #38805
  101638. M=D
  101639. // #38806
  101640. @SP
  101641. // #38807
  101642. M=M+1
  101643. //vv push_d_to_stack
  101644. //push LCL
  101645. // #38808
  101646. @ARG
  101647. // #38809
  101648. D=M
  101649. //^^ push_d_to_stack
  101650. // #38810
  101651. @SP
  101652. // #38811
  101653. A=M
  101654. // #38812
  101655. M=D
  101656. // #38813
  101657. @SP
  101658. // #38814
  101659. M=M+1
  101660. //vv push_d_to_stack
  101661. //push ARG
  101662. // #38815
  101663. @THIS
  101664. // #38816
  101665. D=M
  101666. //^^ push_d_to_stack
  101667. // #38817
  101668. @SP
  101669. // #38818
  101670. A=M
  101671. // #38819
  101672. M=D
  101673. // #38820
  101674. @SP
  101675. // #38821
  101676. M=M+1
  101677. //vv push_d_to_stack
  101678. //push THIS
  101679. // #38822
  101680. @THAT
  101681. // #38823
  101682. D=M
  101683. //^^ push_d_to_stack
  101684. // #38824
  101685. @SP
  101686. // #38825
  101687. A=M
  101688. // #38826
  101689. M=D
  101690. // #38827
  101691. @SP
  101692. // #38828
  101693. M=M+1
  101694. //vv push_d_to_stack
  101695. //push THAT
  101696. // #38829
  101697. @SP
  101698. // #38830
  101699. D=M
  101700. // #38831
  101701. @ARG
  101702. // #38832
  101703. M=D
  101704. // #38833
  101705. @5
  101706. // #38834
  101707. D=A
  101708. // #38835
  101709. @ARG
  101710. // #38836
  101711. M=M-D // ARG = SP - args - 5
  101712. // #38837
  101713. @SP
  101714. // #38838
  101715. D=M
  101716. // #38839
  101717. @LCL
  101718. // #38840
  101719. M=D // LCL = SP
  101720. // #38841
  101721. @Math.init
  101722. // #38842
  101723. 0;JMP
  101724. (RET_ADDR_403)
  101725. //
  101726. //// pop temp 0
  101727. //^^ pop_to_loc{5)
  101728. //^^ pop_stack_to_d
  101729. // #38843
  101730. @SP
  101731. // #38844
  101732. M=M-1
  101733. // #38845
  101734. A=M
  101735. // #38846
  101736. D=M
  101737. //vv pop_stack_to_d
  101738. // #38847
  101739. @5
  101740. // #38848
  101741. M=D
  101742. //vv pop_to_loc{5)
  101743. //
  101744. //// call Screen.init 0
  101745. //^^ push_constant(RET_ADDR_404)
  101746. // #38849
  101747. @RET_ADDR_404
  101748. // #38850
  101749. D=A
  101750. //^^ push_d_to_stack
  101751. // #38851
  101752. @SP
  101753. // #38852
  101754. A=M
  101755. // #38853
  101756. M=D
  101757. // #38854
  101758. @SP
  101759. // #38855
  101760. M=M+1
  101761. //vv push_d_to_stack
  101762. //vv push_constant(RET_ADDR_404)
  101763. //push return-address
  101764. // #38856
  101765. @LCL
  101766. // #38857
  101767. D=M
  101768. //^^ push_d_to_stack
  101769. // #38858
  101770. @SP
  101771. // #38859
  101772. A=M
  101773. // #38860
  101774. M=D
  101775. // #38861
  101776. @SP
  101777. // #38862
  101778. M=M+1
  101779. //vv push_d_to_stack
  101780. //push LCL
  101781. // #38863
  101782. @ARG
  101783. // #38864
  101784. D=M
  101785. //^^ push_d_to_stack
  101786. // #38865
  101787. @SP
  101788. // #38866
  101789. A=M
  101790. // #38867
  101791. M=D
  101792. // #38868
  101793. @SP
  101794. // #38869
  101795. M=M+1
  101796. //vv push_d_to_stack
  101797. //push ARG
  101798. // #38870
  101799. @THIS
  101800. // #38871
  101801. D=M
  101802. //^^ push_d_to_stack
  101803. // #38872
  101804. @SP
  101805. // #38873
  101806. A=M
  101807. // #38874
  101808. M=D
  101809. // #38875
  101810. @SP
  101811. // #38876
  101812. M=M+1
  101813. //vv push_d_to_stack
  101814. //push THIS
  101815. // #38877
  101816. @THAT
  101817. // #38878
  101818. D=M
  101819. //^^ push_d_to_stack
  101820. // #38879
  101821. @SP
  101822. // #38880
  101823. A=M
  101824. // #38881
  101825. M=D
  101826. // #38882
  101827. @SP
  101828. // #38883
  101829. M=M+1
  101830. //vv push_d_to_stack
  101831. //push THAT
  101832. // #38884
  101833. @SP
  101834. // #38885
  101835. D=M
  101836. // #38886
  101837. @ARG
  101838. // #38887
  101839. M=D
  101840. // #38888
  101841. @5
  101842. // #38889
  101843. D=A
  101844. // #38890
  101845. @ARG
  101846. // #38891
  101847. M=M-D // ARG = SP - args - 5
  101848. // #38892
  101849. @SP
  101850. // #38893
  101851. D=M
  101852. // #38894
  101853. @LCL
  101854. // #38895
  101855. M=D // LCL = SP
  101856. // #38896
  101857. @Screen.init
  101858. // #38897
  101859. 0;JMP
  101860. (RET_ADDR_404)
  101861. //
  101862. //// pop temp 0
  101863. //^^ pop_to_loc{5)
  101864. //^^ pop_stack_to_d
  101865. // #38898
  101866. @SP
  101867. // #38899
  101868. M=M-1
  101869. // #38900
  101870. A=M
  101871. // #38901
  101872. D=M
  101873. //vv pop_stack_to_d
  101874. // #38902
  101875. @5
  101876. // #38903
  101877. M=D
  101878. //vv pop_to_loc{5)
  101879. //
  101880. //// call Output.init 0
  101881. //^^ push_constant(RET_ADDR_405)
  101882. // #38904
  101883. @RET_ADDR_405
  101884. // #38905
  101885. D=A
  101886. //^^ push_d_to_stack
  101887. // #38906
  101888. @SP
  101889. // #38907
  101890. A=M
  101891. // #38908
  101892. M=D
  101893. // #38909
  101894. @SP
  101895. // #38910
  101896. M=M+1
  101897. //vv push_d_to_stack
  101898. //vv push_constant(RET_ADDR_405)
  101899. //push return-address
  101900. // #38911
  101901. @LCL
  101902. // #38912
  101903. D=M
  101904. //^^ push_d_to_stack
  101905. // #38913
  101906. @SP
  101907. // #38914
  101908. A=M
  101909. // #38915
  101910. M=D
  101911. // #38916
  101912. @SP
  101913. // #38917
  101914. M=M+1
  101915. //vv push_d_to_stack
  101916. //push LCL
  101917. // #38918
  101918. @ARG
  101919. // #38919
  101920. D=M
  101921. //^^ push_d_to_stack
  101922. // #38920
  101923. @SP
  101924. // #38921
  101925. A=M
  101926. // #38922
  101927. M=D
  101928. // #38923
  101929. @SP
  101930. // #38924
  101931. M=M+1
  101932. //vv push_d_to_stack
  101933. //push ARG
  101934. // #38925
  101935. @THIS
  101936. // #38926
  101937. D=M
  101938. //^^ push_d_to_stack
  101939. // #38927
  101940. @SP
  101941. // #38928
  101942. A=M
  101943. // #38929
  101944. M=D
  101945. // #38930
  101946. @SP
  101947. // #38931
  101948. M=M+1
  101949. //vv push_d_to_stack
  101950. //push THIS
  101951. // #38932
  101952. @THAT
  101953. // #38933
  101954. D=M
  101955. //^^ push_d_to_stack
  101956. // #38934
  101957. @SP
  101958. // #38935
  101959. A=M
  101960. // #38936
  101961. M=D
  101962. // #38937
  101963. @SP
  101964. // #38938
  101965. M=M+1
  101966. //vv push_d_to_stack
  101967. //push THAT
  101968. // #38939
  101969. @SP
  101970. // #38940
  101971. D=M
  101972. // #38941
  101973. @ARG
  101974. // #38942
  101975. M=D
  101976. // #38943
  101977. @5
  101978. // #38944
  101979. D=A
  101980. // #38945
  101981. @ARG
  101982. // #38946
  101983. M=M-D // ARG = SP - args - 5
  101984. // #38947
  101985. @SP
  101986. // #38948
  101987. D=M
  101988. // #38949
  101989. @LCL
  101990. // #38950
  101991. M=D // LCL = SP
  101992. // #38951
  101993. @Output.init
  101994. // #38952
  101995. 0;JMP
  101996. (RET_ADDR_405)
  101997. //
  101998. //// pop temp 0
  101999. //^^ pop_to_loc{5)
  102000. //^^ pop_stack_to_d
  102001. // #38953
  102002. @SP
  102003. // #38954
  102004. M=M-1
  102005. // #38955
  102006. A=M
  102007. // #38956
  102008. D=M
  102009. //vv pop_stack_to_d
  102010. // #38957
  102011. @5
  102012. // #38958
  102013. M=D
  102014. //vv pop_to_loc{5)
  102015. //
  102016. //// call Keyboard.init 0
  102017. //^^ push_constant(RET_ADDR_406)
  102018. // #38959
  102019. @RET_ADDR_406
  102020. // #38960
  102021. D=A
  102022. //^^ push_d_to_stack
  102023. // #38961
  102024. @SP
  102025. // #38962
  102026. A=M
  102027. // #38963
  102028. M=D
  102029. // #38964
  102030. @SP
  102031. // #38965
  102032. M=M+1
  102033. //vv push_d_to_stack
  102034. //vv push_constant(RET_ADDR_406)
  102035. //push return-address
  102036. // #38966
  102037. @LCL
  102038. // #38967
  102039. D=M
  102040. //^^ push_d_to_stack
  102041. // #38968
  102042. @SP
  102043. // #38969
  102044. A=M
  102045. // #38970
  102046. M=D
  102047. // #38971
  102048. @SP
  102049. // #38972
  102050. M=M+1
  102051. //vv push_d_to_stack
  102052. //push LCL
  102053. // #38973
  102054. @ARG
  102055. // #38974
  102056. D=M
  102057. //^^ push_d_to_stack
  102058. // #38975
  102059. @SP
  102060. // #38976
  102061. A=M
  102062. // #38977
  102063. M=D
  102064. // #38978
  102065. @SP
  102066. // #38979
  102067. M=M+1
  102068. //vv push_d_to_stack
  102069. //push ARG
  102070. // #38980
  102071. @THIS
  102072. // #38981
  102073. D=M
  102074. //^^ push_d_to_stack
  102075. // #38982
  102076. @SP
  102077. // #38983
  102078. A=M
  102079. // #38984
  102080. M=D
  102081. // #38985
  102082. @SP
  102083. // #38986
  102084. M=M+1
  102085. //vv push_d_to_stack
  102086. //push THIS
  102087. // #38987
  102088. @THAT
  102089. // #38988
  102090. D=M
  102091. //^^ push_d_to_stack
  102092. // #38989
  102093. @SP
  102094. // #38990
  102095. A=M
  102096. // #38991
  102097. M=D
  102098. // #38992
  102099. @SP
  102100. // #38993
  102101. M=M+1
  102102. //vv push_d_to_stack
  102103. //push THAT
  102104. // #38994
  102105. @SP
  102106. // #38995
  102107. D=M
  102108. // #38996
  102109. @ARG
  102110. // #38997
  102111. M=D
  102112. // #38998
  102113. @5
  102114. // #38999
  102115. D=A
  102116. // #39000
  102117. @ARG
  102118. // #39001
  102119. M=M-D // ARG = SP - args - 5
  102120. // #39002
  102121. @SP
  102122. // #39003
  102123. D=M
  102124. // #39004
  102125. @LCL
  102126. // #39005
  102127. M=D // LCL = SP
  102128. // #39006
  102129. @Keyboard.init
  102130. // #39007
  102131. 0;JMP
  102132. (RET_ADDR_406)
  102133. //
  102134. //// pop temp 0
  102135. //^^ pop_to_loc{5)
  102136. //^^ pop_stack_to_d
  102137. // #39008
  102138. @SP
  102139. // #39009
  102140. M=M-1
  102141. // #39010
  102142. A=M
  102143. // #39011
  102144. D=M
  102145. //vv pop_stack_to_d
  102146. // #39012
  102147. @5
  102148. // #39013
  102149. M=D
  102150. //vv pop_to_loc{5)
  102151. //
  102152. //// call Main.main 0
  102153. //^^ push_constant(RET_ADDR_407)
  102154. // #39014
  102155. @RET_ADDR_407
  102156. // #39015
  102157. D=A
  102158. //^^ push_d_to_stack
  102159. // #39016
  102160. @SP
  102161. // #39017
  102162. A=M
  102163. // #39018
  102164. M=D
  102165. // #39019
  102166. @SP
  102167. // #39020
  102168. M=M+1
  102169. //vv push_d_to_stack
  102170. //vv push_constant(RET_ADDR_407)
  102171. //push return-address
  102172. // #39021
  102173. @LCL
  102174. // #39022
  102175. D=M
  102176. //^^ push_d_to_stack
  102177. // #39023
  102178. @SP
  102179. // #39024
  102180. A=M
  102181. // #39025
  102182. M=D
  102183. // #39026
  102184. @SP
  102185. // #39027
  102186. M=M+1
  102187. //vv push_d_to_stack
  102188. //push LCL
  102189. // #39028
  102190. @ARG
  102191. // #39029
  102192. D=M
  102193. //^^ push_d_to_stack
  102194. // #39030
  102195. @SP
  102196. // #39031
  102197. A=M
  102198. // #39032
  102199. M=D
  102200. // #39033
  102201. @SP
  102202. // #39034
  102203. M=M+1
  102204. //vv push_d_to_stack
  102205. //push ARG
  102206. // #39035
  102207. @THIS
  102208. // #39036
  102209. D=M
  102210. //^^ push_d_to_stack
  102211. // #39037
  102212. @SP
  102213. // #39038
  102214. A=M
  102215. // #39039
  102216. M=D
  102217. // #39040
  102218. @SP
  102219. // #39041
  102220. M=M+1
  102221. //vv push_d_to_stack
  102222. //push THIS
  102223. // #39042
  102224. @THAT
  102225. // #39043
  102226. D=M
  102227. //^^ push_d_to_stack
  102228. // #39044
  102229. @SP
  102230. // #39045
  102231. A=M
  102232. // #39046
  102233. M=D
  102234. // #39047
  102235. @SP
  102236. // #39048
  102237. M=M+1
  102238. //vv push_d_to_stack
  102239. //push THAT
  102240. // #39049
  102241. @SP
  102242. // #39050
  102243. D=M
  102244. // #39051
  102245. @ARG
  102246. // #39052
  102247. M=D
  102248. // #39053
  102249. @5
  102250. // #39054
  102251. D=A
  102252. // #39055
  102253. @ARG
  102254. // #39056
  102255. M=M-D // ARG = SP - args - 5
  102256. // #39057
  102257. @SP
  102258. // #39058
  102259. D=M
  102260. // #39059
  102261. @LCL
  102262. // #39060
  102263. M=D // LCL = SP
  102264. // #39061
  102265. @Main.main
  102266. // #39062
  102267. 0;JMP
  102268. (RET_ADDR_407)
  102269. //
  102270. //// pop temp 0
  102271. //^^ pop_to_loc{5)
  102272. //^^ pop_stack_to_d
  102273. // #39063
  102274. @SP
  102275. // #39064
  102276. M=M-1
  102277. // #39065
  102278. A=M
  102279. // #39066
  102280. D=M
  102281. //vv pop_stack_to_d
  102282. // #39067
  102283. @5
  102284. // #39068
  102285. M=D
  102286. //vv pop_to_loc{5)
  102287. //
  102288. //// call Sys.halt 0
  102289. //^^ push_constant(RET_ADDR_408)
  102290. // #39069
  102291. @RET_ADDR_408
  102292. // #39070
  102293. D=A
  102294. //^^ push_d_to_stack
  102295. // #39071
  102296. @SP
  102297. // #39072
  102298. A=M
  102299. // #39073
  102300. M=D
  102301. // #39074
  102302. @SP
  102303. // #39075
  102304. M=M+1
  102305. //vv push_d_to_stack
  102306. //vv push_constant(RET_ADDR_408)
  102307. //push return-address
  102308. // #39076
  102309. @LCL
  102310. // #39077
  102311. D=M
  102312. //^^ push_d_to_stack
  102313. // #39078
  102314. @SP
  102315. // #39079
  102316. A=M
  102317. // #39080
  102318. M=D
  102319. // #39081
  102320. @SP
  102321. // #39082
  102322. M=M+1
  102323. //vv push_d_to_stack
  102324. //push LCL
  102325. // #39083
  102326. @ARG
  102327. // #39084
  102328. D=M
  102329. //^^ push_d_to_stack
  102330. // #39085
  102331. @SP
  102332. // #39086
  102333. A=M
  102334. // #39087
  102335. M=D
  102336. // #39088
  102337. @SP
  102338. // #39089
  102339. M=M+1
  102340. //vv push_d_to_stack
  102341. //push ARG
  102342. // #39090
  102343. @THIS
  102344. // #39091
  102345. D=M
  102346. //^^ push_d_to_stack
  102347. // #39092
  102348. @SP
  102349. // #39093
  102350. A=M
  102351. // #39094
  102352. M=D
  102353. // #39095
  102354. @SP
  102355. // #39096
  102356. M=M+1
  102357. //vv push_d_to_stack
  102358. //push THIS
  102359. // #39097
  102360. @THAT
  102361. // #39098
  102362. D=M
  102363. //^^ push_d_to_stack
  102364. // #39099
  102365. @SP
  102366. // #39100
  102367. A=M
  102368. // #39101
  102369. M=D
  102370. // #39102
  102371. @SP
  102372. // #39103
  102373. M=M+1
  102374. //vv push_d_to_stack
  102375. //push THAT
  102376. // #39104
  102377. @SP
  102378. // #39105
  102379. D=M
  102380. // #39106
  102381. @ARG
  102382. // #39107
  102383. M=D
  102384. // #39108
  102385. @5
  102386. // #39109
  102387. D=A
  102388. // #39110
  102389. @ARG
  102390. // #39111
  102391. M=M-D // ARG = SP - args - 5
  102392. // #39112
  102393. @SP
  102394. // #39113
  102395. D=M
  102396. // #39114
  102397. @LCL
  102398. // #39115
  102399. M=D // LCL = SP
  102400. // #39116
  102401. @Sys.halt
  102402. // #39117
  102403. 0;JMP
  102404. (RET_ADDR_408)
  102405. //
  102406. //// pop temp 0
  102407. //^^ pop_to_loc{5)
  102408. //^^ pop_stack_to_d
  102409. // #39118
  102410. @SP
  102411. // #39119
  102412. M=M-1
  102413. // #39120
  102414. A=M
  102415. // #39121
  102416. D=M
  102417. //vv pop_stack_to_d
  102418. // #39122
  102419. @5
  102420. // #39123
  102421. M=D
  102422. //vv pop_to_loc{5)
  102423. //
  102424. //// push constant 0
  102425. //^^ push_constant(0)
  102426. // #39124
  102427. @0
  102428. // #39125
  102429. D=A
  102430. //^^ push_d_to_stack
  102431. // #39126
  102432. @SP
  102433. // #39127
  102434. A=M
  102435. // #39128
  102436. M=D
  102437. // #39129
  102438. @SP
  102439. // #39130
  102440. M=M+1
  102441. //vv push_d_to_stack
  102442. //vv push_constant(0)
  102443. //
  102444. //// return
  102445. // #39131
  102446. @LCL
  102447. // #39132
  102448. D=M
  102449. // #39133
  102450. @R14
  102451. // #39134
  102452. M=D //R14=LCL
  102453. // #39135
  102454. @5
  102455. // #39136
  102456. A=D-A
  102457. // #39137
  102458. D=M
  102459. // #39138
  102460. @R15
  102461. // #39139
  102462. M=D //R15=*(LCL-5)
  102463. //^^ pop_stack_to_d
  102464. // #39140
  102465. @SP
  102466. // #39141
  102467. M=M-1
  102468. // #39142
  102469. A=M
  102470. // #39143
  102471. D=M
  102472. //vv pop_stack_to_d
  102473. // #39144
  102474. @ARG
  102475. // #39145
  102476. A=M
  102477. // #39146
  102478. M=D //*ARG = pop()
  102479. // #39147
  102480. @ARG
  102481. // #39148
  102482. D=M
  102483. // #39149
  102484. @SP
  102485. // #39150
  102486. M=D+1 //SP=ARG+1
  102487. // #39151
  102488. @R14
  102489. // #39152
  102490. AM=M-1
  102491. // #39153
  102492. D=M
  102493. // #39154
  102494. @THAT
  102495. // #39155
  102496. M=D //THAT = *(--R14)
  102497. // #39156
  102498. @R14
  102499. // #39157
  102500. AM=M-1
  102501. // #39158
  102502. D=M
  102503. // #39159
  102504. @THIS
  102505. // #39160
  102506. M=D //THIS = *(--R14)
  102507. // #39161
  102508. @R14
  102509. // #39162
  102510. AM=M-1
  102511. // #39163
  102512. D=M
  102513. // #39164
  102514. @ARG
  102515. // #39165
  102516. M=D //ARG = *(--R14)
  102517. // #39166
  102518. @R14
  102519. // #39167
  102520. AM=M-1
  102521. // #39168
  102522. D=M
  102523. // #39169
  102524. @LCL
  102525. // #39170
  102526. M=D //LCL = *(--R14)
  102527. // #39171
  102528. @R15
  102529. // #39172
  102530. A=M
  102531. // #39173
  102532. 0;JMP //goto *R15
  102533. //
  102534. //// function Sys.halt 0
  102535. (Sys.halt)
  102536. //
  102537. //// label WHILE_EXP0
  102538. (Sys.halt$WHILE_EXP0)
  102539. //
  102540. //// push constant 0
  102541. //^^ push_constant(0)
  102542. // #39174
  102543. @0
  102544. // #39175
  102545. D=A
  102546. //^^ push_d_to_stack
  102547. // #39176
  102548. @SP
  102549. // #39177
  102550. A=M
  102551. // #39178
  102552. M=D
  102553. // #39179
  102554. @SP
  102555. // #39180
  102556. M=M+1
  102557. //vv push_d_to_stack
  102558. //vv push_constant(0)
  102559. //
  102560. //// not
  102561. //^^ arith_unary_op(!)
  102562. //^^ pop_stack_to_d
  102563. // #39181
  102564. @SP
  102565. // #39182
  102566. M=M-1
  102567. // #39183
  102568. A=M
  102569. // #39184
  102570. D=M
  102571. //vv pop_stack_to_d
  102572. // #39185
  102573. D=!D
  102574. //^^ push_d_to_stack
  102575. // #39186
  102576. @SP
  102577. // #39187
  102578. A=M
  102579. // #39188
  102580. M=D
  102581. // #39189
  102582. @SP
  102583. // #39190
  102584. M=M+1
  102585. //vv push_d_to_stack
  102586. //vv arith_unary_op(!)
  102587. //
  102588. //// not
  102589. //^^ arith_unary_op(!)
  102590. //^^ pop_stack_to_d
  102591. // #39191
  102592. @SP
  102593. // #39192
  102594. M=M-1
  102595. // #39193
  102596. A=M
  102597. // #39194
  102598. D=M
  102599. //vv pop_stack_to_d
  102600. // #39195
  102601. D=!D
  102602. //^^ push_d_to_stack
  102603. // #39196
  102604. @SP
  102605. // #39197
  102606. A=M
  102607. // #39198
  102608. M=D
  102609. // #39199
  102610. @SP
  102611. // #39200
  102612. M=M+1
  102613. //vv push_d_to_stack
  102614. //vv arith_unary_op(!)
  102615. //
  102616. //// if-goto WHILE_END0
  102617. //^^ pop_stack_to_d
  102618. // #39201
  102619. @SP
  102620. // #39202
  102621. M=M-1
  102622. // #39203
  102623. A=M
  102624. // #39204
  102625. D=M
  102626. //vv pop_stack_to_d
  102627. // #39205
  102628. @Sys.halt$WHILE_END0
  102629. // #39206
  102630. D;JNE
  102631. //
  102632. //// goto WHILE_EXP0
  102633. // #39207
  102634. @Sys.halt$WHILE_EXP0
  102635. // #39208
  102636. 0;JMP
  102637. //
  102638. //// label WHILE_END0
  102639. (Sys.halt$WHILE_END0)
  102640. //
  102641. //// push constant 0
  102642. //^^ push_constant(0)
  102643. // #39209
  102644. @0
  102645. // #39210
  102646. D=A
  102647. //^^ push_d_to_stack
  102648. // #39211
  102649. @SP
  102650. // #39212
  102651. A=M
  102652. // #39213
  102653. M=D
  102654. // #39214
  102655. @SP
  102656. // #39215
  102657. M=M+1
  102658. //vv push_d_to_stack
  102659. //vv push_constant(0)
  102660. //
  102661. //// return
  102662. // #39216
  102663. @LCL
  102664. // #39217
  102665. D=M
  102666. // #39218
  102667. @R14
  102668. // #39219
  102669. M=D //R14=LCL
  102670. // #39220
  102671. @5
  102672. // #39221
  102673. A=D-A
  102674. // #39222
  102675. D=M
  102676. // #39223
  102677. @R15
  102678. // #39224
  102679. M=D //R15=*(LCL-5)
  102680. //^^ pop_stack_to_d
  102681. // #39225
  102682. @SP
  102683. // #39226
  102684. M=M-1
  102685. // #39227
  102686. A=M
  102687. // #39228
  102688. D=M
  102689. //vv pop_stack_to_d
  102690. // #39229
  102691. @ARG
  102692. // #39230
  102693. A=M
  102694. // #39231
  102695. M=D //*ARG = pop()
  102696. // #39232
  102697. @ARG
  102698. // #39233
  102699. D=M
  102700. // #39234
  102701. @SP
  102702. // #39235
  102703. M=D+1 //SP=ARG+1
  102704. // #39236
  102705. @R14
  102706. // #39237
  102707. AM=M-1
  102708. // #39238
  102709. D=M
  102710. // #39239
  102711. @THAT
  102712. // #39240
  102713. M=D //THAT = *(--R14)
  102714. // #39241
  102715. @R14
  102716. // #39242
  102717. AM=M-1
  102718. // #39243
  102719. D=M
  102720. // #39244
  102721. @THIS
  102722. // #39245
  102723. M=D //THIS = *(--R14)
  102724. // #39246
  102725. @R14
  102726. // #39247
  102727. AM=M-1
  102728. // #39248
  102729. D=M
  102730. // #39249
  102731. @ARG
  102732. // #39250
  102733. M=D //ARG = *(--R14)
  102734. // #39251
  102735. @R14
  102736. // #39252
  102737. AM=M-1
  102738. // #39253
  102739. D=M
  102740. // #39254
  102741. @LCL
  102742. // #39255
  102743. M=D //LCL = *(--R14)
  102744. // #39256
  102745. @R15
  102746. // #39257
  102747. A=M
  102748. // #39258
  102749. 0;JMP //goto *R15
  102750. //
  102751. //// function Sys.wait 1
  102752. (Sys.wait)
  102753. // #39259
  102754. D=0
  102755. //^^ push_d_to_stack
  102756. // #39260
  102757. @SP
  102758. // #39261
  102759. A=M
  102760. // #39262
  102761. M=D
  102762. // #39263
  102763. @SP
  102764. // #39264
  102765. M=M+1
  102766. //vv push_d_to_stack
  102767. //
  102768. //// push argument 0
  102769. //^^ push_from_ram(ARG, 0)
  102770. // #39265
  102771. @ARG
  102772. // #39266
  102773. D=M
  102774. // #39267
  102775. @0
  102776. // #39268
  102777. A=D+A
  102778. // #39269
  102779. D=M
  102780. //^^ push_d_to_stack
  102781. // #39270
  102782. @SP
  102783. // #39271
  102784. A=M
  102785. // #39272
  102786. M=D
  102787. // #39273
  102788. @SP
  102789. // #39274
  102790. M=M+1
  102791. //vv push_d_to_stack
  102792. //vv push_from_ram(ARG, 0)
  102793. //
  102794. //// push constant 0
  102795. //^^ push_constant(0)
  102796. // #39275
  102797. @0
  102798. // #39276
  102799. D=A
  102800. //^^ push_d_to_stack
  102801. // #39277
  102802. @SP
  102803. // #39278
  102804. A=M
  102805. // #39279
  102806. M=D
  102807. // #39280
  102808. @SP
  102809. // #39281
  102810. M=M+1
  102811. //vv push_d_to_stack
  102812. //vv push_constant(0)
  102813. //
  102814. //// lt
  102815. //^^ arith_cmp_op(JLT)
  102816. //^^ pop_stack_to_d
  102817. // #39282
  102818. @SP
  102819. // #39283
  102820. M=M-1
  102821. // #39284
  102822. A=M
  102823. // #39285
  102824. D=M
  102825. //vv pop_stack_to_d
  102826. //^^ arith_d_with_stack_top(D-M)
  102827. // #39286
  102828. @R13
  102829. // #39287
  102830. M=D
  102831. //^^ pop_stack_to_d
  102832. // #39288
  102833. @SP
  102834. // #39289
  102835. M=M-1
  102836. // #39290
  102837. A=M
  102838. // #39291
  102839. D=M
  102840. //vv pop_stack_to_d
  102841. // #39292
  102842. @R13
  102843. // #39293
  102844. D=D-M
  102845. // #39294
  102846. @R13
  102847. // #39295
  102848. M=0
  102849. //vv arith_d_with_stack_top(D-M)
  102850. // #39296
  102851. @PUT_TRUE_409
  102852. // #39297
  102853. D;JLT
  102854. // #39298
  102855. @R13
  102856. // #39299
  102857. M=0
  102858. // #39300
  102859. @CONT_409
  102860. // #39301
  102861. 0;JMP
  102862. (PUT_TRUE_409)
  102863. // #39302
  102864. @R13
  102865. // #39303
  102866. M=-1
  102867. (CONT_409)
  102868. // #39304
  102869. @R13
  102870. // #39305
  102871. D=M
  102872. // #39306
  102873. @R13
  102874. // #39307
  102875. M=0
  102876. //^^ push_d_to_stack
  102877. // #39308
  102878. @SP
  102879. // #39309
  102880. A=M
  102881. // #39310
  102882. M=D
  102883. // #39311
  102884. @SP
  102885. // #39312
  102886. M=M+1
  102887. //vv push_d_to_stack
  102888. //vv arith_cmp_op(JLT)
  102889. //
  102890. //// if-goto IF_TRUE0
  102891. //^^ pop_stack_to_d
  102892. // #39313
  102893. @SP
  102894. // #39314
  102895. M=M-1
  102896. // #39315
  102897. A=M
  102898. // #39316
  102899. D=M
  102900. //vv pop_stack_to_d
  102901. // #39317
  102902. @Sys.wait$IF_TRUE0
  102903. // #39318
  102904. D;JNE
  102905. //
  102906. //// goto IF_FALSE0
  102907. // #39319
  102908. @Sys.wait$IF_FALSE0
  102909. // #39320
  102910. 0;JMP
  102911. //
  102912. //// label IF_TRUE0
  102913. (Sys.wait$IF_TRUE0)
  102914. //
  102915. //// push constant 1
  102916. //^^ push_constant(1)
  102917. // #39321
  102918. @1
  102919. // #39322
  102920. D=A
  102921. //^^ push_d_to_stack
  102922. // #39323
  102923. @SP
  102924. // #39324
  102925. A=M
  102926. // #39325
  102927. M=D
  102928. // #39326
  102929. @SP
  102930. // #39327
  102931. M=M+1
  102932. //vv push_d_to_stack
  102933. //vv push_constant(1)
  102934. //
  102935. //// call Sys.error 1
  102936. //^^ push_constant(RET_ADDR_410)
  102937. // #39328
  102938. @RET_ADDR_410
  102939. // #39329
  102940. D=A
  102941. //^^ push_d_to_stack
  102942. // #39330
  102943. @SP
  102944. // #39331
  102945. A=M
  102946. // #39332
  102947. M=D
  102948. // #39333
  102949. @SP
  102950. // #39334
  102951. M=M+1
  102952. //vv push_d_to_stack
  102953. //vv push_constant(RET_ADDR_410)
  102954. //push return-address
  102955. // #39335
  102956. @LCL
  102957. // #39336
  102958. D=M
  102959. //^^ push_d_to_stack
  102960. // #39337
  102961. @SP
  102962. // #39338
  102963. A=M
  102964. // #39339
  102965. M=D
  102966. // #39340
  102967. @SP
  102968. // #39341
  102969. M=M+1
  102970. //vv push_d_to_stack
  102971. //push LCL
  102972. // #39342
  102973. @ARG
  102974. // #39343
  102975. D=M
  102976. //^^ push_d_to_stack
  102977. // #39344
  102978. @SP
  102979. // #39345
  102980. A=M
  102981. // #39346
  102982. M=D
  102983. // #39347
  102984. @SP
  102985. // #39348
  102986. M=M+1
  102987. //vv push_d_to_stack
  102988. //push ARG
  102989. // #39349
  102990. @THIS
  102991. // #39350
  102992. D=M
  102993. //^^ push_d_to_stack
  102994. // #39351
  102995. @SP
  102996. // #39352
  102997. A=M
  102998. // #39353
  102999. M=D
  103000. // #39354
  103001. @SP
  103002. // #39355
  103003. M=M+1
  103004. //vv push_d_to_stack
  103005. //push THIS
  103006. // #39356
  103007. @THAT
  103008. // #39357
  103009. D=M
  103010. //^^ push_d_to_stack
  103011. // #39358
  103012. @SP
  103013. // #39359
  103014. A=M
  103015. // #39360
  103016. M=D
  103017. // #39361
  103018. @SP
  103019. // #39362
  103020. M=M+1
  103021. //vv push_d_to_stack
  103022. //push THAT
  103023. // #39363
  103024. @SP
  103025. // #39364
  103026. D=M
  103027. // #39365
  103028. @ARG
  103029. // #39366
  103030. M=D
  103031. // #39367
  103032. @6
  103033. // #39368
  103034. D=A
  103035. // #39369
  103036. @ARG
  103037. // #39370
  103038. M=M-D // ARG = SP - args - 5
  103039. // #39371
  103040. @SP
  103041. // #39372
  103042. D=M
  103043. // #39373
  103044. @LCL
  103045. // #39374
  103046. M=D // LCL = SP
  103047. // #39375
  103048. @Sys.error
  103049. // #39376
  103050. 0;JMP
  103051. (RET_ADDR_410)
  103052. //
  103053. //// pop temp 0
  103054. //^^ pop_to_loc{5)
  103055. //^^ pop_stack_to_d
  103056. // #39377
  103057. @SP
  103058. // #39378
  103059. M=M-1
  103060. // #39379
  103061. A=M
  103062. // #39380
  103063. D=M
  103064. //vv pop_stack_to_d
  103065. // #39381
  103066. @5
  103067. // #39382
  103068. M=D
  103069. //vv pop_to_loc{5)
  103070. //
  103071. //// label IF_FALSE0
  103072. (Sys.wait$IF_FALSE0)
  103073. //
  103074. //// label WHILE_EXP0
  103075. (Sys.wait$WHILE_EXP0)
  103076. //
  103077. //// push argument 0
  103078. //^^ push_from_ram(ARG, 0)
  103079. // #39383
  103080. @ARG
  103081. // #39384
  103082. D=M
  103083. // #39385
  103084. @0
  103085. // #39386
  103086. A=D+A
  103087. // #39387
  103088. D=M
  103089. //^^ push_d_to_stack
  103090. // #39388
  103091. @SP
  103092. // #39389
  103093. A=M
  103094. // #39390
  103095. M=D
  103096. // #39391
  103097. @SP
  103098. // #39392
  103099. M=M+1
  103100. //vv push_d_to_stack
  103101. //vv push_from_ram(ARG, 0)
  103102. //
  103103. //// push constant 0
  103104. //^^ push_constant(0)
  103105. // #39393
  103106. @0
  103107. // #39394
  103108. D=A
  103109. //^^ push_d_to_stack
  103110. // #39395
  103111. @SP
  103112. // #39396
  103113. A=M
  103114. // #39397
  103115. M=D
  103116. // #39398
  103117. @SP
  103118. // #39399
  103119. M=M+1
  103120. //vv push_d_to_stack
  103121. //vv push_constant(0)
  103122. //
  103123. //// gt
  103124. //^^ arith_cmp_op(JGT)
  103125. //^^ pop_stack_to_d
  103126. // #39400
  103127. @SP
  103128. // #39401
  103129. M=M-1
  103130. // #39402
  103131. A=M
  103132. // #39403
  103133. D=M
  103134. //vv pop_stack_to_d
  103135. //^^ arith_d_with_stack_top(D-M)
  103136. // #39404
  103137. @R13
  103138. // #39405
  103139. M=D
  103140. //^^ pop_stack_to_d
  103141. // #39406
  103142. @SP
  103143. // #39407
  103144. M=M-1
  103145. // #39408
  103146. A=M
  103147. // #39409
  103148. D=M
  103149. //vv pop_stack_to_d
  103150. // #39410
  103151. @R13
  103152. // #39411
  103153. D=D-M
  103154. // #39412
  103155. @R13
  103156. // #39413
  103157. M=0
  103158. //vv arith_d_with_stack_top(D-M)
  103159. // #39414
  103160. @PUT_TRUE_411
  103161. // #39415
  103162. D;JGT
  103163. // #39416
  103164. @R13
  103165. // #39417
  103166. M=0
  103167. // #39418
  103168. @CONT_411
  103169. // #39419
  103170. 0;JMP
  103171. (PUT_TRUE_411)
  103172. // #39420
  103173. @R13
  103174. // #39421
  103175. M=-1
  103176. (CONT_411)
  103177. // #39422
  103178. @R13
  103179. // #39423
  103180. D=M
  103181. // #39424
  103182. @R13
  103183. // #39425
  103184. M=0
  103185. //^^ push_d_to_stack
  103186. // #39426
  103187. @SP
  103188. // #39427
  103189. A=M
  103190. // #39428
  103191. M=D
  103192. // #39429
  103193. @SP
  103194. // #39430
  103195. M=M+1
  103196. //vv push_d_to_stack
  103197. //vv arith_cmp_op(JGT)
  103198. //
  103199. //// not
  103200. //^^ arith_unary_op(!)
  103201. //^^ pop_stack_to_d
  103202. // #39431
  103203. @SP
  103204. // #39432
  103205. M=M-1
  103206. // #39433
  103207. A=M
  103208. // #39434
  103209. D=M
  103210. //vv pop_stack_to_d
  103211. // #39435
  103212. D=!D
  103213. //^^ push_d_to_stack
  103214. // #39436
  103215. @SP
  103216. // #39437
  103217. A=M
  103218. // #39438
  103219. M=D
  103220. // #39439
  103221. @SP
  103222. // #39440
  103223. M=M+1
  103224. //vv push_d_to_stack
  103225. //vv arith_unary_op(!)
  103226. //
  103227. //// if-goto WHILE_END0
  103228. //^^ pop_stack_to_d
  103229. // #39441
  103230. @SP
  103231. // #39442
  103232. M=M-1
  103233. // #39443
  103234. A=M
  103235. // #39444
  103236. D=M
  103237. //vv pop_stack_to_d
  103238. // #39445
  103239. @Sys.wait$WHILE_END0
  103240. // #39446
  103241. D;JNE
  103242. //
  103243. //// push constant 50
  103244. //^^ push_constant(50)
  103245. // #39447
  103246. @50
  103247. // #39448
  103248. D=A
  103249. //^^ push_d_to_stack
  103250. // #39449
  103251. @SP
  103252. // #39450
  103253. A=M
  103254. // #39451
  103255. M=D
  103256. // #39452
  103257. @SP
  103258. // #39453
  103259. M=M+1
  103260. //vv push_d_to_stack
  103261. //vv push_constant(50)
  103262. //
  103263. //// pop local 0
  103264. //^^ pop_to_ram(LCL, 0)
  103265. // #39454
  103266. @LCL
  103267. // #39455
  103268. D=M
  103269. // #39456
  103270. @0
  103271. // #39457
  103272. D=D+A
  103273. // #39458
  103274. @R13
  103275. // #39459
  103276. M=D
  103277. //^^ pop_stack_to_d
  103278. // #39460
  103279. @SP
  103280. // #39461
  103281. M=M-1
  103282. // #39462
  103283. A=M
  103284. // #39463
  103285. D=M
  103286. //vv pop_stack_to_d
  103287. // #39464
  103288. @R13
  103289. // #39465
  103290. A=M
  103291. // #39466
  103292. M=D
  103293. // #39467
  103294. @R13
  103295. // #39468
  103296. M=0
  103297. //vv pop_to_ram(LCL, 0)
  103298. //
  103299. //// label WHILE_EXP1
  103300. (Sys.wait$WHILE_EXP1)
  103301. //
  103302. //// push local 0
  103303. //^^ push_from_ram(LCL, 0)
  103304. // #39469
  103305. @LCL
  103306. // #39470
  103307. D=M
  103308. // #39471
  103309. @0
  103310. // #39472
  103311. A=D+A
  103312. // #39473
  103313. D=M
  103314. //^^ push_d_to_stack
  103315. // #39474
  103316. @SP
  103317. // #39475
  103318. A=M
  103319. // #39476
  103320. M=D
  103321. // #39477
  103322. @SP
  103323. // #39478
  103324. M=M+1
  103325. //vv push_d_to_stack
  103326. //vv push_from_ram(LCL, 0)
  103327. //
  103328. //// push constant 0
  103329. //^^ push_constant(0)
  103330. // #39479
  103331. @0
  103332. // #39480
  103333. D=A
  103334. //^^ push_d_to_stack
  103335. // #39481
  103336. @SP
  103337. // #39482
  103338. A=M
  103339. // #39483
  103340. M=D
  103341. // #39484
  103342. @SP
  103343. // #39485
  103344. M=M+1
  103345. //vv push_d_to_stack
  103346. //vv push_constant(0)
  103347. //
  103348. //// gt
  103349. //^^ arith_cmp_op(JGT)
  103350. //^^ pop_stack_to_d
  103351. // #39486
  103352. @SP
  103353. // #39487
  103354. M=M-1
  103355. // #39488
  103356. A=M
  103357. // #39489
  103358. D=M
  103359. //vv pop_stack_to_d
  103360. //^^ arith_d_with_stack_top(D-M)
  103361. // #39490
  103362. @R13
  103363. // #39491
  103364. M=D
  103365. //^^ pop_stack_to_d
  103366. // #39492
  103367. @SP
  103368. // #39493
  103369. M=M-1
  103370. // #39494
  103371. A=M
  103372. // #39495
  103373. D=M
  103374. //vv pop_stack_to_d
  103375. // #39496
  103376. @R13
  103377. // #39497
  103378. D=D-M
  103379. // #39498
  103380. @R13
  103381. // #39499
  103382. M=0
  103383. //vv arith_d_with_stack_top(D-M)
  103384. // #39500
  103385. @PUT_TRUE_412
  103386. // #39501
  103387. D;JGT
  103388. // #39502
  103389. @R13
  103390. // #39503
  103391. M=0
  103392. // #39504
  103393. @CONT_412
  103394. // #39505
  103395. 0;JMP
  103396. (PUT_TRUE_412)
  103397. // #39506
  103398. @R13
  103399. // #39507
  103400. M=-1
  103401. (CONT_412)
  103402. // #39508
  103403. @R13
  103404. // #39509
  103405. D=M
  103406. // #39510
  103407. @R13
  103408. // #39511
  103409. M=0
  103410. //^^ push_d_to_stack
  103411. // #39512
  103412. @SP
  103413. // #39513
  103414. A=M
  103415. // #39514
  103416. M=D
  103417. // #39515
  103418. @SP
  103419. // #39516
  103420. M=M+1
  103421. //vv push_d_to_stack
  103422. //vv arith_cmp_op(JGT)
  103423. //
  103424. //// not
  103425. //^^ arith_unary_op(!)
  103426. //^^ pop_stack_to_d
  103427. // #39517
  103428. @SP
  103429. // #39518
  103430. M=M-1
  103431. // #39519
  103432. A=M
  103433. // #39520
  103434. D=M
  103435. //vv pop_stack_to_d
  103436. // #39521
  103437. D=!D
  103438. //^^ push_d_to_stack
  103439. // #39522
  103440. @SP
  103441. // #39523
  103442. A=M
  103443. // #39524
  103444. M=D
  103445. // #39525
  103446. @SP
  103447. // #39526
  103448. M=M+1
  103449. //vv push_d_to_stack
  103450. //vv arith_unary_op(!)
  103451. //
  103452. //// if-goto WHILE_END1
  103453. //^^ pop_stack_to_d
  103454. // #39527
  103455. @SP
  103456. // #39528
  103457. M=M-1
  103458. // #39529
  103459. A=M
  103460. // #39530
  103461. D=M
  103462. //vv pop_stack_to_d
  103463. // #39531
  103464. @Sys.wait$WHILE_END1
  103465. // #39532
  103466. D;JNE
  103467. //
  103468. //// push local 0
  103469. //^^ push_from_ram(LCL, 0)
  103470. // #39533
  103471. @LCL
  103472. // #39534
  103473. D=M
  103474. // #39535
  103475. @0
  103476. // #39536
  103477. A=D+A
  103478. // #39537
  103479. D=M
  103480. //^^ push_d_to_stack
  103481. // #39538
  103482. @SP
  103483. // #39539
  103484. A=M
  103485. // #39540
  103486. M=D
  103487. // #39541
  103488. @SP
  103489. // #39542
  103490. M=M+1
  103491. //vv push_d_to_stack
  103492. //vv push_from_ram(LCL, 0)
  103493. //
  103494. //// push constant 1
  103495. //^^ push_constant(1)
  103496. // #39543
  103497. @1
  103498. // #39544
  103499. D=A
  103500. //^^ push_d_to_stack
  103501. // #39545
  103502. @SP
  103503. // #39546
  103504. A=M
  103505. // #39547
  103506. M=D
  103507. // #39548
  103508. @SP
  103509. // #39549
  103510. M=M+1
  103511. //vv push_d_to_stack
  103512. //vv push_constant(1)
  103513. //
  103514. //// sub
  103515. //^^ arith_binary_op(-)
  103516. //^^ pop_stack_to_d
  103517. // #39550
  103518. @SP
  103519. // #39551
  103520. M=M-1
  103521. // #39552
  103522. A=M
  103523. // #39553
  103524. D=M
  103525. //vv pop_stack_to_d
  103526. //^^ arith_d_with_stack_top(D-M)
  103527. // #39554
  103528. @R13
  103529. // #39555
  103530. M=D
  103531. //^^ pop_stack_to_d
  103532. // #39556
  103533. @SP
  103534. // #39557
  103535. M=M-1
  103536. // #39558
  103537. A=M
  103538. // #39559
  103539. D=M
  103540. //vv pop_stack_to_d
  103541. // #39560
  103542. @R13
  103543. // #39561
  103544. D=D-M
  103545. // #39562
  103546. @R13
  103547. // #39563
  103548. M=0
  103549. //vv arith_d_with_stack_top(D-M)
  103550. //^^ push_d_to_stack
  103551. // #39564
  103552. @SP
  103553. // #39565
  103554. A=M
  103555. // #39566
  103556. M=D
  103557. // #39567
  103558. @SP
  103559. // #39568
  103560. M=M+1
  103561. //vv push_d_to_stack
  103562. //vv arith_binary_op(-)
  103563. //
  103564. //// pop local 0
  103565. //^^ pop_to_ram(LCL, 0)
  103566. // #39569
  103567. @LCL
  103568. // #39570
  103569. D=M
  103570. // #39571
  103571. @0
  103572. // #39572
  103573. D=D+A
  103574. // #39573
  103575. @R13
  103576. // #39574
  103577. M=D
  103578. //^^ pop_stack_to_d
  103579. // #39575
  103580. @SP
  103581. // #39576
  103582. M=M-1
  103583. // #39577
  103584. A=M
  103585. // #39578
  103586. D=M
  103587. //vv pop_stack_to_d
  103588. // #39579
  103589. @R13
  103590. // #39580
  103591. A=M
  103592. // #39581
  103593. M=D
  103594. // #39582
  103595. @R13
  103596. // #39583
  103597. M=0
  103598. //vv pop_to_ram(LCL, 0)
  103599. //
  103600. //// goto WHILE_EXP1
  103601. // #39584
  103602. @Sys.wait$WHILE_EXP1
  103603. // #39585
  103604. 0;JMP
  103605. //
  103606. //// label WHILE_END1
  103607. (Sys.wait$WHILE_END1)
  103608. //
  103609. //// push argument 0
  103610. //^^ push_from_ram(ARG, 0)
  103611. // #39586
  103612. @ARG
  103613. // #39587
  103614. D=M
  103615. // #39588
  103616. @0
  103617. // #39589
  103618. A=D+A
  103619. // #39590
  103620. D=M
  103621. //^^ push_d_to_stack
  103622. // #39591
  103623. @SP
  103624. // #39592
  103625. A=M
  103626. // #39593
  103627. M=D
  103628. // #39594
  103629. @SP
  103630. // #39595
  103631. M=M+1
  103632. //vv push_d_to_stack
  103633. //vv push_from_ram(ARG, 0)
  103634. //
  103635. //// push constant 1
  103636. //^^ push_constant(1)
  103637. // #39596
  103638. @1
  103639. // #39597
  103640. D=A
  103641. //^^ push_d_to_stack
  103642. // #39598
  103643. @SP
  103644. // #39599
  103645. A=M
  103646. // #39600
  103647. M=D
  103648. // #39601
  103649. @SP
  103650. // #39602
  103651. M=M+1
  103652. //vv push_d_to_stack
  103653. //vv push_constant(1)
  103654. //
  103655. //// sub
  103656. //^^ arith_binary_op(-)
  103657. //^^ pop_stack_to_d
  103658. // #39603
  103659. @SP
  103660. // #39604
  103661. M=M-1
  103662. // #39605
  103663. A=M
  103664. // #39606
  103665. D=M
  103666. //vv pop_stack_to_d
  103667. //^^ arith_d_with_stack_top(D-M)
  103668. // #39607
  103669. @R13
  103670. // #39608
  103671. M=D
  103672. //^^ pop_stack_to_d
  103673. // #39609
  103674. @SP
  103675. // #39610
  103676. M=M-1
  103677. // #39611
  103678. A=M
  103679. // #39612
  103680. D=M
  103681. //vv pop_stack_to_d
  103682. // #39613
  103683. @R13
  103684. // #39614
  103685. D=D-M
  103686. // #39615
  103687. @R13
  103688. // #39616
  103689. M=0
  103690. //vv arith_d_with_stack_top(D-M)
  103691. //^^ push_d_to_stack
  103692. // #39617
  103693. @SP
  103694. // #39618
  103695. A=M
  103696. // #39619
  103697. M=D
  103698. // #39620
  103699. @SP
  103700. // #39621
  103701. M=M+1
  103702. //vv push_d_to_stack
  103703. //vv arith_binary_op(-)
  103704. //
  103705. //// pop argument 0
  103706. //^^ pop_to_ram(ARG, 0)
  103707. // #39622
  103708. @ARG
  103709. // #39623
  103710. D=M
  103711. // #39624
  103712. @0
  103713. // #39625
  103714. D=D+A
  103715. // #39626
  103716. @R13
  103717. // #39627
  103718. M=D
  103719. //^^ pop_stack_to_d
  103720. // #39628
  103721. @SP
  103722. // #39629
  103723. M=M-1
  103724. // #39630
  103725. A=M
  103726. // #39631
  103727. D=M
  103728. //vv pop_stack_to_d
  103729. // #39632
  103730. @R13
  103731. // #39633
  103732. A=M
  103733. // #39634
  103734. M=D
  103735. // #39635
  103736. @R13
  103737. // #39636
  103738. M=0
  103739. //vv pop_to_ram(ARG, 0)
  103740. //
  103741. //// goto WHILE_EXP0
  103742. // #39637
  103743. @Sys.wait$WHILE_EXP0
  103744. // #39638
  103745. 0;JMP
  103746. //
  103747. //// label WHILE_END0
  103748. (Sys.wait$WHILE_END0)
  103749. //
  103750. //// push constant 0
  103751. //^^ push_constant(0)
  103752. // #39639
  103753. @0
  103754. // #39640
  103755. D=A
  103756. //^^ push_d_to_stack
  103757. // #39641
  103758. @SP
  103759. // #39642
  103760. A=M
  103761. // #39643
  103762. M=D
  103763. // #39644
  103764. @SP
  103765. // #39645
  103766. M=M+1
  103767. //vv push_d_to_stack
  103768. //vv push_constant(0)
  103769. //
  103770. //// return
  103771. // #39646
  103772. @LCL
  103773. // #39647
  103774. D=M
  103775. // #39648
  103776. @R14
  103777. // #39649
  103778. M=D //R14=LCL
  103779. // #39650
  103780. @5
  103781. // #39651
  103782. A=D-A
  103783. // #39652
  103784. D=M
  103785. // #39653
  103786. @R15
  103787. // #39654
  103788. M=D //R15=*(LCL-5)
  103789. //^^ pop_stack_to_d
  103790. // #39655
  103791. @SP
  103792. // #39656
  103793. M=M-1
  103794. // #39657
  103795. A=M
  103796. // #39658
  103797. D=M
  103798. //vv pop_stack_to_d
  103799. // #39659
  103800. @ARG
  103801. // #39660
  103802. A=M
  103803. // #39661
  103804. M=D //*ARG = pop()
  103805. // #39662
  103806. @ARG
  103807. // #39663
  103808. D=M
  103809. // #39664
  103810. @SP
  103811. // #39665
  103812. M=D+1 //SP=ARG+1
  103813. // #39666
  103814. @R14
  103815. // #39667
  103816. AM=M-1
  103817. // #39668
  103818. D=M
  103819. // #39669
  103820. @THAT
  103821. // #39670
  103822. M=D //THAT = *(--R14)
  103823. // #39671
  103824. @R14
  103825. // #39672
  103826. AM=M-1
  103827. // #39673
  103828. D=M
  103829. // #39674
  103830. @THIS
  103831. // #39675
  103832. M=D //THIS = *(--R14)
  103833. // #39676
  103834. @R14
  103835. // #39677
  103836. AM=M-1
  103837. // #39678
  103838. D=M
  103839. // #39679
  103840. @ARG
  103841. // #39680
  103842. M=D //ARG = *(--R14)
  103843. // #39681
  103844. @R14
  103845. // #39682
  103846. AM=M-1
  103847. // #39683
  103848. D=M
  103849. // #39684
  103850. @LCL
  103851. // #39685
  103852. M=D //LCL = *(--R14)
  103853. // #39686
  103854. @R15
  103855. // #39687
  103856. A=M
  103857. // #39688
  103858. 0;JMP //goto *R15
  103859. //
  103860. //// function Sys.error 0
  103861. (Sys.error)
  103862. //
  103863. //// push constant 3
  103864. //^^ push_constant(3)
  103865. // #39689
  103866. @3
  103867. // #39690
  103868. D=A
  103869. //^^ push_d_to_stack
  103870. // #39691
  103871. @SP
  103872. // #39692
  103873. A=M
  103874. // #39693
  103875. M=D
  103876. // #39694
  103877. @SP
  103878. // #39695
  103879. M=M+1
  103880. //vv push_d_to_stack
  103881. //vv push_constant(3)
  103882. //
  103883. //// call String.new 1
  103884. //^^ push_constant(RET_ADDR_413)
  103885. // #39696
  103886. @RET_ADDR_413
  103887. // #39697
  103888. D=A
  103889. //^^ push_d_to_stack
  103890. // #39698
  103891. @SP
  103892. // #39699
  103893. A=M
  103894. // #39700
  103895. M=D
  103896. // #39701
  103897. @SP
  103898. // #39702
  103899. M=M+1
  103900. //vv push_d_to_stack
  103901. //vv push_constant(RET_ADDR_413)
  103902. //push return-address
  103903. // #39703
  103904. @LCL
  103905. // #39704
  103906. D=M
  103907. //^^ push_d_to_stack
  103908. // #39705
  103909. @SP
  103910. // #39706
  103911. A=M
  103912. // #39707
  103913. M=D
  103914. // #39708
  103915. @SP
  103916. // #39709
  103917. M=M+1
  103918. //vv push_d_to_stack
  103919. //push LCL
  103920. // #39710
  103921. @ARG
  103922. // #39711
  103923. D=M
  103924. //^^ push_d_to_stack
  103925. // #39712
  103926. @SP
  103927. // #39713
  103928. A=M
  103929. // #39714
  103930. M=D
  103931. // #39715
  103932. @SP
  103933. // #39716
  103934. M=M+1
  103935. //vv push_d_to_stack
  103936. //push ARG
  103937. // #39717
  103938. @THIS
  103939. // #39718
  103940. D=M
  103941. //^^ push_d_to_stack
  103942. // #39719
  103943. @SP
  103944. // #39720
  103945. A=M
  103946. // #39721
  103947. M=D
  103948. // #39722
  103949. @SP
  103950. // #39723
  103951. M=M+1
  103952. //vv push_d_to_stack
  103953. //push THIS
  103954. // #39724
  103955. @THAT
  103956. // #39725
  103957. D=M
  103958. //^^ push_d_to_stack
  103959. // #39726
  103960. @SP
  103961. // #39727
  103962. A=M
  103963. // #39728
  103964. M=D
  103965. // #39729
  103966. @SP
  103967. // #39730
  103968. M=M+1
  103969. //vv push_d_to_stack
  103970. //push THAT
  103971. // #39731
  103972. @SP
  103973. // #39732
  103974. D=M
  103975. // #39733
  103976. @ARG
  103977. // #39734
  103978. M=D
  103979. // #39735
  103980. @6
  103981. // #39736
  103982. D=A
  103983. // #39737
  103984. @ARG
  103985. // #39738
  103986. M=M-D // ARG = SP - args - 5
  103987. // #39739
  103988. @SP
  103989. // #39740
  103990. D=M
  103991. // #39741
  103992. @LCL
  103993. // #39742
  103994. M=D // LCL = SP
  103995. // #39743
  103996. @String.new
  103997. // #39744
  103998. 0;JMP
  103999. (RET_ADDR_413)
  104000. //
  104001. //// push constant 69
  104002. //^^ push_constant(69)
  104003. // #39745
  104004. @69
  104005. // #39746
  104006. D=A
  104007. //^^ push_d_to_stack
  104008. // #39747
  104009. @SP
  104010. // #39748
  104011. A=M
  104012. // #39749
  104013. M=D
  104014. // #39750
  104015. @SP
  104016. // #39751
  104017. M=M+1
  104018. //vv push_d_to_stack
  104019. //vv push_constant(69)
  104020. //
  104021. //// call String.appendChar 2
  104022. //^^ push_constant(RET_ADDR_414)
  104023. // #39752
  104024. @RET_ADDR_414
  104025. // #39753
  104026. D=A
  104027. //^^ push_d_to_stack
  104028. // #39754
  104029. @SP
  104030. // #39755
  104031. A=M
  104032. // #39756
  104033. M=D
  104034. // #39757
  104035. @SP
  104036. // #39758
  104037. M=M+1
  104038. //vv push_d_to_stack
  104039. //vv push_constant(RET_ADDR_414)
  104040. //push return-address
  104041. // #39759
  104042. @LCL
  104043. // #39760
  104044. D=M
  104045. //^^ push_d_to_stack
  104046. // #39761
  104047. @SP
  104048. // #39762
  104049. A=M
  104050. // #39763
  104051. M=D
  104052. // #39764
  104053. @SP
  104054. // #39765
  104055. M=M+1
  104056. //vv push_d_to_stack
  104057. //push LCL
  104058. // #39766
  104059. @ARG
  104060. // #39767
  104061. D=M
  104062. //^^ push_d_to_stack
  104063. // #39768
  104064. @SP
  104065. // #39769
  104066. A=M
  104067. // #39770
  104068. M=D
  104069. // #39771
  104070. @SP
  104071. // #39772
  104072. M=M+1
  104073. //vv push_d_to_stack
  104074. //push ARG
  104075. // #39773
  104076. @THIS
  104077. // #39774
  104078. D=M
  104079. //^^ push_d_to_stack
  104080. // #39775
  104081. @SP
  104082. // #39776
  104083. A=M
  104084. // #39777
  104085. M=D
  104086. // #39778
  104087. @SP
  104088. // #39779
  104089. M=M+1
  104090. //vv push_d_to_stack
  104091. //push THIS
  104092. // #39780
  104093. @THAT
  104094. // #39781
  104095. D=M
  104096. //^^ push_d_to_stack
  104097. // #39782
  104098. @SP
  104099. // #39783
  104100. A=M
  104101. // #39784
  104102. M=D
  104103. // #39785
  104104. @SP
  104105. // #39786
  104106. M=M+1
  104107. //vv push_d_to_stack
  104108. //push THAT
  104109. // #39787
  104110. @SP
  104111. // #39788
  104112. D=M
  104113. // #39789
  104114. @ARG
  104115. // #39790
  104116. M=D
  104117. // #39791
  104118. @7
  104119. // #39792
  104120. D=A
  104121. // #39793
  104122. @ARG
  104123. // #39794
  104124. M=M-D // ARG = SP - args - 5
  104125. // #39795
  104126. @SP
  104127. // #39796
  104128. D=M
  104129. // #39797
  104130. @LCL
  104131. // #39798
  104132. M=D // LCL = SP
  104133. // #39799
  104134. @String.appendChar
  104135. // #39800
  104136. 0;JMP
  104137. (RET_ADDR_414)
  104138. //
  104139. //// push constant 82
  104140. //^^ push_constant(82)
  104141. // #39801
  104142. @82
  104143. // #39802
  104144. D=A
  104145. //^^ push_d_to_stack
  104146. // #39803
  104147. @SP
  104148. // #39804
  104149. A=M
  104150. // #39805
  104151. M=D
  104152. // #39806
  104153. @SP
  104154. // #39807
  104155. M=M+1
  104156. //vv push_d_to_stack
  104157. //vv push_constant(82)
  104158. //
  104159. //// call String.appendChar 2
  104160. //^^ push_constant(RET_ADDR_415)
  104161. // #39808
  104162. @RET_ADDR_415
  104163. // #39809
  104164. D=A
  104165. //^^ push_d_to_stack
  104166. // #39810
  104167. @SP
  104168. // #39811
  104169. A=M
  104170. // #39812
  104171. M=D
  104172. // #39813
  104173. @SP
  104174. // #39814
  104175. M=M+1
  104176. //vv push_d_to_stack
  104177. //vv push_constant(RET_ADDR_415)
  104178. //push return-address
  104179. // #39815
  104180. @LCL
  104181. // #39816
  104182. D=M
  104183. //^^ push_d_to_stack
  104184. // #39817
  104185. @SP
  104186. // #39818
  104187. A=M
  104188. // #39819
  104189. M=D
  104190. // #39820
  104191. @SP
  104192. // #39821
  104193. M=M+1
  104194. //vv push_d_to_stack
  104195. //push LCL
  104196. // #39822
  104197. @ARG
  104198. // #39823
  104199. D=M
  104200. //^^ push_d_to_stack
  104201. // #39824
  104202. @SP
  104203. // #39825
  104204. A=M
  104205. // #39826
  104206. M=D
  104207. // #39827
  104208. @SP
  104209. // #39828
  104210. M=M+1
  104211. //vv push_d_to_stack
  104212. //push ARG
  104213. // #39829
  104214. @THIS
  104215. // #39830
  104216. D=M
  104217. //^^ push_d_to_stack
  104218. // #39831
  104219. @SP
  104220. // #39832
  104221. A=M
  104222. // #39833
  104223. M=D
  104224. // #39834
  104225. @SP
  104226. // #39835
  104227. M=M+1
  104228. //vv push_d_to_stack
  104229. //push THIS
  104230. // #39836
  104231. @THAT
  104232. // #39837
  104233. D=M
  104234. //^^ push_d_to_stack
  104235. // #39838
  104236. @SP
  104237. // #39839
  104238. A=M
  104239. // #39840
  104240. M=D
  104241. // #39841
  104242. @SP
  104243. // #39842
  104244. M=M+1
  104245. //vv push_d_to_stack
  104246. //push THAT
  104247. // #39843
  104248. @SP
  104249. // #39844
  104250. D=M
  104251. // #39845
  104252. @ARG
  104253. // #39846
  104254. M=D
  104255. // #39847
  104256. @7
  104257. // #39848
  104258. D=A
  104259. // #39849
  104260. @ARG
  104261. // #39850
  104262. M=M-D // ARG = SP - args - 5
  104263. // #39851
  104264. @SP
  104265. // #39852
  104266. D=M
  104267. // #39853
  104268. @LCL
  104269. // #39854
  104270. M=D // LCL = SP
  104271. // #39855
  104272. @String.appendChar
  104273. // #39856
  104274. 0;JMP
  104275. (RET_ADDR_415)
  104276. //
  104277. //// push constant 82
  104278. //^^ push_constant(82)
  104279. // #39857
  104280. @82
  104281. // #39858
  104282. D=A
  104283. //^^ push_d_to_stack
  104284. // #39859
  104285. @SP
  104286. // #39860
  104287. A=M
  104288. // #39861
  104289. M=D
  104290. // #39862
  104291. @SP
  104292. // #39863
  104293. M=M+1
  104294. //vv push_d_to_stack
  104295. //vv push_constant(82)
  104296. //
  104297. //// call String.appendChar 2
  104298. //^^ push_constant(RET_ADDR_416)
  104299. // #39864
  104300. @RET_ADDR_416
  104301. // #39865
  104302. D=A
  104303. //^^ push_d_to_stack
  104304. // #39866
  104305. @SP
  104306. // #39867
  104307. A=M
  104308. // #39868
  104309. M=D
  104310. // #39869
  104311. @SP
  104312. // #39870
  104313. M=M+1
  104314. //vv push_d_to_stack
  104315. //vv push_constant(RET_ADDR_416)
  104316. //push return-address
  104317. // #39871
  104318. @LCL
  104319. // #39872
  104320. D=M
  104321. //^^ push_d_to_stack
  104322. // #39873
  104323. @SP
  104324. // #39874
  104325. A=M
  104326. // #39875
  104327. M=D
  104328. // #39876
  104329. @SP
  104330. // #39877
  104331. M=M+1
  104332. //vv push_d_to_stack
  104333. //push LCL
  104334. // #39878
  104335. @ARG
  104336. // #39879
  104337. D=M
  104338. //^^ push_d_to_stack
  104339. // #39880
  104340. @SP
  104341. // #39881
  104342. A=M
  104343. // #39882
  104344. M=D
  104345. // #39883
  104346. @SP
  104347. // #39884
  104348. M=M+1
  104349. //vv push_d_to_stack
  104350. //push ARG
  104351. // #39885
  104352. @THIS
  104353. // #39886
  104354. D=M
  104355. //^^ push_d_to_stack
  104356. // #39887
  104357. @SP
  104358. // #39888
  104359. A=M
  104360. // #39889
  104361. M=D
  104362. // #39890
  104363. @SP
  104364. // #39891
  104365. M=M+1
  104366. //vv push_d_to_stack
  104367. //push THIS
  104368. // #39892
  104369. @THAT
  104370. // #39893
  104371. D=M
  104372. //^^ push_d_to_stack
  104373. // #39894
  104374. @SP
  104375. // #39895
  104376. A=M
  104377. // #39896
  104378. M=D
  104379. // #39897
  104380. @SP
  104381. // #39898
  104382. M=M+1
  104383. //vv push_d_to_stack
  104384. //push THAT
  104385. // #39899
  104386. @SP
  104387. // #39900
  104388. D=M
  104389. // #39901
  104390. @ARG
  104391. // #39902
  104392. M=D
  104393. // #39903
  104394. @7
  104395. // #39904
  104396. D=A
  104397. // #39905
  104398. @ARG
  104399. // #39906
  104400. M=M-D // ARG = SP - args - 5
  104401. // #39907
  104402. @SP
  104403. // #39908
  104404. D=M
  104405. // #39909
  104406. @LCL
  104407. // #39910
  104408. M=D // LCL = SP
  104409. // #39911
  104410. @String.appendChar
  104411. // #39912
  104412. 0;JMP
  104413. (RET_ADDR_416)
  104414. //
  104415. //// call Output.printString 1
  104416. //^^ push_constant(RET_ADDR_417)
  104417. // #39913
  104418. @RET_ADDR_417
  104419. // #39914
  104420. D=A
  104421. //^^ push_d_to_stack
  104422. // #39915
  104423. @SP
  104424. // #39916
  104425. A=M
  104426. // #39917
  104427. M=D
  104428. // #39918
  104429. @SP
  104430. // #39919
  104431. M=M+1
  104432. //vv push_d_to_stack
  104433. //vv push_constant(RET_ADDR_417)
  104434. //push return-address
  104435. // #39920
  104436. @LCL
  104437. // #39921
  104438. D=M
  104439. //^^ push_d_to_stack
  104440. // #39922
  104441. @SP
  104442. // #39923
  104443. A=M
  104444. // #39924
  104445. M=D
  104446. // #39925
  104447. @SP
  104448. // #39926
  104449. M=M+1
  104450. //vv push_d_to_stack
  104451. //push LCL
  104452. // #39927
  104453. @ARG
  104454. // #39928
  104455. D=M
  104456. //^^ push_d_to_stack
  104457. // #39929
  104458. @SP
  104459. // #39930
  104460. A=M
  104461. // #39931
  104462. M=D
  104463. // #39932
  104464. @SP
  104465. // #39933
  104466. M=M+1
  104467. //vv push_d_to_stack
  104468. //push ARG
  104469. // #39934
  104470. @THIS
  104471. // #39935
  104472. D=M
  104473. //^^ push_d_to_stack
  104474. // #39936
  104475. @SP
  104476. // #39937
  104477. A=M
  104478. // #39938
  104479. M=D
  104480. // #39939
  104481. @SP
  104482. // #39940
  104483. M=M+1
  104484. //vv push_d_to_stack
  104485. //push THIS
  104486. // #39941
  104487. @THAT
  104488. // #39942
  104489. D=M
  104490. //^^ push_d_to_stack
  104491. // #39943
  104492. @SP
  104493. // #39944
  104494. A=M
  104495. // #39945
  104496. M=D
  104497. // #39946
  104498. @SP
  104499. // #39947
  104500. M=M+1
  104501. //vv push_d_to_stack
  104502. //push THAT
  104503. // #39948
  104504. @SP
  104505. // #39949
  104506. D=M
  104507. // #39950
  104508. @ARG
  104509. // #39951
  104510. M=D
  104511. // #39952
  104512. @6
  104513. // #39953
  104514. D=A
  104515. // #39954
  104516. @ARG
  104517. // #39955
  104518. M=M-D // ARG = SP - args - 5
  104519. // #39956
  104520. @SP
  104521. // #39957
  104522. D=M
  104523. // #39958
  104524. @LCL
  104525. // #39959
  104526. M=D // LCL = SP
  104527. // #39960
  104528. @Output.printString
  104529. // #39961
  104530. 0;JMP
  104531. (RET_ADDR_417)
  104532. //
  104533. //// pop temp 0
  104534. //^^ pop_to_loc{5)
  104535. //^^ pop_stack_to_d
  104536. // #39962
  104537. @SP
  104538. // #39963
  104539. M=M-1
  104540. // #39964
  104541. A=M
  104542. // #39965
  104543. D=M
  104544. //vv pop_stack_to_d
  104545. // #39966
  104546. @5
  104547. // #39967
  104548. M=D
  104549. //vv pop_to_loc{5)
  104550. //
  104551. //// push argument 0
  104552. //^^ push_from_ram(ARG, 0)
  104553. // #39968
  104554. @ARG
  104555. // #39969
  104556. D=M
  104557. // #39970
  104558. @0
  104559. // #39971
  104560. A=D+A
  104561. // #39972
  104562. D=M
  104563. //^^ push_d_to_stack
  104564. // #39973
  104565. @SP
  104566. // #39974
  104567. A=M
  104568. // #39975
  104569. M=D
  104570. // #39976
  104571. @SP
  104572. // #39977
  104573. M=M+1
  104574. //vv push_d_to_stack
  104575. //vv push_from_ram(ARG, 0)
  104576. //
  104577. //// call Output.printInt 1
  104578. //^^ push_constant(RET_ADDR_418)
  104579. // #39978
  104580. @RET_ADDR_418
  104581. // #39979
  104582. D=A
  104583. //^^ push_d_to_stack
  104584. // #39980
  104585. @SP
  104586. // #39981
  104587. A=M
  104588. // #39982
  104589. M=D
  104590. // #39983
  104591. @SP
  104592. // #39984
  104593. M=M+1
  104594. //vv push_d_to_stack
  104595. //vv push_constant(RET_ADDR_418)
  104596. //push return-address
  104597. // #39985
  104598. @LCL
  104599. // #39986
  104600. D=M
  104601. //^^ push_d_to_stack
  104602. // #39987
  104603. @SP
  104604. // #39988
  104605. A=M
  104606. // #39989
  104607. M=D
  104608. // #39990
  104609. @SP
  104610. // #39991
  104611. M=M+1
  104612. //vv push_d_to_stack
  104613. //push LCL
  104614. // #39992
  104615. @ARG
  104616. // #39993
  104617. D=M
  104618. //^^ push_d_to_stack
  104619. // #39994
  104620. @SP
  104621. // #39995
  104622. A=M
  104623. // #39996
  104624. M=D
  104625. // #39997
  104626. @SP
  104627. // #39998
  104628. M=M+1
  104629. //vv push_d_to_stack
  104630. //push ARG
  104631. // #39999
  104632. @THIS
  104633. // #40000
  104634. D=M
  104635. //^^ push_d_to_stack
  104636. // #40001
  104637. @SP
  104638. // #40002
  104639. A=M
  104640. // #40003
  104641. M=D
  104642. // #40004
  104643. @SP
  104644. // #40005
  104645. M=M+1
  104646. //vv push_d_to_stack
  104647. //push THIS
  104648. // #40006
  104649. @THAT
  104650. // #40007
  104651. D=M
  104652. //^^ push_d_to_stack
  104653. // #40008
  104654. @SP
  104655. // #40009
  104656. A=M
  104657. // #40010
  104658. M=D
  104659. // #40011
  104660. @SP
  104661. // #40012
  104662. M=M+1
  104663. //vv push_d_to_stack
  104664. //push THAT
  104665. // #40013
  104666. @SP
  104667. // #40014
  104668. D=M
  104669. // #40015
  104670. @ARG
  104671. // #40016
  104672. M=D
  104673. // #40017
  104674. @6
  104675. // #40018
  104676. D=A
  104677. // #40019
  104678. @ARG
  104679. // #40020
  104680. M=M-D // ARG = SP - args - 5
  104681. // #40021
  104682. @SP
  104683. // #40022
  104684. D=M
  104685. // #40023
  104686. @LCL
  104687. // #40024
  104688. M=D // LCL = SP
  104689. // #40025
  104690. @Output.printInt
  104691. // #40026
  104692. 0;JMP
  104693. (RET_ADDR_418)
  104694. //
  104695. //// pop temp 0
  104696. //^^ pop_to_loc{5)
  104697. //^^ pop_stack_to_d
  104698. // #40027
  104699. @SP
  104700. // #40028
  104701. M=M-1
  104702. // #40029
  104703. A=M
  104704. // #40030
  104705. D=M
  104706. //vv pop_stack_to_d
  104707. // #40031
  104708. @5
  104709. // #40032
  104710. M=D
  104711. //vv pop_to_loc{5)
  104712. //
  104713. //// call Sys.halt 0
  104714. //^^ push_constant(RET_ADDR_419)
  104715. // #40033
  104716. @RET_ADDR_419
  104717. // #40034
  104718. D=A
  104719. //^^ push_d_to_stack
  104720. // #40035
  104721. @SP
  104722. // #40036
  104723. A=M
  104724. // #40037
  104725. M=D
  104726. // #40038
  104727. @SP
  104728. // #40039
  104729. M=M+1
  104730. //vv push_d_to_stack
  104731. //vv push_constant(RET_ADDR_419)
  104732. //push return-address
  104733. // #40040
  104734. @LCL
  104735. // #40041
  104736. D=M
  104737. //^^ push_d_to_stack
  104738. // #40042
  104739. @SP
  104740. // #40043
  104741. A=M
  104742. // #40044
  104743. M=D
  104744. // #40045
  104745. @SP
  104746. // #40046
  104747. M=M+1
  104748. //vv push_d_to_stack
  104749. //push LCL
  104750. // #40047
  104751. @ARG
  104752. // #40048
  104753. D=M
  104754. //^^ push_d_to_stack
  104755. // #40049
  104756. @SP
  104757. // #40050
  104758. A=M
  104759. // #40051
  104760. M=D
  104761. // #40052
  104762. @SP
  104763. // #40053
  104764. M=M+1
  104765. //vv push_d_to_stack
  104766. //push ARG
  104767. // #40054
  104768. @THIS
  104769. // #40055
  104770. D=M
  104771. //^^ push_d_to_stack
  104772. // #40056
  104773. @SP
  104774. // #40057
  104775. A=M
  104776. // #40058
  104777. M=D
  104778. // #40059
  104779. @SP
  104780. // #40060
  104781. M=M+1
  104782. //vv push_d_to_stack
  104783. //push THIS
  104784. // #40061
  104785. @THAT
  104786. // #40062
  104787. D=M
  104788. //^^ push_d_to_stack
  104789. // #40063
  104790. @SP
  104791. // #40064
  104792. A=M
  104793. // #40065
  104794. M=D
  104795. // #40066
  104796. @SP
  104797. // #40067
  104798. M=M+1
  104799. //vv push_d_to_stack
  104800. //push THAT
  104801. // #40068
  104802. @SP
  104803. // #40069
  104804. D=M
  104805. // #40070
  104806. @ARG
  104807. // #40071
  104808. M=D
  104809. // #40072
  104810. @5
  104811. // #40073
  104812. D=A
  104813. // #40074
  104814. @ARG
  104815. // #40075
  104816. M=M-D // ARG = SP - args - 5
  104817. // #40076
  104818. @SP
  104819. // #40077
  104820. D=M
  104821. // #40078
  104822. @LCL
  104823. // #40079
  104824. M=D // LCL = SP
  104825. // #40080
  104826. @Sys.halt
  104827. // #40081
  104828. 0;JMP
  104829. (RET_ADDR_419)
  104830. //
  104831. //// pop temp 0
  104832. //^^ pop_to_loc{5)
  104833. //^^ pop_stack_to_d
  104834. // #40082
  104835. @SP
  104836. // #40083
  104837. M=M-1
  104838. // #40084
  104839. A=M
  104840. // #40085
  104841. D=M
  104842. //vv pop_stack_to_d
  104843. // #40086
  104844. @5
  104845. // #40087
  104846. M=D
  104847. //vv pop_to_loc{5)
  104848. //
  104849. //// push constant 0
  104850. //^^ push_constant(0)
  104851. // #40088
  104852. @0
  104853. // #40089
  104854. D=A
  104855. //^^ push_d_to_stack
  104856. // #40090
  104857. @SP
  104858. // #40091
  104859. A=M
  104860. // #40092
  104861. M=D
  104862. // #40093
  104863. @SP
  104864. // #40094
  104865. M=M+1
  104866. //vv push_d_to_stack
  104867. //vv push_constant(0)
  104868. //
  104869. //// return
  104870. // #40095
  104871. @LCL
  104872. // #40096
  104873. D=M
  104874. // #40097
  104875. @R14
  104876. // #40098
  104877. M=D //R14=LCL
  104878. // #40099
  104879. @5
  104880. // #40100
  104881. A=D-A
  104882. // #40101
  104883. D=M
  104884. // #40102
  104885. @R15
  104886. // #40103
  104887. M=D //R15=*(LCL-5)
  104888. //^^ pop_stack_to_d
  104889. // #40104
  104890. @SP
  104891. // #40105
  104892. M=M-1
  104893. // #40106
  104894. A=M
  104895. // #40107
  104896. D=M
  104897. //vv pop_stack_to_d
  104898. // #40108
  104899. @ARG
  104900. // #40109
  104901. A=M
  104902. // #40110
  104903. M=D //*ARG = pop()
  104904. // #40111
  104905. @ARG
  104906. // #40112
  104907. D=M
  104908. // #40113
  104909. @SP
  104910. // #40114
  104911. M=D+1 //SP=ARG+1
  104912. // #40115
  104913. @R14
  104914. // #40116
  104915. AM=M-1
  104916. // #40117
  104917. D=M
  104918. // #40118
  104919. @THAT
  104920. // #40119
  104921. M=D //THAT = *(--R14)
  104922. // #40120
  104923. @R14
  104924. // #40121
  104925. AM=M-1
  104926. // #40122
  104927. D=M
  104928. // #40123
  104929. @THIS
  104930. // #40124
  104931. M=D //THIS = *(--R14)
  104932. // #40125
  104933. @R14
  104934. // #40126
  104935. AM=M-1
  104936. // #40127
  104937. D=M
  104938. // #40128
  104939. @ARG
  104940. // #40129
  104941. M=D //ARG = *(--R14)
  104942. // #40130
  104943. @R14
  104944. // #40131
  104945. AM=M-1
  104946. // #40132
  104947. D=M
  104948. // #40133
  104949. @LCL
  104950. // #40134
  104951. M=D //LCL = *(--R14)
  104952. // #40135
  104953. @R15
  104954. // #40136
  104955. A=M
  104956. // #40137
  104957. 0;JMP //goto *R15