INC с другого конца.

Тема в разделе "WASM.BEGINNERS", создана пользователем Limp, 3 июл 2009.

  1. Limp

    Limp Roman

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    10
    Простите я не знал как назвать тему, но попробую правильно сформулировать вопрос.

    Мне понадобилось увеличить IP на единицу. (IP дан в сетевом расположении байтов, возврат функции inet_addr) они там задом наперед расположены, и мне ничего в голову не пришло, как написать такое –

    Код (Text):
    1. push my_ip_start
    2. call inet_addr@4
    3. mov ip_start,eax
    4. cmp eax,0
    5. je ERROR_IP_1
    6. cmp eax,0FFFFFFFFh
    7. je ERROR_IP_2
    8.  
    9.  
    10. [b]ror  eax,16
    11. ror     ax,8
    12. inc ax
    13. ror ax,8
    14. ror eax,16[/b]
    15. mov [ip_start],eax
    но мне не нравиться шаманство с ROR….может можно это реализовать как то попроще и по красивее? Простите за этот вопрос, если он глуп…но я пока что учусь...
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    есть такая инструкция - bswap
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Ежели 0 и -1 недопустимы, то inc можно сделать и без ror, bswap и т.п.
    Код (Text):
    1. add eax, 1000000h
    2. adc eax,0
     
  4. Limp

    Limp Roman

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    10
    Это то что нужно! Сенкс!
     
  5. Limp

    Limp Roman

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    10
    Мне нужен был инкремент в диапазоне - допустим 200.200.XXX.XXX (XXXXC8C8)
    ADD удобно было бы наверное, если увеличивать только 200.200.200.ХХХ
    ADC переносит не туда куда мне нужно, может я не совсем знаком с ADC, может можно организовать перенос в нужный байт регистра? так она переносит в AL, мне бы этот перенос в 00XXC8C8 :)

    хотя bswap, именно то что я искал, но и другие варианты хотелось бы попробовать.
    Спасибо.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Мда, с ADC я лопухнулся - ведь тут не цикл.сдвиг, а зеркальный свап :wall:
    Ну можно так
    Код (Text):
    1. add byte ptr [ip_start+3],1
    2. adc byte ptr [ip_start+2],0
     
  7. Limp

    Limp Roman

    Публикаций:
    0
    Регистрация:
    3 дек 2008
    Сообщения:
    10
    Мне даже стыдно….. : )
    мог бы сам додуматься!
    Благодарю!