Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; wczytywanie i wyświetlanie tekstu wielkimi literami
  2. ; (inne znaki się nie zmieniają)
  3. .686
  4. .model flat
  5. extern _ExitProcess@4 : PROC
  6. public _main
  7.  
  8.  
  9. .data
  10. ; 2x^2 - x - 15 = 0
  11. wsp_a dd +2.0
  12. wsp_b dd -1.0
  13. wsp_c dd -15.0
  14. dwa dd 2.0
  15. cztery dd 4.0
  16. x1 dd ?
  17. x2 dd ?
  18. .code
  19. _main PROC
  20. finit
  21. fld wsp_a ; załadowanie współczynnika a
  22. fld wsp_b ; załadowanie współczynnika b
  23. fst st(2) ; kopiowanie b
  24. ; sytuacja na stosie: ST(0) = b, ST(1) = a, ST(2) = b
  25. fmul st(0),st(0) ; obliczenie b^2
  26. fld cztery
  27. ; sytuacja na stosie: ST(0) = 4.0, ST(1) = b^2, ST(2) = a,
  28. ; ST(3) = b
  29.  fmul st(0), st(2) ; obliczenie 4 * a
  30.  fmul wsp_c ; obliczenie 4 * a * c
  31.  fsubp st(1), st(0) ; obliczenie b^2 - 4 * a * c
  32.  
  33.  ; sytuacja na stosie: ST(0) = b^2 - 4 * a * c, ST(1) = a,
  34. ; ST(2) = b
  35.  fldz ; zaladowanie 0
  36. ; sytuacja na stosie: ST(0) = 0, ST(1) = b^2 - 4 * a * c,
  37. ; ST(2) = a, ST(3) = b
  38. ; rozkaz FCOMI - oba porównywane operandy musza być podane na
  39. ; stosie koprocesora
  40.  fcomi st(0), st(1)
  41. ; usuniecie zera z wierzchołka stosu
  42.  fstp st(0)
  43. ; ja delta_ujemna ; skok, gdy delta ujemna
  44. ; w przykładzie nie wyodrębnia się przypadku delta = 0
  45. ; sytuacja na stosie: ST(0) = b^2 - 4 * a * c, ST(1) = a,
  46. ; ST(2) = b
  47.  fxch st(1) ; zamiana st(0) i st(1)
  48. ; sytuacja na stosie: ST(0) = a, ST(1) = b^2 - 4 * a * c,
  49. ; ST(2) = b
  50.  fadd st(0), st(0) ; ; obliczenie 2 * a
  51.  fstp st(3)
  52. ; sytuacja na stosie: ST(0) = b^2 - 4 * a * c, ST(1) = b,
  53. ; ST(2) = 2 * a
  54.  fsqrt ; pierwiastek z delty
  55. ; przechowanie obliczonej wartości
  56. fst st(3)
  57. ; sytuacja na stosie: ST(0) = sqrt(b^2 - 4 * a * c),
  58. ; ST(1) = b, ST(2) = 2 * a, ST(3) = sqrt(b^2 - 4 * a * c)
  59.  fchs ; zmiana znaku
  60.  fsub st(0), st(1); obliczenie -b - sqrt(delta)
  61.  fdiv st(0), st(2); obliczenie x1
  62.  fstp x1 ; zapisanie x1 w pamięci
  63. ; sytuacja na stosie: ST(0) = b, ST(1) = 2 * a,
  64. ; ST(2) = sqrt(b^2 - 4 * a * c)
  65.  
  66. fchs ; zmiana znaku
  67.  fadd st(0), st(2)
  68.  fdiv st(0), st(1)
  69.  fstp x2
  70.  fstp st(0) ; oczyszczenie stosu
  71.  fstp st(0)
  72.  
  73.  push 0
  74.  call _ExitProcess@4 ; zakończenie programu
  75.  _main ENDP
  76. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement