Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Полная засада с ассемблером, помогите кто чем может!!!

62K
17 ноября 2010 года
Лисичка
8 / / 17.11.2010
Народ помогите пожалуйста! сразу говорю что в ассемблере я понимаю очень мало, т.к. нам его только начали преподавать, но совершенно забыли убрать из учебного плана курсач, перед нами только извенились но сказали делать, человек пообещавшийся помочь мне и обьяснить почти в последний момент отказался от помощи....
теперь обращаюсь к вам, как к последней надежде!!!
нужно написать прогу на ассемблере:
Рзложение функций (sin, cos, tg, e^x, a^x и других) в ряд Тейлора используя длинную арифметику (не менее 200 розрядов)(сама и понятия не имею, что это за фигня, погуглю, результаты выложу)
я порылась в нете но ничего особого там не нашла...
все что нашла....

Разложение синуса в ряд Тейлора

Задача:
Используя разложение в ряд Тейлора найти значение sin(x) с заданной точностью e.

Код:

program sin_teilor;
var x,stx,sint,e: real;
i,fakt,z: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:= x; {x в степени}
fakt:= 1; {значение факториала в знаменателе}
sint:= 0; {первый элемент в разложении}
i:= 1; {счётчик}
z:= 1; {знак элемента}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
sint:=sint+z*stx/fakt;
inc(i,2);
stx:=stx*x*x;
fakt:=fakt*(i-1)*i;
z:=z*(-1); {смена знака}
end;
Writeln('Количество элементов в разложении = ',i div 2);
Writeln('Значение sin(',x:6:6,')= ',sint:6:6);
Writeln('Значение компьютера: ',sin(x):6:6);
Readln;
End.

Разложение ex в ряд Тейлора
ЗАДАЧА:
Используя разложение в ряд Тейлора найти значение ex с заданной точностью e.

КОД:

program ex_teilor;
var x,stx,ex,e: real;
i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:=x; {x в степени}
fakt:=1; {значение факториала в знаменателе}
ex:=1; {первый элемент в разложении}
i:=1; {счётчик}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
ex:=ex+stx/fakt;
inc(i);
stx:=stx*x;
fakt:=fakt*i;
end;
Writeln('Количество элементов в разложении = ',i+1);
Writeln('Значение e^',x:6:6,'= ',ex:6:6);
Writeln('Значение компьютера: ',exp(x):6:6);
Readln;
End.

Разложение ln(x) в ряд Тейлора
ЗАДАЧА:
Используя разложение в ряд Тейлора найти значение ln(x) с заданной точностью e.
ОПИСАНИЕ:

