Otra vez yo y si con el con el mismo programa de factorial, espero sea la ultima jeje, bueno el problema no es el programa en si, ese ya esta hehcho, aqui el codigo, por si a alguien mas le sirve y pues para que me puedas decir si hay algun error con el codigo motivo de la siguiente pregunta:
El factorial de un numero es el numero multiplicado por sus antecesores por ejemplo:
el factorial de 5 es 120 por lo siguiente:
5 X 4 X 3 X 2 X 1 = 120 ó 5 X 4=20, 20 X 3= 60, 60 X 2 = 120 y 120 X 1 = 120,
en teoria mi programa hace eso tu das un numero y el se encarga de enviar a lo ultimo el resultado de ese factorial, hasta hay no hay problema puedes sacar el factorial de 6=720, el de 7=5040, el problema llega cuando deseas sacar el factorial de 8 o mayor ya que el factorial de 8=40,320 y mi programa arroja -25,526 o algo por el estilo jeje y cuando pongo por ejemplo el factorial de 100 solo arroja un cero, no entiendo por que sucede esto, intente cambiar los datos tipo int por doubles, pero como estoy utilizando codigo en ensamblador me marca errores de opcode, ya que los bucles que utilizo son en ensamblador y algunas otras partesillas, como podria cambiar esto? o es que assembler no aguanta otro tipo de valores mas que el int? o tiene error mi codigo?
, bueno espero que puedan despejar mis dudas, y aclaro no es tarea, ni mucho menos una practica solo que deseo programar mas de lo poco que se en assembler combinado con C, y es que buske en algunas paginas pro en ninguna me despejaron esa duda ya que solo me dicen los tipos de datos que soporta C, o C++ pero no assembler con turbo c
sin mas rodeos y choro mareador aqui esta el codigo:
#include <stdio.h>
#include <conio.h>
void main (void)
{
clrscr();
int op, tmp, aux, res, a, b;
Menu:
clrscr();
printf("Programa para calcular el factorial en ASSEMBLERn");
printf("Opcionesn");
printf("[1] Factorialn");
printf("[2] Salirn");
printf("Que deseas hacern");
scanf("%i",&op);
asm{
mov ax,op
cmp ax,1
je Factor
cmp ax,2
je Exit
}
Factor:
clrscr();
printf("Digite el numero a factorarn");
scanf("%i",&a);
printf("Pulse Intron");
b=a;
asm{
mov ax, a
mov tmp,ax
dec a
mov ax,a
mul tmp
}
asm{
mov res,ax
mov ax,tmp
cmp ax,1
je IF1
cmp ax,2
je IF2
sub ax,2
mov tmp,ax
}
asm mov cx,tmp
FRep:
asm{
dec a
mov ax,res
mul a
mov res,ax
mov aux,cx
}
asm mov cx, aux
asm loop FRep
getch();
printf("El factorial de %i es: %in",b, res);
asm jmp Menu
IF1:
printf("El factorial de 1 es: 1n");
asm jmp Exit
IF2:
printf("El factorial de 2 es: 2n");
Exit:
printf("Pulse una tecla para salirn");
getch();
}
Aclaracion, este codigo es 100% escrito por mi heee, asi que no digan que me lo robe, estara todo mal hecho pero lo hice yo
jeje, si ha alguien le sirve es libre de copiarlo(como si necesitara decirlo
)
Sin mas espero sus respuestas y pues de antemano gracias espero ya no molestar mas con este codigo... salu2 y en especial a Eternal Idol, gracias por tomart las molestias de contestar mis preguntas