Читайте также:
|
|
Для моделирования внешних тестовых событий (воздействий) на моделируемый МК используются файлы стимуляции с расширением.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 | | | Ассемблер тілі |