Как конвертировать dword с хекс-числом в десятичную строку? например: .data? buf dd ? .code mov eax , 1000 mov buf , eax invoke MessageBox , 0 , addr buf , addr buf , 0 Мессага выводит таинственные иероглифы... А надо бы - 1000...
push 'ul%' push 1000 mov eax, esp add eax, 4 push eax push offset buf call wsprintf add esp, 16 invoke MessageBox , 0 , addr buf , addr buf , 0
Создаёшь таблицу значений от '0' до 'F' Затем примерно так Код (Text): mov ebx,str mov cx,8 ;в DWORD`е 8 тетрад conv: rol eax,4 mov edx,eax and edx,15 ;получаем очередную тетраду mov dl,[table+edx] ;Конвертируем в hex mov [ebx],dl ;записываем в строку inc ebx loop conv mov [ebx],cl;завершающий ноль Думаю смысл понятен. Код не проверял Правка: В десятичную - вот http://www.wasm.ru/forum/viewtopic.php?id=28092
Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data? str1 db 10 dup(?) .code start: mov eax, 1000 invoke dwtoa, eax, ADDR str1 invoke MessageBox, NULL, ADDR str1, ADDR str1, MB_OK invoke ExitProcess, NULL end start
Код (Text): lea edi,buffer mov eax,1000 ;число для конвертации mov ebx,10 Next: xor edx,edx div ebx or edx,30h mov byte ptr [edi],dl cmp eax,10 jl Complete inc edi jmp Next Complete: or eax,30h inc edi mov byte ptr [edi],al только потом надо зделать реверс строки находящейся в buffer. пример рабочий