Написать программу вычисления числа Фибоначчи - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, студентке! Скоро экзамены, нужно решить билетные задачи на ассемблере, нужны только тексты, запускать их не нужно будет... Есть решения на некоторые задачи, не уверена, что правильно решены... 1. Написать программу вычисления числа Фибоначчи, не превосходящего заранее заданное число N. Числа Фибоначчи вычисляются с помощью следующих соотношений: F0=1, F1=1, Fi=Fi-1+Fi-2
program q1;
var I:word;
    mas:byte;
begin
readln(mas);
asm
   mov cl,mas
   mov ch,1
   mov bx,0
   mov dx,1
   @met:
   mov ax,0
   add ax,bx
   add ax,dx
   mov bx,dx
   mov dx,ax
   add ch,1
   cmp ch,cl
   jne @met
   mov I,ax
end;
writeln(I);
readln;
end.
2. Написать программу вычисления суммы S квадратов чисел от 1 до N.
write('Vvedite chislo:');
readln(a);
asm
mov cx,a	присваеваем регистру счетчика значение N
mov bx,0	обнуляем bx
@met:		метка перехода
mov ax,cx	присваеваем регистру аккумулятору AX действующее CX
mul ax	перемножаем AX
add bx,ax	складываем в регистр BX
loop @met	ожидаем обнуления CX
mov a,bx	выводим из подпрограммы
end;
writeln('=',a);
3. Составить программу, вычисляющую для заданного x сумму: 1 + x/1! + x^2/2! + x^3/3! + ... 4. Написать программу вычисления суммы S квадратов четных чисел от 1 до N. 5. Написать программу вычисления суммы положительных и количества отрицательных чисел, содержащихся среди данных 10 чисел. 6. Вычислить сумму чисел от 1 до N, возведенных в степень M. 7. Вычислить сумму факториалов: Y = 1! + 2! + 3! +…+ N! (N>1) Нашла сам код на сам факториал...
MOV ax,1
MOV cx, [digit]

factCycle:
MUL cx
LOOP factCycle
8. Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями. 9. Написать программу реализующую функцию y = (x+6) 2*(x+1)3.
asm
mov ax,a	
mov bx,ax	Сохраняем значение а в регистр bx
add ax,6	
mul ax	
mov cx,ax	сохраняем полученное выражение (x+6) 2 в cx
mov ax,bx	из bx возвращаем значение в ax
add ax,1	
mov bx,ax	значание x+1 сохраняем в bx
mul ax	
mul bx	(x+1)3
mul cx	вычисляем значение y
mov a,ax	
end;
10. Написать программу реализующую функцию y = (x+2)3/(x+3).
asm
mov ax,a	
mov cx,ax	
add ax,2	
mov bx,ax	
mul ax	
mul bx	
mov bx,ax
mov ax,cx	
add ax,3	
mov cx,ax	
mov ax,bx	
div cx	
mov b,ax	
end;
11. Начав тренировки, лыжник в первый день пробежал 15 км. Каждый следующий день он увеличивал пробег на 15% от пробега предыдущего дня. Определить суммарный путь лыжника за первые 7 дней тренировок.

Решение задачи: «Написать программу вычисления числа Фибоначчи»

textual
Листинг программы
const
  x:         double=2;
  factorial: array[0..10] of double=(1/1,      1/2,       1/6,       1/24,
                                     1/120,    1/720,     1/5040,    1/40320,
                                     1/362880, 1/3628800, 1/39916800);
  len=sizeof(factorial);
var
  s: double;
begin
 asm
 fld1
 fld  [x]
 mov  bx,-len
 @calc:fld   st(0)
       fmul  qword[factorial+bx+len]
       faddp st(2),st(0)
       fmul  [x]
       add   bx,8
 jne @calc
 fstp [s]
 fstp [s]
 end;
 writeln('Summa = ',s:0:4);
 readln;
end.

Объяснение кода листинга программы

Список элементов кода:

  1. Объявление константы x со значением 2.
  2. Объявление массива factorial размером 11 элементов с значениями, равными частным чисел натурального ряда от 1 до 10.
  3. Вычисление длины массива factorial с помощью функции sizeof.
  4. Объявление переменной s типа double.
  5. Начало ассемблерного блока кода.
  6. Загрузка константы 1 в ST(0).
  7. Загрузка значения переменной x в ST(1).
  8. Вычисление смещения для начала массива factorial и сохранение его в BX.
  9. Начало цикла calc, который выполняет вычисления до тех пор, пока не будет достигнуто значение len.
  10. Загрузка значения ST(0) в ST(2).
  11. Мультипликация значения ST(2) на значение в массиве factorial с использованием индекса BX.
  12. Прибавление значения ST(2) к значению ST(0).
  13. Мультипликация значения ST(0) на значение x.
  14. Увеличение значения BX на 8.
  15. Проверка условия jne @calc, которое повторяет цикл, пока значение BX меньше len.
  16. Сохранение значения ST(0) в переменную s.
  17. Вывод значения переменной s на экран.
  18. Ввод значения с клавиатуры.
  19. Конец программы.
  20. Значение переменной s используется в качестве суммы при выводе на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы