Написать программу вычисления числа Фибоначчи - Assembler
Формулировка задачи:
Помогите, пожалуйста, студентке! Скоро экзамены, нужно решить билетные задачи на ассемблере, нужны только тексты, запускать их не нужно будет... Есть решения на некоторые задачи, не уверена, что правильно решены...
1. Написать программу вычисления числа Фибоначчи, не превосходящего заранее заданное число N. Числа Фибоначчи вычисляются с помощью следующих соотношений: F0=1, F1=1, Fi=Fi-1+Fi-2
2. Написать программу вычисления суммы S квадратов чисел от 1 до N.
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)
Нашла сам код на сам факториал...
8. Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
9. Написать программу реализующую функцию y = (x+6) 2*(x+1)3.
10. Написать программу реализующую функцию y = (x+2)3/(x+3).
11. Начав тренировки, лыжник в первый день пробежал 15 км. Каждый следующий день он увеличивал пробег на 15% от пробега предыдущего дня. Определить суммарный путь лыжника за первые 7 дней тренировок.
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.
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);
MOV ax,1 MOV cx, [digit] factCycle: MUL cx LOOP factCycle
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;
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;
Решение задачи: «Написать программу вычисления числа Фибоначчи»
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.
Объяснение кода листинга программы
Список элементов кода:
- Объявление константы
x
со значением 2. - Объявление массива
factorial
размером 11 элементов с значениями, равными частным чисел натурального ряда от 1 до 10. - Вычисление длины массива
factorial
с помощью функцииsizeof
. - Объявление переменной
s
типа double. - Начало ассемблерного блока кода.
- Загрузка константы 1 в ST(0).
- Загрузка значения переменной
x
в ST(1). - Вычисление смещения для начала массива
factorial
и сохранение его в BX. - Начало цикла
calc
, который выполняет вычисления до тех пор, пока не будет достигнуто значениеlen
. - Загрузка значения ST(0) в ST(2).
- Мультипликация значения ST(2) на значение в массиве
factorial
с использованием индекса BX. - Прибавление значения ST(2) к значению ST(0).
- Мультипликация значения ST(0) на значение
x
. - Увеличение значения BX на 8.
- Проверка условия
jne @calc
, которое повторяет цикл, пока значение BX меньшеlen
. - Сохранение значения ST(0) в переменную
s
. - Вывод значения переменной
s
на экран. - Ввод значения с клавиатуры.
- Конец программы.
- Значение переменной
s
используется в качестве суммы при выводе на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д