[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]

Файл: 680px-FASM.png -(4 KB, 680x440, 680px-FASM.png)
4 No.21589  
Почему тут ещё нет треда для ценителей классики? Почему никто не интересуется тем, как работает процессор? Ведь даже если вы не хотите быть монстром, который создаёт программы весом в пару килобайт, с функционалом в десять раз больше, чем десять программ по гигабайту, то всё равно- понимание принципов работы ассемблера крайне необходимо. А уж если вы решили хакером стать, или хотите придумывать для приложений лекарства от жадности, то знание ассемблера просто необходимо.

Давайте все вместе будем его учить, делать демки, а то и вообще десктопные приложения, и ломать устои современного мира, где программа, которая умеет совсем чуть-чуть- должна весить десятки мегабайт

Хороший сайт с учебником FASM
asmworld.ru/

Сообщество разработчиков ОС на чистом ассемблере
kolibrios.org/
>> No.21590  
>>21589
Ты расскажи лучше, что сам сделал/делаешь, вдохнови примером.
>> No.21591  
>>21590
Хеллоуворлд только написал. Учусь я
>> No.21647  
>>21591
Ну и как? Тред интересный сам по себе, но зачем, когда подобный наверняка можно найти в /g/ 4чана, там и народу побольше будет, наверное.
>> No.21650  
>>21647
>но зачем, когда подобный наверняка можно найти в /g/ 4чана
Это можно сказать о всём разделе, но мы всё-таки здесь, а не там.
>> No.21651  
>>21647
Интересно. Но сложно. Много слов непонятных и операций математических
> но зачем, когда подобный наверняка можно найти в /g/ 4чана, там и народу побольше будет, наверное.
Английский
>> No.21668  
>>21651
Где ты там математические операции нашёл?
>> No.21671  
>>21668
Ну вот например вычитание. Статью, где оно объяснялось- я перечитывал раз пять, пока не понял до конца, как оно там работает
>> No.21673  
Файл: 29 - 1280x1024@32 [SIGece42367eda798e5153df49e7ef8.jpg -(466 KB, 1280x1024, 29 - 1280x1024@32 [SIGece42367eda798e5153df49e7ef8.jpg)
466
>>21671
Кольца же. Можно представить как C = op (A, B) mod β^n, где n — количество разрядов. Числа можно также представить поразрядно как X = summ from i=0 to n-1 of Xi * β^i. Отрицательные числа представляются в виде A' = β^n - abs (A) при дополнении до двух, что позволяет не различать их в аддере и субтракторе. Флаги АЛУ выбрасывает на любой операции с ним согласно их формулам, формулы элементарные; единственный м.б. сложный флаг — это Signed, если он есть. А так, это классическая арифметика, все эти приёмы спокойно можно применять к любой системе счисления. Для десятичных числодробилок только дополнение до девяти получается невыгодным, там аддер и субтрактор таки различают положительные и отрицательные числа — это дешевле. Единственное, битовые операции работают с битовыми массивами, т.е. операция применяется к каждому разряду, поэтому они никогда не приводят к переполнению.

Раз у тебя проблемы с арифметикой, посоветую Кнута и Зиммермана: https://members.loria.fr/PZimmermann/mca/pub226.html В общем же, нет разницы, в какой системе счисления считать, с основанием 2 или 10^8, лол.
>> No.21674  
>>21673
Это что, правда такие умные Чиочаньки бывают? Жуть. Я ничего не понял
>> No.21680  
>>21673
Да, вот это вот. Если ты видишь вот ТАКОЕ ВОТ в книге, то беги от неё далеко и сразу.
Непонимание двоичной системы счисления идёт от непонимания десятичной. Более того, я сейчас скажу непопулярное мнение, но двоичная система не нужна. Да и шестнадцатиричная тоже. Ты ими пользоваться (за пределами передачи констант куда-то) будешь примерно никогда. А понимание их работы придёт потом всё равно, само по себе.

Собственно, вычитание делается просто - как и в обычной школьной арифметике. Допустим в двоичной системе 11100 - 1. Ну и отнимаем. От 0 один не отнимается, поэтому занимаем слева, получаем 111_1, где _ - это значёк займа. Там то же самое, поэтому опять занимаем слева. Там 1, поэтому занимаем эту единицу и получаем 11011. Теперь ход конём, допустим у нас всего четыре бита и мы делаем 0000 - 1. Проделываем все шаги и получаем _111, где _ - значёк займа. Поскольку у нас нету пятого бита, мы можем, например, предположить, что там магическим образом существует единица, и получить число 01111. Но у нас всего четыре бита, поэтому мы отбрасываем самый левый (не поместился) и получаем 1111. Но что мы сделали на самом деле? Мы вычли из нуля единицу и получили такое вот число. Значит, если мы сильно захотим, то можем считать, что для четырёхбитных чисел число 1111 = -1. Как ты знаешь из математики, 3 - 2 = 3 + (-2). А это значит, что вместо вычитания мы можем перевести второе число в отрицательное и сложить.

Вот и вся премудрость. А закалённых совком старпёров с "программирование - это математика" (или ещё лучше "программирование на ассемблере - это математика") не слушай. Они любители усложнять на ровном месте. Как сказал один индус из Brown University: это попытки высосать тот самый science о котором говорится в computer science. Хотя в данном случае эти попытки и имеют чуть большее отношение к реальности, чем, например, классификации языков программирования, но всё же.

А, на счёт программирования на ассемблере. Вот тут тебе, на самом-то деле, достаточно лишь знать, что вычитание делается командой sub. То бишь, вот это всё сверху можно пока пропустить мимо ушей и ничего не потерять.

Такие дела.
>> No.21684  
>>21680
Спасибо. Теперь вроде начало доходить
Посижу, попробую сделать это на бумажке, и мне кажется окончательно дойдёт
>> No.21703  
>>21589

> Почему никто не интересуется тем, как работает процессор?
Никто уже и не знает полностью, как работает современный процессор. А те кто знает больше прочих этим знанием делиться не спешат.
Если хочется разобраться в работе процессора как такового, стоит смотреть в сторону микроконтроллеров, где мануал по программированию занимает пару сотен страниц и может быть одним человеком осмыслен целиком и полностью. К тому же программа в микроконтроллере исполняется сама по себе, а не в контексте ОС, и не придётся осваивать параллельно какие-нибудь WinAPI чтобы сделать хоть что-то. От себя рекомендую AVR, у них довольно приятная архитектура.

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

> А уж если вы решили хакером стать, или хотите придумывать для приложений лекарства от жадности, то знание ассемблера просто необходимо.
Знание асма, достаточное для написания своих программ, тут не пойдёт, дезассемблированный код - совсем не то же, что человеческий исходник, а умение понять как работает чёрный ящик совсем не то же самое, что умение написать свой. И учиться для таких целей стоит сразу с упором на развитие соответствующих навыков, ибо особенностей там более чем хватает.

Могу посоветовать вот этот гайд для самых начинающих, описывающий самые простые вещи понятным языком, в том числе двоичную систему в контексте представления чисел в памяти компьютера вообще и в регистрах процессора в частности: http://bitfry.narod.ru/00.htm
>> No.21729  
Есть малина.
До этого ничего не программировал (TurboPascal на первом курсе института, но это было давно и неправда).
Ничего не умею вообще.
Хочу поковырять язык ассемблера.
Надеялся на то, что будет куча обучающих штук для совсем новичков. Но кучи нет.
Есть http://infocenter.arm.com/help/topic/com.arm.doc.den0024a/DEN0024A_v8_architecture_PG.pdf
Есть серия уроков https://www.youtube.com/watch?v=ViNnfoE56V8 из четырёх частей.
Есть https://www.raspberrypi.org/blog/tag/assembly-language/

Страшно и непонятно. С чего начинать? Не начинаю ни с чего.
Мне интересно вывести картиночку на монитор. Допустим, есть последовательность простеньких кадров в векторной графике. Засунуть их в код и сделать анимацию. Так ведь можно?

Направь меня в нужную сторону, Чиочан. Желательно пинком.
>> No.21742  
> в векторной графике
> на монитор
А проигрыватель mp3 ты написать не хочешь?
Начни с х86, там туториалов всяко побольше будет. Если разберёшься с одним асмом, то чтобы освоить другой уже будет достаточно документации.
>> No.21743  
>>21729
Малинка это хорошо. Но это же ARM вроде. По ARM-у я наверное не советчик, так как сам FASM, который только на x86 мутится, учу. Видимо тебе придётся быть в этом деле первооткрывателем. Но если что-то конкретное не ясно- пиши сюда. Будем все вместе разбирать
>> No.21744  
>>21742
>Начни с х86
Несмотря на то, что я бы рекомендовал то же самое, можно же нагуглить книжки сразу для армов. Вот, например, Modern Assembly Language Programming with the ARM Processor 2016го и Arm A32 Assembly Language: 32-Bit Arm, Neon, VFP, Thumb 2017го годов.
>>21743
Для фасма есть форк (ссылка прямо на странице скачивания) для армов. А ещё и fasmg есть, но для него макросы придётся дописывать самому.
>> No.21885  
А не основ цифровой логики надр начинать?

На edx от Корнельского был хороший курс, на coursera от израильского ВУЗа пара курсов для новичков, там софт для симуляции помогает понимать, в нем же и упражнения надо делать. Асм на этих курсах уже ближе к концу. Больщую часть времени учат вентили соединять.
>> No.21887  
>>21885
>основ цифровой логики
Зачем?
>> No.21956  
>как работает процессор.

Странно что ещё никто не упомянул книгу харрис&харрис. Излжение на мой дилетантский взгляд одновременно простое и комплексное.

книжка шаровая, первая нагугленная ссылка - на дихальта http easyelectronics.ru/files/Book/digital-design-and-computer-architecture-russian-translation.pdf
>> No.21957  
>>21956

Цифровая схемотехника и архитектура компьютеравторое
Дэвид М. Харрис и Сара Л. Харрис

>> No.21970  
>>21957
А там специально страницы сделаны в альбомной ориентации?
>> No.22340  
Я не программист, поэтому извините, если вопрос будет глупым. Насколько осуществима идея создания веба на ассемблере?
>> No.22341  
>>22340
Вполне: https://board.asm32.info/
>> No.22342  
>>22340
Серверной части — отчасти да, но зачем страдать? Наверное, оно может понадобиться разве что в критических частях в высоконагруженных системах, бегущих на строго определённом узком наборе железа, да и то не факт, что собранное ассемблером будет заметно лучше скомпилированного GCC кода на C++.
Клиентской — нет.
>> No.22343  
>>22342
>Клиентской — нет.
Неверный ответ. Сервер может отдавать, например, жсон, а асм затем заниматься отрисовкой хоть через консольку.

Ещё можно натянуть сову на глобус и вспомнить WAsm.
>> No.22470  
>>21956
Я попробую с тобой согласиться по поводу книги четы Харрисов. Если нужна хрестоматия по цифровым системам, то сабж - оно самое. Определено радует, что изложение про цифровые схемы начинается не с вопроса "как оно реализовано на аналоговом уровне", а с вполне доступной для понимания булевой алгебры, ну и первыми примитивами. И достаточно последовательно разговор доводится до fsm, ассемблера на мипсах, архитектур и организации I/O. Сам осилил книгу, даже в одном из hdl-языков более-менее разобрался, но вот сейчас на распутье, не понимаю куда двигаться дальша - мк, плис, схемотехника с махарайками. Может кто в этом треде поможет с выбором направления?
>> No.22476  
>>22470
— Скажите, пожалуйста, куда мне отсюда идти?
— А куда ты хочешь попасть? — ответил Кот.
— Мне все равно... — сказала Алиса.
— Тогда все равно, куда и идти, — заметил Кот.
— ...только бы попасть куда-нибудь, — пояснила Алиса.
— Куда-нибудь ты обязательно попадешь, — сказал Кот. — Нужно только достаточно долго идти.
>> No.23564  
Файл: 26f725ec-37c7-11e8-8b98-2f31af407cc8.jpg -(283 KB, 1440x810, 26f725ec-37c7-11e8-8b98-2f31af407cc8.jpg)
283
>>22470
>Может кто в этом треде поможет с выбором направления?
Для начала скажи, что ты вообще хочешь. Заниматься этим профессионально или исключительно в качестве увлечения?
Если ты хочешь заниматься этим профессионально, то на высокую зарплату можешь не рассчитывать. Вероятность того, что инженер средней руки будет получать больше 120 тысяч рублей в месяц, очень мала - и это в Москве. Я получаю меньше 100 тысяч, например. В более удалённых от крупных городов (Москва, Петербург, Новосибирск) местах можно рассчитывать на 40-50 тысяч.
Кроме того, за то время, за которое ты до этого дойдёшь, в другой области, например, в фронтэнде, ты за это время станешь уже синьором и будешь получать, как минимум, 300 тысяч в месяц. Здесь же тебе нужно, как минимум, 2-3 года работы для того, чтобы освоиться в области, а для должности ведущего разработчика - 10 лет, а иногда ещё и учёная степень (но далеко не везде).

Далее - какие у тебя вообще имеются идеи касательно собственных проектов? Причём, я настоятельно рекомендую воздержаться от разного рода умных цветочных горшков, кормушек для кошек, выключателей освещения и прочего. Вообще говоря, если повезёт, можно научиться этому и сразу на работе, но, во-первых, далеко не везде, а, во-вторых, может получиться так, что ты будешь развиваться в каком-то одном направлении, не затрагивая некоторые другие области, которым на данном месте будет заниматься другой человек, но знания и навык в которых от тебя потом потребуют при устройстве в другое место - например, схемотехника, разработка печатных плат, о которых ниже.
Если тебя интересуют микроконтроллеры, то скажу сразу - они для нормального разработчика не то, вокруг чего всё крутится. Обычно разрабатывается устройство и уже затем принимается решение, что в нём стоит применить микроконтроллер для организации управления им - поэтому смотри ниже.
С ПЛИС ситуация интереснее. Большие частоты, огромные вычислительные мощности за счёт параллельности и заточенности описываемых модулей под конкретные задачи, низкая латентность. Основные сферы применения - обработка сигналов (включая обработку изображений и машинное зрение), коммуникации (сетевое оборудование, а также различные внутренние интерфейсы), прототипирование (прототипы разного рода ASIC - от процессоров и контроллеров до ускорителей). Также часто используются вместо микроконтроллеров там, где нужна низкая латентность и/или кастомные интерфейсы управления, особо высокой квалификации не требует, обычно в таких случаях используются CPLD, либо специальные FPGA вроде Altera MAX 10 или некоторых линеек Lattice (точных названий не знаю, т.к. не работал с Lattice). В любом из этих случаев следует ознакомиться с возможностями и особенностями ПЛИС (устройство макроячеек, DSP-блоков, блоков памяти, ввода-вывода, цепи тактирования, блоки ФАПЧ, имеющиеся в ПЛИС хардблоки вроде контроллеров DDR, высокоскоростных трансиверов, контроллеров PCIe, процессорных ядер).
Также отмечу существование цифровых сигнальных процессоров - назначение понятно из названия - ЦОС. Обычно имеют некоторое количество интерфейсов с DMA, контроллер внешней памяти, SIMD-архитектуру и операции с накоплением (MAC), позволяющие быстро выполнять операции с векторами и матрицами (т.к., в основном, всё базируется на операциях свёртки). Программируются на Си и/или ассемблере (например, с вставками, либо с использованием готовых библиотек функций).
>> No.23565  
Касательно схемотехники (аналоговой) - нужна в любом случае. Как уже говорил выше про микроконтроллеры, обычно разрабатывается устройство, а потом решается, что в нём следует применить микроконтроллер, соответственно, про микроконтроллеры ты должен думать уже в крайнюю очередь. МК как цель - для ардуинщиков. Даже если ты работаешь в команде, тебе в любом случае надо будет иметь представление о том устройстве, разработкой которого вы занимаетесь. В случае с ПЛИС и ЦСП также необходимо разбираться в схемотехнике - здесь ты уже сам должен думать, что должно быть в твоём устройстве - какая периферия, интерфейсы, как всё это включается, какие максимальные частоты и т.д.. Также, обычно, если ты занимаешься разработкой под ПЛИС или ЦСП, то ты также разрабатываешь и сам модуль, в котором будет стоять эта микросхема.

Также следует, в любом случае, заняться разработкой модулей. Читай "Начальный курс черной магии" Джонсона и Грэхэма. Начни осваивать соответствующий САПР - Mentor Graphics Xpedition или Cadence Allegro. Изучай актуальную компонентную базу, читай гайды Cadence по трассировке плат с различными интерфейсами сделай несколько устройств того или иного рода - отладочную плату для ПЛИС, SDR-радиоприёмник, радиомодуль, синтезатор частоты. Сначала простые на двухслойных платах, потом более сложные - с BGA-чипами и с DDR, SFP, PCIe, LVDS - на многослойных платах. Поймёшь, как изменение геометрии дорожек и наличие радом других дорожек, полигонов и компонентов влияет на сигнал, на максимальные скорости передачи. Используй встроенные анализаторы сигнала (позволяют заменить дорогостоящие высокоскоростные осциллографы, которые ты не сможешь себе позволить), смотри форму сигнала на глазковых диаграммах на различных лэйнах и сопоставляй это с тем, как они разведены.
>> No.23783  
Учу сейчас по гайду с сайта.
>> No.23946  
>>21589
>Почему тут ещё нет треда для ценителей классики?
> классики
> реальный режим умер
> i386 умер
> Ехали интринсики через ОоО
> arm thumb thumb2 jazelle aarch64
> ppc mips кладбище itanic

Ну я даже не знаю. Определи классику, что ли, писать крючки для игр, и настраивать dma между периферией микроконтроллера вроде одинаково низуоуровнево, а на самом деле это разные, практически не пересекающиеся ирл миры.

Ассемблер, ручное написание кода на нем мертво начиная с появления второго пентиума - тогда выполнение реальных инструкций заменили на трансляцию во внутренние на лету и начали вводить конвейеры команд. Нет больше ручного контроля выполнения программы. А настоящее и ближайшее будущее - за уменьшением роли вычислений на CPU, сведения его функций к бизнес-логике, где важна тестируемость и предсказуемость, простота поддержки, даже в ущерб производительности, а все ресурсоемкое стремятся перекладывать на специализированные блоки, вроде AES-NI или хотя бы на DSP/GPU.

Я бы рекомендовал ньюфагам не слушать слепо мантры о трушности, а бегло, но без пропусков пройтись по всему стеку вычислительной техники: физика - аналоговая электроника - цифровая электроника - цифровой дизайн (asic, fpga, cpld) - процессоры - программирование на ассемблере и С под bare-metal, работа ОС и гипервизоров - неуправляемые высокоуровневые ЯП и системное программирование - управляемые ЯП - веб, десктоп, мобайл,...
Осмотреть, потратив десяток часов на каждую ступень, и осваивать ту, которая больше приглянется, желательно с небольшим представлением о соседях сверху и снизу чтобы понимать, зачем и почему все исторически сложилось именно так а не иначе. С таким подходом и интереснее будет, и намного проще при желании превратить увлечение в профессию.
В реальной же работе на каждой ступени есть колоссальный багаж знаний и опыта, и, например, пишущий новую ОС может успешно работать, вообще не зная ассемблера ни одного процессора.



[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]