Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовик.docx
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
531.2 Кб
Скачать

Дамп памяти, для проверки результата:

H Dump

T 000 0400 3B10 0020 0080 2320 802C 1800 200C

T 010 0020 AC10 1800 35AC 0128 0038 3800 06FF

T 020 0000 2000 0001 0000 0200 0003 0000 0400

T 030 0005 0000 0600 0003 0000 0900 0000 0000

T 040 0000 0000 0000 0000 0000 0000 0000 0000

T 050 0000 0000 0000 0000 0000 0000 0000 0000

T 060 0000 0000 0000 0000 0000 0000 0000 0000

T 070 0000 0000 0000 0000 0000 0000 0000 0000

T 080 0000 0000 0000 0000 0000 0000 0000 0000

T 090 0000 0000 0000 0000 0000 0000 0000 0000

T 0A0 0000 0000 0000 0000 0000 0000 0000 0000

T 0B0 0000 0000 0000 0000 0000 0000 0000 0000

T 0C0 0000 0000 0000 0000 0000 0000 0000 0000

T 0D0 0000 0000 0000 0000 0000 0000 0000 0000

T 0E0 0000 0000 0000 0000 0000 0000 0000 0000

T 0F0 0000 0000 0000 0000 0000 0000 0000 0000

E 000

Как мы можем заметить, в переменной res с адресом 020 лежит значение 000020 в хексе, в десятичной это 32, проверим: 1*4+2*5+3*6 = 4+10+18 = 32, следовательно, программа работает верно.

Выводы по работе:

В ходе работы с массивами, можно заметить некоторую особенность обращения к элементам массива: мы указываем адрес на (первый элемент) + (количество байтов, необходимых чтобы добраться в памяти до нужного элемента), это связано с тем, что массив представляет собой последовательность переменных (байтов) стоящих в памяти последовательно.

Текст индивидуального задания по варианту:

Определить n-й член ряда Фибоначчи: F[1]=1, F[2]=1, F[n]=F[n-1]+F[n-2].

Алгоритм решения на ЯВУ(java):

class asm2 {

int f = 1;

int s = 1;

public int fib(int amount) {

if(amount < 2)

return f;

f += s;

f += s;

s = f - s;

f -= s;

return fib(amount-1);

}

}

Спецификации всех разработанных методов:

Метод fe (Fibonacci Element):

Входные параметры: адрес ТАЗ

Алгоритм: прибавляем к значению первой переменной ТАЗ значение второй,

сохраняем во временную переменную, затем меняем местами значения переменных

и сохраняем нашу временную переменную во вторую переменную ТАЗ.

Выходные данные: отсутствуют (т.к. метод работает с адресами)

Схема алгоритма решения задачи: (n – член ряда который надо найти, fe – подпрограмма, f – первый член ряда, s – второй член ряда, res - результат)

начало

да

нет

n <= 2

перейти на метку m2

А

А

метка m1:

jsub fe

да

нет

n > 2

метка m2:

res = s

перейти на метку m1

конец

Текст программы на языке ассемблера:

H Lab2 | Lab2 start 0

T 000 000040 | lda c1

T 003 0C001B | sta f

T 006 0C001E | sta s

T 009 000046 | lda cn

T 00C 0C003A | sta n

T 00F 280043 | comp c2

T 012 380033 | jlt m2

T 015 300033 | jeq m2

T 018 480049 | m1 jsub fe

| ;

T 01B | f resb 3

T 01E | s resb 3

| ;

T 021 00003A | lda n

T 024 1C0040 | sub c1

T 027 0C003A | sta n

T 02A 00003A | lda n

T 02D 280043 | comp c2

T 030 340018 | jgt m1

T 033 00001E | m2 lda s

T 036 0C003D | sta res

T 039 FF | hlt

| ;

T 03A | n resb 3

T 03D | res resb 3

T 040 000001 | c1 word 1

T 043 000002 | c2 word 2

T 046 000007 | cn word 7

| ;

T 049 AC21 | fe rmo l,x

T 04B 008000 | lda 0,x

T 04E 18001E | add 3,x

T 051 0C0068 | sta tmp

T 054 008003 | lda 3,x

T 057 0C8000 | sta 0,x

T 05A 000068 | lda tmp

T 05D 0C8003 | sta 3,x

T 060 AC20 | rmo l,a

T 062 18006B | add c6

T 065 AC02 | rmo a,l

T 067 4C | rsub

| ;

T 068 | tmp resb 3

T 06B 000006 | c6 word 6

| ;

E 000 | end Lab2

  1. 2)