Память


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

Загрузка...