Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
реклама
Взять срочный займ ноль процентов онлайн без переплат.

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0


Оглавление

                           Язык  Ассемблера
-----------------------------------------------------------------

     Как мы уже сказали, процессор управляет  деятельностью  всех
пяти подсистем компьютера: сложением значений, перемещением их из
памяти на устройство вывода, и т.д. Однако здесь  возникает  воп-
рос,  откуда  процессор знает, какие именно операции нужно выпол-
нять?  То есть, компьютер обладает всеми необходимыми нам свойст-
вами, но у него нет сценария, по которому он может работать.

     Ответ здесь удивительно прост: процессор извлекает данные из
памяти,  и эти данные указывают ему, что нужно делать. Такие дан-
ные обычно называются инструкциями, однако инструкции - это прос-
то  хранимые  в памяти значения, аналогичные любым другим данным.
Набор инструкций, которые может выполнять процессор (набор  инст-
рукций  процессора) в точности соответствует тем действиям, кото-
рые может выполнять аппаратное  обеспечение  процессора.  Другими
словами, инструкции процессора охватывают все операции, выполнить
которые может указать процессору программное обеспечение.

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

     Значение каждой  инструкции  имеет  для  данного  процессора
конкретный,  строго  определенный смысл. Например, значение инст-
рукции 4 говорит процессору 8088 (или 8086),  что  нужно  сложить
значение,  хранящееся  в следующей ячейке памяти,  с регистром AL
(далее мы рассмотрим,  что это за регистр). В итоге можно указать
процессору,  чтобы  он выполнил желаемую последовательность дейс-
твий с помощью соответствующего  набора  значений  инструкций.  В
действительности  программа  представляет собой просто последова-
тельность инструкций и ничего более.

     Откуда же процессор знает, какую инструкцию нужно  выполнить
следующей?  С помощью отслеживания внутреннего указателя, который
указывает на то место в памяти, где хранится  значение  следующей
выполняемой инструкции. Когда из памяти считывается и выполняется
следующая инструкция, указатель перемещается на  следующую  инст-
рукцию.  Некоторые инструкции могут устанавливать указатель инст-
рукций в новое значение, это дает процессору  возможность  выпол-
нять  ряд  инструкций  не строго последовательно и даже выполнять
различные группы инструкций, в зависимости от определенных  усло-
вий.

     Прекрасно, но какое все это имеет отношение к  языку  Ассем-
блера?. А вот какое: набор инструкций процессора представляет со-
бой его язык Ассемблера. Или, точнее говоря, язык Ассемблера  яв-
ляется  ориентированной на человека формой набора инструкций про-
цессора (который называется  также  машинным  языком).  Ассемблер
преобразуется в машинный язык. Поскольку машинный язык и язык Ас-
семблера функционально эквивалентны, на языке Ассемблера  намного
проще  программировать. Кроме того, вам конечно больше понравится
программировать с помощью инструкций типа:

     add al,1

чем

     4
     1

не правда ли? Обе формы работают одинаково,  но  язык  Ассемблера
позволяет  вам  иметь дело с мнемоническими именами инструкций на
машинном языке. При этом Ассемблер транслирует инструкции из мне-
монического вида в их машинный эквивалент. Это, несомненно, боль-
шое преимущество, так как люди просто не могут достаточно  эффек-
тивно думать на числовых языках. В основном язык Ассемблер предс-
тавляет собой прямой аналог машинного языка, но  реализованный  в
том виде, с которым люди могут более эффективно работать.

     Неплохим качеством Ассемблера является то, что он  позволяет
вам  управлять  действиями процессора поэтапно (по операциям) и с
максимальной эффективностью. К числу его недостатков можно отнес-
ти тот факт,  что при каждом отдельно взятом действии  процессора
выполняется  совсем  немного  функций,  что отражает ограниченные
возможности того,  на что в действительности способен  процессор.
Например,  процесс сложения двух длинных целых чисел и сохранения
результата в третьем целом значении занимает на языке  Си  только
одну строку:

     i = j + k;

а на Ассемблере процессора 8088 это потребует шести строк:

       mov   ax,[j]
       mov   dx,[j+2]
       add   ax,[k]
       addc  dx,[k+2]
       mov   [i],ax
       mov   [i+2],dx

     Конечно, объем скомпилированного кода на языке Си  будет  не
меньше  (а вероятнее всего больше), чем шесть машинных инструкций
на языке Ассемблера, но легче написать одну  строку  на  Си,  чем
шесть на Ассемблере (необходимо помнить, что инструкции Ассембле-
ра отражают элементарные "способности" компьютера,  и  программы,
написанные  на  любых языках, должны, очевидно, перед выполнением
транслироваться в машинный язык).

     Зачем же тогда вообще использовать Ассемблер,  если  на  нем
программировать  труднее, чем на других языках? Причина состоит в
том, что Ассемблер позволяет вам достигать любой части  памяти  и
непосредственно  управлять  любым  устройством ввода-вывода, пос-
кольку программы на Ассемблере могут делать все то, на что спосо-
бен  процессор.  С  другой  стороны, поскольку Ассемблер является
"родным" языком компьютера, хорошо написанная на Ассемблере прог-
рамма позволит получить код с наименьшим временем выполнения. Ка-
чество выполняемого кода, получаемого в других  языках,  страдает
от того, что приходится выполнять трансляцию с этого языка на ма-
шинный язык, а код на языке ассемблера  отображается  в  машинный
язык непосредственно, без малейшей потери эффективности. На языке
Ассемблера вы указываете компьютеру, что нужно делать, и он дела-
ет именно это - не больше и не меньше.

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

     Теперь, когда вы поняли соотношение между процессором и  его
языком  Ассемблера,  давайте рассмотрим конкретно язык Ассемблера
процессора 8088.

                        Процессоры 8088 и 8086
-----------------------------------------------------------------

     Процессор 8088  -  это  процессор,  который  используется  в
компьютерах IMP PC и XT, и благодаря которому создано одно из на-
иболее удачных семейств компьютеров. Однако процессор 8088 предс-
тавляет собой только один процессор из серии процессоров, извест-
ных, как серия iAPx86. Другие процессоры данной серии включают  в
себя  процессоры 8086, используемые в компьютерах IBM модели 25 и
30, процессор 80286, используемый в компьютере IBM AT и IBM  PS/2
(модели 50 и 60) и процессор 80386, применяемый в компьютерах IBM
PS/2 модели 80. Каждый из этих процессором так или иначе  отлича-
ется  от  процессора  8088.  В Главе 11 "Процессор 80386 и другие
процессоры" различные процессоры серии iAPx86  обсуждаются  более
подробно. Процессоры серии iAPx86 объединяет одно общее свойство:
все они могут выполнять код, написанный для  процессоров  8086  и
8088.

     Процессор 8086 представляет собой основание всей ветви  про-
цессоров серии iAPx86. Процессор 8086 - это тот же процессор 8088
с расширенной шиной внешних данных. В то время как процессор 8086
может осуществлять передачу данных в память и из память по 16 би-
тов за операцию, процессор 8088 может передавать данные только по
8 бит.  Оба процессора имеют одинаковый набор инструкций.  Вообще
говоря, язык Ассемблера, используемый для программирования на IBM
PC и последующих компьютерах,  известен, как язык Ассемблера про-
цессора 8086,  а не язык Ассемблера процессора 8088.  Поэтому при
изучении  остальной  части  данной главы нужно иметь в виду,  что
язык Ассемблера процессора 8086 включает в себя  также  Ассемблер
процессора 8088.


                      Возможности процессора 8086
-----------------------------------------------------------------

     По современным стандартам процессор 8086 обладает  скромными
возможностями.  Кроме  того, процессор 8086 был разработан десять
лет назад, и 10 лет технологической эволюции внесли много  нового
в  область проектирования микросхем. Тем не менее, процессор 8086
продолжает играть важную роль. Одной из причин этого является все
возрастающее количество персональных компьютеров IВM PC и совмес-
тимых с ними компьютеров.  Никто не может игнорировать более  чем
десятимиллионный парк компьютеров. Другая причина, однако, заклю-
чается в том, что даже сегодня процессор 8086 отвечает потребнос-
тям развитого программного обеспечения.

     Процессор 8086 может адресоваться к большому  объему  памяти
(более  одного  миллиона символов или других байтовых (8-битовых)
значений), имеет мощный набор инструкций  и  при  соответствующем
программировании   может  обеспечивать  работу  высокоэффективных
программ. Однако процессор 8086 представляет  собой  сверхбыстрый
процессор. Не каждый язык обеспечивает на процессоре 8086 должную
производительность и никакой другой язык не сравниться  с  Ассем-
блером  при  разработке  превосходных  программ  процессора 8086.
(Процессор 8086 работает со скоростью 4.77 или 8  мегагерц,  про-
цессор 80286 - со скоростью 6, 8, 10, 12 и даже 16 мегагерц, про-
цессор 80386 может работать со скоростью 16, 20 и 35 мегагерц.)

     Программисту, работающему на Ассемблере, предоставляются та-
кие  ресурсы процессора 8086, как память, интерфейс ввода-вывода,
регистры и, конечно, инструкции. Рассмотрим далее эти ресурсы.



Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог