2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3, 4, 5 ... 9  След.

Нужна ли такая тема про ассемблер?
Опрос закончился 24.01.2024, 03:22
Да, почитаю. 50%  50%  [ 12 ]
Да, поспрашиваю. 25%  25%  [ 6 ]
Да, поотвечаю. 4%  4%  [ 1 ]
Мне всё равно, но не против, дерзайте. 17%  17%  [ 4 ]
Нет, не интересно, полно готовой литературы. 0%  0%  [ 0 ]
Нет, ничего в этом не понимаю и не собираюсь. 0%  0%  [ 0 ]
Нет, форум не про это, есть другие более подходящие. 4%  4%  [ 1 ]
Другое ... 0%  0%  [ 0 ]
Всего голосов : 24
 
 Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 03:22 
Народ в лице как минимум Yadryara выразил желание поизучать ассемблер x86/x64 и сподвигнуть меня помочь в этом странном начинании. Пока не очень понятно в каком формате, то ли ликбез и ответы на вопросы, то ли по какой-то книжке/курсу, то ли в форме диалога с имеющегося уровня и далее, разберёмся позже. Пока интересно нужно ли это кому-то ещё? Не куча тем про отдельные частные вопросы как в ПРР, а некий более систематический рассказ с чего начать и как двигаться дальше, и может быть про разные тонкости и хитрости из личного опыта. Думаю хотелось бы что-то типа имеющейся темы про PARI/GP, на котором кстати вероятно будут примеры (С достаточно знают похоже не все заинтересованные товарищи). Но я совсем не преподаватель и стройного процесса обучения не выйдет, максимум разъяснения в силу своего понимания по какому-то приличному учебнику. А скорее некая такая методичка по решению довольно узкого класса задач (вычислительных) на ассемблере (и только x86/x64, другие без надобности), с разъяснениями непонятных мест и ответами на вопросы. С какого начального уровня решится тоже в процессе.
Как считаете, стоит заводить такую бодягу здесь или лучше пойти в более специализированные места?

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 05:16 
Аватара пользователя
Dmitriy40 в сообщении #1625911 писал(а):
сподвигнуть меня помочь в этом странном начинании.

Странном? :-) А кто говорил про выигрыш в скорости в сотни, а то и в тысячи раз?

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 06:56 
Я, вообще говоря, с молодости хотел овладеть ассемблером и вообще узнать получше, что там внутре компьютера, как в смысле железа, так и как устроена программная система. Даже читал некую книжку (Шнайдер, Ассемблер IBM PC, точное название не помню, старенькая).

Но, увы, сейчас это намерение для меня совершенно нереалистично. И времени нет, и сил, и здоровья. Причем как в текущем плане, так и в целом (пенсия не очень далеко). Да и общая жизненная неустроенность мешает расслабиться и изучать что-то (а я многое хотел бы узнать, не только ассемблер) в свое удовольствие. А если всё это вынести за скобки (чисто гипотетически), то несомненно поизучал бы.

В ответах выбрал "почитаю" и "поспрашиваю". (Но, если что, во всяком случае, в целях обучения меня уважаемым коллегам костьми ложиться не стоит.)

 
 
 
 Randall Hyde
Сообщение15.01.2024, 10:12 
Аватара пользователя
vpb в сообщении #1625915 писал(а):
Я, вообще говоря, с молодости хотел овладеть ассемблером и вообще узнать получше
Посоветую книгу The Art of Assembly Language известного автора Randall Hyde, названную по аналогии с трудом Д. Кнута.
https://en.wikipedia.org/wiki/Randall_Hyde

Randall Hyde, кроме всего прочего, известен очень интересным циклом статей The Great Debate (тоже про ассемблер):
http://bear.ces.cwru.edu/eecs_314/GreatDebate.html
Ссылка сейчас не работает, вот в веб-архиве: https://archive.vn/kzeHH
Очень увлекательное (в том числе) чтение, и познавательное (при всём том, что работе много лет).

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 11:09 
Аватара пользователя
Интересно, а кто же ещё кроме Dmitriy40 вызвался поотвечать?

А спрашивать уже можно или погодить пока?

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 11:12 
Да, поспрашиваю.

Если тема про первые шаги, то хотелось бы в начальном сообщении (или нескольких первых начальных сообщениях) увидеть сравнение современных компиляторов (masm, fasm, возможно, tasm…), откуда можно скачать нужную версию.

[Если написанные на asm функции будут прилинковываться к программам на Delphi или С, то, возможно, о редакторах связей (линковщиках) писать не нужно. Вообще из общения с людьми, которые что-то пишут на ассемблере, я сделал вывод, что программы в основном пишут на С, а на асме пишут процедуры критичные ко времени выполнения. А малые функции, если есть возможность, вообще пишут во встроенных ассемблерах.]

