Ассемблер в Linux для программистов C: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Gribozavr (обсуждение | вклад) откат, см. обсуждение |
||
Строка 1826:
Что же здесь изменено? Рекурсия переписана в виде цикла. Кадр стека больше не нужен, так как в стек ничего не перемещается и другие функции не вызываются. Пролог и эпилог поэтому убраны, при этом регистр <code>%ebp</code> не используется вообще. Но если бы он использовался, сначала нужно было бы сохранить его значение, а перед возвратом восстановить.
Автор увлёкся процессом и написал 64-битную версию этой функции. Она возвращает результат в паре <code>%eax:%edx</code> и может вычислить <math>20! = 2432902008176640000</math>.
|