Hex2Int не работает для числа 515

Тема в разделе "WASM.BEGINNERS", создана пользователем twgt, 22 июн 2007.

  1. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Привет. Вот функция, которая переводит строку в число, но по не известным мне причинам она переводит число 515 не в 213h а в 103h. Где ошибка? Как исправить?
    На входе указатель на строку и буфер.
    proc pChar2Int uses ebx esi edi edx,fn,nn
    xor eax,eax
    xor ebx,ebx
    mov esi,[fn]
    lodsd
    and eax,0F0F0F0Fh
    xchg eax,ebx
    xor ecx,ecx
    inc ecx
    inc ecx
    @@:
    add al,bl
    imul eax,10
    add al,bh
    dec cx
    jcxz @F
    rol ebx,16
    xchg bh,bl
    jmp @B
    @@:
    mov ebx,[nn]
    mov [ebx],eax
    ret
    endp
    не так тему назвал :)
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    что-то вроде этого
    Код (Text):
    1. proc pChar2Int uses ebx esi edi edx,fn,nn
    2.         xor eax,eax
    3.         xor ebx,ebx
    4.         mov ecx,3
    5.         mov esi,[fn]
    6. @@:
    7.         lodsb
    8.         imul ebx,10
    9.         and eax,0fh
    10.         add ebx,eax
    11.         dec ecx
    12.         jne @b
    13.  
    14.         mov eax,[nn]
    15.         mov [eax],ebx
    16.         ret
    17. endp
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    после add al,bh еше imul надо. и лучше rol на shr заменить.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    asd
    нечесно - ты написал свой код, а не исправил авторский :)
     
  5. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    n0name
    Мир вообще штука жестокая. Кругом несправедливость:)
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    asd
    спасибо, большое :)
     
  7. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Мне подходит и другой код, но интересно почему у меня ошибка, вроде конвертил через полином ax2+bx+c, x=0Ah?
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    twgt
    n0name написал ведь . Ещё мне кажется ты не очень хорошо представляешь, что окажется в eax после lodsd
     
  9. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Вроде нормально так представляю :)
    к примеру для 515 в eax окажется 00353135h :)
    как то не сходится там еще одно умножение, пойду олю мучать...
     
  10. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    twgt
    Если 515 - это строка db "515",0 - тогда да. Только тогда становится непонятно как вообще с такой строкой работать твоим алгоритмом. потому как становится непонятно в какой части еах находится какой разряд. Для твоего алгоритма строка должна быть дополнена "0"спереди до 4 байт. Так: db "0515",0
    Тогда при загрузке в еах получим 35313530 и можно будет пользоваться твоим алгоритмом.