Advertisement
Guest User

Untitled

a guest
Feb 8th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .text
  2.     .global tree_find
  3.  
  4. tree_find:
  5.     //стандартный пролог
  6.     pushl   %ebp
  7.     movl    %esp, %ebp
  8.  
  9.     //  присваиваем xmm1 правиьное значение
  10.     pushl   $0x7fffffff
  11.     pushl   $0xffffffff
  12.     movsd   (%esp), %xmm1
  13.     addl    $8, %esp
  14.  
  15.     // %xmm0 - ключ
  16.     // проверка на head == NULL
  17.     movl    8(%ebp), %eax
  18.     test    %eax, %eax
  19.     jz  exit
  20.    
  21.     movsd   12(%ebp), %xmm0
  22.  
  23.     // search
  24. loop:  
  25.     // кладем E в xmm4
  26.     pushl   $0x3e45798e
  27.     pushl   $0xe2308c3a
  28.     movsd   (%esp), %xmm4
  29.     addl    $8, %esp
  30.  
  31.     movsd   (%eax), %xmm1
  32.     movsd   %xmm1, %xmm3
  33.     subsd   %xmm0, %xmm1
  34.     pand    %xmm1, %xmm1
  35.    
  36.     // сравниваем E и xmm1
  37.     comisd  %xmm4, %xmm1
  38.  
  39.     // если совпали
  40.     jbe result
  41.  
  42.     comisd  %xmm0, %xmm3
  43.     ja  right
  44.  
  45.     // если меньше
  46. left:   movl    8(%eax), %eax
  47.     test    %eax, %eax
  48.     jz  exit
  49.     jmp loop
  50.  
  51.     // если больше
  52. right:  movl    12(%eax), %eax
  53.     test    %eax, %eax
  54.     jz  exit
  55.     jmp loop
  56.  
  57. // нормальный эпилог
  58. result:
  59.     movl    20(%ebp), %ecx
  60.     test    %ecx, %ecx
  61.     jz  no_str
  62.  
  63.     pushl   %esi
  64.     movl    16(%eax), %esi
  65.     movl    %esi, (%edx)
  66.     popl    %esi
  67.  
  68.     movl    %eax, (%ecx)
  69.     movl    $1, %eax
  70.     movl    %ebp, %esp
  71.     popl    %ebp
  72.     ret
  73.  
  74.  
  75. // эпилог если нет ссылки на строку
  76. no_str:
  77.     movl    $1, %eax
  78.     movl    %ebp, %esp
  79.     popl    %ebp
  80.     ret
  81.  
  82. // эпилог если head == NULL_ptr
  83. exit:   movl    $0, %eax
  84.     movl    %ebp, %esp
  85.     popl    %ebp
  86.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement