Ассемблер в Linux для программистов C: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 1825:
</pre>
 
Что яже сделалздесь изменено? Сначала я переписалРекурсия рекурсиюпереписана в виде цикла. ПотомКадр я увидел, что мнестека больше не нужен кадр стека, так как яв нестек вызываюничего другихне функцийперемещается и ничегодругие функции не помещаю в стеквызываются. ПоэтомуПролог яи убралэпилог прологпоэтому и эпилогубраны, при этом регистр <code>%ebp</code> я не используюиспользуется вообще. ЕслиНо если бы яон его использовалиспользовался, сначала я долженнужно былбыло бы сохранить его значение, а перед возвратом восстановить.
 
ВАвтор результатеувлёкся япроцессом таки увлекся, что решил написатьнаписал 64-битную версию этой функции. Она возвращает результат в паре <code>%eax:%edx</code> и может вычислить <math>20! = 2432902008176640000</math>.
 
<pre>
Строка 1892:
</pre>
 
Нам нужно умножитьУмножение 64-битноебитного числочисла на 32-битное. Мы будем это делатьделается как при умножении «в столбик»:
 
<pre>