CodeNet / Языки программирования / Ассемблер / СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
Память
-----------------------------------------------------------------
Процессор 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К (килобайт). Остальное адресное пространс-
тво предназначено для использования системным программным обеспе-
чением, а также занято памятью, используемой для работы с
дисплеем (видеопамять). К тому же, не следует забывать о том, что
инструкции, а также данные, хранятся в памяти, поэтому данные и
код программы должна помещаться в компьютере РС в память объемом
не более 640К.
В то время как процессор 8086 может адресоваться к памяти
объемом 1 мегабайт, практически не так просто одновременно полу-
чить доступ с более чем 64К (64 килобайта) памяти. Это связано со
специфическим средством, которое называется сегментацией. Сегмен-
тацию мы рассмотрим в последующих разделах ("Сегментные регист-
ры").
Ввод и вывод
-----------------------------------------------------------------
Процессор 8086 поддерживает устройства ввода-вывода двумя
способами: с помощью инструкций ввода-вывода и через адреса памя-
ти. Некоторые устройство ввода вывода управляются с помощью пор-
тов, которые представляют собой специальные адреса ввода-вывода в
отдельном от 1 мегабайта адресном пространстве в 64К (см. Рис.
4.3).
Адрес памяти Адрес ввода-вывода (порт)
---------------------- ----------------------
00000 | | 0000 | |
00001 | | 0001 | |
00002 | | 0002 | |
00003 | | 0003 | |
00004 | | 0004 | |
00005 | | 0005 | |
00006 | | 0006 | |
00007 | | 0007 | |
00008 | | 0008 | |
00009 | | 0009 | |
0000A | | 000A | |
|--------------------| |--------------------|
. . . .
. . . .
. . . .
|--------------------| |--------------------|
FFFF5 | | FFF5 | |
FFFF6 | | FFF6 | |
FFFF7 | | FFF7 | |
FFFF8 | | FFF8 | |
FFFF9 | | FFF9 | |
FFFFA | | FFFA | |
FFFFB | | FFFB | |
FFFFC | | FFFC | |
FFFFD | | FFFD | |
FFFFE | | FFFE | |
FFFFF | | FFFF | |
---------------------- ----------------------
Рис. 4.3 Память и адреса ввода-вывода процессора 8086.
Адресов ввода-вывода у процессора 8086 намного меньше, чем
адресов памяти. В то время как технически возможно реализовать
64К адресов ввода-вывода, практически имеются только 4К адресов
ввода-вывода. К тому же адреса ввода-вывода не используются для
хранения значений, а служат для управления и передачи данных в
каналы устройств ввода-вывода. Например, последовательные уст-
ройства, такие, как модемы, управляются целиком с помощью нес-
кольких адресов ввода-вывода.
Доступ к адресам ввода-вывода можно получить с помощью двух
специальных инструкций, IN и OUT, которые больше ни для чего не
используются. Например, инструкция:
out dx,al
посылает содержимое регистра AL в порт ввода-вывода, определяемый
регистром DX. К инструкциям IN и OUT мы вернемся в Главе 5 "Ос-
новные элементы программы на Ассемблере".
Некоторые устройства ввода-вывода представляют собой устрой-
ства с отображаемой памятью. Это означает, что они управляются
через обычные адреса памяти, а не адреса ввода-вывода. Особенно
это относится к дисплейным адаптерам, которые могут использовать
16К, 32К или даже 256К пространства адресов памяти процессора
8086 для своих битовых массивов (массивов, описывающих точки, ко-
торые адаптеры выводят на экран).
Данное устройство может управляться как с помощью адресов
ввода-вывода, так и с помощью адресов отображаемой памяти. Факти-
чески, при работе с дисплейными адаптерами для некоторых функций
используются инструкции ввода-вывода, а для других - адреса памя-
ти.