КОД:
program lnx_teilor;
var x,stx,lnt,e: real;
i,fakt,z: integer;
Begin
Write('Введите 1 < x < 2: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:= x-1; {x в степени}
fakt:= 1; {значение знаменателя}
lnt:= 0; {первый элемент в разложении}
i:= 1; {счётчик}
z:= 1; {знак элемента}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
lnt:=lnt+z*stx/fakt;
inc(i);
stx:=stx*(x-1);
fakt:=i;
z:=z*(-1); {смена знака}
end;
Writeln('Количество элементов в разложении = ',i);
Writeln('Значение ln(',x:6:6,')= ',lnt:6:6);
Writeln('Значение компьютера: ',ln(x):6:6);
Readln;
End.


Разложение косинуса в ряд Тейлора
ЗАДАЧА:
Используя разложение в ряд Тейлора найти значение cos(x) с заданной точностью e.
ОПИСАНИЕ:

КОД:
program cos_teilor;
var x,stx,cost,e: real;
i,fakt,z: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:= x*x; {x в степени}
fakt:= 2; {значение факториала в знаменателе}
cost:= 1; {первый элемент в разложении}
i:= 2; {счётчик}
z:= -1; {знак элемента}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
cost:=cost+z*stx/fakt;
inc(i,2);
stx:=stx*x*x;
fakt:=fakt*(i-1)*i;
z:=z*(-1); {смена знака}
end;
Writeln('Количество элементов в разложении = ',i div 2 + 1);
Writeln('Значение cos(',x:6:6,')= ',cost:6:6);
Writeln('Значение компьютера: ',cos(x):6:6);
Readln;
End.


Разложение гиперболического синуса в ряд Тейлора
ЗАДАЧА:
Используя разложение в ряд Тейлора найти значение sh(x) с заданной точностью e.
ОПИСАНИЕ:

КОД:
program sh_teilor;
var x,stx,sh,e: real;
i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:=x; {x в степени}
fakt:=1; {значение факториала в знаменателе}
sh:=0; {первый элемент в разложении}
i:=1; {счётчик}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
sh:=sh+stx/fakt;
inc(i,2); {увеличение i на 2}
stx:=stx*x*x;
fakt:=fakt*(i-1)*i;
end;
Writeln('Количество элементов в разложении = ',i div 2);
Writeln('Значение sh(',x:6:6,')= ',sh:6:6);
Readln;
End.

Разложение гиперболического косинуса в ряд Тейлора
ЗАДАЧА:
Используя разложение в ряд Тейлора найти значение ch(x) с заданной точностью e.
ОПИСАНИЕ:

КОД:
program ch_teilor;
var x,stx,ch,e: real;
i,fakt: integer;
Begin
Write('Введите x: ');
Readln(x);
Write('Введите точность e: ');
Readln(e);
stx:= x*x; {x в степени}
fakt:= 2; {значение факториала в знаменателе}
ch:= 1; {первый элемент в разложении}
i:= 2; {счётчик}
while stx/fakt>=e do begin {до тех пор, пока элемент в разложении не меньше точности}
ch:=ch+stx/fakt;
inc(i,2);
stx:=stx*x*x;
fakt:=fakt*(i-1)*i;
end;
Writeln('Количество элементов в разложении = ',i div 2 + 1);
Writeln('Значение ch(',x:6:6,')= ',ch:6:6);
Readln;
End.


Для masm32: (количество членов ряда задается в переменной n)
Код ASM

.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\fpu.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib


BSIZE equ 30

.data
z2 dt 0.0
elem dt 0.0
rez dt 0.0
n dd 10
counter dd 0
buf1 db '6.28',0

.data?
z dt ?
buf db BSIZE dup (?)
.code
main proc

LOCAL hOutPut :DWORD
LOCAL hInput :DWORD
LOCAL nRead :DWORD
LOCAL nWriten :DWORD

finit
invoke GetStdHandle,STD_INPUT_HANDLE
mov hInput, eax
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOutPut, eax

invoke ReadConsole, hInput, addr buf, BSIZE, ADDR nRead, NULL
mov ebx, nRead
xor al, al
mov [buf+ebx-2], al
invoke FpuAtoFL, addr buf, addr z, DEST_MEM

fld1
fld1
fstp rez
fstp elem
fld z
fld st(0)
fmul
fstp z2

mov ecx, n
l:
inc counter
fild counter
fld st
fadd
fld st
fld1
fsub
fmul
fld z2
fdivr
fchs
fld elem
fmul
fld st
fstp elem
fld rez
fadd
fstp rez
loop l

invoke FpuFLtoA, ADDR rez,10, ADDR buf, SRC1_REAL or SRC2_DIMM
invoke WriteConsoleA, hOutPut, ADDR buf, BSIZE, ADDR nWriten, NULL

invoke ExitProcess,0
main endp
end main

еще раз прошу помогите, а то мне будут кранты
62K
17 ноября 2010 года
Лисичка
8 / / 17.11.2010
вот по этим ссылкам тоже можно прочитать про ряд Тейлора:

http://uk.wikipedia.org/wiki/%D0%A0%D1%8F%D0%B4_%D0%A2%D0%B5%D0%B9%D0%BB%D0%BE%D1%80%D0%B0

http://sesia5.ru/vmat/gl2/r7.htm

http://www.nsu.ru/matlab/Exponenta_RU/educat/class/courses/ma/theme24/theory.asp.htm

и про длинную арифметику: http://e-maxx.ru/algo/big_integer

Мне хотя бы полную прогу для парочки функций возможно я тогда как-то по примеру смогу сделать....
33K
18 ноября 2010 года
hivewarrior
205 / / 16.11.2010
Можно поступить немного нечестно, раз и вас обманули.
Пишем прогу на С/Паскале как консольное приложение, компилем.
Берем дизасемблер, дизасемблируем.
???
У нас готовые программы :)
Ну это на первый взгляд. А сейчас посмотрю что как, да помочь попытаюсь.

А можно задание поточнее сформулировать.
Чем можно пользоваться, чем нельзя? Макросы, внешние библиотеки? Какой ассемблер предпочтителен, msam, tasm? Больше информации :)
62K
18 ноября 2010 года
Лисичка
8 / / 17.11.2010
Ох если бы я знала....
нам вообще никто ничего не сказал.... :confused:
на чем напишете на том и будет....
по поводу что можно использовать а что нет, тоже ничего не известно (но если смотреть по тому что мы учили, то это простейшие матем. функции, простейшие цыклы и процедурки...ничего замысловатого) и тех страшных слов тоже не встречалось )))

но если вы вдруг возьметесь это написать,то пишите как можете))) ну хоть немного коментариев, что б мне было хоть что-то понятно)))
33K
19 ноября 2010 года
hivewarrior
205 / / 16.11.2010
Просто в ассемблере нет веселых функций, как cos, sin, exp. Их придется или писать самому, что не очень сложно, но в реалиях длинной арифметики... Да, что там говорить о математических функциях, ассемблер и с дробными то числами недавно научился то работать. Это первое что меня смущает. Поэтому и спрашиваю о библиотеках. Может, в интернете что-то удастся найти...
Второе, что меня смутило, так это разложение в ряд именно Тейлора, хотя не скриншотах немного другое. Так что нужно? Сфотографируйте задание или перепечатайте его. Я не телепат.
В третьих, может ну его, ассемблер. На такую задачу и в С/Паскале не один вечер потратишь, а код на ассемблере получишь в любом случаи. Лучше разобраться в нем, чем писать его с нуля. А можно и не разбираться, а просто понаписать немного комментариев. Преподаватели в листинг асьмы не особо вникают...
В четвертых, я писать все не хочу, да и не могу, но помогать советами всегда готов.
Первое, что вам надо сделать - четко составить Техническое задание на основе поставленной задачи, а уже потом обращаться за помощью. Главное в нашем деле - меньше эмоций.
62K
20 ноября 2010 года
Лисичка
8 / / 17.11.2010
насчет тех.задания:
скриншоты взяты уже с нета, в самом задании их не было, первый абзац и есть полностью перепечатанное задание...

тоесть вы предлагаете написать прогу на Делфи (ну это то что я более менее знаю, и смогу что-то написать) (кстати писать надо в консольке же???) и потом с помощью дизассемблера переконвертить в асм???
а этот асмовский код...будет нормальным?? ))
(вы простотите что так спрашиваю, просто как-то терзают смутные сомнения... особенно ког-да вспоминаю все переводчики, как они коверкают слова... боюсь что и здесь может так же получиться, мне же нужно что бы та прога на асме еще и работала потом...)

но если все с ним нормально, то какой дизасемблер вы лучше посоветуете скачать???
33K
20 ноября 2010 года
hivewarrior
205 / / 16.11.2010
Дизассемблер это не переводчик с одного языка на другой. Ассемблер это язык машины в читаемой форме, а не битовые команды. Компиляторы переводят все в машинные коды, а дизассемблер дает просто читать эти коды в человеческой форме.
Я пользуюсь IDA, например. Но подойдет любой, разницы для нашей задачи нет.
Писать приложение придется консольное, никто не поверит, что на асьме кто-то написал оконное приложение:)
7
20 ноября 2010 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: hivewarrior
Писать приложение придется консольное, никто не поверит, что на асьме кто-то написал оконное приложение:)

Ой ли?Могу предоставить несколько своих оконных

По теме:«в консольке» писать не придётся.И вообще,это лучше на Паскале делать,т.к. Delphi ещё лишнего кода напихает,ввек не разберётесь

2.1K
20 ноября 2010 года
Norgat
452 / / 12.08.2009
Цитата: hivewarrior
Просто в ассемблере нет веселых функций, как cos, sin, exp.



а как же сопроцессор? те же sin\cos там 100% есть.

33K
20 ноября 2010 года
hivewarrior
205 / / 16.11.2010
Цитата: @pixo $oft
Ой ли?Могу предоставить несколько своих оконных
По теме:«в консольке» писать не придётся.И вообще,это лучше на Паскале делать,т.к. Delphi ещё лишнего кода напихает,ввек не разберётесь


Я не говорил, что нельзя написать оконное приложение. Цепляешь виндовские дллки и поехали. Я говорил, что на курсач это точно не надо. Вызовет в первую очередь недоверие преподавателя, ассемблер же не читали и вдруг студент приносит оконное приложение. Зная, что существует дизассемблер, вполне можно предположить, о чем подумает комиссия.
А то, что писать на делфи не очень хорошо, я вполне согласен. Может добавить много лишнего, но если убрать оптимизацию, то не должен. Паскаль тот же делфи, проблем в перекомпиляции кода возникнуть не должно, если есть программа на делфи, в конце концов.
[QUOTE=Norgat]а как же сопроцессор? те же sin\cos там 100% есть.[/QUOTE]
Да, забыл про fsin и fcos. Но все равно это поможет мало, ибо для длинной арифметики это не приспособлено, по мне, так уж лучше написать рядами, реализовать только сложение, а там уж лупами как-нибудь:)

62K
15 декабря 2010 года
Лисичка
8 / / 17.11.2010
Вобщем, дела мои обстоят так...

я написала прогу на Паскале, потом ее дезасемблировала....
но там вышло тааак всего много что мне не разгребтись самой....
а курсач здавать уже на этой неделе надо (((

помогите пожалйста а то я не знаю, че там надо , а че нет....:(
10
15 декабря 2010 года
Freeman
3.2K / / 06.03.2004
Цитата: Лисичка
я написала прогу на Паскале, потом ее дезасемблировала....


Не, надо не так. Надо поставить точки останова в нужных функциях, и после останова нажать Ctrl+Shift+C, чтобы показалось окно ассемблерных команд. В Delphi 2006 оттуда можно сразу копировать текст.

Вроде самое простое, что доступно без шаманства.

62K
15 декабря 2010 года
Лисичка
8 / / 17.11.2010
у меня так ничего не получается ((
у меня делфи 2007 (хотя от этого разницы наверное особой не должно быть...)

блин..ну помогите, пожалуйста....
может по моему паскалю кто-то сможет написать на асме или дезасемблировать по-человечески ....(((
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог