Advertisement
Guest User

Untitled

a guest
Apr 15th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .data
  2. good: .string "Brak wyjatkow\n"
  3. prohibited: .string "Niedozwolone dzialanie\n"
  4. denormalized: .string "Operand zdenormalizowany\n"
  5. zeroDivide: .string "Dzielenie przez zero\n"
  6. overflow: .string "Nadmiar\n"
  7. underflow: .string "Niedomiar\n"
  8. precision: .string "Blad precyzji\n"
  9. status: .int 120
  10.  
  11. zmienna: .float 2.0
  12.  
  13. .text
  14.  
  15. .globl throwException
  16. .type throwException @function
  17. throwException:
  18.     push %ebp
  19.     mov %esp, %ebp
  20.    
  21.     finit
  22.  
  23.     #Pierwiastek z liczby ujemnej
  24.     fld1
  25.     fchs
  26.     fsqrt
  27.  
  28.     #Operand zdenormalizowany
  29.     pushl $0x00001
  30.     fld (%esp)
  31.     fldz
  32.     faddp
  33.  
  34.     #Dzielenie przez zero
  35.     fld1
  36.     fldz
  37.     fdivrp
  38.  
  39.     mov %ebp, %esp
  40.     pop %ebp
  41.     ret
  42.    
  43.  
  44. .globl showException
  45. .type showException @function
  46.  
  47. showException:
  48.     push %ebp
  49.     mov %esp, %ebp
  50.        
  51.     xorl %edi, %edi
  52.     fstsw status
  53.     mov status, %edi
  54.  
  55.     test $0, %edi
  56.     jz prohibited_e
  57.     pushl $good
  58.     call printf
  59.     jmp ret
  60.  
  61.     prohibited_e:
  62.     test $1, %edi
  63.     jz denormalized_e
  64.     pushl $prohibited
  65.     call printf
  66.  
  67.     denormalized_e:
  68.     test $2, %edi
  69.     jz zeroDivide_e
  70.     pushl $denormalized
  71.     call printf
  72.  
  73.     zeroDivide_e:
  74.     test $4, %edi
  75.     jz overflow_e
  76.     pushl $zeroDivide
  77.     call printf
  78.  
  79.     overflow_e:
  80.     test $8, %edi
  81.     jz underflow_e
  82.     pushl $overflow
  83.     call printf
  84.  
  85.     underflow_e:
  86.     test $16, %edi
  87.     jz precision_e
  88.     pushl $underflow
  89.     call printf
  90.  
  91.     precision_e:
  92.     test $32, %edi
  93.     jz ret
  94.     pushl $precision
  95.     call printf
  96.  
  97.     ret:
  98.     mov %ebp, %esp
  99.     pop %ebp
  100.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement