как я понял - у тебя делится не число, а код цифр числа в ASCII кодировке. добавь конвертацию строки в число, а его уже дели
Я нашёл такую реализацию atoi: http://techref.massmind.org/techref/language/asm/x86/stdlib/ATOI.ASM от хтмл тегов почистишь и попробуешь
tester3000 вот сам подумай, у тебя символ "2", который равен 32h. Ты делишь 32h на какое-то число и хочешь получить результат? Грубо говоря, персики на груши делишь. А реализацию можно поискать на васме - примеров полно. Буквально на днях целый пост создали, где приводили около десятка приемов перевода числа. Mikae0x65 кажися создал (за ник могу ошибаться)
Добавил функцию Str2Int (взял отсюда http://twister.rootkits.su/notes.php#n_smint2str ) Код (Text): .wmcommand: cmp [wparam],BN_CLICKED shl 16 + IDC_BTN1 jne .finish invoke GetDlgItemText,[hwnddlg],IDC_EDT1,f1,5 invoke GetDlgItemText,[hwnddlg],IDC_EDT2,f2,5 mov esi,f1 call Str2Int mov eax,edx mov esi,f2 call Str2Int mov ebx,edx xor edx,edx div ebx invoke wsprintf,lpOut,lpFmt,eax invoke SetDlgItemText,[hwnddlg],IDC_STC3,lpOut jmp .processed .wmclose: invoke EndDialog,[hwnddlg],0 .processed: mov eax,1 .finish: pop edi esi ebx ret endp ; Функция Str2Int - преобразует строку в число (от 0 до 0FFFFFFFFh) ; На входе в ESI указатель на строку ; На выходе в EDX преобразованное число proc Str2Int ;Size = 0Eh bytes cld push eax xor edx,edx _loop: lodsb sub al, 48 jb _done imul edx, 10 add edx, eax jmp _loop _done: pop eax ret endp Вроде пашет но почему-то если пытаюсь допустим разделить 256/2 выдает 0 а если 255/2 то нормально подскажите что не так ?
MSoft Хоть убей не помню такого . tester3000 Если у тебя только одна цифра, то можно просто вычесть из нее 0х30. Если больше, то либо написать свою процедуру перевода (примеров, как заметил MSoft, очень много), либо использовать ф-ии типа sscanf, itoa. Описание последних есть в MSDN.
Mika0x65 А что с функцией от Twister'a она разве для этих целей не годится ? Насчет atoi (http://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx) подскажите плиз в какой dll это функция на msdn что-то не нашел и еще я так понял без .NET Framework она не будет работать ? MSoft Но там ведь HexToStr а мне надо StrToInt
tester3000 itoa (integer to ascii) переводит число в строку. atoi (ascii to integer) переводит строку в число. Обе описаны в MSDN, физически находятся в ntdll.dll. Как вызвать из .NET не знаю. Но там своих ф-ий для этого полно, стоит ли вообще звать native в таком случае?
если не нужно вводить текст вида 0001E000 или 0001E000h или 0x0001E000, тогда можно ограничиться GetDlgItemInt кстати, для удобства поставь флаг ES_NUMBER у Edit контрола, тогда в случае ввода нецифровых символов, винда отобразит всплывающее предупреждение (добавь манифест) Отредактировано Jupiter (Сегодня 88:88:88)