простой алгос

Тема в разделе "WASM.A&O", создана пользователем K10, 10 ноя 2008.

  1. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Что-то я туплю и не могу понять сакральный смысл этого алгоса.
    В ECX - указатель на ASCII строку.
    Код (Text):
    1. 0140F530   MOV EAX,DWORD PTR DS:[ECX]
    2. 0140F532   MOV EDX,7EFEFEFF
    3. 0140F537   ADD EDX,EAX
    4. 0140F539   XOR EAX,FFFFFFFF
    5. 0140F53C   XOR EAX,EDX
    6. 0140F53E   ADD ECX,4
    7. 0140F541   TEST EAX,81010100
    8. 0140F546   JE SHORT 0140F530
    XOR EAX,FFFFFFFF - это NOT EAX

    получается
    Код (Text):
    1. var
    2. p: PDWORD;
    3.  
    4. while ((p^ + $7EFEFEFF) XOR (NOT p^) AND $81010100) = 0 do inc(p);
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Это проверка на нулевой символ оптимизированная, можешь проверить, только на дворде, содержащем нулевой байт на одной из 4 позиций выходит, если нужно, могу расписать почему.
     
  3. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    т.е. нахождение конца строки?
    Так я и подозревал :)
    Спасибо.