Подскажите, где и как практиковаться в программировании на ассемблере. понял - просто сухая теория бесполезна, унылые задачки по программированию, даже олимпиадные - унылы не меньше. графы, списки, стеки, очереди... - УГ. где их практическое применение? подскажите книги, сайты, где качать исходники и пр. полезные обучающие вещи. учиться никогда не поздно... Прошу не предлагать банальных книг, а также книг по структурам данных и алгоритмам, нужно что-то действительно приближенное к реальности. заранее спасибо
chainick А для чего размещать одинаковые сообщения в разных разделах? практический ассемблер практика программирования? практика практический ассемблер Нарушение Правила форума WASM пункт 2.5:
Утром в понедельник я не очень добрый. Поэтому скажу так: ваши рассуждения - как раз и есть то самое УГ. Структуры данных и алгоритмы для программиста на ассемблере - вообще наше все. Вот вам задачка 1: - сделайте аналог игры "Сокобан". Да, где ящики двигают. Выберите поле разумных размеров, оптимальную кодировку элементов головоломки. Целевая система: DOS, 16 бит. Требования: размер программы +7 уровней не должен превышать 512 байт. Когда сделаете, впихните в этот же размер еще +5 уровней. В чем тут фокус? в том, что на ЯВУ вам нужен двумерный массив, очевидно, байтовый. Скажем, 16*16. байтовый массив такого размера - 256 байт. На ассемблере "двумерного" массива не существует. Есть память, в которой вам придется организовать массив, хоть двумерный, хоть трехмерный. На ассемблере вы можете задуматься о хранении исходных уровней, и если элементы кодируете (это в двоичном!) 00 - пусто, 01 - место под ящик, 10 - ящик, 11 - стенка - то 2 бита на элемент достаточно. Упакованный таким образом уровень 16*16 вместо 256 байт будет занимать 64! Но это не предел. Зачем нам хранить лишнее, если реальный уровень уложится в 9*12? Описываем уровни (байт - размер: старшие 4 бита по Х, младшие 4 бита по Y)(байт - начальное положение игрока, аналогично)(X*Y/4 байт упакованный уровень) - и внезапно задача уже не кажется настолько невероятной. А я пока манипулировал только представлением и хранением данных. - Вот вам задача 2: сделайте аналог игры "Питон". Он же "Змейка". Змея ползет по экрану, съедает что-то, увеличивается в размерах. Уложитесь в минимальный размер кода и данных. Да, вы расслабились чувствую на 4 гигабайтной плоской памяти, чего тут о структурах данных и ассемблере думать? Заведем массив 10000*10000 двойных слов, чтоб наверняка хватило, и будем туда писать? ню-ню. А с 64 Кб оперативной памяти работать не приходилось? А с 4 Кб? Куда и программа, и данные уровня, и переменные в процессе пишутся, и должно хватить. При чем тут структуры данных? при том, что изгибы змеи - это СПИСОК. При чем тут алгоритмы? при том, что то, что змея съедает, должно появляться на экране случайно. Через случайный период времени в случайном месте. Идем читать про генераторы псевдослучайных? - Возьмите предыдущую задачу и сделайте "искусственный интеллект", чтобы змеюка ползала сама. А потом вспомним фильм "Трон" и превратим змею в "световые мотоциклы". Один игрока, остальные с "ИИ". Без дерева для создания этого самого интеллекта вы не обойдетесь. про стек вообще молчу. Стек неявно используется вообще везде. Прежде всего для хранения истории возвратов из подпрограмм. Но если нужно прямо конкретный пример - сделайте алгоритм решения "ханойской башни". Он вообще нафиг не сдался, если честно. Ни уму ни сердцу. Но наверно стек пригодится как структура данных. Игры не серьезно, из другой области? Ок, - программа для моделирования узоров для вышивания крестиком. Минимизировать используемую для хранения узора память. Минимизировать - это именно минимизировать. Если для хранения области 256*256 вы используете 64К - задача провалена. так любой идиот сможет ) про алгоритмы сжатия читать будем? - рассчитать методом Рунге и Кутты 2 порядка решение системы диф-уравнений. Не знаете кто такие Рунге с Куттой? книги по вычислительным методам вас ждут ) - сделать обход дерева каталогов и вывести на экран имена файлов и папок, до последнего уровня вложения. Текущий каталог без отступа, после вложенного каталога выводить "<dir>" или любой другой признак директории (я не формалист, хотите, ставьте 2 восклицательных знака, хотите, косую черту), и его содержимое с отступом в 4 пробела. Дальше ныряете - отступ еще +4 пробела. Назад возвращаетесь - -4 пробела. И так пока до дна не дойдете, не вернетесь и не перечилите все файлы и каталоги внутри целевого. Что, алгоритмы и структуры данных УГ? Конечно УГ, можете не читать. Вперед, решайте задачку не читая ничего. И исходники чужие тоже на эту тему не смотрите, это и тем более УГ. Время пошло )))
x64 говорить что всякая теория УГ и задавать общие вопросы в спец разделах не трололо ?? где - за компьютером, ну например дома как - скачай пакеты с компиляторами и примеры, пробуй получить сначала тотже результат, потом модифицируй
всем спасибо за ответы не все заходят во все разделы, хотелось услышать больше ответов от разных людей приношу свои извинения за доставленные неудобства и отнятое время
chainick Есть кнопка и по ней видны твои дубли. Так делать не стоит. Asm - язык. Перейдем в плоскость языков человеческого изъяснения. Тут твой вопрос звучит так - "где и как практиковаться в французском?" Доступная аналогия? Лично я , когда влюблюсь, скажу об этом наверное на французском, чтобы было романтичнее. Наверное так свои чувства мне удастся передать точнее. ))) Но чаще для меня легче говорить на русском. Теперь подумай и с учетом вышесказанного перефразируй вопрос, если тебе действительно нужен ответ.
думал, думал, но так и не понял, о чем вы говорите (ну разве что: французский - ассемблер, русский - ЯВУ, нужно писать на ЯВУ, а когда требуется чего-то особенного - на ассемблере, и практиковаться на ЯВУ, а на основе оного - практиковаться на ассемблере, т.е. это одно и то же, только способ выражения мыслей разный). думаю аналогия с человеческими языками не совсем удачна. они не формализованы
chainick imho - удачная. Знать хотя бы один язык - вот необходимое, но не достаточное, условие для успешного изучения остальных. А знание иностранных языков сильно расширяет кругозор, и делает чела проницательным.. Например вот на русском слово "глюк", а на укр. - так почти волшебно - "ма-арево", просто околдовывает произношение )))