Сглобяване - Умножение с константа

Можете да направите умножение, използвайки мултимедийни инструкции като imul и mul в кода на асемблерния език, като Mul name_register. Процесорът вътрешно умножава програмните кодове чрез разделяне на параметрите на размерите, като например за eax, ax и al, и след това съхранява резултата в eax или ax като "low" и води до edx или dx като "най-значим", с резултат последният запис се задава, ако множеството е по-голямо от един байт.

Тъй като мултимедийните файлове са огромни в паметта, може да се наложи да преместите стойностите в eax, за да се умножат по регистъра, а резултатът от регистъра трябва да бъде eax, като предишната стойност е презаписана. Въпреки това, ако трябва да умножите регистър с константа, поставете резултат в регистъра и след това използвайте пряк път с инструкцията "lea".

Кратко въведение

Асемблерните езици са езици на ниско ниво за програмиране на компютри и за първи път са разработени през 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] 

Забележка: Не можете да умножите два регистъра заедно с този пряк път.

Предишна Статия Следваща Статия

Топ Съвети