С
машиной
на
«ты»
Г
N ick ’n V r’
Ранее в «Моем компьютере» было опубликовано много статей, касающихся программирования с
помощью языков высокого и сверхвысокого уровней
тот же Паскаль, Delphi, VB, C++, PHP, ASP.
..
Список можно продолжать и дальше. При этом авторы обходят своим вниманием один из самых
важных аспектов программирования — программирование системное. Бесспорно, некоторые фрагменты
ассемблерных программ ранее встречались — но систематических материалов по данной тематике
на моей памяти еще не было. Что ж.
.. этот цикл статей призван хотя бы в небольшой мере восполнить
пробел в области системного программирования.
Ч а с ть 1. Лом аем сте р е оти п ы
К
онечно же, в рамках журнале нельзя полностью рассказать
о многогранном — и сложном — искусстве системного про-
граммирования. Поэтому я поставил перед собой другую
задачу — развеять, или хотя бы попытаться развеять преду-
беждение подавляющего большинства программистов-«приклад-
ников» против языка Ассемблера, и рассказать об основах ме-
тодологии построения программ.
Сразу же прошу прощения у тех, кто любит работать с язы-
» ком Си — у меня с ним хронически не складываются отношения,
поэтому иногда трудно бывает воздерживаться от резких (и за-
частую необоснованных) выпадов в его сторону.
Прежде чем приступать непосредственно к изложению мате-
риала, позволю себе оспорить несколько наиболее типичных
предрассудков.
1.
«Ассемблер»
святая святых в программировании
очень сло-
жен, и лезть туда совершенно не стоит,
когда под
рукой есть.
.. (да-
лее
внушительный слисок интегрированных средств разработки).
Данная точка зрения правильна лишь отчасти. К сожалению,
разработчики аппаратных средств, почти ежедневно «балующие»
^
нас технологическими новинками, ей всячески потакают. Ассемб-
лер имеет очень широкий, хотя и ограниченный диапазон приме-
нимости. Э то то, что мы ранее называли «Системное программ-
о й
ное обеспечение». Я имею в виду настоящее С П О : ВЮБ, загруз-
чики, утилиты той же О С Д О С .
.. Также он может применяться и
в высококачественных прикладных программах, зачастую в виде
вставок. Согласен, иногда программировать сложно — особен-
но начинающим, но, поверьте моему опыту, игра стоит свеч.
2.
Языки высокого уровня и без того неплохо оптимизиру-
ют код.
С этим утверждением я столкнулся на.
.. лабораторной рабо-
те по системному программированию. Не верьте. Ни одна сре-
да разработки не способна справиться с этой задачей хотя бы
вполовину способностей человеческого мозга. Это я проверял,
анализируя дизассемблированный код одних и тех же программ
на Си, Паскале и Ассемблере. А смотря на размер программ
\6/іпсіом«, написанных на С + + и ОеІрЬі, впору хвататься за голо-
ву. Оптимизация программ — задача нетривиальная, и компью-
тер не в состоянии пока с ней справиться. Именно поэтому сис-
темщики ВСЕГДА будут в цене.
3.
Ассемблерщики-профи бывают слегка «не от мира сего».
Факт. Ассемблер заставляет человека, понявшего его, выра-
батывать новый стиль мышления. О н, если хотите, облагоражи-
вает программиста. Это проявляется обычно в точности, целе-
-устремленности и продуманности действий, а иногда — и в уров-
не культуры ©. Что ж.
.. об этом — чуть дальше.
Ч а с ть 2 . О ш в ы основ
Что
же дает нам владение языком Ассемблера? Ответов здесь
много.
1.
Полный контроль над работой программы, процессора и
операционной системы.
2.
Возможность оптимизировать программу на самом низком
уровне и, как следствие, создавать самые быстродействующие
программы.
3. Возможность писать программы, работающие без сторон-
ней О С .
4. Привычку искать выход из любой ситуации методом «от
сложного — к простому», умение разбивать задачу на простые
решаемые подзадачи и тому подобные навыки.
Конечно же, чтобы в полной мере воспользоваться этими пре-
имуществами, необходимо разбираться еще и в архитектуре ПК.
Но если вы поймете Ассемблер, эти знания придут почти сами со-
бой — справочники с радостью раскроют для вас свои секреты.
Да. Еще мой вам один совет. Привыкайте пользоваться шест-
надцотеричной и двоичной системами счисления. Когда придет-
ся работать с отдельными битами байта, это будет очень даже
кстати.
Вначале мы рассмотрим программную модель микропроцес-
сора (МП)
Intel 80286
в режиме реальных адресов. Почему вы-
бран именно этот процессор и этот режим? Во-первых, потому,
что этот М П имеет довольно развитую систему команд, а во-вто-
рых, изучить его программирование куда проще, чем програм-
мирование более старших моделей. Естественно, ассемблерные
программы, написанные для 286, будут работать и на них.
Ре-
жим реальных адресов
избран в силу своей наглядности. В этом
режиме работает О С Д О С и большинство программ под нее,
написанных до 1993 года. О н позволяет системе увидеть
1024+64 Кб памяти, выполнять одновременно одну задачу и ни
о чем остальном не заботиться ©. Начнем.
Программная модель М П — это процессор с точки зрения
программы, т.е. она описывает возможности, им предоставляе-
мые. Что же может нам предложить «двоечка»?
Во-первых, регистры. Их у нас аж 14.
А . Регистры общего назначения
(8
шт). Их можно применять
практически для чего угодно. Они включают в себя следующие:
2
а х ,
сх,
dx,
вх
(
Accumulator
,
Counter, Data, Base)
— регистры
размером в 2 байта. Каждый из них делится еще на 2 однобайт-
ных регистра (например, для а х это ah
(H IGH
— старший байт) и
a l
(Low
— младший). Те же правила действуют и для остальных).
Еще раз повторюсь, эти регистры подходят для почти ЛЮБЫХ дей-
ствий, но есть команды, «заточенные» под определенные регистры;
2
s p ,
bp
(Stack pointer, Base pointei)
— двухбайтные регистры.
Также могут быть использованы в любых целях, но обычно при-
меняются для работы со стеком (структура типа «последним за-
шел — первым вышел», работа с ней будет описана чуть даль-
ше). Разница между ними в том, что
S P реализует «истинно» сте-
ковую адресацию, а
в р
позволяет адресоваться к стеку как к
обычной памяти;
2
s i,
D i (
Source Index, Destination Index
— индекс источника,
индекс приемника). Существует целый класс команд, называю-
щихся
строковыми,
которые позволяют очень быстро выполнить
различные операции с массивами. Главным образом эти регист-
ры предназначены для них, но применяются во многих целях.
Б. Сегментные регистры (4 шт). Используются с одной лишь
целью: адресация к оперативной памяти.
(Сегмент—
участок опе-
ративной памяти размером (в нашем случае) 64 Кб. В разделе
«адресация» об этом сказано подробнее.) Программно доступ-
ны в реальном режиме следующие:
2
D S . Сегмент данных. Здесь хранятся все, если можно так
выразиться, ресурсы программы — сообщения, переменные и т.п.
№39/314 27 сентября -04 октября 2004
предыдущая страница 39 Мой Компьютер 2004 39 читать онлайн следующая страница 41 Мой Компьютер 2004 39 читать онлайн Домой Выключить/включить текст