Лисья Нора

Оглавление


Материал 2005 года

§ Здравствуйте!

Это – неказистый раздел об Ассемблере, точнее, только его кусочке. Так получилось, что программировать я приловчился под DOS – вследствие легкости программ и простоты их написания. Так что всеобъемлющей информации по Ассемблеру не предвидится. Однако, сам по себе Ассемблер – язык, обеспечивающий почти прямую связь с машинным кодом, на котором "говорит" компьютер, очень прост вопреки сложившемуся о нем впечатлению, но искусно программировать на Ассемблере, действительно, непростое занятие, и существует огромное количество различных его модификации – под ДОС, под Windows, Linux, а также и под другие модели систем и даже компьютеров.
Я программист. Может быть, не из лучших, и даже не из средних. Но я программист-любитель, и считаю программирование искусством. Может быть, мои программы далеки от совершенства, но, я думаю, кому-нибудь они могут пригодиться. Также я хочу передать некоторый опыт в программировании на Ассемблере, может быть, объяснить принципы работы некоторых устройств, которые я смог понять, или выложить некоторые интересные алгоритмы. Потому я и открыл этот раздел. Я понимаю, что программистов среди населения немного, очень немного, и не все понимают информатику, что меня немного смущает – ведь, по сути, это очень просто. Так что приоткрыть завесу тайны на сей предмет будет очень даже нужно. Моими любимыми "наглядными сравнениями".

§ Зачем нужно программирование на Ассемблере?

Да и не только на нем. Есть множество языков высокого уровня – Паскаль/Delphi, Бейсик, и C/C++, который, однако, является как машинно-ориентированным, так и языком высокого уровня... Программирование на Ассемблере возникло почти в момент возникновения транзисторного компьютера, оно было нужно, чтобы упростить ввод машинных программ в компьютерную память. Нужен был язык, который бы обеспечивал связь между человеком и компьютером.
Теперь же, во время высоких технологий, языков "высокого уровня", программирование на Ассемблере почти отпало. Постоянное ускорение процессоров, увеличение производительности и тактовых частот уже не требует поголовной оптимизации программы и четкого контроля за затраченными ресурсами. Так что язык Ассемблера сейчас считается "мертвым". Ну и правильно. Тем более, современные компиляторы могут оптимизировать код лучше всякого человеческого вмешательства.
Однако есть некоторые участки кода, которые иногда следовало бы оптимизировать человеку, а также – здесь это главное – искусство "завернуть" код так, чтобы он был как можно меньше и мощнее. Такие программы сейчас называются "демосценами" – demoscene, по ним проводятся конкурсы. Написание таких программ – своего рода упражнения для мозгов. Я из тех людей, которые следуют второму принципу для того, чтобы программировать только на Ассемблере.
Не только одно это подтолкнуло меня на этот путь. Алгоритмы и графика, скорость, эффектность и незначительные размеры выполняемого кода – вот что является теми причинами, по которым я выбрал программирование на Ассемблере. А, может быть, и по более простой причине – он мне нравится :) хотя разобраться в чужом коде мне "не светит" :D

§ Конфигурация LZasm

Чтобы откомпилировать программу, нужно набрать в командной строке makex <имя файла> без расширения .asm, после чего программа превратится в COM или EXE в зависимости от того, какая модель выходной программы выбрана.

§ Общая структура программы

model [tiny/small/large]
 
tiny - генерация программы как .com
small - exe-программа с ближними адресами (near) 16bit
large - exe-программа с дальней адресацией (far) 24bit
dataseg - блок описания данных
 
идентификатор1 [db/dw/dd/dq] данные1, ... , данныеN
идентификатор2 [db/dw/dd/dq] данные1, ... , данныеN
...
 
codeseg - блок кода
 
startupcode - показатель начала кода
 
... ...
... программный код ...
... ...
 
exitcode - показатель выхода из программы
Таковы основные конфигурации. Все остальное зависит от умения пользоваться этим ассемблером.