Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2010, 18:51   #1
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию Как запрограмировать на ассемблере факториал?

расскажите как запрограмировать на ассемблере факториал , например
n! где n<6 . На простом ассемблере для комп'ютеров.
Hunter557 вне форума Ответить с цитированием
Старый 04.04.2010, 18:59   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Код:
        mov ax,1             ;В EAX будет факториал, на это число мы будем умножать все остальные. 
	mov cx,[digit]       ; В ECX число факториал которого нужно найти. 
 
        factCycle:
	mul cx                ; умножаем eax на ecx
	dec cx                ; вычитаем из ecx еденицу
	cmp cx,1         ; проверяем не равен ли ECX еденице
	jne factCycle     ; JNE= JUMP if  NOT EQUAL - переход если неравно.  если ECX != 1 - переходим на следующую итерацию.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 04.04.2010 в 19:03.
Ivan_32 вне форума Ответить с цитированием
Старый 04.04.2010, 19:13   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

думаю можно короче

MOV ax,1
MOV cx, [digit]

factCycle:
MUL cx
LOOP factCycle

Последний раз редактировалось f.hump; 04.04.2010 в 19:25.
f.hump вне форума Ответить с цитированием
Старый 04.04.2010, 19:26   #4
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
Радость

Ребята спасибо большое !
Hunter557 вне форума Ответить с цитированием
Старый 04.04.2010, 19:39   #5
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

С вводом/выводом и небольшой багой
Код:
MODEL tiny
.386
CODESEG
org 100h
start:  
   mov ax,03
   int 10h

   call inPut

   and eax,0fh

   mov ecx,eax
   mov eax,1

   cmp ecx,2
   jbe noMul

isMul: 
   xor edx,edx
   mul ecx
   loop isMul

noMul:
   push ax
   shr eax,16
   push ax

   mov ah,09
   mov dx,offset dbResult
   int 21h

   pop ax
   shl eax,16
   pop ax

   xor cx,cx
   mov ebx,10

isDiv:  
   xor edx,edx
   div ebx

   push dx

   inc cx

   or eax,eax
   jnz isDiv

isOut:  
    pop ax
    or al,30h
    int 29h
    loop isOut
    xor ax,ax
    int 16h

inPut: 
   mov ah,09
   mov dx,offset dbEnter
   int 21h

isEnter: 
  xor ax,ax
  int 16h

  cmp al,'0'
  jb isEnter
  cmp al,'9'
  ja isEnter

  int 29h
  ret

dbEnter  db 13,10,'Enter number:$'
dbResult db 13,10,'Factorial   :$'
end start
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно запрограмировать на assembler Hunter557 Помощь студентам 3 21.02.2010 19:14
Как запрограмировать столкновение двух обьектов (например image1 и image2)? virus88 Общие вопросы Delphi 8 28.05.2009 18:09
Как пишется программа на Ассемблере? ThePowerOfTheMind Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 26.05.2009 19:45