Не правильный результат деления

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

  1. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Помогите плиз разобраться почему результат деления не правильный прикрепил исходник
     
  2. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    как я понял - у тебя делится не число, а код цифр числа в ASCII кодировке. добавь конвертацию строки в число, а его уже дели
     
  3. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Нет у кого случайно на асме функции StrToInt :)) ?
    А без кодировки не как получится ?
     
  4. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    tester3000
    вот сам подумай, у тебя символ "2", который равен 32h. Ты делишь 32h на какое-то число и хочешь получить результат? Грубо говоря, персики на груши делишь.
    А реализацию можно поискать на васме - примеров полно. Буквально на днях целый пост создали, где приводили около десятка приемов перевода числа. Mikae0x65 кажися создал (за ник могу ошибаться)
     
  6. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Добавил функцию Str2Int (взял отсюда http://twister.rootkits.su/notes.php#n_smint2str )

    Код (Text):
    1. .wmcommand:
    2.         cmp [wparam],BN_CLICKED shl 16 + IDC_BTN1
    3.         jne .finish
    4.         invoke GetDlgItemText,[hwnddlg],IDC_EDT1,f1,5
    5.         invoke GetDlgItemText,[hwnddlg],IDC_EDT2,f2,5
    6.  
    7.         mov esi,f1
    8.         call Str2Int
    9.         mov eax,edx
    10.  
    11.         mov esi,f2
    12.         call Str2Int
    13.         mov ebx,edx
    14.         xor edx,edx
    15.         div ebx
    16.  
    17.  
    18.         invoke wsprintf,lpOut,lpFmt,eax
    19.         invoke SetDlgItemText,[hwnddlg],IDC_STC3,lpOut
    20.         jmp .processed
    21.  
    22.   .wmclose:
    23.         invoke  EndDialog,[hwnddlg],0
    24.  
    25.   .processed:
    26.         mov     eax,1
    27.   .finish:
    28.         pop     edi esi ebx
    29.         ret
    30. endp
    31.  
    32.  
    33. ; Функция Str2Int - преобразует строку в число (от 0 до 0FFFFFFFFh)
    34. ; На входе в ESI указатель на строку
    35. ; На выходе в EDX преобразованное число
    36. proc Str2Int  ;Size = 0Eh bytes
    37.     cld
    38.     push eax
    39.     xor edx,edx
    40. _loop:
    41.     lodsb
    42.     sub    al, 48
    43.     jb     _done
    44.     imul   edx, 10
    45.     add    edx, eax
    46.     jmp    _loop
    47. _done:
    48.     pop eax
    49.     ret
    50. endp
    Вроде пашет но почему-то если пытаюсь допустим разделить 256/2 выдает 0
    а если 255/2 то нормально подскажите что не так ?
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    MSoft
    Хоть убей не помню такого :).

    tester3000
    Если у тебя только одна цифра, то можно просто вычесть из нее 0х30. Если больше, то либо написать свою процедуру перевода (примеров, как заметил MSoft, очень много), либо использовать ф-ии типа sscanf, itoa. Описание последних есть в MSDN.
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
  9. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Mika0x65

    А что с функцией от Twister'a она разве для этих целей не годится ?
    Насчет atoi (http://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx) подскажите плиз в какой dll это функция на msdn что-то не нашел и еще я так понял без .NET Framework она не будет работать ?

    MSoft

    Но там ведь HexToStr а мне надо StrToInt
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    tester3000
    itoa (integer to ascii) переводит число в строку.
    atoi (ascii to integer) переводит строку в число.

    Обе описаны в MSDN, физически находятся в ntdll.dll. Как вызвать из .NET не знаю. Но там своих ф-ий для этого полно, стоит ли вообще звать native в таком случае?
     
  11. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Млин заморочили мне голову всякими atoi, atol и др. :))) GetDlgItemInt вот что мне нужно было !
     
  12. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Если кому надо приатачил сорсы
     
  13. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    если не нужно вводить текст вида 0001E000 или 0001E000h или 0x0001E000, тогда можно ограничиться GetDlgItemInt

    кстати, для удобства поставь флаг ES_NUMBER у Edit контрола, тогда в случае ввода нецифровых символов, винда отобразит всплывающее предупреждение (добавь манифест)


    Отредактировано Jupiter (Сегодня 88:88:88)
     
  14. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Jupiter

    спс за ES_NUMBER что то я не подумал про левые символы
     
  15. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    сорри за оффтоп но как редактировать свои посты ????
     
  16. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Походу не как...
     
  17. holld

    holld New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2008
    Сообщения:
    39
    Походу не как...
     
  18. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    пока никак.


    Отредактировано Jupiter (Сегодня 88:88:88)