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 для своих битовых массивов (массивов, описывающих точки, ко- торые адаптеры выводят на экран). Данное устройство может управляться как с помощью адресов ввода-вывода, так и с помощью адресов отображаемой памяти. Факти- чески, при работе с дисплейными адаптерами для некоторых функций используются инструкции ввода-вывода, а для других - адреса памя- ти.