Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
#77 Собственно 2 формулы, нужна программа на паскале с ассемблерной вставкой (ассемблер х80287 сопроцессора). С паскалем я бы и сам без проблем за пару минут написал бы, а вот со вставкой огромная проблема, в ассемблере разбираюсь очень плохо, как передать из паскаля данные в ассемблер, да и сама реализация функции. Там реализация, сначала считается на паскале, потом тоже самое в ассемблере, но в теле самой паскалевской программы. Выражения под корнями берутся по модулю. Надеюсь на вашу помощь в общем. Есть ещё вопрос, кто нибудь хорошо разбирается в vhdl и quartus 2 в частности ?
Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
VBIF542 Да синтаксис я знаю, как раз проблема с мат. формулой, там вроде через стек делается. Уточнение, формулы можно в разных программах, так даже лучше, они не связанны между собой.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
MaD!CaT писал(а):
Да синтаксис я знаю, как раз проблема с мат. формулой, там вроде через стек делается
Если в версии с ассемблерной вставкой всё делается в самой вставке, то да, через стек. Вроде как ничего сложного, меня только смущает
MaD!CaT писал(а):
ассемблер х80287 сопроцессора
Добавлено спустя 4 минуты 4 секунды: Тут помню читал статью отличную по тому, как юзать стек. Как вызывать функции там же всё есть. Как через регистры процессора проводить математические вычисления можно и нагуглить Но всё равно вот это "ассемблер х80287 сопроцессора" меня напрягает
Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
Industrialice Чуть попозже или завтра, скину свои наброски, там команды вида fmul, fadd, finit вроде есть спец команда которая косинус считает fcos. По крайне мере препод в таком виде показывал.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
MaD!CaT писал(а):
там команды вида fmul, fadd, finit
Да, это команды для операций с вещественными числами. Проблема в том, что 80287, насколько я помню, 16-ти битный, а float имеет размер 32 бита. Сейчас хоть убей не вспомню имеет ли это значение при написании ассемблерных операций - всё-таки нечасто таких садистов встретишь которым 287-ой нужно запрограммить. Вроде как не нужно париться - не помню проблем при использовании double на х86
Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
Кажись не имеет значения, там вся лаба, вообще заключается в построении в Qurtus, при помощи vhdl сопроцессора и его моделирование, а паскаль с ассемблерной вставкой для проверки работы. Предмет ппц полный у меня с ним... А для начала препод просил написать эту самую программу на паскале с ассемблером и отладить её, а уже на основе полученного алгоритма городить сопроцессор. Вспомнил, там кажись 80287 80 битный вообще, так что проблем возникнуть не должно, интел городил с запасом, 16 битный его старший "брат" 80286. Хотя кажется препод говорил можно использовать и более поздние сопроцессоры (ассемблер), ибо в написании с времён 80287 ничего особо не поменялось.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
MaD!CaT писал(а):
Вспомнил, там кажись 80287 80 битный вообще
Наверное вы правы - по крайней мере все современные процессоры операции с вещественными числами производят с 80-ю разрядами, то есть тот же 32-х битный float перед вычислениями приводится к длине 80 битов
Добавлено спустя 4 минуты 3 секунды:
VBIF542 писал(а):
переменные задаются как обычно с помощью var
Так можно сделать, но вряд ли препод одобрит - это уже будет, получается, часть программы на Паскале, а часть - в ассемблерной вставке. А нужно все операции сделать в самой вставке
Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
Industrialice ъ Насколько помню, x можно задать в паскале, хоть фиксированный, хоть вводом с клавы (read (x)) в общем неважно, и только потом его загнать а ассемблер, так я не совсем пойму, как его туда отправить (во вставку). + с самой реализацией формулы затыки. В общем главное, что бы x попал в ассемблер и там уже реализовывалась вся формула.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
MaD!CaT писал(а):
Industrialice ъ Насколько помню, x можно задать в паскале, хоть фиксированный, хоть вводом с клавы (read (x)) в общем неважно, и только потом его загнать а ассемблер, так я не совсем пойму, как его туда отправить (во вставку). + с самой реализацией формулы затыки. В общем главное, что бы x попал в ассемблер и там уже реализовывалась вся формула.
Ну, вот вам пример одинакового по функционалу кода на чистом С++ и с ассемблерной вставкой (переменные в обоих случаях объявляются до вставки)
чистый С++
Код:
int a = 10, b = 15; a += b;
с ассемблерной вставкой
Код:
int a = 10, b = 15; asm { mov eax, a; add eax, b; mov a, eax; };
После того как компилятор переведёт код на ассемблер, оба варианта будут выглядеть идентично
Вот набросок мой, компилится, но если ф-цию, косинуса добавить, не считает. Это так кривой набросок, лучшее не получается, ну и естественно косинус в ассемблере а не паскале считать надо ((.
Последний раз редактировалось MaD!CaT 06.12.2011 20:29, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
Код:
x:= k:=cos(x); k:=k*k;
До этого места дошёл и уже возникли локальные взрывы в мозгу. Тут точно всё правильно? х - не инициализирован k сначала инициализируется cos(x), а затем ему же присваивается k*k
Последний раз редактировалось Industrialice 06.12.2011 20:27, всего редактировалось 1 раз.
Moderator
Статус: Не в сети Регистрация: 27.06.2008 Откуда: Таганрог
Да это фигня, сейчас перепишу под более человеческий вид до ассемблерной вставки. Блин при копировании косякнул, не обратил внимания когда вставлял. а где k*k это возведение в квадрат так реализовал, вообще это всё в ассемблере надо было делать, только хз как...
Member
Статус: Не в сети Регистрация: 12.09.2010 Откуда: Калининград
MaD!CaT писал(а):
может у кого, какие идеи ?
Есть только одна идея толковая - гуглить и гуглить Вот, наткнулся на такую ветку форума, почитав которую становится понятно почему в задании указание сопроцессора 80287 имеет значение
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения