oblicz


SUBMITTED BY: Erathan

DATE: April 5, 2016, 6:31 p.m.

FORMAT: Text only

SIZE: 2.7 kB

HITS: 86872

  1. Treść przykładowego programu "oblicz.s", demonstrującego wprowadzenie danej i wykonanie obliczeń arytmetycznych w WinDLX
  2. Proponuję zmodyfikować program tak, aby:
  3. a) wczytywał liczby ze znakiem (zarówno + jak i - )
  4. b) wykonywał inne działanie bądź działania arytmetyczne dla argumentów stałoprzecinkowych
  5. c) wypisywał wynik bez wykorzystania formatu zmiennoprzecinkowego
  6. d) wczytywał liczby w wybranym formacie zmiennoprzecinkowym, wykonywał na nich wybrane działanie arytmetyczne i wypisywał wynik zmiennoprzecinkowy ze znakiem
  7. ; program oblicz
  8. ; wypisanie zachęty do wprowadzenia liczby
  9. ; wczytanie liczby całkowitej bez znaku z klawiatury za pomocą biblioteki input
  10. ; wykonanie na tej danej elementarnych obliczeń : tutaj pomnożenia przez 10
  11. ; wypisanie wyniku jako liczby ZMP podwójnej długości
  12. .data
  13. Zacheta: .asciiz "Podaj liczbe calkowita bez znaku, ktora bedzie pomnozona przez 10 : "
  14. FormatWypisania: .asciiz "Wynik mnozenia wczytanej liczby przez 10 = %g\n\n"
  15. .align 2
  16. ParametrPrintf: .word FormatWypisania
  17. WartoscWypisania: .space 8
  18. ; 8 bajtów, bo wynik jako liczba ZMP 64-bitowa
  19. .text
  20. .global main
  21. main:
  22. ;*** tu wstaw pierwsza instrukcję
  23. ; tu PC = (256) czyli (100)h
  24. ; $TEXT = 100h = 256
  25. ; $DATA = 1000h = 4096
  26. ; przekaż do r1 adres zachęty jako parametr wejściowy biblioteki input
  27. addi r1,r0,Zacheta ; w r1 adres komunikatu do wypisania
  28. ;*** Odczytaj liczbę z konsoli do r1 za pomocą biblioteki input
  29. jal InputUnsigned
  30. ; jako wynik procedury InputUnsigned w r1 mamy liczbę całkowitą bez znaku
  31. ; zapisujemy tę liczbę do f10
  32. movi2fp f10,r1
  33. ; konwertujemy te liczbę z formatu STP do formatu ZMP i zapisujemy do f1
  34. cvti2f f1,f10
  35. ; do D2 zapisujemy mnożnik 10
  36. addi r2,r0,10
  37. ; zapisujemy jako STP do rejestru ZMP f12
  38. movi2fp f12,r2
  39. ; konwertujemy z postaci STP z f12 do ZMP do f2
  40. cvti2f f2,f12
  41. ; wykonujemy mnożenie argumentów ZMP i wynik do f3
  42. multf f3, f1, f2
  43. ;konwersja z postaci 32- na 64-bitową z f3 do f6-f7
  44. cvtf2d f6,f3
  45. ; zapamiętujemy wynik mnożenia w zmiennej WartoscWypisania
  46. sd WartoscWypisania,f6
  47. ; przygotowujemy dla trap5 parametr w r14, jako adres opisu formatu i pola danej do wypisania
  48. addi r14,r0,ParametrPrintf
  49. ; trap 5 - patrz HELP
  50. trap 5
  51. ;*** end
  52. trap 0

comments powered by Disqus