Привет. Вот функция, которая переводит строку в число, но по не известным мне причинам она переводит число 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 не так тему назвал
что-то вроде этого Код (Text): proc pChar2Int uses ebx esi edi edx,fn,nn xor eax,eax xor ebx,ebx mov ecx,3 mov esi,[fn] @@: lodsb imul ebx,10 and eax,0fh add ebx,eax dec ecx jne @b mov eax,[nn] mov [eax],ebx ret endp
Мне подходит и другой код, но интересно почему у меня ошибка, вроде конвертил через полином ax2+bx+c, x=0Ah?
twgt n0name написал ведь . Ещё мне кажется ты не очень хорошо представляешь, что окажется в eax после lodsd
Вроде нормально так представляю к примеру для 515 в eax окажется 00353135h как то не сходится там еще одно умножение, пойду олю мучать...
twgt Если 515 - это строка db "515",0 - тогда да. Только тогда становится непонятно как вообще с такой строкой работать твоим алгоритмом. потому как становится непонятно в какой части еах находится какой разряд. Для твоего алгоритма строка должна быть дополнена "0"спереди до 4 байт. Так: db "0515",0 Тогда при загрузке в еах получим 35313530 и можно будет пользоваться твоим алгоритмом.