Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Создание ярлыка на Рабочем столе
Категория: Приложение
Категория: Приложение
Listbox - элементы вверх-вниз
Категория: Компоненты
Категория: Компоненты
Число четное или нечетное
Категория: Математика
Категория: Математика
Компонент HotKey
Категория: Компоненты
Категория: Компоненты
Отступ в Memo
Категория: Компоненты
Категория: Компоненты
Упаковать TinyDB
Категория: Базы данных
Категория: Базы данных
Как можно проверить, запущена программа с локального диска или из сети
Категория: Интернет и Сети
Категория: Интернет и Сети
Преобразовать Римские символы в Арабские и наоборот
Категория: Текст и строки
Категория: Текст и строки
Удалить файл в Корзину
Категория: Приложение
Категория: Приложение
Как получить список устройств, подключённых к компьютеру
Категория: Файловая система
Категория: Файловая система
Assembler and Win32
Assembler&Win32. Курс молодого бойца. Введение.
Что это такое? Наверное,
каждый из нас думает, что ассемблер это что-то сложное, очень трудное
для изучения и вообще недосягаемое. Поверьте мне, я тоже так, когда-то
думал. Невозможное возможно. Этот туториал рассчитан для тех, кто даже
не знает никакого языка программирования, я вообще выступаю, за то, что
надо сначала изучать ассемблер, а потом только языки высокого уровня.
Если вы перечитаете весь туториал от этих строк до самого конца то вам
будет намного проще изучать другие языки программирования, и вы уже
никогда не будете спорить о том какой язык лучше С++ или Delphi.
В этом туториале я
расскажу вам, что такое ассемблер и с чем его едят. Чем же примечателен
этот туториал. Этот туториал примечателен тем, что я расскажу вам про
ассемблер под Win32 системы, конечно, есть много учебников и книг про
ассемблер, но и все писались под DOS, а ДОС это 16 разрядный отстой.
Программирование под ДОС, очень сложно, но чтобы программировать под
Win32 можно вообще ничего не знать про DOS. Короче забудьте про ДОС. По
ходу этого туториала, я буду немного возвращаться к нему, но только для
того чтобы пояснить, чем Win32 лучше DOS.
Assembler - это произведение искусства. Ниже ассемблера только машинные коды. Ассемблер создан как замена двоичному коду, который понимает процессор. При написании программы на ассемблере вы просто пишете команды процессора, которые процессор последовательно выполняет. Пример команды:
MOV EAX, EBX
В машинных кодах это будет 8BC3 (шестнадцатеричный код, теперь всё будет шестнадцатеричным, ПРИВЫКАЙТЕ). Процессор смотрит на эти циферки и делает то, что они обозначают. Любая программа, написанная на языке высокого уровня (исключая .NET), преобразовывается в ассемблерный код. А почему же ассемблер лучше, чем С++ и др.. Дело в том, что программу, написанную на языке высокого уровня надо перевести на ассемблер, а это очень трудно, потом надо его оптимизировать, современные компиляторы очень плохо с этим справляются. Я провел эксперимент, написал программу (обычное окно с одной кнопкой в центре, которая закрывает его) на разных языках высокого уровня и после компиляции получил вот такие размеры этой самой программы:
C++ Builder 4 - 22 kb
Delphi 5 - 291 kb
Delphi 5 + библиотека KOL - 26 kb
Ассемблер MASM - около 3 kb
Так, что смотрите и делайте выводы, что лучше использовать.
Есть другое различие с некоторыми языками высокого уровня, это использование runtime DLL библиотек для их функций. Visual Basic даже не преобразовывает свой язык в ассемблер (хотя версия 5 и выше делают это частично, но не полностью), это сильно зависит от msvbvm50.dll, виртуальной машины Visual Basic. Exe файл, который создан VB, состоит из простых частей кода и многих вызовов этой DLL. Вот почему VB очень медленный. Ассемблер это и есть самый быстрый язык. Он использует только системные DLL: kernel32.dll, user32.dll, и т.д.
Теперь приступим к тому, где именно мы будем писать наши программы на ассмеблере. Компиляция состоит из 2 стадий:
Теперь смотрим инструменты.
Связки ассемблер-линковщик:
MASM32 v9.0 (ml.exe, link.exe)
TASM32 v5.0 (tasm32.exe, tlink32.exe)
Также можно FASM, но он только для спецов, примечателен тем, что у него есть своя оболочка не надо никаких объектных файлов т.д., нажимаешь F9 и всё готово.
Текстовые редакторы
EmEditor Professional Version 4.13 (вне конкуренции)
UltraEdit v*.*.*.* (тоже хороший не я им не пользуюсь)
Блокнот : (классика).
Также пригодится справочник по API функциям. Желательно из комплекта MS SDK. Полная версия весит 24 MB (почти все апи), есть урезанные версии весом 12 МВ. Русские версии весом ~400 KB даже не читайте.
Думаю, хватит для введения. Ну, как? Ещё не отбило желания изучить ассемблер.
Assembler - это произведение искусства. Ниже ассемблера только машинные коды. Ассемблер создан как замена двоичному коду, который понимает процессор. При написании программы на ассемблере вы просто пишете команды процессора, которые процессор последовательно выполняет. Пример команды:
MOV EAX, EBX
В машинных кодах это будет 8BC3 (шестнадцатеричный код, теперь всё будет шестнадцатеричным, ПРИВЫКАЙТЕ). Процессор смотрит на эти циферки и делает то, что они обозначают. Любая программа, написанная на языке высокого уровня (исключая .NET), преобразовывается в ассемблерный код. А почему же ассемблер лучше, чем С++ и др.. Дело в том, что программу, написанную на языке высокого уровня надо перевести на ассемблер, а это очень трудно, потом надо его оптимизировать, современные компиляторы очень плохо с этим справляются. Я провел эксперимент, написал программу (обычное окно с одной кнопкой в центре, которая закрывает его) на разных языках высокого уровня и после компиляции получил вот такие размеры этой самой программы:
C++ Builder 4 - 22 kb
Delphi 5 - 291 kb
Delphi 5 + библиотека KOL - 26 kb
Ассемблер MASM - около 3 kb
Так, что смотрите и делайте выводы, что лучше использовать.
Есть другое различие с некоторыми языками высокого уровня, это использование runtime DLL библиотек для их функций. Visual Basic даже не преобразовывает свой язык в ассемблер (хотя версия 5 и выше делают это частично, но не полностью), это сильно зависит от msvbvm50.dll, виртуальной машины Visual Basic. Exe файл, который создан VB, состоит из простых частей кода и многих вызовов этой DLL. Вот почему VB очень медленный. Ассемблер это и есть самый быстрый язык. Он использует только системные DLL: kernel32.dll, user32.dll, и т.д.
Теперь приступим к тому, где именно мы будем писать наши программы на ассмеблере. Компиляция состоит из 2 стадий:
- Проверка синтаксиса, создание объектного файла и файла листинга
- Линковка, т.е. компоновка.
Теперь смотрим инструменты.
Связки ассемблер-линковщик:
MASM32 v9.0 (ml.exe, link.exe)
TASM32 v5.0 (tasm32.exe, tlink32.exe)
Также можно FASM, но он только для спецов, примечателен тем, что у него есть своя оболочка не надо никаких объектных файлов т.д., нажимаешь F9 и всё готово.
Текстовые редакторы
EmEditor Professional Version 4.13 (вне конкуренции)
UltraEdit v*.*.*.* (тоже хороший не я им не пользуюсь)
Блокнот : (классика).
Также пригодится справочник по API функциям. Желательно из комплекта MS SDK. Полная версия весит 24 MB (почти все апи), есть урезанные версии весом 12 МВ. Русские версии весом ~400 KB даже не читайте.
Думаю, хватит для введения. Ну, как? Ещё не отбило желания изучить ассемблер.