Rambler's
Top100

Основы ассемблера

Автор: lonesome TSH/Digital Daemons
Дата: .01.2003
Раздел: Низкоуровневое программирование в Linux

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

Этот язык является представлением машинных команд (которые в форме шестнадцатеричных чисел имеют вид вроде 66 B8 04 00 00 00) в виде удобочитаемых и легко запоминаемых мнемоник (например mov eax, 4). Т.е. программируя на ассемблере, вы напрямую программируете поведение процессора, - любая написанная команда выполнится в точности так, как она написана. Отсюда вытекают некоторые проблемы, связанные с переносимостью ассемблерных программ, которые впрочем сильно преувеличены - часто ли вам приходится переносить свои программы на операционные системы с другой архитектурой? Среднестатическая ассемблерная программа, написаная, скажем для Windows будет работать (даже без перекомпиляции!) как на Windows 95, так и на Windows XP

Очевидно, что ассемблер предоставляет широчайшие возможности для оптимизации программ - ассемблерная программа может выполняться в несколько раз быстрей и быть во столько же раз меньше полностью аналогичной, но написанной на языке высокого уровня (ЯВУ), Кстати, ходят слухи о выдающейся способности оптимизировать программы у компиляторов ЯВУ. В большинстве случаев это не так, и в одном из следующих уроков я приведу несколько примеров. Компиляторы ЯВУ никогда не смогут сравниться по возможности оптимизации с мастерами ассемблера, потому что человек имеет возможность воспользоваться результатами, которые выдал компьютер, а компьютер - нет. С другой стороны самый оптимизированный вариант какого-либо действия далеко не всегда является самым очевидным. Процессоры Intel имеют богатый набор команд, поэтому одно и то же действие обычно можно выполнить несколькими путями. Но одно я могу сказать точно - достигнув среднего уровня владения ассемблером, вы легко обставите любой компилятор ЯВУ!

Далеко не все программы имеет смысл писать на ассемблере, но ни один программист, какой бы язык ни являлся его специальностью, не сможет достичь высокого уровня владения "своим" языком, не изучив ассемблер, ибо только с помощью ассемблера можно понять внутреннюю структуру компьютера, без понимания которой не достичь мастерства. Еще Дональд Кнут в своем известном трактате "Искусство программирования" писал, что любой программист должен знать по крайней мере один машинный язык.

Вы сами увидите как вещи, которые были непонятными, после знакомства с ассемблером станут очевидными, поскольку являются следствием архитектуры процессора!



Rambler's Top100