Код (Text): invoke GetSystemMetrics , SM_CXSCREEN CALL P invoke GetSystemMetrics , SM_CYSCREEN CALL P ;------------------------------ P PROC POP EBX MOV Edi , EAX MOV ESI , EAX mov Eax , Edi mov Edx, 0 mov Edi , 100 DIV EDI PUSH EAX ; X/100 , Y/100 MOV EDI , EAX MOV EAX , 99 MUL EDI PUSH EAX MOV EAX , 99 MUL EDX MOV EDX,0 MOV EDI , 100 DIV EDI POP EDI ADD EDI , EAX PUSH EDI ;X/100*99 , Y/100*99 MOV EAX , ESI MOV EDX , 0 MOV EDI , 2 DIV EDI PUSH EAX ;X/100*50 , X/100*50 PUSH EBX RET P ENDP ;-------------------------------------------] почему у меня тут не работает функцыя ? если всё это дело делать без функцыи то всё ок. Огромная просьба не злиться на меня т.к. я ламер и ошибка небось ламерская.
1. зачем забирать адрес возврата 2. зачем портить esi 3. зачем что-то запихивать в edi, если через пару строчек положите туда 100
c4m310t в данный момент мы ведём расследование этого вопроса. займитесь вопросом капса, приём; ТЫ ИСПОРТИЛ ESI!!! mov thread,beginners
P PROC ; обьявление процедуры P POP EBX ; я возращу адрес возврата в самом конце MOV Edi , EAX ; забиваю в Edi длину экрана MOV ESI , EAX ; забиваю в Esi длину экрана Код (Text): MOV Edi , EAX MOV ESI , EAX mov Eax , Edi mov Edx, 0 mov Edi , 100 согласен тут я тупанул можно было просто написать Код (Text): MOV ESI , EAX MOV EDX,0 MOV EDI , 100 На сока мне известно Esi это рабочая лошадь на ровнес EAX , EDX , EBX , EDI Это всеголиш часть кода. Суть заключается в том, чтобы мышь постоянно бегала туда сюда, а если ёё поставить на край экрана, то она отправляется в центр.
Velheart да, пожалуй, я торобоан ьтасипан нежлод лыб, вторые сутки без сна из человека и не линуксоида сделают Х)
NEKTO 1. для это проверки достаточно сделать cmp/shr Booster с тем же самым успехом можно это сделать и перед функцией Код (Text): push SM_CXSCREEN call [GetSystemMetrics] push eax push eax push eax call P push SM_CXSCREEN call [GetSystemMetrics] push eax push eax push eax call P P PROC mov ebp, eax ; ebp=eax xor edx, edx mov ebx, 100 div ebx ; eax/ebx mov [esp+12], eax ; [esp+12]=eax/100 lea eax, [eax*8+eax] lea edx, [eax*8+eax] lea eax, [eax*2+edx] mov [esp+8], ebp ; [esp+8]=eax*99 xor eax, eax ; т.к. умножение на старшую часть произведение (eax/100)*99=0 xor edx, edx div ebx ; 0/100 хз зачем, но для совместимости оставим shr ebp, 1 mov [esp+4], ebp ; [esp+4]=eax/2 RET P ENDP ;-------------------------------------------]
так. опечатки 1. Код (Text): mov ebp, eax ; ebp=eax 2. Код (Text): mov [esp+8], ebp ; [esp+8]=eax*99 меняем на Код (Text): xchg [esp+8], eax ; [esp+8]=eax*99/mov [esp+4], eax ; [esp+4]=eax/2 про дальнейший код можно забыть и поставить ret (но для анализа оставил).