Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Рекурсивное вычисление факториала(на tasm) / 3 сообщений из 3, страница 1 из 1
06.06.2009, 19:24:00
    #36029325
tailer552
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекурсивное вычисление факториала(на tasm)
Карочь, задача такая : Вычислить факториал числа N!=N(N-1)(N-2)....1=N(N-1)! с помощью рекурсивной программы написанной на ассемблере. Очень нужна помощь, сам писал, чушь получается, в ассемблере нифига не понимаю. Нужно до понедельника!!!! Очень срочно!!!!!
...
Рейтинг: 0 / 0
06.06.2009, 21:46:04
    #36029398
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекурсивное вычисление факториала(на tasm)
tailer552,
ничего не понимаю. Какой ассемблер? Какой бюджет?
...
Рейтинг: 0 / 0
07.06.2009, 00:15:13
    #36029469
clihlt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекурсивное вычисление факториала(на tasm)
tailer552,

Тасма под руками нет.. Но держи на AT&T.
компилить gcc factorial.s


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
////////  factorial.s
	.section	.rodata
.InputMsg:
	.string	"Input number : "
.ErrorMsg:
	.string	"Incorrect number\n"
.InputMask:
	.string	"%u"
.OutputMsg:
	.string	"Answer: %u\n"
.TooBigMsg:
	.string	"Number too big\n"

	.text
	.type	factorial, @function
factorial:
	enter	$ 4 ,$ 0 
	pushl	%edx
	cmpl	$ 1 ,  8 (%ebp)
	jle	.L2
	movl	 8 (%ebp), %eax
	subl	$ 1 , %eax
	movl	%eax, (%esp)
	call	factorial
	xorl	%edx, %edx
	imull	 8 (%ebp)
	test	%edx,%edx
	jz	.L4
	xorl	%eax,%eax
.L4:
	movl	%eax, - 4 (%ebp)
	jmp	.L3
.L2:
	movl	$ 1 , - 4 (%ebp)
.L3:
	movl	- 4 (%ebp), %eax
	popl	%edx
	leave
	ret
	
	.text
.globl main
	.type	main, @function
main:
	enter	$ 4 ,$ 0 
	
	pushl	$.InputMsg
	call	printf
	add	$ 4 ,%eax

	leal	- 4 (%ebp),%eax
	push	%eax
	pushl	$.InputMask
	call	scanf
	addl	$ 8 ,%esp

	test	%eax,%eax
	jnz	.correct
	pushl	$.ErrorMsg
	call	printf
	addl	$ 4 ,%esp
	movl	$ 1 ,%eax
	jmp	.exit

.correct:
	movl	- 4 (%ebp),%eax
	pushl	%eax
	call	factorial
	addl	$ 4 , %esp
	test	%eax,%eax
	jnz	.correct2
	pushl	$.TooBigMsg
	call	printf
	addl	$ 4 , %esp
	movl	$ 1 , %eax
	jmp	exit
.correct2:
	pushl	%eax
	pushl	$.OutputMsg
	call	printf
	addl	$ 8 ,%esp
	
	xorl	%eax, %eax
.exit:
	leave
	ret
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Рекурсивное вычисление факториала(на tasm) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]