Привет всем =)! Сегодня мы поговорим про ассемблер. Статья теоретическая, но надеюсь она кому-небуть чем-небуть поможет. Многие считают, что программировать на асме не удобно, сложно, не приятно и в конце-концов не модно(кстати, в следующий раз напишу свое мнение о моде ;)!), но все это хуйня - нежелание учитса, узнавать что-то новое. Но мы с тобой не такие правда ;)? Все программы написаные на высоком уровне(C, С++, Delphi etc) воврема компеляции преобразуютса в опкод ассемблера. Опкод - это числовое представление камманд ассеблера, то что удобно хранить на винте и исполнять процессором, он исполняет команды представленые в бинарном виде(на винте все тоже хранитса в бинарном виде(0, 1), но удобнее, безусловно, для человека смотреть на двоичный файл в хексе(в одном байте 8 бит( нули и единици) тоесть в нем может находитса значение от 0x0 до 0xFF(2^8-1)=11111111(0xFF в двоичной системе исчисления)) поскольку можно утонуть в нулях и единицах(на куждый байт нужно было бы виделять не два символа а восем (00000000, 00000001, ..., 11111111). Еще ассембер имеет символьное представление - мнемонику. Ето то начем пишут прораммы. Например возмем комманду nop(no oparation), которая игнорируетс(читай пропускаетса) процессором: nop - это мнемоника, которая имеет опкод 90h (или 0x90, кто привык к С/С++). В одной статье на васме(www.wasm.ru, советую посетить) я прочитал такую вещь: вызывать виндовые апи из ассемлерных приложений это как-то не правильно(или аналогично, но другими словами). Имхо, это бред. Если ты знаком с кодингом под вынь то знаеш, что к примеру, вызов функции MessageBoxA на ЯВУ(Язык Высокого Уровня) выглядит так: MessageBoxA(0,"Any text","Any caption",0). После компиляции в твоем экзешнике этот вызов будет выглядеть так(Смори cтолбик опкод): ------------------------------------------------------------------------------------------------------ Адрес | Опкод | Мнемоника | Коментарии инструкции | | |(добавила Олька :)) ------------------------------------------------------------------------------------------------------ 00401000 > $ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00401002 . 68 14104000 PUSH 1.00401014 ; |Title = "Any caption" 00401007 . 68 18104000 PUSH 1.00401018 ; |Text = "Any text" 0040100C . 6A 00 PUSH 0 ; |hOwner = NULL 0040100E . FF15 3B204000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA Поэтому сказаное автором той статьи хуйня!!!! Все программы под винду( и другие оси, у которых соответственно свои апи) хранятса и исполнятса в опкоде. Вообще ассемблер - это язык процессора. Представь такую ситуацию. Ты хочеш поехать в какую-небуть страну, США на пример, как ты думаеш в каком случае ты сможеш максимально комфортно общятса там с людьми и держать ситуацию под контролем, если ты говориш через переводчика, или когда сам знаеш язык и говориш на нем( в данном случае на английском). Я думаю второе. В случае с кодингом роль переводчика выполняет компилятор, при этом он добавляет кучу левого кода, который увеличивает размер программы в несколько раз , иногда замедляет(в случае с Дэлфями). Нет, я не хочу сказыть что все ЯВУ маздай, а ассемблер самый рульный. Я считаю, что ассемблер - более универсальный инструмент, на котором можно писать и под нулевое кользо(дрова) и под третье(программы и сервисы). Как и у любого другого языка программирывания у ассеблера есть нетостатки. Самый мощьный - зависимость от процессора. Да, ЯВУ не зависят от проца. Под каждую машину, под любую ось можно написать компилер и не паритса. У меня вопрос: ты часто пишиш программы которые должны работать более чем на одном процессоре(Уточнение: x86 процы совместимые(в низ),кароче на любом интеловом или амдешном компе запуститса ваша программа(совремменых конечно(32 битных и выше),но разницы в данном случае нет: ЯВУ программы тоже не везде можне запустить). Всеми любимый язык программирования C/C++ известен как очень переносимый и независимый от проца и оси язык. Если он такой класный - попробуйте написать гуи приложение, которое нормально скомпилитса под виндой и линухом. Не выйдет. Эта байда не стандартизирована(В принципе, в случае с дэлфями и киликсом ты окажешся в лучшем положении, но дофига возможностей дэлфи потеряетса, что не очень выгодно). Сейчас кучу книг можно найти по кодингу на асме. К сожелению, очень много напсано о кодинге под дос(21 прерывание и так далее). Да... хреновое начало общения с асмой. Дело в том, что различие в кодинге под вынь, с ее красивими апи, и под дос колосальны. Помоему толку мало будет в таком знании. Дос умерла очень давно, с железом напрямую(например проц вырубить) нельзя, все через апи. Это существенно упрощяет жизнь.Вообще под линухом и бсдшками можно и использовать 80-ое прерывание, но там есть и вызовы из либ, так что комфортно кодить можно. На этом я закончу. Жди продолжение :). -eof-
|