Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Вычисление значения функции

Автор: perfect 12.12.2005 3:31

Тема работы - изучение прикладной архитектуры процессора Intel 8086 -80486, команд обработки целых двоичных чисел в целочисленном устройстве процессора Intel 80486, вещественных и целых десятичных в устройстве FPU


3. Разрабатываемая программа должна содержать следуюцие разделы:
· Ввод значения Х в символьном виде в десятичном представлении посредством клавиатуры;
· Преобразование значения Х в выбранное внутреннее представление.
· Вычисление заданного выражения y = f (X) с сохранением результата вычисления в памяти.
· Преобразование результата вычисления в десятичное представление.
· Преобразование результата вычисления в символьное десятичное представление
· Вывод результата вычисления в символьном вид.на экран.
1. Все цифровые данные определить в программе как соответствующие константы.
2. Вычислить Y – вычисления произвести, используя 16 или 32 – битную арифметику в зависимости от требуемого диапазона представления данных
3. Вывести значения Y на экран монитора в шестнадцатеричном представлении.
4. Преобразовать Y в десятичное представление и результат вывести на экран монитора.
Примечание. 1. Задача решается с использованием шелых и вещественных чисел. Тип чисел выбирается студентом сомостоятельно.
2. Рекомендуется первоначально решить задачу с определением переменной X как константы в разделе сегмента данных и после правильного решнения вычислительной части задания перейти к решению задачи ввода переменной X и вывода результата решений Y.


Выражение для вычисления
1)y=2(x-1)^3
2)y=(x^2+2x+2)e^(-x)

Автор: FreeMan 12.12.2005 21:45

http://forum.pascal.net.ru/index.php?showtopic=4034
тут есть ввод, фпу, вывод...

Автор: FreeMan 13.12.2005 14:20

Цитата
как вычислить e^x ?

2^(log2e*x)
команды фпу: FLDL2E - загрузить log2e, F2XM1 - (получить 2 в степени st(0)) -1

Автор: perfect 18.12.2005 5:54

спасибо Олежкин!!!!!! heart.gif wub.gif
FreeMan и тебе спасибо. только я ничего не понимаю в ассемблере smile.gif поэтому та ссылка мне не помогла, но все равно СПАСИБО!!!!

Автор: Altair 26.12.2005 4:31

на самом деле нифига..

Цитата
2^(log2e*x)
команды фпу: FLDL2E - загрузить log2e, F2XM1 - (получить 2 в степени st(0)) -1

не выходит так..

вот код
 FINIT	  

fild con1
fldl2e
fmul
fild con1
fsubr st(1), st
f2xm1
fistp stp; 2^ (log2e)
fild p_d
fild con2
fscale
fistp tw
fild tw
fild stp
fmul


fistp rw

нифига не поучается считаь так...

примеры из интерена вооще не работают..
напримре отсюда:
http://club.shelek.com/viewart.php?id=101
;########### MYEXP ###########
; Мой вариант вычисления экспоненты
fld ARGUMENT
fldl2e
fmul
ffld st(0)
ffld st(0)
frndint
fsub
f2xm1
fld1
fadd
fxch
frndint
fld1
fscale
fxch
ffree st(0)
fincstp
fmul
fstp RESULT
он не компилируется вообще...

что можно скзаать.... ужас.... нигде не найти описаний, документации.... примеров...

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

Автор: Altair 26.12.2005 4:53

вот что я пытался сделать
Прикрепленный файл  exp_test.rar ( 1.55 килобайт ) Кол-во скачиваний: 444

при запуске программы вводим 2-х значное число (например 02) и жмем вволд..
результат - у меня получается только 2^х..
вот почему..

e^x = 2^ (xlog2e)
НО!
когда мы вычисляем 2^ ... асму требуется что бы степень ьыла от -1 до 1...
а если например 2^14 ?
я решил сделать так..
2^ (x*log2e) = 2^x * 2^log2e
2^x вычилсяем командой scale. а 2^log2e = 2* 2*(log2e-1)
тогда вролде бы долно работать но получаю единицу, и в результате
протсо вычисление
2^x вместо e^x
sad.gif

Автор: FreeMan 27.12.2005 13:55

Цитата
2^ (x*log2e) = 2^x * 2^log2e

2^x*2^log2e=2^(x+log2e)
команда fscale работает с любыми показателями. она умножает st(0) на 2^st(1), но перед этим округляет st(1) до целого в сторону 0.
теперь смотри. есть команда F2XM1. она работает только с числами от -1 до +1, то есть подходит для работы с дробной частью
2^(дробь)=2^(целая часть+дробная часть)=2^(целая часть)*2^(дробная часть). число x*log2e = дробное число. а значит нахождение e^x сводится к разбиению дробного числа на целое и остаток и вычисление 2 в соответствующих степенях соответствующими командами
Цитата
он не компилируется вообще...

там есть ошибки. дома посмотрю где эти ошибки и исправлю