Here, as an option:
sub esp, 12 ; создаём буфер под строку на 10 цифр mov edi, esp ; (по числу 10-ичных разрядов в 32-битном числе) add edi, 11 ; + знак (для чисел со знаком) mov byte ptr[edi], 0 ; + /0 на конце, чтобы обозначить конец строки mov eax, value ; value - исходное число ; для беззнаковых чисел вся эта часть (до метки convert) не нужна mov esi, eax ; в esi будет храниться знак shr esi, 31 test esi, esi ; проверяем является ли число отрицательным jz convert ; если нет - переходим сразу к конвертации mov ecx, 0 ; если да - делаем его положительным sub ecx, eax mov eax, ecx convert: mov ecx, 10 loop_begin: sub edi, 1 ; запись идёт с конца, поэтому указатель сдвигается к началу xor edx, edx div ecx ; делим value на 10, в остатке получаем младший разряд add edx, '0' ; конвертируем его в цифру mov byte ptr[edi], dl ; записываем цифру в буфер cmp eax, 0 ; проверяем все ли разряды вычислены jg loop_begin ; для беззнаковых - ja ; добавляем знак "-", если нужно (только для чисел со знаком) test esi, esi jz done sub edi, 1 mov byte ptr[edi], '-' done: ; строка готова , указатель на неё в edi ; в этом месте должен быть вывод на экран ; потом удаляем буфер, когда он уже не нужен add esp, 12
itoa(). Or somewhere to find ready and not suffer. - tum_