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 
Заслуженный участник


20/08/14
11714
Россия, Москва
Народ в лице как минимум Yadryara выразил желание поизучать ассемблер x86/x64 и сподвигнуть меня помочь в этом странном начинании. Пока не очень понятно в каком формате, то ли ликбез и ответы на вопросы, то ли по какой-то книжке/курсу, то ли в форме диалога с имеющегося уровня и далее, разберёмся позже. Пока интересно нужно ли это кому-то ещё? Не куча тем про отдельные частные вопросы как в ПРР, а некий более систематический рассказ с чего начать и как двигаться дальше, и может быть про разные тонкости и хитрости из личного опыта. Думаю хотелось бы что-то типа имеющейся темы про PARI/GP, на котором кстати вероятно будут примеры (С достаточно знают похоже не все заинтересованные товарищи). Но я совсем не преподаватель и стройного процесса обучения не выйдет, максимум разъяснения в силу своего понимания по какому-то приличному учебнику. А скорее некая такая методичка по решению довольно узкого класса задач (вычислительных) на ассемблере (и только x86/x64, другие без надобности), с разъяснениями непонятных мест и ответами на вопросы. С какого начального уровня решится тоже в процессе.
Как считаете, стоит заводить такую бодягу здесь или лучше пойти в более специализированные места?

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 05:16 
Аватара пользователя


29/04/13
8071
Богородский
Dmitriy40 в сообщении #1625911 писал(а):
сподвигнуть меня помочь в этом странном начинании.

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

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 06:56 
Заслуженный участник


18/01/15
3224
Я, вообще говоря, с молодости хотел овладеть ассемблером и вообще узнать получше, что там внутре компьютера, как в смысле железа, так и как устроена программная система. Даже читал некую книжку (Шнайдер, Ассемблер IBM PC, точное название не помню, старенькая).

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

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

 Профиль  
                  
 
 Randall Hyde
Сообщение15.01.2024, 10:12 
Аватара пользователя


10/10/18
754
At Home
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 
Аватара пользователя


29/04/13
8071
Богородский
Интересно, а кто же ещё кроме Dmitriy40 вызвался поотвечать?

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

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 11:12 
Заслуженный участник


12/07/07
4522
Да, поспрашиваю.

Если тема про первые шаги, то хотелось бы в начальном сообщении (или нескольких первых начальных сообщениях) увидеть сравнение современных компиляторов (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 


01/09/14
19/11/24
500
Я в школе писал на ассемблере для XZ-Spectrum, там это было актуально, потому что очень мало памяти. А для x86/64 это уже было неактуально, кроме каких-то крайне узкоспецифических задач. Если желаете для общего развития поизучать, то ассемблер для XZ-Spectrum гораздо интереснее, потому что там очень просто устроена видеопамять и туда можно прямо адресоваться. То есть, ваше изучение будет сопровождаться наглядностью, благодаря работе с графикой.

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:12 
Аватара пользователя


29/04/13
8071
Богородский
talash в сообщении #1625933 писал(а):
А для x86/64 это уже было неактуально, кроме каких-то крайне узкоспецифических задач.

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

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 13:17 


01/09/14
19/11/24
500
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 


14/01/11
3031
Когда-то был прекрасный сайт wasm.ru, там были в том числе интересные статьи для новичков и не только. Вроде как в какой-то момент переехал на wasm.in, там даже живой форум есть.
Если интересна тема программирования на асме под windows, сразу вспоминаются Iczelion tutorials. Легко гуглятся, есть версии для masm и fasm.

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 14:23 
Аватара пользователя


29/04/13
8071
Богородский
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 
Заслуженный участник


18/09/21
1756
Бессмысленно изучать ассемблер, не изучая при это комьютерную архитектуру.

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 15:42 
Заслуженный участник


20/08/14
11714
Россия, Москва
Ребята, стоп-стоп-стоп.
Эта тема- - лишь вопрос, понять надо ли оно вообще. И в каком объёме. И с чего начать.
Ни на какую полноту или систематичность не претендую, на то есть учебники, спасибо 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 
Заслуженный участник
Аватара пользователя


01/08/06
3123
Уфа
Yadryara в сообщении #1625946 писал(а):
Найдите все такие 5-ки, скажем, от 0 до 100 ярдов.

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

 Профиль  
                  
 
 Re: Первые и последующие шаги в ассемблере x86/x64
Сообщение15.01.2024, 16:09 
Заслуженный участник


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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 133 ]  На страницу 1, 2, 3, 4, 5 ... 9  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group