По начальным сведениям 8086/8088 есть книга
Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера.

Программирование 32 битных есть в книге
Юров В. И. Assembler. Учебник для вузов, 2003.
В этой книге кратко описаны инструкции FPU, есть справочник по MMX, SSE, SSE2.

Также о FPU, MMX, SSE и совсем немного о SSE2 есть в книге
Магда Ю. Ассемблер для процессоров Intel Pentium, 2006.

По SSE-3, SSE-4 я книги не встречал. Что-то смотрел в документации Intel.

Об AVX, AVX2, AVX-512 есть немного в книге
Куссвюрм Д. Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512, 2021.

На мой взгляд, использование FPU, MMX, SSE неактуально. В общем, возвращаясь к началу сообщения, лично мне хотелось бы увидеть сравнение компиляторов и краткий ликбез по AVX, AVX-512 (в частности особенности реализаций от Intel и AMD). [Просто изложенная в книгах инфа по компиляторам быстро устаревает.] Если не писать в развернутом виде инфу по компиляторам, то хотя бы ссылки на толковые Интернет-заметки вставить в начальное сообщение (если такие заметки есть в сети).

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:00 
Я в школе писал на ассемблере для XZ-Spectrum, там это было актуально, потому что очень мало памяти. А для x86/64 это уже было неактуально, кроме каких-то крайне узкоспецифических задач. Если желаете для общего развития поизучать, то ассемблер для XZ-Spectrum гораздо интереснее, потому что там очень просто устроена видеопамять и туда можно прямо адресоваться. То есть, ваше изучение будет сопровождаться наглядностью, благодаря работе с графикой.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:12 
Аватара пользователя
talash в сообщении #1625933 писал(а):
А для x86/64 это уже было неактуально, кроме каких-то крайне узкоспецифических задач.

Поиск цепочки чисел с определённым количеством делителей относите к таким задачам?

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:17 
Yadryara в сообщении #1625935 писал(а):
talash в сообщении #1625933 писал(а):
А для x86/64 это уже было неактуально, кроме каких-то крайне узкоспецифических задач.

Поиск цепочки чисел с определённым количеством делителей относите к таким задачам?

Есть сомнения, что на ассемблере будет заметно быстрее, чем на с++. А на втором языке намного проще писать алгоритмы.

-- 15.01.2024, 12:21 --

Вообще, чистый C (без плюсов) очень понятно переводится на ассемблер. Можно написать алгоритм на C, потом поизучать что получилось на ассемблере и если что-то не идеально, то поправить.

-- 15.01.2024, 12:32 --

А вот сайт, слева на си, справа на ассемблере.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:50 
Когда-то был прекрасный сайт wasm.ru, там были в том числе интересные статьи для новичков и не только. Вроде как в какой-то момент переехал на wasm.in, там даже живой форум есть.
Если интересна тема программирования на асме под windows, сразу вспоминаются Iczelion tutorials. Легко гуглятся, есть версии для masm и fasm.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 14:23 
Аватара пользователя
talash в сообщении #1625936 писал(а):
Есть сомнения, что на ассемблере будет заметно быстрее, чем на с++. А на втором языке намного проще писать алгоритмы.

Чтобы развеять сомнения предлагаю Вам написать на Сях решение такой задачи.

Вот есть сплошная 5-ка простых чисел:

$76883 \quad 76907 \quad 76913 \quad 76919 \quad 76943$

