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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2012, 11:50   #1
sawyer1204
 
Регистрация: 17.06.2012
Сообщений: 4
По умолчанию Ассемблер. Вычисление факториала любого числа

Помогите сделать программу на ассеблере, которая вычисляет факториал от любого unsigned числа. Результат она должна хранить в массиве двойных слов в памяти. Массив например 1000 элементов
Компилятор NASM
sawyer1204 вне форума Ответить с цитированием
Старый 17.06.2012, 15:10   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

sawyer1204, какие Вы лично усилия предприняли для решения этой задачи? Кроме создания тем на форумах?
vadimych вне форума Ответить с цитированием
Старый 17.06.2012, 20:02   #3
sawyer1204
 
Регистрация: 17.06.2012
Сообщений: 4
По умолчанию

собственно вот код моей программы:
%INCLUDE "win32.inc"
EXTERN ExitProcess
EXTERN MessageBoxA


SECTION CODE USE32 CLASS=CODE

..start:

mov eax, [n]
call factorial
call ExitProcess



factorial:

mov esi, [buffer]
mov [esi+0xA], eax
mov ebx, 0x1
cmp eax, ebx
ja calculate
mov [esi+0xA], ebx
ret

calculate:


cycle:

mov ecx, 0x0
mov [esi+ecx], ebx
cmp ecx, 0xA
jna cycle

mov [esi+0xA], ebx
mov edi, eax

mul_cycle:

mov ecx, 0x0

mov eax, [esi+ecx+1]
mul edi
mov [esi+ecx+1], eax
add [esi+ecx], edx
dec edi
cmp ecx, 1
ja mul_cycle

ret


SECTION DATA USE32 CLASS=DATA
buffer resd 11
n dd 25



но она не работает, дебагер не может преодолеть эту строчку:mov [esi+0xA], eax
sawyer1204 вне форума Ответить с цитированием
Старый 18.06.2012, 17:00   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

наверное потому, что вы сделали
Цитата:
Код:
mov esi, [buffer]
а не
Цитата:
mov esi, offset buffer
или
Цитата:
lea esi, buffer
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.06.2012, 18:42   #5
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

sawyer1204, здесь где-то Mikl___ выкладывал код программы, считающей факториал. Поищите, если интересно. DiemonStar, fasm поймёт и
Код:
mov esi,buffer
.
vadimych вне форума Ответить с цитированием
Старый 19.06.2012, 11:30   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
DiemonStar, fasm поймёт и
Код:
mov esi,buffer
да я не против) но по всем канонам ассемблера в исходном варианте у ТС грузится содержимое ячейки, а никак не смещение...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление факториала turtles Помощь студентам 1 22.09.2011 13:38
вычисление факториала в С++ mephistophel Помощь студентам 4 10.03.2010 12:43
Си, вычисление факториала ManInBlack Помощь студентам 2 07.03.2009 00:50
Ассемблер - вывод факториала Voortex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 07.12.2008 12:29
Вычисление факториала числа PAVEL315 Общие вопросы Delphi 17 21.03.2007 07:32