Assembler - Win32

Що це таке? Напевно, кожен з нас вважає, що асемблер це щось складне, дуже важке для вивчення і взагалі недосяжне. Повірте мені, я теж так колись думав. Неможливе можливо. Цей туторіал розрахований для тих, хто навіть не знає жодної мови програмування, я взагалі виступаю за те, що треба спочатку вивчати асемблер, а потім лише мови високого рівня. Якщо ви перечитаєте весь туторіал від цих рядків до самого кінця то вам буде набагато простіше вивчати інші мови програмування, і ви вже ніколи не будете сперечатися про те, яка мова краща за С++ або Delphi.

У цьому туторіалі я розповім вам, що таке асемблер і з чим його їдять. Чим примітний цей туториал. Цей туторіал примітний тим, що я розповім вам про асемблер під Win32 системи, звичайно, є багато підручників і книг про асемблер, але і всі писалися під DOS, а ДОС це 16-розрядний відстій. Програмування під ДОС дуже складно, але щоб програмувати під Win32 можна взагалі нічого не знати про DOS. Коротше забудьте про ДОС. По ходу цього туторіалу, я трохи повертатимуся до нього, але тільки для того щоб пояснити, чим Win32 краще DOS.

Assembler - це витвір мистецтва. Нижче асемблера лише машинні коди. Асемблер створений як заміна двійковому коду, який розуміє процесор. При написанні програми на асемблері ви просто пишете команди процесора, які процесор виконує послідовно. Приклад команди:

У машинних кодах це буде 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 стадій:

  1. Перевірка синтаксису, створення об'єктного файлу та файлу лістингу
  2. Лінківка, тобто. компонування.

Ви, напевно, всі звикли до того, що запускаєте Microsoft Visual C++, пишете програму, натискаєте на F7 і готове. На асемблері вам доведеться робити все вручну. У асемблера немає такого середовища розробки. Вам доведеться писати програму в блокноті, зберігати його в *.asm файл. І з командного рядка викликати асемблер та лінковник. Потім я вам все поясню.

Тепер дивимосяінструменти.

Зв'язки асемблер-лінковщик: MASM32 v9.0 (ml.exe, link.exe) TASM32 v5.0 (tasm32.exe, tlink32.exe) Також можна FASM, але він тільки для спеців, примітний тим, що у нього є своя оболонка, не треба ніяких об'єктних файлів тощо, натискаєш F9 і все готове.

Блокнот: (класика). Також нагоді довідник по API функцій. Бажано із комплекту MS SDK. Повна версія важить 24 МБ (майже всі апі), є урізані версії вагою 12 МВ. українські версії вагою

Думаю, вистачить на введення. Ну як? Ще не відбило бажання вивчити асемблер.