Сглобяване - Умножение с константа
Тъй като мултимедийните файлове са огромни в паметта, може да се наложи да преместите стойностите в eax, за да се умножат по регистъра, а резултатът от регистъра трябва да бъде eax, като предишната стойност е презаписана. Въпреки това, ако трябва да умножите регистър с константа, поставете резултат в регистъра и след това използвайте пряк път с инструкцията "lea".
![](http://img.brin-designs.com/img/games/592/assembly-multiplication-constant.png)
Кратко въведение
Асемблерните езици са езици на ниско ниво за програмиране на компютри и за първи път са разработени през 50-те години. Те са известни най-вече като езици за програмиране от второ поколение. Важна характеристика на асемблерния език е, че те елиминираха голяма част от податливите на грешки и отнемащи много време операции, необходими за програмирането от първо поколение.
Умножение при сглобяване
При сглобяването можете да умножите две числа, като използвате инструкциите mul (unsigned numbers) и Imul. Те се използват, както следва:
mul name_registry
Процесорът увеличава съдържанието на eax или ax или al (в зависимост от размера на регистъра, който е даден в параметрите) и след това съхранява резултата в eax, ax, edx или dx.
Използването на mul е доста неприятно, защото ще трябва да преместите умножената стойност за eax, стойността за умножаване в различен регистър и регистърът, който държи резултата, трябва да бъде eax.
Въпреки това, ако просто искате да умножите регистър с константа и да поставите резултата в регистъра по ваш избор, можете да използвате пряк път с инструкцията "lea" (натоварващ ефективен адрес). Тази инструкция се използва за извличане на адреса на данни в паметта.
lea destination_registry, [memory_address]; поставете памет_адрес в целевата_регистрация
Голямото предимство на това е, че с помощта на константа не е необходимо да използвате допълнителен адрес на паметта. Представете си, че искате да умножите ecx на 7 и да запишете резултата в ebx, командата ще бъде:
lea ebx, [ecx * 7]
Забележка: Не можете да умножите два регистъра заедно с този пряк път.