Advertisement
Guest User

StaticsTest.asm

a guest
Mar 29th, 2014
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.70 KB | None | 0 0
  1.  
  2. // bootstrap
  3. @256
  4. D=A
  5. @SP
  6. M=D
  7. @Sys.init:RETURN_ADDRESS_0
  8. D=A
  9. @SP
  10. A=M
  11. M=D
  12. @SP
  13. M=M+1
  14. @LCL
  15. D=M
  16. @SP
  17. A=M
  18. M=D
  19. @SP
  20. M=M+1
  21. @ARG
  22. D=M
  23. @SP
  24. A=M
  25. M=D
  26. @SP
  27. M=M+1
  28. @THIS
  29. D=M
  30. @SP
  31. A=M
  32. M=D
  33. @SP
  34. M=M+1
  35. @THAT
  36. D=M
  37. @SP
  38. A=M
  39. M=D
  40. @SP
  41. M=M+1
  42. @SP
  43. D=M
  44. @0
  45. D=D-A
  46. @5
  47. D=D-A
  48. @ARG
  49. M=D
  50. @SP
  51. D=M
  52. @LCL
  53. M=D
  54. @Sys.init
  55. 0;JMP
  56. (Sys.init:RETURN_ADDRESS_0)
  57.  
  58. // function Sys.init 0
  59. (Sys.init)
  60.  
  61. // push constant 6
  62. @6
  63. D=A
  64. @SP
  65. A=M
  66. M=D
  67. @SP
  68. M=M+1
  69.  
  70. // push constant 8
  71. @8
  72. D=A
  73. @SP
  74. A=M
  75. M=D
  76. @SP
  77. M=M+1
  78.  
  79. // call Class1.set 2
  80. @Class1.set:RETURN_ADDRESS_1
  81. D=A
  82. @SP
  83. A=M
  84. M=D
  85. @SP
  86. M=M+1
  87. @LCL
  88. D=M
  89. @SP
  90. A=M
  91. M=D
  92. @SP
  93. M=M+1
  94. @ARG
  95. D=M
  96. @SP
  97. A=M
  98. M=D
  99. @SP
  100. M=M+1
  101. @THIS
  102. D=M
  103. @SP
  104. A=M
  105. M=D
  106. @SP
  107. M=M+1
  108. @THAT
  109. D=M
  110. @SP
  111. A=M
  112. M=D
  113. @SP
  114. M=M+1
  115. @SP
  116. D=M
  117. @2
  118. D=D-A
  119. @5
  120. D=D-A
  121. @ARG
  122. M=D
  123. @SP
  124. D=M
  125. @LCL
  126. M=D
  127. @Class1.set
  128. 0;JMP
  129. (Class1.set:RETURN_ADDRESS_1)
  130.  
  131. // pop temp 0
  132. @R5
  133. D=M
  134. @R13
  135. M=D
  136. @SP
  137. AM=M-1
  138. D=M
  139. @R13
  140. A=M
  141. M=D
  142.  
  143. // push constant 23
  144. @23
  145. D=A
  146. @SP
  147. A=M
  148. M=D
  149. @SP
  150. M=M+1
  151.  
  152. // push constant 15
  153. @15
  154. D=A
  155. @SP
  156. A=M
  157. M=D
  158. @SP
  159. M=M+1
  160.  
  161. // call Class2.set 2
  162. @Class2.set:RETURN_ADDRESS_2
  163. D=A
  164. @SP
  165. A=M
  166. M=D
  167. @SP
  168. M=M+1
  169. @LCL
  170. D=M
  171. @SP
  172. A=M
  173. M=D
  174. @SP
  175. M=M+1
  176. @ARG
  177. D=M
  178. @SP
  179. A=M
  180. M=D
  181. @SP
  182. M=M+1
  183. @THIS
  184. D=M
  185. @SP
  186. A=M
  187. M=D
  188. @SP
  189. M=M+1
  190. @THAT
  191. D=M
  192. @SP
  193. A=M
  194. M=D
  195. @SP
  196. M=M+1
  197. @SP
  198. D=M
  199. @2
  200. D=D-A
  201. @5
  202. D=D-A
  203. @ARG
  204. M=D
  205. @SP
  206. D=M
  207. @LCL
  208. M=D
  209. @Class2.set
  210. 0;JMP
  211. (Class2.set:RETURN_ADDRESS_2)
  212.  
  213. // pop temp 0
  214. @R5
  215. D=M
  216. @R13
  217. M=D
  218. @SP
  219. AM=M-1
  220. D=M
  221. @R13
  222. A=M
  223. M=D
  224.  
  225. // call Class1.get 0
  226. @Class1.get:RETURN_ADDRESS_3
  227. D=A
  228. @SP
  229. A=M
  230. M=D
  231. @SP
  232. M=M+1
  233. @LCL
  234. D=M
  235. @SP
  236. A=M
  237. M=D
  238. @SP
  239. M=M+1
  240. @ARG
  241. D=M
  242. @SP
  243. A=M
  244. M=D
  245. @SP
  246. M=M+1
  247. @THIS
  248. D=M
  249. @SP
  250. A=M
  251. M=D
  252. @SP
  253. M=M+1
  254. @THAT
  255. D=M
  256. @SP
  257. A=M
  258. M=D
  259. @SP
  260. M=M+1
  261. @SP
  262. D=M
  263. @0
  264. D=D-A
  265. @5
  266. D=D-A
  267. @ARG
  268. M=D
  269. @SP
  270. D=M
  271. @LCL
  272. M=D
  273. @Class1.get
  274. 0;JMP
  275. (Class1.get:RETURN_ADDRESS_3)
  276.  
  277. // call Class2.get 0
  278. @Class2.get:RETURN_ADDRESS_4
  279. D=A
  280. @SP
  281. A=M
  282. M=D
  283. @SP
  284. M=M+1
  285. @LCL
  286. D=M
  287. @SP
  288. A=M
  289. M=D
  290. @SP
  291. M=M+1
  292. @ARG
  293. D=M
  294. @SP
  295. A=M
  296. M=D
  297. @SP
  298. M=M+1
  299. @THIS
  300. D=M
  301. @SP
  302. A=M
  303. M=D
  304. @SP
  305. M=M+1
  306. @THAT
  307. D=M
  308. @SP
  309. A=M
  310. M=D
  311. @SP
  312. M=M+1
  313. @SP
  314. D=M
  315. @0
  316. D=D-A
  317. @5
  318. D=D-A
  319. @ARG
  320. M=D
  321. @SP
  322. D=M
  323. @LCL
  324. M=D
  325. @Class2.get
  326. 0;JMP
  327. (Class2.get:RETURN_ADDRESS_4)
  328.  
  329. // label WHILE
  330. (Sys.init$WHILE)
  331.  
  332. // goto WHILE
  333. @Sys.init$WHILE
  334. 0;JMP
  335.  
  336. // function Class1.set 0
  337. (Class1.set)
  338.  
  339. // push argument 0
  340. @ARG
  341. D=M
  342. A=D
  343. D=M
  344. @SP
  345. A=M
  346. M=D
  347. @SP
  348. M=M+1
  349.  
  350. // pop static 0
  351. @SP
  352. AM=M-1
  353. D=M
  354. @Class1.0
  355. M=D
  356.  
  357. // push argument 1
  358. @ARG
  359. D=M
  360. @1
  361. D=D+A
  362. A=D
  363. D=M
  364. @SP
  365. A=M
  366. M=D
  367. @SP
  368. M=M+1
  369.  
  370. // pop static 1
  371. @SP
  372. AM=M-1
  373. D=M
  374. @Class1.1
  375. M=D
  376.  
  377. // push constant 0
  378. @0
  379. D=A
  380. @SP
  381. A=M
  382. M=D
  383. @SP
  384. M=M+1
  385.  
  386. // return
  387. @LCL
  388. D=M
  389. @frame
  390. M=D
  391. @frame
  392. D=M
  393. @5
  394. A=D-A
  395. D=M
  396. @returnAddress
  397. M=D
  398. @SP
  399. AM=M-1
  400. D=M
  401. @ARG
  402. A=M
  403. M=D
  404. @ARG
  405. D=M+1
  406. @SP
  407. M=D
  408. @frame
  409. D=M
  410. @1
  411. A=D-A
  412. D=M
  413. @THAT
  414. M=D
  415. @frame
  416. D=M
  417. @2
  418. A=D-A
  419. D=M
  420. @THIS
  421. M=D
  422. @frame
  423. D=M
  424. @3
  425. A=D-A
  426. D=M
  427. @ARG
  428. M=D
  429. @frame
  430. D=M
  431. @4
  432. A=D-A
  433. D=M
  434. @LCL
  435. M=D
  436. @returnAddress
  437. A=M
  438. 0;JMP
  439.  
  440. // function Class1.get 0
  441. (Class1.get)
  442.  
  443. // push static 0
  444. @Class1.0
  445. D=M
  446. @SP
  447. A=M
  448. M=D
  449. @SP
  450. M=M+1
  451.  
  452. // push static 1
  453. @Class1.1
  454. D=M
  455. @SP
  456. A=M
  457. M=D
  458. @SP
  459. M=M+1
  460.  
  461. // sub
  462. @SP
  463. AM=M-1
  464. D=M
  465. A=A-1
  466. M=M-D
  467.  
  468. // return
  469. @LCL
  470. D=M
  471. @frame
  472. M=D
  473. @frame
  474. D=M
  475. @5
  476. A=D-A
  477. D=M
  478. @returnAddress
  479. M=D
  480. @SP
  481. AM=M-1
  482. D=M
  483. @ARG
  484. A=M
  485. M=D
  486. @ARG
  487. D=M+1
  488. @SP
  489. M=D
  490. @frame
  491. D=M
  492. @1
  493. A=D-A
  494. D=M
  495. @THAT
  496. M=D
  497. @frame
  498. D=M
  499. @2
  500. A=D-A
  501. D=M
  502. @THIS
  503. M=D
  504. @frame
  505. D=M
  506. @3
  507. A=D-A
  508. D=M
  509. @ARG
  510. M=D
  511. @frame
  512. D=M
  513. @4
  514. A=D-A
  515. D=M
  516. @LCL
  517. M=D
  518. @returnAddress
  519. A=M
  520. 0;JMP
  521.  
  522. // function Class2.set 0
  523. (Class2.set)
  524.  
  525. // push argument 0
  526. @ARG
  527. D=M
  528. A=D
  529. D=M
  530. @SP
  531. A=M
  532. M=D
  533. @SP
  534. M=M+1
  535.  
  536. // pop static 0
  537. @SP
  538. AM=M-1
  539. D=M
  540. @Class2.0
  541. M=D
  542.  
  543. // push argument 1
  544. @ARG
  545. D=M
  546. @1
  547. D=D+A
  548. A=D
  549. D=M
  550. @SP
  551. A=M
  552. M=D
  553. @SP
  554. M=M+1
  555.  
  556. // pop static 1
  557. @SP
  558. AM=M-1
  559. D=M
  560. @Class2.1
  561. M=D
  562.  
  563. // push constant 0
  564. @0
  565. D=A
  566. @SP
  567. A=M
  568. M=D
  569. @SP
  570. M=M+1
  571.  
  572. // return
  573. @LCL
  574. D=M
  575. @frame
  576. M=D
  577. @frame
  578. D=M
  579. @5
  580. A=D-A
  581. D=M
  582. @returnAddress
  583. M=D
  584. @SP
  585. AM=M-1
  586. D=M
  587. @ARG
  588. A=M
  589. M=D
  590. @ARG
  591. D=M+1
  592. @SP
  593. M=D
  594. @frame
  595. D=M
  596. @1
  597. A=D-A
  598. D=M
  599. @THAT
  600. M=D
  601. @frame
  602. D=M
  603. @2
  604. A=D-A
  605. D=M
  606. @THIS
  607. M=D
  608. @frame
  609. D=M
  610. @3
  611. A=D-A
  612. D=M
  613. @ARG
  614. M=D
  615. @frame
  616. D=M
  617. @4
  618. A=D-A
  619. D=M
  620. @LCL
  621. M=D
  622. @returnAddress
  623. A=M
  624. 0;JMP
  625.  
  626. // function Class2.get 0
  627. (Class2.get)
  628.  
  629. // push static 0
  630. @Class2.0
  631. D=M
  632. @SP
  633. A=M
  634. M=D
  635. @SP
  636. M=M+1
  637.  
  638. // push static 1
  639. @Class2.1
  640. D=M
  641. @SP
  642. A=M
  643. M=D
  644. @SP
  645. M=M+1
  646.  
  647. // sub
  648. @SP
  649. AM=M-1
  650. D=M
  651. A=A-1
  652. M=M-D
  653.  
  654. // return
  655. @LCL
  656. D=M
  657. @frame
  658. M=D
  659. @frame
  660. D=M
  661. @5
  662. A=D-A
  663. D=M
  664. @returnAddress
  665. M=D
  666. @SP
  667. AM=M-1
  668. D=M
  669. @ARG
  670. A=M
  671. M=D
  672. @ARG
  673. D=M+1
  674. @SP
  675. M=D
  676. @frame
  677. D=M
  678. @1
  679. A=D-A
  680. D=M
  681. @THAT
  682. M=D
  683. @frame
  684. D=M
  685. @2
  686. A=D-A
  687. D=M
  688. @THIS
  689. M=D
  690. @frame
  691. D=M
  692. @3
  693. A=D-A
  694. D=M
  695. @ARG
  696. M=D
  697. @frame
  698. D=M
  699. @4
  700. A=D-A
  701. D=M
  702. @LCL
  703. M=D
  704. @returnAddress
  705. A=M
  706. 0;JMP
  707.  
  708. // end of program
  709. (INFINITE_LOOP)
  710. @INFINITE_LOOP
  711. 0;JMP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement