Tupo > А можно подробнее? Я не имею ввиду примитивное: Код (Text): int foo; if( (char)++foo ) Вот, например, "на Си": Код (Text): __declspec(naked) void fun() { // if( some_condition ) fun(); // __asm pop edx __asm push ecx __asm jmp dword ptr [edx] } как мне правильно последние строчки записать?
Ну ты загнул. Такого я не делал, но если поднапрячься может быть и удастся. Я реализовывал программки типа: Код (Text): mov eax, 100 m0: dec eax cmp eax, 10 jnz m0 А твои "навороты" реализовывать у меня задачи не стояло
Какой-то странный код :/ Почему не сделать mov eax,90 m0: dec eax jne m0 если нужно чтобы на выходе было десять, просто добавить команду после цикла add eax,10 или or eax, 10 или ещё миллион с хвостиком вариантов. Для современных процов также лучше dec eax заменить на sub eax,1
Сказать вообще всё что угодно можно, вон Тупо явный профан в низком уровне (для него IMHO низкий уровень и ассемблер одно и тоже, сразу вспоминается "божий дар и яишница") а наговорил здесь больше всех про то нужен он или нет. Но по существу я уже высказал в чём различие - нет задач в принципе решаемых но нерешаемых на низком уровне, есть задачи в принципе решаемые но нерешаемые на высоком уровне. Т.е. множество задач решаемых на высоком уровне является собственным подмножеством задач решаемых на низком. По низким опять же повторюсь понимается работа с форматом понимаемым машиной (т.е. состояния логического нуля и единицы распозноваемого машиной в их упорядоченном поступлении (проиндексированны) со всей возможной (а не только определённой высокоуровневыми типами) модульной арифметикой. Если последнее непонятно - поясню что от такого-то до такого то индекса биты могут восприниматься как числа а не только битовые поля нарезанные по байтовым границам.
The Svin Это я от балды начеркал - не заморачивайся Дело не во мне, а в ребенке(если ты забыл о ком речь ). Ну преподашь ты ему сейчас уроки схемотехники, чтобы он на "низком уровне" программить мог. Пройдет 5-10 лет, ребенок подрастет, устройство компов изменится. И куда ребенок данные тобою знания денет? В корзину А ПОЛНЫЙ курс схемотехники, то есть включая основы построения компьютерных систем, подростку просто будет не интересен. Ассемблер нужен. Низкий уровень не нужен. Так понятно?
Ассемблер может быть не нужен (опционально). Низкий уровень нужен. Ты просто не понимаешь о чём речь, так как понятия не имеешь о том, что такое низкий уровень, низкоуровневые алгоритмы и т.п. Это на самом деле просто отдельная область математики, только название ей устраивающиего всех придумать не удалось. Что ты понимаешь под "устройством компов" я даже воображать не хочу, но логико-арифметические принципы в дополнительном коде, или мат. обоснование формата плавающей точки и развиваются и дополняются (в основе своей не меняясь) гораздо медленнее чем вся эта высокоуровневая лобуда, которая пишется для стандартных задач и стандартных кодеров, которым всё разжёвывют, дизенфицируют, и системно устраивают люди с системным низкоуровневым мышлением, чтобы несварения желудка не случилось. Есть у тебя сигнал, и нет никаких больше типов, стандартных структур и т.п. - ты должен его понять, обобщить, выделить кашу в систему, заформализовать, и приподнести на блюдечке в типах, структурах, библиотеках системном API, готовых контролах, СУБД и т.п. для высокоуровневиков. Которые потом как пользователи этим играют, и поскольку у них шоры на глазах их прёт от того что у них всё так легко получается, и им кажется что это они всё придумали. Убогие.
Я знаю, что такое низкоуровневое программирование, ибо уже 16 лет этим занимаюсь. Но вот термин "низкоуровневые алгоритмы", действительно, слышу впервые и не представляю что это такое
Я то как раз не забыл. А вот откуда ты берёшь свои данные о том что детям хорошо, что плохо, как они потом отнесутся, что им легко и т.п. - я в толк не возьму.
BTW. Tupo у меня странное чувство дежавю. По манере писать, ты очень напоминаешь одного человека, моего любимого дядю Диму, который написал рассказы "Байт" (есть на сайте), "Программисты" и т.п. Я даже переспросить хотел поначалу, не один и тот же это человек. Но Дима в те временя когда я его знал вообще не имел Windows (то на UNIXах то на Linax дома сидел). И некоторые фразы (по содержанию а не по стилю) тоже вряд ли он сказал бы если только для провокаци, а по стилю жуть как похож. Он потерялся просто где-то никак не разыщу. Порадовался наверно бы отзывам на свой рассказ. Может что ещё бы написал.
The Svin Наверное накомленный опыт мне позволяет судить об этом. Но вот человек, который пишет: (Гы-гы. Название дааавно уже придумали - Булева алгебра) вряд ли научит ребенка именно низкоуровнему программированию, так как исходя из этой фразы схемотехнику даже не знает
Вот Буль бы удивился, когда узнал бы что теперь к его алгебре отнесли к примеру модульную арифметику в дополнительном коде. Булева алгебра лишь используется в том о чём я упомянул в купе с модульной арифметикой Гауса, но не по частям а в синтезе и даже универсы на которых определяется та и другая с универсом этой новой области не всегда совпадают. Из того что я знаю и чему (и как) учил бы - вряд ли что-то устареет. Останутся и частотные генераторы и базовыми всё же будут те же принципы синхронизации, и т.д. и т.п. Если учить это понимать а не заучивать как таблицу умножения, ничего не нужно выкидывать, изменится "устройство компов" (я до сих пор не понимаю, что имелось ввиду так что цитирую осторожно с оговоркой) или нет. Эвклид то не устарел, не устареет и здесь. Только дополнится.
The Svin Вот Буль бы удивился, когда узнал бы что теперь к его алгебре отнесли к примеру модульную арифметику в дополнительном коде. Соглашаюсь с тобой . добавлю что часть раздела который вы обсуждаете называется "Теория автоматов".
The Svin Ты так и не обяснил мне, полному неучу, что же за низкоуровневые алгоритмы такие. Термин "устройство компьютеров" я употребил в значении "набор модулей(ТЭЗов), из которых состоит компьютер". Каждый модуль в свою очередь имеет схему, которая построена на БИС, а БИС в свою очередь состоят из логических элементов, которые(к твое сведению) работают по законам Булевой алгебры. Низкоуровневое программирование подразумевает программирование устройств, из которых состоит компьютер. А это значит работа с портами и прерываниями. То, что ты называешь "низкоуровневым программированием" и "низкоуровневыми алгоритмами", программисты называют "обработка двоичных данных". И для этого не надо знать язык низкого уровня. Разработчики кодаков, алгоритмов компрессии только этим и занимаются и благополучно используют для этого Си Ребенку же интересна в первую очередь визуализация - цветной текст, бегающие человечки и т.д. А, к примеру, алгоритм подсчета единичных бит в байте - ему не интересен. Вот о чем я говорю. Не в купе, а базируется на законах булевой алгебры. Как же по-твоему получают тот самый дополнительный код? Основы построения цифровых устройств - не устареют. Изменятся стандарты - то есть алгоритмы управления модулями компьютера(интерфейсы, адреса портов их разрядность и их количество). Вот о чем я говорю. Что стоят мои знания о портах контроллера НГМД ДВК-2М сейчас? Ничего. Что стоят мои знания о порте кемпстон-джойстика для Спектрума сейчас? Ничего.(А ведь в своё время я много игр адаптировал под работу с ним.) Нужно ли ребенка обучать написанию драйвера устройства в качестве начального курса по программированию? Нет, однозначно
Tupo, у меня трое детей. + я сам большой ребёнок, и что мне было интересно в детском возрасте прекрасно помню. Крестики-нолики, морской бой, шашки и т.п. одни из любимых детских развлечений, не говоря о трясучке и т.п. И это гораздо больше похоже на подсчёт бит, чем на цветной текст и бегающих человечках. Не надо мне рассказывать про детей, утомило.
Tupo > А что такое Z-состояние с точки зрения булевой алгебры ? > Нужно было порты BГ93 изучать, а не контроллер НГМД ДВК-2М - копии IS-DOS, Spectrofon и т.п. неплохо покупались
The Svin Поправочка - тогда не было компьютеров Аналогично. Не-а, это как раз, больше похоже на современные копьютерные игры, то есть на наборы визуальных образов и взаимодействие с ними! Если уж на то пошло, то подростку интереснее программировать демы. Но они этого не делают, так как для них это сложно. Больше не буду.
Бегающие человечки рулят - я и в детстве их делал, вместо того, что бы биты считать. а поскольку из-за этого так ничему и не научился, то и сейчас остаётся только тоже самое =)
Ну во первых Гугл рулит - набираешь - читаешь. Во вторых Кнут, правда очень ограниченные. Коротко но непонятно - те что используют прежде всего наиболее распространённые машинные блоки управления. Т.е. переходы безусловные, условные, индексные. И работа с типами превращается просто в машинные приёмы работы с битовыми полями. Это только поверхность но и этого хватит. Насчёт твоего опыта - если ты тут не заливаешь про него - то тогда уж не криви душой по крайней мере - номера портов которые ты знал может и не нужны теперь, но если ты работал с ними то опыт получил бесценный по манипуляциям с битовыми полями, по общим принципам построения формпатов бинарных команд. Понятие о стробе, задержках и т.п. Так что если опыт действительно был - не заливай тут про то что он бесполезный, это только "таблица умножения" - то есть то что нужно было "запомнить" бесполезно. А то что нужно было понять, всосать на уровне спинного мозга в виде внутренней абстракции - это бесценно. Я понимал формат x-86 месяца два - три. Причём сложность не запомнить индексы была а усвоить за счёт чего удлиняются команды, как логические структуры могут разбрасываться по полям, как последующий блок дешифруется в зависимости от предыдущего и т.п. Т.е. были сделаны обобщения. Когда греки занимались своей тригонометрией они представить не могли что это будет использоваться к римеру в ТОЭ. Они движение небесных тел анализировали, а закономерности открытие пригодились потом чёрте где. Когда Эйлер искал разгадку греко-латинских квадратов он представить не мог что магическими квадратами будут пользоваться при эксперементах с сортами пшеницы. Так вот, когда я разбирался с форматом PIC1684A ушло уже не 2а месяца, а 2е минуты. Не будь тех двух месяцев это было бы невозможно. В том то и дело, что опасность существует в том, что человек занимающийся ассемблером, может так и не почувствовать очень долго эту низкоуровневую сторону (я сам тоже был чайником когда-то и так же очень многое от меня ускользало, и обучаясь по стандартному пути я мог бы вообще остаться на всю жизнь с шорами).
Дык я о чём говорю - кто мешает их сделать визуально манипулируемыми то?! Биты т.е. Ты посмотри обучалки то мои - там как раз такие игрушки.