Como log n! = log 1 + log 2 + ... + log n < nlog n um limite superior para o tamanho do buffer para armazenar o fatorial de n é dado por M= n*log2(n) bits = (n*log2(n))/32 palavras e poderia ser calculado em tempo de montagem se diretivas do assembler possuissem a função log como parte de uma expressão, o que não ocorre com a toolchain do gcc (observe, no entanto, que 64! requer menos que 12 palavras pelo cálculo da fórmula acima).
Sugestão: multiplique (na base 10) 9 x 19 e analize cuidadosamente a propagação dos "vai um". Veja também no manual de instruções a especificação da instrução umull. Seus testes devem incluir fatoriais que requerem pelo menos 64 bits e os fatoriais de 16, 32 e 64 abaixo exibidos. Para calcular e visualizar fatoriais em hexadecimal use o seguinte programa em python:
N= input('Entre com fatorial a calcular: ') f=1 for i in range(2,N+1): f=f*i print f print "%2d!=%x (em hexadecimal)" %(N, f) Exemplos: 16!=130777758000 (em hexadecimal) 32!=32ad5a155c6748ac18b9a580000000 (em hexadecimal) 64!=ff23c771a4224f3ea955f44abb627cafecd3822f290c6ef93cd162c0058000000000000000 (em hexadecimal)