Как видим, гэпы здесь такие: $24-6-6-24$. Найдите все такие 5-ки, скажем, от 0 до 100 ярдов.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 15:00 
Бессмысленно изучать ассемблер, не изучая при это комьютерную архитектуру.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 15:42 
Ребята, стоп-стоп-стоп.
Эта тема- - лишь вопрос, понять надо ли оно вообще. И в каком объёме. И с чего начать.
Ни на какую полноту или систематичность не претендую, на то есть учебники, спасибо GAA и SergeCpp уже к ним отослали. Я выберу те что на русском. Ну вот потому что.
Про архитектуру внутри проца тоже конечно скажу несколько слов, необходимый минимум для понимания в контексте ассемблера, и потом ещё буду добавлять по мере необходимости. Про весь остальной комп не буду, на скорость вычислений он не влияет (тему GPU и прочих ускорителей тут не затрагиваем вообще).
Цель темы не рассказать про всё-всё-всё, а помочь начать писать вычислительные задачи, те что могут считать что-то днями, неделями, месяцами. Ввод-вывод, и многое другое затрону лишь очень косвенно, только в контексте задания параметров и входных данных и вывода результатов. Насчёт обработки ошибок (деления на 0, выхода за пределы памяти, корень из -1, и прочее) пока раздумываю, может вообще лишь упомяну. Стресс-тесты и вообще вопрос проверки/доказательства правильности тоже видимо лишь упомяну как-нибудь потом. Я тупо всё это не слишком уверенно знаю.
Сравнением разных компиляторов заниматься не буду, я использую FASM, как скачать и настроить расскажу коротко. Но на сам язык асм компилятор влияет слабо (за исключением синтаксиса, но тут сами разбирайтесь если нужен другой компилятор).
Вопросами встраивания в другие языки заниматься не буду, но немного попозже покажу как перейти от .exe к .dll, которую уже можно использовать где угодно (кроме PARI/GP). Это не всегда оптимально по скорости, но зато универсально. Я согласен что писать всю прогу на асме глупость, надо лишь критические места, но смешивать обучение ещё и С или Питону - не-не-не.
GAA, про сравнение SSE и AVX есть отдельная близкая тема, готов в ней отвечать на вопросы. Постепенно может и здесь (в новой теме) к этому придём, но это совсем не первые шаги. Вопрос оптимизации - вообще один из сложнейших (вместе с многозадачностью и надёжностью и ещё чем-нибудь), (посмотрите вот тут мой офтоп), это совсем не первые шаги. Хотя упоминать отдельные моменты буду конечно сразу же.
talash в сообщении #1625936 писал(а):
Есть сомнения, что на ассемблере будет заметно быстрее, чем на с++.
Пойтиде в соседнюю тему «Приемы программирования SSE/AVX [Обмен опытом]» и попытайтесь любой кусок кода что я приводил на AVX2 получить из C++ без инстриктов и встроенного асм. Успехов! Там кстати и замеры скорости есть.
GAA в сообщении #1625922 писал(а):
Об AVX, AVX2, AVX-512 есть немного в книге
Куссвюрм Д. Профессиональное программирование на ассемблере x64 с расширениями AVX, AVX2 и AVX-512, 2021.
Об ней уже говорил.

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

-- 15.01.2024, 15:58 --

Да, по срокам.
Думаю чтобы сделать что-то простенькое (факториал, решето Эратосфена, медленную проверку на простоту небольших чисел) самому понадобится неделя-две.
Что-то практически полезное (но совсем не оптимальное!) - пара месяцев. Как и подправить готовый чужой код под свои несложные запросы. И начать понимать что же (и главное почему так) пишут другие.
И тогда же проглянет через "туман войны"(с)игры величина той горы на которую собрался влезть (или которую перелопатить).
Чтобы написать самому что-то реально эффективное (типа тех кусочков как в указанной выше теме про SSE/AVX) - ну, полгода, наверное ... Программистом не станете, но решить конкретную вычислительную задачу более-менее эффективно - пожалуй.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 16:01 
Аватара пользователя
Yadryara в сообщении #1625946 писал(а):
Найдите все такие 5-ки, скажем, от 0 до 100 ярдов.

Вы, вероятно, выбрали 100 миллиардов, чтобы в оперативную память современного домашнего компьютера решето Эратосфена такого размера не поместилось. Хотя, если на каждое число выделять один бит, то получается 12.5 ГБайт — на хорошем компьютере поместится. Но всё равно, особенности современного железа подсказывают нам, что здесь узким местом будет скорость оперативной памяти. Поэтому ассемблер в данном случае не будет сильно выигрывать у Си. Тем более, если размещать на SSD диске.

 
 
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 16:09 
talash в сообщении #1625933 писал(а):
Если желаете для общего развития поизучать, то ассемблер для XZ-Spectrum гораздо интереснее,
Возможно и интереснее, но совершенно непрактично, потому что пока запрос в скорости вычислений, как их существенно ускорить, а это или С/С++, или асм. И строго для имеющихся компов, а это x86/x64 и винда (про другие ОС максимум упомяну, я их почти не знаю), что есть и будет в заголовке темы. Так что запрос не "просто выучить", а "реально применить для вычислений".
И кстати асм для Спектрума далеко не самый интересный из современных. Есть RISC-V, есть MSP430, есть ARM, они все намного интереснее (даже x86) по применённым идеям и приёмам.

worm2
Нет, там достаточно килобайтов (но для скорости лучше сотни мегабайт и чем больше тем быстрее). Там прикол что можно и нужно обойтись без решета в любом виде, а перебирать числа с очень большим шагом (сотни) потому что все промежуточные гарантированно не подходят. В общим поиск по паттерну, смотрите любую тему по кортежам, паттернам, магическим квадратам, там полно такого.

 
 
 [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group