Советы и приемы
Здесь я поместил нерасклассифированные приемы оптимизирования и те, которые (как я предполагаю) вы уже знаете ;).
- Никогда не используйте директиву JUMPS в вашем коде.
- Используйте строковые операции (MOVS, SCAS, CMPS, STOS, LODS).
- Используйте 'LEA reg, [ebp+imm32]' вместо 'MOV reg, offset imm32 / add reg, ebp'.
- Пусть ваш ассемблер осуществляет несколько проходов по коду (в TASM'е /m5 будет достаточно хорошо).
- Используйте стек и избегайте использования переменных.
- Многие операции (особенно логические) оптимизированны для регистра EAX/AL
- Используйте CDQ, чтобы очистить EDX, если EAX меньше 80000000h (т.е. без знака).
- Используйте 'XOR reg,reg' или 'SUB reg,reg', чтобы сделать регистр равным нулю.
- Использование EBP и ESP в качестве индекса тратит на 1 байт больше, чем использование EDI, ESI и т.п.
- Для битовых операций используйте "семейство" BT (BT,BSR,BSF,BTR,BTF,BTS).
- Используйте XCHG вместо MV, если порядок регистров не играет роли.
- Во время push'инга все значение структуры IOREQ, используйте цикл.
- Используйте кучу настолько, насколько это возможно (адреса API-функций, временные переменные и т.д.)
- Если вам нравится, используйте условные MOV'ы (CMOVs), но они 586+.
- Если вы знаете как, используйте сопроцессор (его стек, например).
- Используйте семейство опкодов SET в качестве семафоров.
- Используйте VxDJmp вместо VxDCall для вызова IFSMgr_Ring0_FileIO (ret не требуется).
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий