Ребята, помогите пожалуйста с ассемблером. Тема касается задач.

Тема в разделе "WASM.BEGINNERS", создана пользователем Leks, 2 июн 2009.

  1. Leks

    Leks New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    27
    Здравстуйте форумчане!

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

    К сожалению, с началом изучения языка Ассемблера, как я понял, этот язык очень многогранен. И у меня возникли сложности в связи с этим объястоятельством. Так как я только начинаю программировать я не знаю чего я хочу. Я читал статьи на Вашем сайте про изучение программ, про написание вирусов, программирование драйверов, работой с утсройствами и так далее. Глаза разбегаются, если честно. Хочется заниматься всем.
    Но я так думаю, что надо начинать с чего-то одного, и копать вглубь. Сначала.

    Наиболее меня заинтересовало изучение программ. Изучение защитных механизмов.
    Как мне кажется ,-это широкая область и тут есть где "развернуться". Наверное, очень интересно изучать чужие программы, идеи, разбираться во всём этом. Это очень интересно.



    Как я понял, без знания языка Ассемблер тут не обойтись.
    Собственно, я начал его изучать. Очень интересно. Узнаю как работает компьютер.
    Но по прошествии определенного времени у меня возникла проблема. Я начинаю таптаться на месте и становится менее интересно.
    Как я понял, при программировании очень важна практика. Я взял задачник по языку "Паскаль" и стал решать эти задачи на языке Ассемблера. Но всё задачи сводились к каким-то, как мне кажется, непригодным на практике действиям. И все очень похожи.
    Я выучил основной синтаксис языка, умею делать : ветвления, циклы, массивы и так далее.

    Собственно вопрос. Подскажите практические задачи, которые можно было бы решить мне сейчас. Простые, но практические.
    Вот мне посоветовали реализовать криптографические алгоритмы: шифр Цезаря, таблицу Полибия, шифровальный диск, шифрование методом гаммирования.
    Еще посоветовали реализовать Азбуку Морзе.
    Я уже начал всё это делать. Пловину написал.

    Подскажите, пожалуйста, что еще можно написать?
    Один человек посоветовал написать криптор. Программа, которая шифрует другую программу. Сказал начать с простейшего. Как-то через оператор xor. Но я не совсем понял. Это можно так,да?

    Ребята, помогите, если кто знает. Посоветуйте простые, но практические программы.
    Область интересов: изучение программ, написание программ шифровальщиков.

    Я использую операционную систему Windows.

    Заранее всем большое спасибо!
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Leks
    Если есть желание "изучать" программы, то зачем заниматься переписыванием Паскалевских задач на ассемблере?
    Возьмите какую-нибудь игру и ковыряйте ее до полного понимания. Я бы посоветовал (если не ошибся с названием) Twinsen Odissey (производитель Sierra): там много хорошо реализованной графики, работа с различными ресурсами (в том числе интерпретатор игры). Ассемблер изучите (если справитесь) будь здоров!
    Можно поковыряться с защитой (достаточно заглянуть на кряклаб и взять какую-нибудь программу попроще).

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

    Leks New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    27
    Нет-нет, я учусь программировать на чистом языке Ассемблера. Изучить и закрепить самые основы. А сборник по Паскалю - это то, что нашел под рукой. Беру оттуда задания, но пишу на Ассемблере решения, а не на Паскале.
    А щас, когда изучил синтаксис и основные конструкции эти задачи стали не интересны. Топчусь на месте. Хочется перейти на настоящие программы.Поэтому и попросил какие-нибудь задания простые, но которые пригодятся на практике или же которые являются "миниатюрой" больших программ.

    А изучать программы пока тяжело. Я пробовал, но пока я чувствую мне рано. Да и по началу хочется научиться своё создавать, мне кажется так будет легче изучать чужое.

    crypto, спасибо Вам за ответ. Обязательно посещу кряклаб.
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Leks
    Я собственно на эту Вашу фразу отвечал:
     
  5. Gaen

    Gaen New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2009
    Сообщения:
    5
    ИТМО, 3 курс, задания по ассемблеру. От чистого сердца :)
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
  7. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    Leks
    Самый простой вариант в вашем случае - пишите криптографические алгоритмы, такие как Bas64, md5, etc...
    И с алгоритмами познакомитесь, и навыки прокачаете.... =)
     
  8. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Попробуйте делать приложения с гуи, например простенький шестнадцатиричный редактор. А вообще, на мой взгляд, нужно уже не решать задачи из учебника (раз с этим не возникает проблем), а писать полноценные програмулины. Кучу всего попутно изучите, и скучать не придется, предела совершенству нет. Подумайте, чего вам не хватало всегда в чужом софте, что не нравилось, и попробуйте написать свою утилитку. Изучите и оптимизацию заодно. Например, можно брать битый или недокачанный ави-файл, при открытии которого плеер тормозит или не дает перематывать, разботывать его заголовок и перебирать все фреймы, а потом делать блок индексов и записывать туда, где ему положено быть. Это несложно, но научит внимательности и аккуратности, да и пользу прога может приносить людям.
    Декомпилируйте консольный архиватор рар и напишите свою библиотеку для архивирования файлов.
    Напишите прогу, которая будет перебирать все диски в системе и разбирать их логическую структуру, выводить имеющиеся разделы (не только виндовые) и неразмеченное пространство. Используйте апи по минимуму, вручную разбирайте таблицы разделов и загрузочные сектора. Научитесь заодно читать документацию.
    Напишите статистический анализатор файлов, чтоб он считал кол-во встречания каждого байта в файле и выводил статистику в файл, затем то же самое для биграмм и триграмм. Затем добейтесь его устойчивой работы на файлах произвольного размера, хоть в десятки гигабайт, и чтоб статистика по биграммам считалась верно, даже если биграмма попадает на границу буфера для чтения. Полезная в хозяйстве прога будет, и писать интересно.
     
  9. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    А в криптографию я б пока не лез, область сама по себе обширная и непростая, хорошо б вначале научиться в совершенстве владеть инструментом, то есть языком, а затем погружаться в эту пучину. Особенно, если раньше с криптографией дела не имели. Иначе получится тупое переписывание существующих исходников на асме, без понимания сути.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Дураки
     
  11. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    большинство - студенты.

    это больше относится к алгоритмизации. зная языки программирования, которые поддерживают
    переменные, метки (как в ассемблере) и оператор goto, можно без труда реализовать эти алг. структуры.

    вы бы сначала выучили основные логические операции, а потом реализовывали алгоритмы шифрования.
    инструкция XOR - это логическое Исключающее ИЛИ. В паскале такой нет. но можно реализовать и
    существующих логических операций.
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Microedition
    ?!!
    В паскале есть все, только в отличие от С в нем булевские и побитовые операторы обозначаются одинаково - компилятор сам понимает что к чему в зависимости от типа операндов
     
  13. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    leo - ну к XOR это в любом случае не относится ;)
    Он всегда побитовый, что такое логический XOR как-то трудно представляется.
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    cppasm
    1) A XOR B = ((NOT A) and B) or ((NOT B) and A)
    2) A XOR B = (NOT(A and B)) and (A or B)
    3) A XOR B = (A or B) - (A and B)
    Если мне не изменяет память в паскале есть логическая операция эквивалентно, подставить к ней логическое отрицание и будет XOR
     
  15. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Если хочешь научиться хорошо программировать на асме, то выбирай путь крэкера. Через некоторое время будешь знать что к чему и понимать, что делает программа, не особо углубляясь в подробности. IMHO главное, если ты пишешь на асме - эту умение умственно "протрассировать" код, а ещё нужна любовь к отладчику, без него на асме писать, наверно, невозможно в принципе.
    Вот это правильно!!! Если привыкнешь к асму, то потом, когда придётся писать на других языках, будешь скрежетать зубами и вопить матом на всю комнату потому, что нельзя будет повторить (легко повторить, по крайней мере) элементарные вещи, к которым ты привык на асме. Компилятор будет тыкать тебя как нашкодившего котёнка лицом в ... :) и злобно улыбаясь говорить : "Нет, скотина, ты будешь писАть так, как мне нравиться, чтобы занять как можно больше тактов!".
    И тут Остапа понесло... :)
    P.S.:
    Чтобы избежать холивара скажу, что всё это только моё мнение и ничего больше... я и сам пишу на крестах... стискиваю зубы и пишу....
    Улыбайтесь, господа, улыбайтесь!
     
  16. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Z3N
    +1
    Каждый раз когда я пишу на высоком уровне мой код становится всё более кривым. Там думать по-другому надо.

    leo
    Я тоже pas уважаю.

    P.S.
    Можно обменять регистры местами через xor
    Код (Text):
    1. xor ax,dx
    2. xor dx,ax
    3. xor ax,dx
     
  17. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    > Однако на современных ЦП XOR-техника значительно медленнее, чем использование временной переменной > для обмена. Это происходит по причине распараллеливания выполнения команд. (c) wikipedia
     
  18. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Может и вправду нужно по другому думать.... Хотя тут можно и поспорить. Я особо много программистов на ЯВУ не знаю, но мой друг, который учиться на программиста уже полтора года, пишет отвратительный код. Он даже сам с этим соглашается :). Он пишет уже полтора года, а не умеет пользоваться винапи!!! Он сразу писал под консоль, потом на С#, а там можно обойтись без апи... вот и привык. А теперь когда надо было написать что-то более-менее серьёзное не знал что делать. И решил писать на управляемом коде, который по функционалу похож на сишарп. Вы бы видели эту программу! Я получил эстетический шок.... Она написана так не потому, что он плохой программер, а потому, что стиль диктует компилер. Он и сам говорил, что главное, чтобы его за эту прогу не побили.... А ведь программа не особо сложна, поиск дупликатов файлов на диске. А у него вышло около тысячи строк... :)
     
  19. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    * сорри, по-моему пол тысячи... надо уточнить....
     
  20. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    cppasm
    Не понял, что не относится ? По крайней мере в TP7 есть XOR побитовый и XOR логический = булевский

    Если под логический = булевский то тоже самое, что и побитовый, только над булевскими переменными, принимающими только два значения: false и true. Например, условие
    if (a > 0) xor (b > 0) then ...
    выполнится только в случае когда одно из выражений false, а другое true. Исключающее ИЛИ - это когда либо одно, либо другое, но не оба вместе (поэтому оно и исключающее)