Доброго времени суток. Имеется следующее: Код (Text): Get_aDDress proc uses esi edi ecx lpMem, atPos : DWORD LOCAL szEmaIL[32] : BYTE mov esi, lpMem mov ecx, atPos @@: mov al, byte ptr [esi + ecx] .IF ((al >= '0') && (al <= '9')) || \ ((al >= 'A') && (al <= 'Z')) || \ ((al >= 'a') && (al <= 'z')) || \ (al == '.') || (al == '_') || \ (al == '-') || (al == 0) dec ecx jmp @B .ENDIF add esi, ecx inc esi mov eax, ecx mov ecx, atPos sub ecx, eax lea edi, szEmaIL rep movsb mov byte ptr [edi], '@' xor ecx, ecx inc ecx @@: mov al, byte ptr [esi + ecx] .IF ((al >= '0') && (al <= '9')) || \ ((al >= 'A') && (al <= 'Z')) || \ ((al >= 'a') && (al <= 'z')) || \ (al == '.') || (al == '_') || \ (al == '-') || (al != 0) inc ecx jmp @B .ENDIF rep movsb ; szEmaIL - RESULT ret Get_aDDress endp все работает корректно, но появилась проблема: как в ЕАХ поместить содержимое szEmaIL??? пробовал: lea edi, szEmaIL/mov eax, edi - в еах оказывается х..ня какая-то, хотя внутри процедуры все гут. подскажите плиз, как сделать.
Приколист. А что должон eax содержать? Возможные варианты: адрес строки первые четыре символа адреса В первом случае по выходу из процедуры eax скорее всего будет содержать... адрес строки, но что произойдет то строкой еще не известно. Можно сразу lea eax, str
Дык едо потому что переменная локальная, память под нее выделяется стековая. Сразу после выхода из процедуры, строка не будет испорчена, но потом ее затрут адреса возвратов, сохраненные регистры и локальные переменные других процедур. Выход: либо создавать глобальную переменную, либо выделять память под строку. На других языках не программируете? Когда это возвращался адрес локальной переменной? Именно поэтому хотя бы GetWindowName запрашивает адрес буфера и его размер.
вы правы. сделал проще. Код (Text): Get_aDDress proc uses esi edi ecx lpMem, szDest, atPos : DWORD mov esi, lpMem mov ecx, atPos @@: mov al, byte ptr [esi + ecx] .IF ((al >= '0') && (al <= '9')) || \ ((al >= 'A') && (al <= 'Z')) || \ ((al >= 'a') && (al <= 'z')) || \ (al == '.') || (al == '_') || \ (al == '-') || (al == 0) dec ecx jmp @B .ENDIF add esi, ecx inc esi mov eax, ecx mov ecx, atPos sub ecx, eax mov edi, szDest rep movsb mov byte ptr [edi], '@' xor ecx, ecx inc ecx @@: mov al, byte ptr [esi + ecx] .IF ((al >= '0') && (al <= '9')) || \ ((al >= 'A') && (al <= 'Z')) || \ ((al >= 'a') && (al <= 'z')) || \ (al == '.') || (al == '_') || \ (al == '-') || (al != 0) inc ecx jmp @B .ENDIF rep movsb ret Get_aDDress endp
Да, третий вариант обозначил Mika0x65 в соседнем треде. Да, третий вариант обозначил Mika0x65 в соседнем треде (про передачу функции адреса буфера) [Добавлено] Опоздал. За создание расширенной клавиатуры для мобильников!