Разработка программы на языке Assembler с использованием процедур. Курсовая работа (т). Информационное обеспечение, программирование.

Разработка программы на языке Assembler с использованием процедур. Курсовая работа (т). Информационное обеспечение, программирование.




⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻


























































Информационное обеспечение, программирование

Вы можете узнать стоимость помощи в написании студенческой работы.


Помощь в написании работы, которую точно примут!

Похожие работы на - Разработка программы на языке Assembler с использованием процедур

Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе

Нужна качественная работа без плагиата?

Не нашел материал для своей работы?


Поможем написать качественную работу Без плагиата!

2.1 Формирование «ассемблерной»
модели задачи


.2 Разработка алгоритма реализации
задачи


.3 Разработка структуры программы в
соответствии с выбранной моделью памяти


3.1 Уточнение структуры входных и
выходных данных и определение ассемблерного формата их представления


Целью выполнения курсовой работы является
расширение и углубление знаний и навыков в программировании на языке Assembler.


В процессе выполнения курсовой работы
необходимо:


а)     разобраться
с арифметическими процессами;


б)     разобраться с алгоритмом
віполнения ассемблером определённых арифметических
операций;


в)     всесторонне оценить поставленную задачу
и определить оптимальные пути ее решения;


г)      составить алгоритмы для реализации
работы программного обеспечения;


Программа должна быть оформлена с использованием
процедур.







1. ПОСТАНОВКА И ФОРМУЛИРОВКА ЗАДАЧИ




Имеется аналитически заданная на
участке функция . Необходимо
разработать на языке ассемблера программу, которая бы выполняла следующие
действия:


        выдавала запрос на ввод
числа участков
разбиения заданного интервала изменения и принимала ввод;


        производила вычисление
значений функции для всех значений
аргумента от до ;


        заносила пары значений в
специально организованную структуру хранения данных (массив), представляющую
таблицу значений функции;


        выводила на экран
приглашение на ввод произвольного значения аргумента с указанием
предельных допустимых значений интервала;


        для введенного значения
аргумента вычисляла приближенное значение функции на основе
линейной интерполяции с использованием подготовленной таблицы значений функции;


        выводила на экран консоли
результат вычисления;


        выдавала запрос на
повторение действий в формате «Y/N» и
обрабатывала ввод пользователя;


        в случае положительного
ответа - повторяла вычисления, в случае отрицательного ответа - заканчивала
свою работу.


Программа должна быть оформлена с использованием
процедур. Для операций с числами при вычислении значений функции необходимо
использовать математический сопроцессор.


При использовании линейной
интерполяции значение функции в точке вычисляется
с помощью следующего выражения:





Для решения перечисленных выше задач
рекомендуется разработать процедуры либо макрокоманды.


Данный курсовой проект предназначен
для вычисления значения функции на основе определённой формулы.


При использовании линейной
интерполяции значение функции в точке вычисляется
с помощью следующего выражения:




программа ассемблерный алгоритм
функция







.1 Формирование «ассемблерной» модели задачи




Для того чтобы решить поставленную задачу
необходимо использовать средства программирования математического сопроцессора.



Необходимо решить это, пользуясь средствами
языка ассемблера. Так как все процессы на аппаратном уровне используют только
команды машинного языка то, необходимо знать архитектуру компьютера, а в
частности его процессора и математического сопроцессора [1].


Для придания структурированного вида
разрабатываемой программе, её следует оформить с использованием процедур .


В модулях разрабатываемого приложения можно
использовать модель памяти SMALL,
которая используется для большинства программ на ассемблере. При этом код
занимает один сегмент, а данные объединяются в одну группу [1].


Архитектура компьютеров на базе микропроцессоров
вначале опиралась исключительно на целочисленную арифметику. С ростом мощи, а
главное с осознанием разработчиками микропроцессорной техники того факта, что
их устройства могут составить достойную конкуренцию своим «большим»
предшественникам, в архитектуре компьютеров на базе микропроцессоров стали
появляться устройства для обработки чисел с плавающей точкой. В архитектуре
семейства микропроцессоров Intel 80x86 устройство для обработки чисел с
плавающей точкой появилось в составе компьютера на базе микропроцессора i8086/88
и получило название математический сопроцессор (далее просто сопроцессор).
Выбор такого названия был обусловлен тем, что, во-первых, это устройство было
предназначено для расширения вычислительных возможностей основного процессора,
а, во-вторых, оно было реализовано в виде отдельной микросхемы, то есть его
присутствие было необязательным. Микросхема сопроцессора для микропроцессора i8086/88
имела название i8087. С
появлением новых моделей микропроцессоров Intel совершенствовались и
сопроцессоры, хотя их программная модель осталась практически неизменной. Как
отдельные (а, соответственно, необязательные в конкретной комплектации
компьютера) устройства, сопроцессоры сохранялись вплоть до модели
микропроцессора i386 и имели название i287 и i387 соответственно. Начиная с
модели i486, сопроцессор исполняется в одном корпусе с основным
микропроцессором и, таким образом, является неотъемлемой частью компьютера.


Сопроцессор добавляет следующие возможности:


-    полная поддержка стандартов IEEE-754 и 854
на арифметику с плавающей точкой. Эти стандарты описывают как форматы данных, с
которыми должен работать сопроцессор, так и набор реализуемых им функций;


-       поддержка численных алгоритмов для
вычисления значений тригонометрических функций;


        обработка десятичных чисел с точностью
до 18 разрядов, что позволяет сопроцессору выполнять арифметические операции
без округления над целыми десятичными числами со значениями до 1018;


-       обработка вещественных
чисел из диапазона .




.2 Разработка алгоритма реализации задачи




Алгоритм реализации данной задачи можно
представить следующим образом:


1)     Выводится запрос на введение
максимального значения х.


2)     Ввод значения х в формате вещественного
числа и перевод его из строкового представления в числовое.


)       Произвести вычисление в пределах
границы, определяющих, в зависимости от условий, по какой функции будет
вычислен


)       Организовывается цикл, по которому
производиться вычисление функции y=f(x),
учитывая условия, и записывается результат в массив.


)       Запросить ввод значения х для
вычисления функции.


)       Если введённое значение не входит в
заданный ранее интервал, то снова перейти к п.5.


)       Определить значения у с помощью
линейной интерполяции.
)       Преобразовать полученное значение у из
числового представления в символьное в формате вещественного числа с плавающей
точкой.


)       Вывести результат на экран.


)       Вывести запрос на повторение действий в
формате «Y/N»,
если нажимаем «Y», то
перейти к п.1, иначе - выйти из программы.


Составим блок-схему для данного алгоритма. Она
представлена в приложении А.




.3 Разработка структуры программы в соответствии
с выбранной моделью памяти




Изначально программный код разделен на три
файла: ftosymb.asm - модуль перевода вещественного числа в символьное
представление, in_fl_v2.asm - модуль чтение чисел с консоли, main.asm -
основной расчетный модуль.







.1 Уточнение структуры входных и выходных данных
и определение ассемблерного формата их представления




Входные данные - максимальное значение х, и
значение х для вычисления функции у=f(х)
путём линейной интерполяции. Данные вводим с клавиатуры, после чего они
представляют собой последовательность символов. Так невозможно произвести
вычисления, поэтому мы переводим их в числовое представление. При этом
необходимо учесть наличие дробной части у числа (если она есть).


К выходным данным относится значение у,
вычисленное по введенному х с помощью линейной интерполяции. Оно представляет
собой вещественное число в вершине стека сопроцессора. Процедура вывода на
экран вещественного числа выполняет перевод из числового представления в
последовательность символов.


Промежуточные данные является последовательность
значений х и соответствующих ему значений у, вычисленных учитывая условия. Эта
последовательность оформлена в виде массива. Обращаясь к соответствующему
значению у, необходимо использовать косвенную базово-индексную адресацию со
смещением. При этом эффективный адрес формируется, как сумма трёх составляющих
[1]: указателя на адрес первого элемента массива в виде его символического
имени, индекса, который равен индексу соответствующего значения х, и базового
регистра, в котором находится смещение каждого значения у относительно
соответствующего значения х.


Ниже приведу таблицу структуры входных и
выходных данных (табл.3.1).









При разработке данного курсового проекта, для
операций с вещественными числами при вычислении значений функции я использовал
процедуры, которые облегчили написание программного кода. При этом я учитывал
ограниченность глубины стека сопроцессора. Для обработки арифметических
операций в данном курсовом проекте использовались арифметические выражения,
представленные в виде ПОЛИЗ.


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


В приложении А приведена ассемблерная программа,
которая демонстрирует работу данного курсового проекта, работу с вещественными
числами с плавающей запятой. Эта программа предназначена для вычисления
значений функции y=f(x)
в интервале x 0
≤ x

x n , при x 0
= 6.3, x n
= 8.4. Алгоритм работы понятен из комментариев, которыми снабжен текст
приведенной программы. Рассмотрим участки кода для вычисления Y
на каждом из трех участков.


процедура расчёта Y на 1-ом участке finit



fldXa2a1_1 endp_2
proc ;процедура расчёта
Y на 2-ом участке


fyl2x
;Стек FPU теперь
содержит: ST(0)=y*log2(x)


frndint ;Округляем ST(0)=trunc(z) |
ST(1)=zst(1);ST(0)=z | ST(1)=trunc(z)st(0),st(1) ;ST(0)=z-trunc(z) |
ST(1)=trunc(z)xm1 ;ST(0)=2**(z-trunc(z))-1 | ST(1)=trunc(z);ST(0)=1
ST(1)=2**(z-trunc(z))-1 | ST(2)=trunc(z)st(1),st ;ST(0)=2**(z-trunc(z)) |
ST(1)=trunc(z);ST(0)=(2**(z-trunc(z)))*(2**trunc(z))=2**(z)Y ;Результат_2 endp_3
proc ;процедура расчёта
Y на 3-ом участке


Произведем оценку погрешности вычислений на
основе линейной интерполяции. Оценка производится исходя из значения
погрешности, рассчитываемой по формуле (4.1), которая позволяет получить значение
погрешности.




где y ист - истинное
значение функции;


Таблица 4.1 -
Погрешность расчетов на 1-ом
интервале функции




Кол-во
интервалов Полученное
значение Введенное число Истинное
значение Погрешность, %

Рисунок 4.1 - График погрешности на 1-ом
интервале







Таблица 4.2 - Погрешность расчетов на 2-ом
интервале функции




Рисунок 4.2 - График погрешности на 2-ом
интервале




Таблица 4.3
- Погрешность расчетов на 3-ом
интервале функции




Рисунок 4.3 - График погрешности на 3-ом
интервале





В ходе выполнения курсовой работы были получены
навыки в программировании на языке Assembler.


В процессе выполнения курсовой работы было :


а)     Исследована работа с арифметическими
процессами;


б)     изучен алгоритм
выполнения ассемблером определённых арифметических
операций;


в)     Исследована поставленная задача и
определены оптимальные пути ее решения;


г)      Составлены алгоритмы для реализации
работы программного обеспечения;


Программа была реализована с использованием
процедур.







1.           Юров В. Assembler:
учебник.- СПБ.: «Питер», 2000.- 624 с.


2.     Юров В. Assembler:
специальный справочник.- СПБ.: «Питер», 2000.- 496 с.


3.     Юров В. Assembler: практикум.-
СПБ.: «Питер», 2001.- 400 с.


.       Методические указания по
оформлению курсовых проектов и работ /Сост.: Ю.Э. Паэранд, П.В. Охрименко -
Алчевск: ДГМИ, 2002.-50с.







xor
ax,axah,03hbh,0 ;­®¬ ўЁ¤Ґ®бва ­Ёжл10h
;бзЁв вм Є®®а¤Ё­
вл Єгаб®а ў
ah,13hal,00000001bcx,_countbl,00001011b ;colordsesbp,offset _string10h_massive
macro;¬ Єа®б
¤®Ў ў«Ґ­Ёп
X,Y ў
¬ ббЁў.,ax;®зЁбвЄ е,indx;ў
al indx,8;ў
dl 8;г¬­®¦
Ґ¬
al ­ 8, १,
ў е,ax;ў
si indx*8,X[si].vX,eax,Y[si].vY,eax


;-------------------------------------------------------------------------------Input_Float:FAROut_Float:FARmacro.incstruc
;бвагЄвга
¤«п еа ­Ґ­Ёп
¤ ­­ле(X,Y)dd
0dd 0endsSMALL


; локальные переменныеequ word ptr
[bp-2]


temp equ
word ptr [bp-4]_intro db 13,10,'corse work system programming variant
50',13,10_i=$-mes_introdb 13,10,'input section number (5-100): N = $'db
13,10,'repeat? ... y/n $' db 13,10,'input X from 6.3 to 8.4: X = $'db 13,10,'Y
= $'_erdb 13,10,'ERROR!!! $'0 ;⥪гйЁ© Ё­¤ҐЄб ў
¬ ббЁўҐdd
6.3 ;X0dd 6.72 ;Ја ­Ёж
1-Ј®
гз бвЄ
dd 7.14 ;Ја ­Ёж
2-Ј®
гз бвЄ
8.4 ;Xn2.1 ;¤«Ё­­
ўбҐЈ®
Ё­вҐаў
« dd 2.0dd 11.0? ;⥪г饥
§­ 祭ЁҐ
X? ;⥪г饥
§­ 祭ЁҐ
Y? ; ўбЇ®¬®Ј ⥫м­
п ЇҐаҐ¬Ґ­­
п?
;Є®«ЁзҐбвў®
гз бвЄ®ў?
;dX, а
§¬Ґа гз бвЄ
101dup (<>) ;¬ ббЁў


; Формируем кадр стэка, чтобы
хранить десятку и ещё какую-нибудь цифру.


; Начнём накапливать число. Сначала
это ноль.


; Вводим первый символ. Это может
быть минус.ah, 01h


; Если это действительно минус,
запоминаем это


; Если введена точка, то пора
переходить


; Ну а если нет, то проверим, что
ввели цифру


; (в противном случае закончим
ввод),


cmp al,
39hshort @if5al, 30hshort @if5


; сохраним её во временной ячейке и
допишем


; к текущему результату справа,[bp -
4], al


; то есть умножим уже имеющееся
число на десятьword ptr [bp - 2]


; и прибавим только что обретённую
цифру.word ptr [bp - 4]


; И так, пока не надоест.short @if0


; Если собрались вводить дробную
часть,


cmp al,
39hshort @if4al, 30hshort @if4


; Иначе сохраняем её во временной
ячейке,[bp - 4], al


; получаем очередную отрицательную
степень десятки,word ptr [bp - 2]


; помножаем на введённую цифру, тем
самым получая


; её на нужном месте,word ptr [bp -
4]


; и добавляем к текущему
результату.st(2), st


; Опять-таки, пока не надоест.short
@if3


; Если ввод дробной части закончен,


; нам больше не нужна степень
десятки.


; Осталось разве только перейти на
новую строку


@if5: mov
ah, 02hdl, 0Dh21hdl, 0Ah21h


enter 4, 0 ; пролог - выделим в
кадре стека 4 байта под локальные переменныеten, 10; определяем знак
числаax@positival, '-' ; если число отрицательное - выводим минус29h; и
получаем модуль числа


@positiv:; загружаем единицуst(1) ;
копируем число на вершину стека; выделим дробную частьst(2), st ; отнимем ее от
числа - получим целую частьst(2) ; меняем местами целую и дробную частиcx, cx ;
обнуляем счетчик


; далее идет стандартный алгоритм
вывода целого числа на экран


