Доброго времени суток! Уважаемые, вопрос избит. Находил похожие темы, но примеры либо не прикручиваются, либо не подходят. Меня даже больше интересует теория и маленький пример, если можно. 1) Прочитал пост http://wasm.ru/forum/viewtopic.php?id=39419&p=10 :cry: Попытался написать маленький конвертер HEX->ASCII и обратно. Скопипастил процедуру (имеется также похожая, но хочется вообще свою)): Код (Text): ; by Alexander Yackubtchik htodw proc String:DWORD ; ----------------------------------- ; Convert hex string into dword value ; Return value in eax ; ----------------------------------- push ebx push esi push edi mov edi, String mov esi, String ALIGN 4 again: mov al,[edi] inc edi or al,al jnz again sub esi,edi xor ebx,ebx add edi,esi xor edx,edx not esi ;esi = lenth .while esi != 0 mov al, [edi] cmp al,'A' jb figure sub al,'a'-10 adc dl,0 shl dl,5 ;if cf set we get it bl 20h else - 0 add al,dl jmp next figure: sub al,'0' next: lea ecx,[esi-1] and eax, 0Fh shl ecx,2 ;mul ecx by log 16(2) shl eax,cl ;eax * 2^ecx add ebx, eax inc edi dec esi .endw mov eax,ebx pop edi pop esi pop ebx ret htodw endp Вроде работает. Но прикрутить к массиву не смог. Недопетрил. Функция возвращает значение в eax. Код (Text): .data var DD ? Например, было 31 30 31 32. Получаем 0Ah, 0Ch. Вопрос: как мне получив значение 1-го и 2-го ASCII->HEX'ов их объединить? Где-то недоучился, видимо. (Вначале =\). Как поместить число, скажем, 0Bh в регистр AL, сдвинуть его (влево или вправо) и добавить 0Ah. Тот же вопрос касаемо не только регистра, но и памяти. И если несложно, вкратце объяснить работу процедуры. Может есть более простой и понятный способ? Буду признателен за ликбез. ЗЫ. прошу сильно не пинать, как любит товарищ Clerk.)
Помню в книге Марека (%writer_second_name%) есть такая функция. С подробнейшим объяснением. Помню, тут кто-то уже задолбался её рекламировать.
Mikl___, круто! Спасибо! Igor1024, благодарю! Изучу! Присоединяюсь к предложению закрепить тему. Подскажите, пожалуйста, причину ошибки ERROR_INVALID_USER_BUFFER (000006F8) после функции WriteFile. INVOKE WriteFile, fileHandle, ADDR var2,ADDR pos, ADDR byteCount, 0 Прочитал, что надо освободить файл от потоков. Выполнил функцию CancelIO. Ничего не меняется. Также читал про выравнивания буфера. Пробовал ALIGN 1 и ALIGN 2 перед объявлением var BYTE 4096 DUP(0). Та же самая ошибка. В чем может быть причина?