Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Ассемблер. Лабораторная работа № 5

Читайте также:
  1. D триггеры, работающие по фронту.
  2. II. Поработать с лекционным материалом по теме занятия, выучить глоссарий.
  3. II. Работа с акварелью, гуашью, восковыми мелками, школьным мелом
  4. III. Работа по теме.
  5. III. Работа с природным материалом
  6. IV. Контрольная работа №1.
  7. IV. Лабораторная диагностика ВИЧ-инфекции
  8. IV. Работа с тканью, нитками
  9. IV. Совместное открытие знаний. Работа в парах.
  10. V. Положение о контрольных работах

 

Для моделирования внешних тестовых событий (воздействий) на моде­лируемый МК используются файлы стимуляции с расширением.STI. Эти файлы используются MPSIM для того, чтобы обеспечить подачу однократ­ных и повторяющихся входных сигналов в процессе выполнения програм­мы. При этом можно наблюдать на экране, как МК реагирует на сигналы.

В качестве примера ниже приведен файл для тестирования програм­мы, выполняющей опрос состояния линии 1 порта А.

! test1.STI

STEP RA1

1 1!Установка на входе RA1 состояния "1"

200 0!Поступление на вход RA1 сигнала "0"

1000 1! Переход сигнала на входе RA1 в "1"

1200 0!Повторная подача нулевого сигнала

Файл воздействия состоит из множества состояний, для которых зада­ется параметр STEP, определяющий число циклов, в течение которых под­держивается указанное состояние. Он позволяет одновременно подавать сигналы на различные выводы МК. В файле воздействия можно указать любой вывод МК, в том числе и вывод сброса (_MCLR). Для обозначения комментариев используется знак!.

 

Ассемблер. Лабораторная работа № 5

 

Программа реализуется в среде Microsoft Visual Studio на языке С++ с ассемблерными вставками. Создается консольный проект: Создать проект à Другие языки à Visual C++ à Консольное приложение Win32, в котором необходимо сделать следующие задачи:

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

2) Функция вычисляется в виде суммы ряда. Вычисления прекращаются если , где – последующий член ряда; - предыдущий член ряда. Кроме того, на случай плохой сходимости следует ограничить количество слагаемых сверху некоторым наперёд заданным , т.е. выход их вычислительной процедуры может произойти не по условию , а по условию . Значение функции и количество итераций вывести для контроля на экран.

3) Значение параметров , и передаются в качестве аргументов функции.

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

5) В качестве комментария к строкам содержащим команды сопроцессора необходимо указать состояние регистров сопроцессора.


Пример: .

Определим приращение члена ряда : .

Вычисления будем прекращать если .

Распределим регистры сопроцессора.

При циклическом выполнении вычислений в верхушке стека целесообразно хранить значение очередного члена ряда – s, накопление суммы ряда будем осуществлять в глубине стека – sum. Далее будем хранить значение аргумента – x и погрешность – eps.

double exp2(double x, double eps, int& N)

{

int status;

int counter=0;

double res;

 

__asm{

st0 st1 st2 st3 st4

 

mov ecx, N

finit; инициализация сопроцессора

fld qword ptr[eps]; eps

fld qword ptr[x]; x eps

fldz; sum=0 x eps

fld1; s=1 sum=0 x eps

 

calc: fadd st(1), st; s sum+s x eps

inc counter; увеличиваем счётчик

fmul st, st(2); s*x sum+s x eps

fild counter; k s*x sum+s x eps

fdivp st(1), st; s*x/k sum+s x eps

 

fcom st(3); сравниваем погрешность с текущим членом ряда

 

fstsw status; сохраняем регистр флагов сопроцессора

 

mov ah, byte ptr [status+1]

sahf; записываем в регистр флагов процессора

 

jl endcalc; переход на конец, если достигли погрешность

 

cmp ecx, counter; сравниваем достижение количества членов

jg calc; переход на начало

 

endcalc: fstp res; сброс с вершины стека текущего члена s

 

fstp res; сохранение результата sum

}

 

N = counter;

return res;

 

}

Напишем функцию, вычисляющую аналитически с использованием команд сопроцессора.

 

double exp3(double x)

{

__asm{

st0 st1 st2

finit;

fld x;

fldl2e;

fmul;

 

fld st;

 

frndint;

fsub st(1), st;

fxch st(1)

 

f2xm1;

; только для

fld1;

fadd;

 

fscale;

 

}

// результат лежит в вершине стека сопроцессора

}


Варианты заданий

Диапазон
1.
2.
3.
4. 3
5. 4
6.
7. 5
8. 6
9.
10.
11. 9
12.
13. 1
14. 1
15. 1
16. 8
17.
18.
19.
20.

 




Дата добавления: 2014-12-19; просмотров: 158 | Поможем написать вашу работу | Нарушение авторских прав

<== предыдущая лекция | следующая лекция ==>
СИМУЛЯТОР MPSIM| Ассемблер тілі

lektsii.net - Лекции.Нет - 2014-2025 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав