Pushok

square equations

Aug 6th, 2011
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .model flat,stdcall
  3. option   casemap:none
  4.     include \masm32\include\masm32.inc
  5.     include \masm32\include\kernel32.inc
  6.     include \masm32\include\msvcrt.inc
  7.    
  8.     includelib \masm32\lib\masm32.lib
  9.     includelib \masm32\lib\kernel32.lib
  10.     includelib \masm32\lib\msvcrt.lib
  11. .DATA
  12.     FOUR dq 4
  13.  
  14.     WelcomeMes db 'Type a,b,c:',0ah,0dh,0
  15.     Query db '%lf %lf %lf',0
  16.    
  17.     ANo_Roots db 'Expression has no roots!\n',0ah,0dh,0
  18.     AOne_Root db 'Expression has one root! %lf',0ah,0dh,0
  19.     ATwo_Roots db 'Expression has two roots! %lf, %lf',0ah,0dh,0
  20.    
  21.     _A dq ?
  22.     _B dq ?
  23.     _C dq ?
  24.     _D dq ?
  25.    
  26.     _H dw ?
  27.    
  28.     _X1 dw ?
  29.     _x2 dw ?
  30. .CODE
  31. START:
  32.     finit
  33.    
  34.     push offset WelcomeMes
  35.     call crt_printf
  36.    
  37.     push offset _C
  38.     push offset _B
  39.     push offset _A
  40.    
  41.     push offset Query
  42.    
  43.     call crt_scanf
  44.    
  45.     ;D = b * b + 4 * a * c
  46.    
  47.     fld _B
  48.     fld _B
  49.     fmul
  50.    
  51.     fstp _D
  52.    
  53.     fild FOUR
  54.     fld _A
  55.     fld _C
  56.    
  57.     fmul
  58.     fmul
  59.    
  60.     fld _D
  61.    
  62.     fadd
  63.     fldz
  64.     fcom
  65.    
  66.     fstsw ax
  67.     sahf
  68.    
  69.     fsqrt
  70.    
  71.     fstp _D
  72.    
  73.     ; ST(0) = 0, ST(1) = D
  74.    
  75.     je ONE_ROOT; ST(0) == ST(1) == 0
  76.     jl NO_ROOTS
  77.     jg TWO_ROOTS
  78.    
  79. ONE_ROOT:
  80.    
  81.     fld _B
  82.     fld _B
  83.     fld _B
  84.     fmul
  85.     fsub
  86.    
  87.     fld _D
  88.    
  89.     fadd
  90.    
  91.     fstp qword ptr [esp]
  92.    
  93.     push offset AOne_Root
  94.    
  95.     call crt_printf
  96.    
  97.     jmp END_POINT
  98.    
  99. TWO_ROOTS:
  100.    
  101.     fld _B
  102.     fld _B
  103.     fld _B
  104.     fmul
  105.     fsub
  106.    
  107.     fld _D
  108.    
  109.     fadd
  110.    
  111.     fstp qword ptr [esp]
  112.    
  113.     fld _B
  114.     fld _B
  115.     fld _B
  116.     fmul
  117.     fsub
  118.    
  119.     fld _D
  120.    
  121.     fsub
  122.    
  123.     fstp qword ptr [esp + 8]
  124.    
  125.     push offset ATwo_Roots
  126.    
  127.     call crt_printf
  128.    
  129.     jmp END_POINT
  130.    
  131. NO_ROOTS:
  132.    
  133.     push offset ANo_Roots
  134.    
  135.     call crt_printf
  136.    
  137.     jmp END_POINT
  138.    
  139. END_POINT:
  140.    
  141.     push 0
  142.     call ExitProcess
  143. END  START
Advertisement
Add Comment
Please, Sign In to add comment