Здравствуйте, форумчане Начал осваивать язык Assembler Решил попробовать написать простую программку - кликер(для онлайн игры) Для того чтобы задать положение курсора по центру экрана, я делаю так .data? Код (Text): .data? ;CursorData DWORD ? width_mon DWORD ? height_mon DWORD ? далее при помощи WinApi Код (Text): invoke GetSystemMetrics,SM_CYSCREEN mov height_mon, eax div 2 ; НЕХОЧЕТ!!! Из статьи: Как это сделать, и после нужно занести данное значение в перменную Спасыбо
лучше shr юзать делит число на степень двойки 1 - делить на 2 (2^1) 2 - делить на 4 (2^2) 3 - делить на 8 (2^3) ...
tagegor 1. Внимательно прочитать описание команды DIV. У неё очень ограниченный набор возможных операндов. В частности, делимое всегда находится в EDX:EAX, туда же запихивается и результат. Например, в данном случае можно сделать так: Код (Text): mov edx, старшая часть делимого mov eax, младшая часть делимого mov ebx, делитель div ebx 2. Если деление производится на число, являющееся степенью двойки (т.е. на 2, 4, 8, 16 и т.д.), его следует заменять командой сдвига вправо на 1, 2, 3, 4 и т.д. разряда. Дело в том, что команды сдвига на современных процах выполняются за один такт, а деление всегда занимает в общем случае десятки тактов: эта команда в принципе не может быть сделана быстрой.
А не проще? =) Код (Text): push height_mon push 2 fild dword[esp] fild dword[esp-4] fdiv st0, st1 fist dword[esp] pop result pop eax