- #Poprawny wynik:
- #Radius is equal to - 1.0
- #Surface area (4.0*pi*radius^2) is equal to - 12.56636
- #Volume [(4.0*pi)/3.0*radius^3] is equal to - 4.188787
- #— program is finished running —
- #
- .data
- FourDotZero: .double 4.0
- ThreeDotZero: .double 3.0
- Surface: .double 0.0
- Capacity: .double 0.0
- SurfaceMess: .asciiz "Surface area (4.0*pi*radius^2) is equal to - "
- CapacityMess: .asciiz "Volume [(4.0*pi)/3.0*radius^3] is equal to - "
- RadiusString: .asciiz "Radius is equal to - "
- newline: .asciiz "\n"
- RadiusValue: .double 2 # w celach testowych można zmienić wartość promienia
- pi_value: .double 3.14159
- .text
- .globl main
- main:
- #============== Proszę nie kasować moich komentarzy =========================
- # Oblicz (4.0 * pi_value). Wartość ta będzie wykorzystywana w obliczaniu
- # powierzchni i objętości.
- #
- # Należy wykorzystać powyższe moje deklaracje np. wartość liczby pi - pi_value.
- #
- # Proszę skomentowac każdą linię swojego kodu.
- #============================================================================
- #----------— początek Twojego kodu —---— nie kasuj tej linii —-----------—
- # Oblicz tutaj wartosć wyrażenia (4.0 * pi_value) —- nie kasuj tej linii —--—
- # Deklaracja liczby pi jest powyżej.
- #
- l.d $f0, pi_value # wczytuje pi do rejestrów $f0 i $f1
- l.d $f2, FourDotZero # wczytuje 4.0 do rejestrów $f2 i $f3
- mul.d $f4, $f0, $f2 # mnożę 4.0 * pi i zapisuje wynik w $f4 i $f5
- # od teraz wartość pi * 4 będzie zapisana w $f0 żeby łatwiej było zapamiętać
- mov.d $f0, $f4
- #----— Wyświetl komunikat spod etykiety RadiusString —— nie kasuj tej linii —
- #
- la $a0, RadiusString
- li $v0, 4
- syscall
- #----— Wyświetl wartość promienia —-------— nie kasuj tej linii —----------—
- #
- l.d $f12, RadiusValue # liczby zmiennoprzecinkowe należy wczytywać jako argument do rejestru $f12 ponieważ umożliwia on zapis Dwusłów
- li $v0, 3 # syscall 3 - to wypisuje double
- syscall
- #-----— Wyświetl nową linie —-------------— nie kasuj tej linii —---------—
- #
- la $a0, newline
- li $v0, 4
- syscall
- #============== nie kasuj moich komentarzy ======================================
- # Oblicz powierzchnie kuli.
- # Pamiętaj, że powierzchnia = 4.0 * pi_value * RadiusValue^2
- # Deklaracje liczby pi, RadiusValue i FourDotZero są powyżej.
- # Zapamiętaj powierzchnie pod etykietą Surface
- #================================================================================
- l.d $f2, RadiusValue # wczytuje wartość promienia do $f2
- mul.d $f4, $f2, $f2 # $f2 ^ 2
- mul.d $f6, $f4, $f0 # tutaj mnożę (4.0*pi)$f0 * (rad^2)$f4
- s.d $f6, Surface #zapisuję z koprocesora rejestr $f6 do miejsca w pamięci pod etykietą Surface
- #-— Wyświetl komunikat spod etykiety SurfaceMess —- nie kasuj tej linii ——
- #
- la $a0, SurfaceMess
- li $v0, 4
- syscall
- #---------— Wyświetl wartość powierzchni —----— nie kasuj liniii —--------—
- #
- l.d $f12, Surface
- li $v0, 3
- syscall
- #-----— Wyprowadź nową linię —----------------— nie kasuj linii —---------—
- #
- la $a0, newline
- li $v0, 4
- syscall
- #------------— nie kasuj moich komentarzy —----— nie kasuj linii —---------—
- # Oblicz objętość kuli.
- # Objętość kuli = (4.0 * pi / 3.0) * radius^3
- # Zapamiętaj wartość objętości pod etykietą Capacity
- #-----------------------------------------------------------------------------—
- l.d $f4, ThreeDotZero # wczytije 3.0 do $f4
- div.d $f6, $f0, $f4 # $f6 = (pi*4.0)$f0 / (3.0)$f4
- mul.d $f8, $f2, $f2 # $f8 = rad * rad
- mul.d $f8, $f8, $f2 # $f8 = (rad^2)$f8 * (rad)$f2 - da nam to rad^3
- mul.d $f6, $f6, $f8 # (4.0 * pi / 3.0)$f6 * (rad^3)$f8
- s.d $f6, Capacity # zapisuję do Capacity
- #------— Wyświetl komunikat spod etykiety CapacityMess —— nie kasuj linii —-
- #
- la $a0, CapacityMess
- li $v0, 4
- syscall
- #------— Wyświetl wartość objętości —-------— nie kasuj linii —------------—
- #
- l.d $f12, Capacity
- li $v0, 3
- syscall
- #-------— Zakończ program. —----— nie kasuj linii —------------------------—
- #
- #
- li $v0, 10 # koniec programu
- syscall