Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. EXTRN ExitProcess:  PROC
  2. .DATA
  3.  
  4.     ;Do edycji
  5.     Wieksze BYTE "Istnieja 2 rozwiazania", 13,10,0 
  6.     Rowne BYTE "Jest 1 rozwiazanie",13,10,0
  7.     Ujemne BYTE "Brak rozwiazan",13,10,0
  8.     ErrA BYTE "A musi byc dodatnie",13,10,0
  9.     parA dq 6.0
  10.     parB dq 7.0
  11.     parC dq 8.0
  12.     l4 dq 4.0
  13.     l2 dq 2.0
  14.     delta dq 0.0
  15.     x1 dq 0.0
  16.     x2 dq 0.0
  17. .CODE
  18.  
  19.  
  20.  
  21. Start PROC
  22.  
  23.     xor rax,rax
  24.     xor rcx,rcx
  25.    
  26.     ;Delta= b^2-4ac
  27.     cmp parA,0
  28.     je ErrA
  29.     FLD parB
  30.     FMUL parB
  31.  
  32.     FLD parA ; parA ląduje na st(0)/ parB przechodzi na st(1)
  33.     FMUL parC ;a*c i załadowanie na st(0)
  34.     FMUL l4 ;pomnożenie 4*a*c i wrzucnie na st(0)
  35.  
  36.     FSUBP st(1),st(0) ;odjęcie b^2 (st1) od 4AC (st0)
  37.     FSTP delta ;kopiowanie wyniku działania do zmiennej delta
  38.  
  39.     cmp delta,0 ;sprawdzenie dodatności delty
  40.     jg WiekszeOdZera ;jesli wieksze skok do etykiety
  41.     je RowneZero ;jezli rowne zero skok do etykiety
  42.  
  43.     lea rcx,Ujemne
  44.     jmp FuncEnd
  45.  
  46.     RowneZero: ;jedno rozwiazanie
  47.    
  48.     JednoRozwiazanie:
  49.     lea rcx,Rowne
  50.    
  51.     ;x1=-b/2a
  52.     FLD parB ;załadowanie b na st(0)
  53.     fchs ;zmiana znaku
  54.     FLD parA
  55.     FMUL l2
  56.  
  57.     FDIVP st(1),st(0) ;odejmowanie
  58.     FSTP x1 ;załadowanie wyniku do zmiennej x1
  59.     FSTSW ax ;przeniesienie wyniku do ax
  60.    
  61.     SAHF
  62.     jmp FuncEnd
  63.  
  64.     WiekszeOdZera:
  65.     ;równanie ma dwa rozwiązania
  66.     lea rcx,Wieksze
  67.    
  68.     ;obliczenie x1
  69.     FLD parB
  70.     FCHS ;-b
  71.     FLD Delta
  72.     FSQRT ;sqrt(delta)
  73.     FSUBP st(1),st(0) ;odejmowanie
  74.    
  75.     FLD parA
  76.     FMUL l2
  77.     FDIVP st(1),st(0) ;dzielenie st(1) przez st(0)
  78.     FSTP x1
  79.  
  80.     ;obliczenie x2
  81.  
  82.     FLD parB
  83.     FCHS ;-b
  84.     FLD Delta
  85.     FSQRT ;sqrt(delta)
  86.     FADDP st(1),st(0) ;odejmowanie
  87.    
  88.     FLD parA
  89.     FMUL l2
  90.     FDIVP st(1),st(0) ;dzielenie st(1) przez st(0)
  91.     FSTP x2
  92.  
  93.     ;obliczenie wyniku
  94.  
  95.     FSTSW ax ;załadowanie stanu statusu koprocesora do msc w pamieci lub rejestru
  96.  
  97.     SAHF ;ładuje rejestr AH do rejestru Flag
  98.     jmp FuncEnd
  99.    
  100.  
  101.     ;A musi być większe od 0
  102.     lea rcx,ErrA
  103.  
  104.  
  105.  
  106. FuncEnd:   
  107. call ExitProcess
  108. Start ENDP
  109. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement