Процессор 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 килобайта) памяти. Это связано со специфическим средством, которое называется сегментацией. Сегментацию мы рассмотрим в последующих разделах («Сегментные регистры»).