@1:ten ; делим целую часть на
десятьst(1) ; обменяем местами st и st(1) для команды fpremst(1) ; копируем
результат на вершину стека ; выделим дробную часть (цифру справа от целой
части)st(2), st ; получим целую частьten ; *10temp ; получаем очередную цифру
temp ; заталкиваем ее глубже в стекcx ; и увеличим счетчикst(1) ; подготовим
стек к следующему шагу цикла (полученное частное на вершину, в st(1) - 1);
проверим не получили ли в частном 0?ax@1 ; нет - продолжим цикл


@2: ; извлекаем очередную цифру,
переводим её в символ и выводим.


; далее то же самое, только для
дробной части. Алгоритм похож на вывод целого числа, только вместо деления
умножение и проход по числу слеваst ; сначала проверим, есть ли дробная часть


jz @quit ; дробная часть
отсутствуетal, '.'29h ; если присутствует - выведем точкуcx, length_frac ;
помещаем в счетчик длину дробной части


@3:ten ; умножим на 10st(1) ;
подготовка для fprem - меняем st и st(1) местами иst(1) ; копируем число на
вершину; отделим дробную часть от целойst(2), st ; и оставляем дробнуюst(2)temp
; выталкиваем полученное число из стека в tempax, temp ; по дробной части идем
слева, значит число выводим сразу, без предварительного сохранения в стекal,
30h ; перевод в ascii29h ; на экранst(1) ; подготовим стек к следующему шагу
цикла (полученное частное на вершину, в st(1) - 1)ax; проверим на 0 остаток
дробной части@3


@quit:; готово. Чистим стек
сопроцессора


fstp st; эпилог2endp_1
proc ;Їа®жҐ¤га а бзсв
Y ­ 1-®¬ гз бвЄҐ
a2a1_1 endp_2 proc ;Їа®жҐ¤га а бзсв
Y ­ 2-®¬ гз бвЄҐ


finit a1 ;Загружаем показатель
степениxx ;Загружаем основаниеx ;Стек FPU теперь содержит: ST(0)=y*log2(x)st(0)
;Создаем еще одну копию z


frndint ;Округляем
ST(0)=trunc(z) | ST(1)=zst(1);ST(0)=z | ST(1)=trunc(z)st(0),st(1) ;ST(0)=z-trunc(z)
| ST(1)=trunc(z)xm1 ;ST(0)=2**(z-trunc(z))-1 | ST(1)=trunc(z);ST(0)=1
ST(1)=2**(z-trunc(z))-1 | ST(2)=trunc(z)st(1),st ;ST(0)=2**(z-trunc(z)) |
ST(1)=trunc(z);ST(0)=(2**(z-trunc(z)))*(2**trunc(z))=2**(z)Y ;Результат_2
endp_3 proc ;Їа®жҐ¤га а бзсв
Y ­ 3-®¬ гз бвЄҐ
a1Y_3 endp_X proc


;-------------------------
­ з
«® ®б­®ў­®©
Їа®Ја
¬¬л
----------------------------_Str mes1 ;ўлў®¤ ЇаЁ«
襭Ёп ­
ўў®¤Input_Float
;ўў®¤
nn ;б®еа ­пҐ¬
n Є Є 楫®Ґn,5
;Їа®ўҐаЄ ўўҐ¤с­­®Ј®
зЁбer
;®Є®­з ­ЁҐ Їа®Ја
¬¬л Ґб«Ё
n < 5n,100 ;Їа®ўҐаЄ ўўҐ¤с­­®Ј®
зЁбer
;®Є®­з ­ЁҐ Їа®Ја
¬¬л Ґб«Ё
n > 100indx,0 ;indx=0;Ё­Ёж.
FPULnvdX ;Ї®«гз Ґ¬
dXedx,X0 ;гбв ­®ўЄ ­
з.
§­XX,edx ;_1:Calc_1 ;ўлзЁб«пҐ¬
Y ­ 1-ў®¬
гз бвЄҐ


