Дневники чайника. Чтива 0, виток0

- Так кто вы всё-таки будете?
- Асм есть Царь!
(Из кинофильма "Иван Васильевич меняет профессию")


Благодарность

Я действительно благодарен всем моим читателям, особенно активным, вы мне очень помогли. Если бы не вы, этих уроков не было бы.

Также уроков могло не быть без Плохиша (Bad_guy, извини, что так назвал :). Он посадил зерно crackl@b'a на просторы инета и ухаживал за ним все эти годы, пока проект превращался в дерево знаний. Спасибо zer0 за управление разделом статей.

Спасибо всем участникам нашего форума и "wasm.ru/forum" за помощь и науку, особенно: Leo, S_T_A_S_,Staier, The Svin.

Ну и, конечно, отдельное спасибо Седому (SeDoYHg или SeDoY) за огромную помощь в написании Чтивы 0 и за критику первых статей. Я даже могу сказать, что почти все главы здесь под редакцией Седого.

Да, чуть не забыл, без моей мамы текст был бы полон "обшибак и слеганца бесграматен" :).

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

Короче говоря, всем, кто помог, - спасибо.

Пустословие

Как был предусмотрителен Джордж Лукас, когда снял 4-й эпизод "Звёздных Войн". Я понятия не имел, что возникнет потребность написать предчасть. А вот пришлось. После того, как я написал "Чтиву III", прошло 4 месяца.

Дело в том, что первая часть начинается примерно c такой фразы: "Прочтите Рассылку Калашникова и возвращайтесь читать Дневники чайника". Сам дочитал эту рассылку только до десятого урока, дальше идёт морально устаревшая информация.

Надеюсь, что большинство из тех, кто созрел для Асма, поймёт мой рассказ (от 9 до 110 лет :). Если не поймёте, не отчаивайтесь, есть другие дороги. Давно существуют подобные курсы элементарного ликбеза, например:


В любом случае советую прочесть все известные уроки. В каждом источнике автор по-своему раскладывает тему. Есть много мнений о том, какие аспекты самые важные, и каждая точка зрения для новичка - золото. Остальные интересные ссылки я уже поместил в следующих статьях, так что если вы пожелаете сначала завалиться литературой, а потом разгребать её, можете смело смотреть Чтиву 1,2,3.

Для кого пишу

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

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

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

Хотя вру, такую точку зрения поддерживают некоторые уважаемые люди. Но явной мысли "начинать надо с Асма" нигде так и не увидил.

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

Print  "Здесь был Вася"

В Ассемблере нет оператора "PRINT" и нет даже его подобия. Этот язык может показаться вам странным (как мне другие), если вы привыкли к логике высокоуровневых языков.

В данной статье за главный объект изучения будет принят язык Ассемблер для Intel-совместимых процессоров.

В принципе совершенно неважно, с чего начинать, когда объект полностью неизвестен, всё равно придётся ещё не раз возвращаться к первой выбранной теме.

Возможно, кто-то из вас сразу же предпочтёт прочитать большой учебник. Например:
В.И. Юров
"ASSEMBLER. 2-е издание. Учебник для вузов"
и учебник Зубкова в качестве интересных примеров для программирования (на форуме есть ссылки).

Не нужно искать в моей статье глубокие тайны программирования, и уж совсем не стоит считать Чтиву 0 истиной в последней инстанции.

Но если вы любите обрастать знаниями по ходу экспериментов (как Bitfry), добро пожаловать в мир ассемблера через мою "калитку".

Метод обучения

"Чтива 0" имеет мало общего со своими предками (Чтивы I,II,III), хотя бы потому, что это не мой дневник. Скорее, "Чтива 0" будет Ваш дневник, Ваши ошибки и Ваши уроки ;).

Говорят, "умный учится, глупый учит", если к этой поговорке прибавить мой скромный багаж знаний - я совсем дурак :). Только что начал и уже хочу научить вас думать логикой ассемблера. Ребячество - скажут многие. Но если бы я не верил в успешность предприятия (при некотором усилии с вашей стороны), даже и не стал бы тратить время.

Вы, наверное, согласитесь, что все знания в этой жизни приходят витками. Старые догадки и поступки кажутся ошибочными после каждого такого витка (в чтивах I,II,III полно ошибок).

Человеку для первого, невооружённого, осмотра местности, лучше думать, что земля плоская (поверьте, так будет лучше). Затем он осваивает всё больше и больше, а в какой-то момент до него вдруг доходит: чтобы сложить карты и сопоставить с положением звёзд на небе, нужно представить невероятное - земля, оказывается, шар. Но и это не есть истина, на самом деле земля очень сложной формы, и чтобы описать её более-менее точно, нужно использовать все ресурсы науки и техники. Конца этому процессу не предвидится. То же самое можно сказать и о компьютере. Несмотря на то, что он всего лишь юное творение человека, мы умудрились запутать в нём столько всяких абстракций (которые ему, кстати, мешают), что Ассемблер можно уже воспринимать как насмешку над корнем этого слова.

Сделаю всё возможное, чтоб избежать сложных понятий, также обещаю не допускать тупостей вроде "земля круглая", так как это больше всего сбивает с толку, уж лучше думать, что она плоская, чем круглая :), по крайней мере, я буду стараться так не писать.

Но вернёмся к виткам познаний. В Чтиве 0 мы с вами постараемся смоделировать два таких витка (пока мне так кажется, может быть, их будет больше).

Нулевой виток будет содержать много практики и некоторое количество утверждений.

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

Таким образом, обе части нулевой чтивы будут иметь одинаковые темы глав.


Вступление в суть                               День первый
Системы счисления и устройство памяти           День второй
Регистры процессора                             День третий
Практикация всего мозга                         День четвёртый
О словах и двойных словах (форматы данных)      День пятый
Циклы, ветвления и регистр Флагов               День шестой
Знакомство с Win32-программированием            День седьмой
Стек                                            День восьмой
Структурирование программы                      День девятый

Пару слов об оформлении

Статья получилась длинная и пёстрая, поэтому вам лучше сразу знать что как будет выглядеть. Кроме основного текста, вы здесь встретите:

Выделения, как обычно - суть из массы

- Сноски в конце главы

Код программ

Код исходников программ

Действия примера

Cравка о командах процессора

Ну и в этих серых блоках будет развлекуха, её читать совсем необязательно, поэтому с неё и начнём :).

Эй, малыш! Да, ты... Можешь раздобыть некоторый скарб для моего корабля?...

Инструменты, которые нам пригодятся

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

Перед отправлением в дальний поход необходимо как следует проверить укомплектованность нашего космического корабля.

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

Для начала посмотрите приложенные файлы: need.rar, prax0.rar, prax1.rar, общий размер ~500Kb. Там лежат примеры для проверки их работоспособности и кое-что ещё.

Hiew

Сайт программы, размер ~0,5Mb. Программа платная.

Версия должна быть для форточек не ниже 6.8 (я использую 7.01).

Если у вас нет этой программы, то в сети вы без проблем найдете её.

Heiw - это консольный шестнадцатиричный редактор с возможностью ассемблировать/дизассемблировать. Незаменимая для исследователей и ассемблерщиков вещь.

FAR manager

Сайт программы, размер ~3Mb. Программа бесплатная для русскоязычных пользователей.

Подойдёт и новая x64-версия 2.0 и 32-битная. Короче – любая. Порекомендовал бы использовать именно FAR, так как он тоже консольный. Сам я пользуюсь двумя файловыми менеджерами: Total Commander и Far. По опыту могу сказать, что Far можно настроить по сочетанию клавиш один в один с TC, было бы желание. Внешний вид настраивается до мелочей, просто на это надо потратить некоторое время. Far будет приятным и удобным если вы этого захотите, поверьте. Меня, например, дико раздражают мелкие шрифты и кислотные краски стандартной консоли (что Hiew, что Far, что любая другая цветная консольная программа), однако, всегда можно создать ярлычок в котором будут настройки шрифтов и палитра приятная для глаза. Ярлык для Far'a с моими любимыми цветами я прикрепил в файл need.rar. Кроме того можно настроить цветовую схему. Hiew и Far имеют богатые возможности в этом плане. Пробуйте. Однако если вам совсем не нравятся консоли, можете использовать что-то типа TC или обычный проводник.

CodeView (CV)

Сайт программы: microsoft.com. В принципе программа доступна для бесплатного скачивания где-то в дебрях Майкрософта, однако она является лишь придатком к довольно большому ненужному пакету, который входит в дополнение (не помню к чему). Отыскать её там будет непросто. Я выложил эту довольно старую программу у себя (в том же архиве need.rar).

Ещё CV входит в старый MASM (v5x,v6x) который входит в VisualC++ (версии не знаю).

CodeView - программа-отладчик (по-ихнему debugger - исправлятель ошибок). Отладчики помогают программистам понять, что делает их программа. :) Когда этот светлый миг наступает, становится понятно, где ошибка.

Немалую часть времени написания программы программист проводит в отладчике, поэтому выбор дебагера - очень больной вопрос. Я остановился на CodeView, потому что не смог подобрать другого отладчика для первых шести примеров. Однако слишком погружаться в CV не стоит, так как он устарел и в реальной практике вряд ли вам пригодится.

OllyDbg

Сайт программы, размер ~1Mb. Программой можно пользоваться бесплатно с разрешения автора.

На 07.12.2011 последняя версия Oлли - 2.01 alpha 4, но можно использовать и старую стабильную 1.10.

А вот этот отладчик на сегодняшний день самый актуальный на платформах вплоть до Win7 x64 на уровне 32-битных приложений. OllyDbg - самый многофункциональный отладчик прикладных программ Win32. Но как только появится хороший подходящий для нас отладчик x64, сразу возьмусь переписывать уроки под него.

MASM32 SDK

Сайт программы, размер ~4Mb. Программа бесплатная.

Проект Стива Хатчисона (Steve Hutchesson). MASM32 – это современный пакет языка Ассемблер, собранный на основе компилятора MicroSoft.

Существует ещё пакет MASM (Macro Assembler) - это древний DOS'овый пакет от самой MS. Нам он не нужен, так же как и NASM, TASM, TASM32 и т.д.

На сегодняшний день единственной разумной альтернативой MASM32 является FASM. Сам я использую и FASM, и MASM32, но тему FASM'a затрагивать пока не будем.

Что такое "пакет языка Ассемблер"?

В стандартный пакет языка программирования входят:


Всё это нам понадобится не сразу, а постепенно, по мере необходимости. Поэтому не бросайтесь сейчас же изучать и осваивать все вышеперечисленные приборы. Однако Hiew и CodeView нужны будут сразу же после вылета с базовой станции.

На Windows версии x64 (7/Vista/XP или Server) в первые дни вам понадобится какой-нибудь эмулятор DOS-режима для запуска com-программ. Можно использовать громоздкий Virtual PC от MS или VMWare, но я предлагаю (спасибо Григорию за подсказку) маленький удобный эмулятор:

DOSbox

Сайт программы, размер ~1,5Mb. Программа бесплатная.

Без этой программы можно обойтись на 32-битной WinXP. На Висте и Семёрке x86 лично не проверял, но говорят, можно обойтись режимом совместимости (пробуйте и отпишитесь в гостевой по результатам).

Не смущайтесь, что версия называется "Win32 installer", она поможет и на системе x86, и на x64 эмулировать режим старой-доброй DOS для наших первых примеров. DOSbox устанавливается за пару секунд, и его очень легко настроить. Нужно всего лишь смонтировать папку с com-примерами и туда же кинуть все файлы отладчика CV. Монтаж выполняется одной командой. Например:

mount с d:\prax

где "d:\prax " – это папка на реальном диске D, в которой должны быть свалены воедино ваши com-примеры и файлы отладчика CV. А "c" – это уже виртуальный диск внутри dosbox'a.

Далее переходим на новый виртуальный диск командой

с:

Что потом – читайте уже в следующей главе. Можно, кстати, батничек сделать... Разумеется, надо знать основы языка команд DOS и DOSbox (на сайте программы есть русская документация). Сразу рекомендую главу специально для пользователей, впервые очутившихся в DOS-мире.

Инструменты, которые нам НЕ пригодятся.

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

Кажется, можно отправляться.

Ещё раз повторю, виток0 нужен только для того, чтоб у вас возникли вопросы, я вовсе не предполагаю, что вы поймёте всё и сразу.

Можно сравнить эту часть с детским мультиком - все бегают-прыгают, яркие картинки, сплошные перегибы и упрощения.

Bitfry

следующая глава>>

Вернуться на главную

Hosted by uCoz