close

Вход

Забыли?

вход по аккаунту

?

Assembler lr4 v2

код для вставкиСкачать
Ассемблер. Лабораторная работа № 4
1) В программе необходимо реализовать функцию вычисления заданного условного выражения на языке ассемблера с использованием команд арифметического сопроцессора.
2) Значения переменных передаются в качестве параметров функции.
3) В программе реализовать вывод результата на экран.
4) Все параметры функции имеют тип double.
5) Проверку деления на 0 реализовать также на встроенном ассемблере.
6) В качестве комментария к каждой строке необходимо указать, какой промежуточный результат, в каком регистре формируется.
7) В качестве комментария к строкам, содержащим команды сопроцессора необходимо указать состояние регистров сопроцессора.
8) Результат можно возвращать из функции в вершине стека сопроцессора.
Пример вычисления выражения: Анализ особенностей задачи.
Возможны две ситуации деления на ноль:
•, если . Например, .
•, если . Например, .
В то же время ситуация, когда, является допустимой.
double func(double a, double b)
{
double res; int status; const int c4=4; const int c5=5; const int c25=25;
__asm{
st0st1st2st3st4
finit;инициализация сопроцессора
fld qword ptr[b];b
fld qword ptr[a];ab
fcom st(1); сравниваем a и b
fstsw status; сохраняем регистр флагов сопроцессора mov ah, byte ptr [status+1]
sahf; записываем в регистр флагов процессора
ja a_bigger; переход если a больше
jb b_bigger; переход если b больше
; если равны
fild c25;25ab
jmpendcalc
a_bigger: ftst; сравнение a с 0
fstsw status; сохраняем регистр флагов сопроцессора mov ah, byte ptr [status+1]
sahf; записываем в регистр флагов процессора
je error; переход если a=0
fdivp st(1), st;b/a
fild c4;4b/a
fsubp st(1), st;b/a-4
jmpendcalc
b_bigger: fldz;0ab
fcomp st(2);сравнение b с 0
;ab
fstsw status; сохраняем регистр флагов сопроцессора mov ah, byte ptr [status+1]
sahf; записываем в регистр флагов процессора
je error; переход если b=0
fld st;aab
fmul st(1), st;aa*ab
fmulp st(1), st;a*a*ab
fild c5;5a*a*ab
fsubp st(1), st;a*a*a-5 b
fdiv st(1), st;(a*a*a-5)/b
jmpendcalc
error:fldz; формируем результат ошибки
endcalc:fstp res;сохранение результата
}
return res;
}
Варианты заданий
№№1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30) 31) 32) 33) 34) 35) 36) 37) 38) 39) 40) 41) 42) 43) 44) 45) 46) 47) 48) 49) 50) 51) 52) 53) 54) 55) 56) 57) 58) 59) 60) Показатели работы:
ПоказательСложностьПояснениеТочность2Реализованы необходимые проверкиОптимальность1Отсутствие "лишних" действийПолнота1Необходимые комментарииОригинальность1Вопрос по коду2Контрольный вопрос3Бонус/Штраф1
Контрольные вопросы к лабораторной работе № 4
1. Регистры сопроцессора.
2. Типы данных сопроцессора
3. Особые числа
4. Команда загрузки и выгрузки данных.
5. Команда загрузки констант.
6. Команды преобразования данных.
7. Команды сложения и вычитания.
8. Команды умножения и деления.
9. Команды сравнения.
10. Специальные арифметические операции.
11. Исключение сопроцессора
12. Недействительные операции
Документ
Категория
Рефераты
Просмотров
24
Размер файла
260 Кб
Теги
lr4, assembler
1/--страниц
Пожаловаться на содержимое документа