;jl
interval_2 ;xi1axinterval_2_massive ;§ ­®бЁ¬ ¤ ­­лҐ ў
¬ ббЁўnext_X
;ўлзЁб«пҐ¬
б«Ґ¤гойЁҐ
§­ з.
Xinterval_1 ;ўлз.
б«Ґ¤.
§­. Y ў н⮬
Ё­вҐаў
«Ґ_2:Calc_2
;ўлзЁб«пҐ¬
Y ­ 2-®¬ гз бвЄҐxi2axinterval_3_massive
;§ ­®бЁ¬
¤ ­­лҐ ў
¬ ббЁўnext_X
;ўлзЁб«пҐ¬
б«Ґ¤гойЁҐ
§­ з.
Xinterval_2 ;ўлз.
б«Ґ¤.
§­. ў н⮬
Ё­вҐаў
«Ґ_3:Calc_3
;ўлзЁб«пҐ¬
Y ­ 3-ў®¬
гз бвЄҐxXnaxinter_massive
;§ ­®бЁ¬
¤ ­­лҐ ў
¬ ббЁўnext_X
;ўлзЁб«пҐ¬
б«Ґ¤гойЁҐ
§­ з.Xinterval_3
;ўлз.
б«Ґ¤.
§­. ў н⮬
Ё­вҐаў
«Ґ:_Str
mes3infloatxX0axerxXnaxerindx,0_loop1: ;Ї®ЁбЄ ў
¬ ббЁўҐ ўв®а®©
в®зЄЁ
¤«п Ё­вҐаЇ®«пжЁЁ,ax
;®зЁбвЄ е,indx

al indx,8 ;ў
dl 8;г¬­®¦
Ґ¬
al ­ 8, १,
ў е,ax

si indx*8indxA[si].vXXaxm_loop1;Ё­вҐаЇ®«пжЁп
y(x)~=Y1+((Y2-Y1)/(X2-X1))*(X-X1)[si].vX[si-8].vX;ST(0)=X2-X1[si].vYA[si-8].vY
;ST(0)=Y2-Y1,ST(1)=X2-X1ST(0),ST(1) ;ST(0)=(Y2-Y1)/(X2-X1)XA[si-8].vXA[si-8].vY

ST(0) १г«мв в_Str
mesYOutFloat:;------------------ ®Є®­з ­ЁҐ
-----------------------------------------_Str mes2_Charal,'y'interal,'Y'interal,'N'exital,'n'ENDPROG:ax,4c00h21h:_Str
mes_er_Charax,4c01h21h



Похожие работы на - Разработка программы на языке Assembler с использованием процедур Курсовая работа (т). Информационное обеспечение, программирование.
Контрольная работа по теме Школа интегральной социологии
Курсовая работа по теме Выбор системы электроснабжения промышленного предприятия
Реферат: Блюда из жареной птицы
Пути достижения конкурентного преимущества продукции на рынке
Курсовая работа: Степень влияния библейских книг на личности русских поэтов XVIII века, формы "адаптации" православных идей в их творчестве
Сочинение На Тему Софьи Фамусовой
Как Оформить Титульник Реферата В Университете Образец
Реферат: Мораль и право
Курсовая работа по теме Актуальные стратегии и модели образования в России
Итоговая Контрольная Работа 7 Класс 1
Примеры Коррупции Для Эссе
Доклад по теме Идея школы Амонашвили
Реферат по теме Учение о мировой воле и смысл человеческого существования в философии Шопенгауэра
Понятие И Принципы Орд Курсовая
Сочинение Про Знакомого Человека
Доклад по теме Принятие решений в экологической геоинформационной системе на основе нечеткой модели классификации
Дипломная работа по теме Особенности слухоартикуляционного анализа и методы коррекции моторики речи у детей с нарушениями интеллекта
Реферат: Физико-химические основы процесса пайки
Влияние Вредных Привычек На Здоровье Подростка Реферат
Сочинение Ничто Не Забыто
Сочинение: Анализ поэмы А.С.Пушкина Цыганы
Похожие работы на - Анализ эффективности франчайзинга как формы поддержки малого предпринимательства
Курсовая работа: Музыкальные произведения Роберта Шумана и Петра Чайковского

Report Page