Другие языки программирования и технологии
нужно написать программку на ассемблере, к-рая считает факториал числа n
, но моя программа считает только 8!, что мне нужно изменить, чтобы считался факториал большего числа?
Код в студию, а вообще таких примеров в инете валом.
;==== NASM syntax вроде бы
;
; file: factorial.asm
; This program demonstrates local variables and recursion
;
%include "asm_io.inc"
segment .data
prompt db "Enter a number: ", 0
ans_msg db "! is ", 0
segment .bss
input1 resd 1
input2 resd 1
segment .text
factorial:
;
; This procedure expects one unsigned integer (n>0) on the stack.
; It returns n! in eax
;
push ebp
mov ebp,esp
sub esp,4 ;make space for a local variable (at ebp-4)
mov eax,[ebp+8] ;put parameter in eax
cmp eax,0
je done ;if we were finding 0!
mov [ebp-4],eax ;else store eax in our local variable
dec eax ;compute n-1
push eax ;put it on the stack
call factorial ;and find (n-1)!
;oops! forgetting to remove param from stack. see *
mul dword [ebp-4] ;then multiply it by our saved value
jmp epilog ;and return it
done:
mov eax,1
epilog:
mov esp,ebp ;restore esp (skip over local variables)
; Note *: saved, because we fix esp no matter what
; DON'T DO THIS. I left it in for educational purposes only
pop ebp
ret
global _asm_main
_asm_main:
enter 0,0 ; setup routine
pusha
mov eax, prompt
call print_string
call read_int
call print_int
push eax
mov eax,ans_msg
call print_string
call factorial
add esp,4 ;remove parameter from stack
call print_int
call print_nl
popa
mov eax, 0 ; return back to C
leave
ret
;==== NASM syntax вроде бы
;
; file: factorial.asm
; This program demonstrates local variables and recursion
;
%include "asm_io.inc"
segment .data
prompt db "Enter a number: ", 0
ans_msg db "! is ", 0
segment .bss
input1 resd 1
input2 resd 1
segment .text
factorial:
;
; This procedure expects one unsigned integer (n>0) on the stack.
; It returns n! in eax
;
push ebp
mov ebp,esp
sub esp,4 ;make space for a local variable (at ebp-4)
mov eax,[ebp+8] ;put parameter in eax
cmp eax,0
je done ;if we were finding 0!
mov [ebp-4],eax ;else store eax in our local variable
dec eax ;compute n-1
push eax ;put it on the stack
call factorial ;and find (n-1)!
;oops! forgetting to remove param from stack. see *
mul dword [ebp-4] ;then multiply it by our saved value
jmp epilog ;and return it
done:
mov eax,1
epilog:
mov esp,ebp ;restore esp (skip over local variables)
; Note *: saved, because we fix esp no matter what
; DON'T DO THIS. I left it in for educational purposes only
pop ebp
ret
global _asm_main
_asm_main:
enter 0,0 ; setup routine
pusha
mov eax, prompt
call print_string
call read_int
call print_int
push eax
mov eax,ans_msg
call print_string
call factorial
add esp,4 ;remove parameter from stack
call print_int
call print_nl
popa
mov eax, 0 ; return back to C
leave
ret
На самом деле задача весьма сложная. И проблема здесь в том, что факториал сравнительно небольшого числа не влезет в переменную. Даже не знаю как это на ассме реализовать) На С я бы сделал в виде массива.
Я не знаю что ты там такого написал.
Сделай обычный цикл от одного до Н.
Сделай обычный цикл от одного до Н.
Похожие вопросы
- Нужно написать на любом языке прорамму, которая будет принимать число N. выдавать число X такое, что: X>N
- Напишите программу, которая выводит на экран все делители числа N, (число N вводится с клавиатуры) абсПАСКАЛЬ ПОМОГИТЕ
- помогите пожалуйста написать программку в С++. Выяснить является ли это число степенью 5
- Нужно написать программа на ассемблере для функции СигнумХ . Как правильно это сделать?
- помогите!!! вопрос по C++ нужно написать программку "заполните массив так, чтобы все его элементы были различны.
- Здравствуйте =) Очень нужна помощь. Нужно написать программку на c++.
- информатика. вычислите факториал натурального числа n.
- Ассемблер рекурсивная процедура. вычисление факториала, в чем проблемма программы? в отладчике она зацикливается.
- Даны натуральные числа N и A1,…, AN. Образовать новые одномерные последовательности B1, …, BN и C1, …, CN
- Паскаль. Представить натуральное число n в виде суммы трёх квадратов натуральных чисел.