Вот есть у меня умножение на константу в цикле. И все те imul мне не нравятся. Как вариант думал разбить константу на суму степеней двойки. Но как-то громоздко все. Используется так: mov ecx, 7AB7h ; 8000h - 400h - 100h - 40h - 8h - 1h = 7AB7h mov edi, 6A2Fh ; 4000h + 2000h + 800h + 200h + 20h + 8h + 4h + 2h + 1h = 6A2Fh mov esi, [ esp + 24h ] mov ebp, [ esp + 28h ] @@: mov bl, byte [ esi ] inc esi test bl, bl jz @F imul ecx add al, bl and eax, ebp push eax mov eax, ecx imul edi and eax, ebp mov ecx, eax pop eax jmp @B @@: Можно ето как-то организовать без умножения? Или зря парюсь.
Обычно заменителем mul является конструкция c lea. Например умножение на 27: Код (Text): lea eax,[eax*8+eax] ;eax=eax*9 lea eax,[eax*2+eax] ;eax=eax*3 Это имеет смысл при не очень больших множителях. Иначе imul гораздо быстрее и короче получится.
ну в целом-то ещё можно двигать влево по степеням двойки, а концы прибавлять... а ещё имхо через фпу прогнать когда очень много умножений