Facebook
From Sloppy Owl, 7 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 270
  1. #Poprawny wynik:
  2. #Radius is equal to - 1.0
  3. #Surface area (4.0*pi*radius^2) is equal to - 12.56636
  4. #Volume [(4.0*pi)/3.0*radius^3] is equal to - 4.188787
  5. #— program is finished running —
  6. #
  7. .data
  8. FourDotZero: .double 4.0
  9. ThreeDotZero: .double 3.0
  10. Surface: .double 0.0
  11. Capacity: .double 0.0
  12. SurfaceMess: .asciiz "Surface area (4.0*pi*radius^2) is equal to - "
  13. CapacityMess: .asciiz "Volume [(4.0*pi)/3.0*radius^3] is equal to - "
  14. RadiusString: .asciiz "Radius is equal to - "
  15. newline: .asciiz "\n"
  16. RadiusValue: .double 2 # w celach testowych można zmienić wartość promienia
  17. pi_value: .double 3.14159
  18. .text
  19. .globl main
  20. main:
  21. #============== Proszę nie kasować moich komentarzy =========================
  22. # Oblicz (4.0 * pi_value). Wartość ta będzie wykorzystywana w obliczaniu
  23. # powierzchni i objętości.
  24. #
  25. # Należy wykorzystać powyższe moje deklaracje np. wartość liczby pi - pi_value.
  26. #
  27. # Proszę skomentowac każdą linię swojego kodu.
  28. #============================================================================
  29. #----------— początek Twojego kodu —---— nie kasuj tej linii —-----------—
  30. # Oblicz tutaj wartosć wyrażenia (4.0 * pi_value) —- nie kasuj tej linii —--—
  31. # Deklaracja liczby pi jest powyżej.
  32. #
  33.         l.d $f0, pi_value # wczytuje pi do rejestrów $f0 i $f1
  34.         l.d $f2, FourDotZero  # wczytuje 4.0 do rejestrów $f2 i $f3
  35.         mul.d $f4, $f0, $f2 # mnożę 4.0 * pi i zapisuje wynik w $f4 i $f5
  36.        
  37.         # od teraz wartość pi * 4 będzie zapisana w $f0 żeby łatwiej było zapamiętać
  38.         mov.d $f0, $f4
  39.  
  40.  
  41.  
  42. #----— Wyświetl komunikat spod etykiety RadiusString —— nie kasuj tej linii —
  43. #
  44.         la $a0, RadiusString
  45.         li $v0, 4
  46.         syscall
  47.  
  48.  
  49. #----— Wyświetl wartość promienia —-------— nie kasuj tej linii —----------—
  50. #
  51.         l.d $f12, RadiusValue # liczby zmiennoprzecinkowe należy wczytywać jako argument do rejestru $f12 ponieważ umożliwia on zapis Dwusłów
  52.         li $v0, 3 # syscall 3 - to wypisuje double
  53.         syscall
  54.  
  55.  
  56. #-----— Wyświetl nową linie —-------------— nie kasuj tej linii —---------—
  57. #
  58.         la $a0, newline
  59.         li $v0, 4
  60.         syscall
  61.  
  62. #============== nie kasuj moich komentarzy ======================================
  63. # Oblicz powierzchnie kuli.
  64. # Pamiętaj, że powierzchnia = 4.0 * pi_value * RadiusValue^2
  65. # Deklaracje liczby pi, RadiusValue i FourDotZero są powyżej.
  66. # Zapamiętaj powierzchnie pod etykietą Surface
  67. #================================================================================
  68.        
  69.         l.d $f2, RadiusValue # wczytuje wartość promienia do $f2
  70.         mul.d $f4, $f2, $f2 # $f2 ^ 2
  71.         mul.d $f6, $f4, $f0 # tutaj mnożę (4.0*pi)$f0 * (rad^2)$f4
  72.        
  73.         s.d $f6, Surface #zapisuję z koprocesora rejestr $f6 do miejsca w pamięci pod etykietą Surface
  74.  
  75.  
  76. #-— Wyświetl komunikat spod etykiety SurfaceMess —- nie kasuj tej linii ——
  77. #
  78.         la $a0, SurfaceMess
  79.         li $v0, 4
  80.         syscall
  81.  
  82.  
  83. #---------— Wyświetl wartość powierzchni —----— nie kasuj liniii —--------—
  84. #
  85.         l.d $f12, Surface
  86.         li $v0, 3
  87.         syscall
  88.  
  89.  
  90. #-----— Wyprowadź nową linię —----------------— nie kasuj linii —---------—
  91. #
  92.         la $a0, newline
  93.         li $v0, 4
  94.         syscall
  95.  
  96.  
  97. #------------— nie kasuj moich komentarzy —----— nie kasuj linii —---------—
  98. # Oblicz objętość kuli.
  99. # Objętość kuli = (4.0 * pi / 3.0) * radius^3
  100. # Zapamiętaj wartość objętości pod etykietą Capacity
  101. #-----------------------------------------------------------------------------—
  102.  
  103.         l.d $f4, ThreeDotZero # wczytije 3.0 do $f4
  104.         div.d $f6, $f0, $f4  # $f6 = (pi*4.0)$f0 / (3.0)$f4
  105.        
  106.         mul.d $f8, $f2, $f2 # $f8 = rad * rad
  107.         mul.d $f8, $f8, $f2 # $f8 = (rad^2)$f8 * (rad)$f2 - da nam to rad^3
  108.        
  109.         mul.d $f6, $f6, $f8 # (4.0 * pi / 3.0)$f6 * (rad^3)$f8
  110.         s.d $f6, Capacity # zapisuję do Capacity
  111.  
  112.  
  113. #------— Wyświetl komunikat spod etykiety CapacityMess —— nie kasuj linii —-
  114. #
  115.         la $a0, CapacityMess
  116.         li $v0, 4
  117.         syscall
  118.  
  119.  
  120. #------— Wyświetl wartość objętości —-------— nie kasuj linii —------------—
  121. #
  122.         l.d $f12, Capacity
  123.         li $v0, 3
  124.         syscall
  125.  
  126.  
  127. #-------— Zakończ program. —----— nie kasuj linii —------------------------—
  128. #
  129. #
  130.         li $v0, 10 # koniec programu
  131.         syscall
  132.