 |
непосредственно управлять любым устройством ввода-вывода, пос-
кольку программы на Ассемблере могут делать все то, на что спосо-
бен процессор. С другой стороны, поскольку Ассемблер является
"родным" языком компьютера, хорошо написанная на Ассемблере прог-
рамма позволит получить код с наименьшим временем выполнения. Ка-
чество выполняемого кода, получаемого в других языках, страдает
от того, что приходится выполнять трансляцию с этого языка на ма-
шинный язык, а код на языке ассемблера отображается в машинный
язык непосредственно, без малейшей потери эффективности. На языке
Ассемблера вы указываете компьютеру, что нужно делать, и он дела-
ет именно это - не больше и не меньше.
Конечно, если вы напишете на Ассемблере неэффективную прог-
рамму, она не будет быстро работать, поскольку процессор работает
в точности так, как это определено программой. Аналогично, в язы-
ке Ассемблера отсутствует широкая поддержка встроенного преобра-
зования типов данных или предохранение от таких возможных ошибок,
как случайная запись в переменную или выход за конец массива. Все
это означает, что на Ассемблере вы можете писать очень быстрые и
развитые программы, но такие программы потребуют от вас больше
мастерства и внимания, чем программы, написанные на других язы-
ках.
Теперь, когда вы поняли соотношение между процессором и его
языком Ассемблера, давайте рассмотрим конкретно язык Ассемблера
процессора 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, как память, интерфейс ввода-вывода,
регистры и, конечно, инструкции. Рассмотрим далее эти ресурсы.
Память
-----------------------------------------------------------------
Процессор 8086 может адресоваться к памяти объемом 1 мега-
байт (это два в двадцатой степени или 1048576 ячеек памяти, каж-
дая размером 8 бит). Первый байт памяти имеет адрес 0, а послед-
ний - адрес 0FFFFFh (см. Рис. 4.2).
Адрес 0FFFFFh - это шестнадцатиричная форма (по основанию
16) записи, о чем говорит суффикс h. В десятичном виде (по осно-
ванию 10) это эквивалентно значению 1048575. Использование записи
в шестнадцатиричном виде - существенная черта программирования на
Ассемблере. Шестнадцатиричной записи мы коснемся в Главе 5 "Ос-
новные элементы программы на Ассемблере".
Шестнадцатиричный ---------------------- Десятичный адрес
адрес 00000 | | 0
00001 | | 1
00002 | | 2
00003 | | 3
00004 | | 4
00005 | | 5
00006 | | 6
00007 | | 7
00008 | | 8
00009 | | 9
0000A | | 10
0000B | | 11
0000C | | 12
0000D | | 13
0000E | | 14
0000F | | 15
00010 | | 16
|--------------------|
. .
. .
. .
FFFEF | | 1048559
FFFF0 | | 1048560
FFFF1 | | 1048561
FFFF2 | | 1048562
FFFF3 | | 1048563
FFFF4 | | 1048564
FFFF5 | | 1048565
FFFF6 | | 1048566
FFFF7 | | 1048567
FFFF8 | | 1048567
FFFF9 | | 1048569
FFFFA | | 1048570
FFFFB | | 1048571
FFFFC | | 1048572
FFFFD | | 1048573
FFFFE | | 1048574
FFFFF | | 1048575
----------------------
Рис. 4.2 Пространство адресов памяти процессора 8086.
Один байт размером 8 бит может содержать один символ, или
одно целое значение в диапазоне от 0 до 255. Это не означает, что
процессор 8086 не может работать с большими значениями. Два байта
(которые называются словом) могут одно целое значение в диапазоне
от 0 до 65535. Процессор 8086 может работать как с байтами, так и
со словами.
Четыре вместе взятых байта (которые называются двойным сло-
вом) могут содержать целое значение в диапазоне от 0 до
4294967295 или одно значение с плавающей точкой (плавающей запя-
той) с одинарной точностью. Четыре вместе взятых байта (четверное
слово) могут содержать одно значение с плавающей точкой двойной
точности. Процессор 8086 не обрабатывает эти два последние типа
данных непосредственно, однако сопроцессор 8087 может непосредс-
твенно работать со значениями с плавающей точкой и целыми значе-
ниями с расширенной точностью. При наличии соответствующего прог-
раммного обеспечения процессор 8086 может выполнять виртуальную
обработку любого типа данных, хотя и медленнее.
В любой момент программа процессора 8086 может считать или
изменить содержимое любого из более чем 1000000 байт памяти. Нап-
ример, фрагмент программы:
.
.
.
mov ax,0
mov dx,ax
mov bx,0
mov al,[bx]
.
.
.
загружает содержимое байта по адресу 0 в регистр AL. Здесь не
стоит беспокоиться о деталях: на самом деле пространство адресов
памяти процессора 8086 обеспечивает память для рабочих значений,
несколько превышающих 1000000, к которым процессор 8086 может по-
лучить гибкий, быстрый и оперативный доступ.
Один мегабайт - это большая память, существенно большая, чем
64 килобайта (2 в степени 16 или 65536 байт), адресуемых процес-
сорами, предшествующими процессорам 8086. С другой стороны, пос-
ледняя модель процессора этой серии, процессор 80386, может обра-
щаться к памяти в 4000 раз большей, чем память процессора 8086.
Поэтому, как вы можете видеть, процессор 8086 все же весьма огра-
ничен в использовании памяти. Кроме того, в компьютере IBM PC из
одного мегабайта адресного пространства доступно для общего ис-
пользования только 640К (килобайт). Остальное адресное пространс-
тво предназначено для использования системным программным обеспе-
чением, а также занято памятью, используемой для работы с
дисплеем (видеопамять). К тому же, не следует забывать о том, что
|