Автор Тема: Нужно написать 2-е лабы на ассемблере  (Прочитано 1208 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nastya55555

  • Коллежский регистратор
  • *
  • Сообщений: 3
  • Репутация: -1
1) Вычислить факториал числа n, где n >= 1. написать подпрограммой
2) Каждому элементу массива, начиная со втоpого, пpисвоить значение мак-симального элемента из числа ему пpедшествующих и его самого.
(отблагодарю)
стучите в аську всё обсудим. 397325691

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: Нужно написать 2-е лабы на ассемблере
« Ответ #1 : јРЩ 21, 2009, 09:14:47 am »
Код: (asm) [Выделить]
mov edi, n
mov esi, 1  ;тут будет накапливаться результат
mov ecx, 1 ;счетчик
push nextcode
factorial:
 cmp ecx, edi
 jg end
  imul esi, ecx
  inc ecx
  call factorial
 end:
ret
nextcode:
;на выходе в esi будет факториал

Код: (asm) [Выделить]
mov edi, massiv     ;указатель на массив
mov edx, 0           ;счетчик
mov ecx, razmer_massiva
dec ecx
mov esi, dword [edi]  ;берем первый элемент за максимальный
inc edx

next:
mov eax, dword [edi+edx*4]      ;читаем следующий
cmp esi, eax
jl menwe
mov esi, eax                ;если больше то делаем максимальным
menwe:
mov dword [edi+edx*4], esi      ;заносим максимальное на его место
inc edx                                  ;увеличиваем счетчик
cmp edx, ecx                          ;конец массива?
jne next

код не проверял поэтому может потребовать доводки
написан для компиляции в FASM
« Последнее редактирование: јРЩ 21, 2009, 08:58:56 pm от Veliant »
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/