Паскаль в Ассемблер

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Аватара пользователя
Andrew-77
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пн сен 24, 2012 01:47:35
Откуда: Томск

Re: Паскаль в Ассемблер

Сообщение Andrew-77 »

Alexeyslav писал(а):
А в общем, не так все плохо... на ассемблере надо реализовать сам алгоритм - чтобы не парится с вводом-выводом, этот алгоритм можно вставить в паскалевскую оболочку как процедуру сделанную полностью INLINE на ассемблере.



Как раз это и нужно сделать, не всю прогу а только функцию разделения на множители и нахождение наибольшего общего делителя. То что я красным выделил. Вывод массивов для наглядности в асме можно выкинуть
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: Паскаль в Ассемблер

Сообщение vem566 »

Andrew-77 писал(а):Балаболов много, а дела мало. Это не курсовая, всего лишь половина небольшой контрольной, я просто по времени не успеваю разобраться в этом полность, потому и прошу помощи.

Не помощи ты просишь, а чтобы за тебя сделали. Это разные вещи. Вдруг прокатит. А тут желающих делать за кого-то контрольные, курсовые или дипломы не много.
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Паскаль в Ассемблер

Сообщение petrenko »

Да не "в лом", можно и помочь, не жалко, просто настроение что то неважное.. :(
Я тут "выкопал" с дальней полки учебник "ФОРТ", но там этой программы нема.. Значит в другом учебнике - точно помню, что на форте был пример. Зато в этом оказался учебный пример программы - "генератор бессмысленных сообщений" :) "Прикольно"- выдаёт нечто вроде : "В ДАННОМ СООБЩЕНИИ МЫ РАССКАЖЕМ ВАМ О ТОМ ЧТО ВКЛАДЫВАЯ ИМЕЮЩИЕСЯ В НАЛИЧИИ СРЕДСТВА В ИНТЕГРИРОВАННЫЙ ЦИФРОВОЙ КОМПЛЕКС ПРИМЕНЯЯ АВТОНОМНЫЙ КУЛЬТУРНЫЙ ПРОДУКТ ПРЕДСТАВЛЯЕТСЯ ВОЗМОЖНЫМ ДАЖЕ НЕСМОТРЯ НА КВАЛИФИЦИРОВАННЫЙ ЦИФРОВОЙ ПРОЕКТ ЕЩЁ БОЛЬШЕ УКРЕПИТЬ УНИКАЛЬНЫЙ ПРОГРАММНЫЙ ОБЪЁМ". ну и т.д.
Ещё пошукаю. Если найду - выложу.
Ещё можно в WWW попробовать запрос "оптимальный алгоритм нахождения н.о.д." Пока нашлось вот это :
Спойлер
Методы нахождения НОД и НОК чисел
/фио/
/фио/
МОУ СОШ № x
6б класс
Руководитель
/фио/

В школьном курсе математики нахождение наибольшего общего делителя (НОД), наименьшего общего кратного (НОК), наименьшего общего знаменателя и дополнительных множителей для дробей предлагается через разложение чисел на простые множители. Это связано с большим количеством однообразных механических вычислений.
Быстрое нахождение НОД и НОК чисел необходимо в дальнейшем для нахождения наименьшего общего знаменателя и дополнительных множителей для дробей при сравнении, сложении и вычитании дробей с разными знаменателями.
Цель работы: рассмотреть и оценить все методы нахождения НОД, НОК чисел. С учетом их эффективности, простоты в использовании разработать алгоритм нахождения НОД и НОК для двух и более чисел. Он позволит сделать оптимальный выбор метода.
Зачастую элементарный анализ исходных чисел может привести к быстрому нахождению НОД, НОК этих чисел без разложения на простые множители. С этой целью в работе рассмотрены частные случаи нахождения НОД и НОК чисел, когда исходные числа взаимно простые или когда одно из них кратно другому.
Попытка заменить разложение чисел на простые множители менее затратной процедурой привела к созданию метода одновременного деления. Разложение на множители в этом методе также необходимо, только множители не обязательно должны быть простыми, но обязательно общими. В этом случае количество действий значительно уменьшается, тем самым упрощается нахождение НОД и НОК чисел.
Каждый из предложенных в работе методов имеет свои ограничения, поэтому невозможно обойтись каким-то одним.
Рассмотренные в работе методы нахождения НОД и НОК чисел как частные (для взаимно простых чисел или кратных чисел), так и метод одновременного деления требуют меньшего количества вычислений и просты в применении. Они могут быть использованы в первую очередь для нахождения НОД и НОК двух и более чисел. Они удобны и для нахождения дополнительных множителей при приведении дробей к общему знаменателю. Основным результатом работы можно считать создание алгоритма для оптимально быстрого нахождения НОД и НОК чисел.

Алгоритм нахождения НОД и НОК чисел.
1 шаг. Если числа а, b взаимно простые, то
НОД(а, b) = 1, НОК(а, b) = а?b
2 шаг. Если число а кратно b, то
НОД(а, b) = b, НОК(а, b) = а
3 шаг. Использовать метод одновременного деления.
Одновременное разложение чисел на одинаковые множители до получения взаимно простых чисел.
Для нахождения НОД нужно найти произведение одинаковых множителей.
Для нахождения НОК нужно одно из исходных чисел умножить на оставшееся число в разложении другого числа.
4 шаг. Использовать разложение на простые множители для нахождения НОК для количества чисел более двух.

Не ассемблер, конечно, зато для 6 класса даже подходит.. :)

Попробовал ещё, и не ya.ru , а google и запрос на аглицком..
На запрос "greatest common divisor algorythm"- уже лучше - выдаёт меньше всякой шелухи и даже несколько текстов на "C".
Вот из википедии - пожалуйста :
Iterative version in C++ using ctz (count trailing zeros)
Using a count trailing zeros (CTZ) function can improve the performance of the binary gcd algorithm. A randomly distributed number has an exponentially declining distribution of trailing zeros: 0.50 have no trailing zeros, 0.25 have 1 trailing zeros, 0.125 have 2 trailing zeros, 0.0625 have 3 trailing zeros, .... Iterations are only saved if there are two or more trailing zeros, so the expected number of saved iterations is not large. Although there are occasions where counting trailing zeros can gain a lot in one step, big gains would not be expected unless the numbers had unusual properties.
// ctz(x) counts trailing zeros in x

unsigned int gcd(unsigned int x, unsigned int y)
{
if (x == 0)
return y;

if (y == 0)
return x;

unsigned int cf2 = ctz(x | y);

x >>= ctz(x);

for (;;)
{
y >>= ctz(y);

if (x == y)
break;

if (x > y)
std::swap(x, y);

if (x == 1)
break;

y -= x;
}

return x << cf2;
}


А что сам T.S. ничего не нашёл ещё разве ?
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Andrew-77
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пн сен 24, 2012 01:47:35
Откуда: Томск

Re: Паскаль в Ассемблер

Сообщение Andrew-77 »

Спасибо тем кто не ослеп в собственном величии и важности то есть хоть чем то попытался помочь. Кое что помогло разобраться с массивами в ассемблере (petrenko). В общем разобрался сам, все сделал, хоть и после сессии, буду просить о дополнительном времени чтобы сдать экзамен.
Для petrenko: алгоритм Евклида это самое простое для нахождения НОД, но в задаче сказано разложить два числа на множители, а уже из ник сделать НОД, то есть перемножить однократно совпадающие. Загвоздка была в выборке из массивов именно однократно повторяющихся. Но успешно решено. Респект
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Паскаль в Ассемблер

Сообщение petrenko »

Здорово !

За Вас можно порадоваться, так держать.

Только Паскаль ( он - не забывайте - только для обучения ! ) для серьёзного программирования не подходит.
Чтобы переходить "плавно", без "переламывания" советую перейти на язык "Модула-2" того же товарища Вирта - тоже учебный, но убраны многие "неправильности" Паскаля.
Для развития мышления и создания близких к маш.коду-ассемблеру по эффективности и компактности программ хорошо изучить язык Форт .
А для перспективы взгляните на Эрланг ..

Удачи !
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Andrew-77
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Пн сен 24, 2012 01:47:35
Откуда: Томск

Re: Паскаль в Ассемблер

Сообщение Andrew-77 »

я пишу на С(и верхний(иногда делфи), и нижний), паскаль давнее прошлое, только из-за задания, а ассеблер так редко использовал, что практически каждую работу которую нужно было сделать, как с нуля(учебники, справочники). по сути какая разница какой язык, база все равно алгоритм, но вот синтаксис у каждого свой и помнить все языки не реально
Аватара пользователя
El-Eng
Друг Кота
Сообщения: 3747
Зарегистрирован: Чт янв 26, 2012 14:44:34

Re: Паскаль в Ассемблер

Сообщение El-Eng »

petrenko писал(а):Только Паскаль ... для серьёзного программирования не подходит.
Ну да. А, например, Skype и Altium Designer конечно же не в счет. :)
Like the eyes of a cat in the black and blue...
ldir
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Re: Паскаль в Ассемблер

Сообщение ldir »

El-Eng писал(а):Skype

Он вроде как на плюсах написан
Аватара пользователя
El-Eng
Друг Кота
Сообщения: 3747
Зарегистрирован: Чт янв 26, 2012 14:44:34

Re: Паскаль в Ассемблер

Сообщение El-Eng »

Нет, на Delphi.
Like the eyes of a cat in the black and blue...
ldir
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Re: Паскаль в Ассемблер

Сообщение ldir »

Уточнение: Linux версия скайпа написана на с++ в Qt
Аватара пользователя
UL7AAjr
Встал на лапы
Сообщения: 94
Зарегистрирован: Чт май 26, 2011 09:28:25
Откуда: Алма-Ата

Re: Паскаль в Ассемблер

Сообщение UL7AAjr »

Эх, хорошую тему прозевал:)

Можно было очень просто сделать, пишем на Делфи а потом Ctrl-F7 и видим код на ассемблере.

PS: из-за конвейеров и выравнивания в новых процессорах, практически очень трудно написать на ассемблере код быстрее чем оптимизатор это сделает из С или Паскаля. Если внимательно посмотреть на код после оптимизатора, можно заметить добавленные NOP для выравнивания и "перепутанные" местами операторы для возможности одновременного выполнения. Ассемблер так не делает.
[size=70]Жадность порождает бедность[/size]
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Паскаль в Ассемблер

Сообщение Alexeyslav »

То что ты увидишь в дизассемблере это будет жуткого вида исполнимый код, который без огромного количества дополнительных библиотек попросту НИЧЕГО не стоит. Толку-то от этого кода, если его надо обрабатывать потом напильником до полной неузнаваемости? Проще с нуля написать...
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: Паскаль в Ассемблер

Сообщение Andrew Martin »

И всё же ассемблер остаётся единственным языком, где всё действительно только в ваших руках :)
Непопулярность его для написания хороших native code приложений объясняется во многом коммерцией, а во многом попросту политикой Microsoft и ей подобных глобалистов. Ведь хорошо знающий асм - это не только хороший программист, это потенциальный крякер. Поэтому никому не выгодна пропаганда ассемблера в частности и компиляторов native code в целом, за то всем выгодно пересаживать на дотнет и прочие фреймворки, чтобы сторонние особо не совали нос в системные дела. Да извинят меня за пошлость, но со стороны это выглядит как надевание ещё одного презерватива поверх имеющихся :)))
Ответить

Вернуться в «Интеграция с ПК»