Внутренняя память компьютера
Виды оперативной памяти
Выше были выделены два основных вида памяти – оперативная и дисковая. Рассмотрим подробнее внутреннюю память компьютера, которая физически представлена модулями (микросхемами) оперативной (ОЗУ или RAM) и постоянной (ПЗУ или ROM) памяти.
Во внутренней памяти записываются коды команд подлежащей выполнению программы. Они последовательно считываются в процессор для анализа (дешифрации) и выполнения. Обращение к внутренней памяти так же производится при выполнении различных команд микропроцессора при указании в команде прямо или косвенно адреса операндов в памяти.
Оперативная память обеспечивает запись, считывание и хранение информации. Для построения ОЗУ используют микросхемы статической и динамической памяти.
В микросхемах динамической памяти считывание числа сопровождается его перезаписью, т.е. подзарядом тех конденсаторов, которые до считывания были в заряженном состоянии. Время хранения заряда из-за паразитных утечек ограниченно. Чтобы не потерять информацию в памяти необходимо периодическое ее восстановление, которое выполняется в так называемых циклах регенерации. Это снижает скорость работы динамической памяти и увеличивает потребляемую мощность.
Оперативная память выполнена обычно на микросхемах динамического типа с произвольной выборкой (DRAM – Dynamic Random Access Memory). Каждый бит такой памяти физически представляется в виде наличия (или отсутствия) заряда на конденсаторе, образованном в структуре полупроводникового кристалла.
В микросхемах статической памяти (SRAM – Static RAM) в качестве элементарной ячейки использует триггер (2 или более транзисторов) – бистабильный элемент (с двумя устойчивыми состояниями). Микросхемы статической памяти, изготовленные по КМДП (КМОП) технологии имеют во много раз меньшее потребление энергии, чем микросхемы динамической памяти и применяются в ПК с автономным питанием. Статическая память обладает более высоким быстродействием и используется, например, для организации кэш-памяти. Статическая память гораздо дороже динамической.
Постоянная память содержит информацию, которая не должна изменяться. Она обеспечивает режимы считывания и хранения информации. Микросхемы ПЗУ по способу занесения в них информации делятся на масочные однократно программируемые изготовителем и многократно программируемые изготовителем EPROM (Erasable PROM).
Последние, в свою очередь, подразделяются на стираемые электрически или с помощью ультрафиолетового облучения.
К EPROM с электрическим стиранием информации относятся и микросхемы флэш- (flash) памяти. Они отличаются высокой скоростью доступа и быстрым стиранием записанной информации. Данный тип памяти сегодня широко используется для хранения информации BIOS.
Элементы памяти для ПК конструктивно выполнены в виде отдельных микросхем в корпусах DIP (Dual Inline Package), либо в виде модулей памяти типа SIMM (Single Inline Memory Module), DIMM (Dual Inline Memory Module).
Современные системные платы оснащены разъемами для DIMM-модулей.
Модули памяти могут включать дополнительные разряды контроля четности.
Контроль по четности означает, что при записи байта информации в память определяется дополнительный контрольный разряд, вычисляемый как сумма всех информационных битов. Обычно контрольный разряд равен нулю, если число единиц в байте четное, и контрольный разряд равен 1, если число единиц нечетное. При чтении байта, вновь определив контрольный разряд и сравнив его с прочитанным разрядом, можно контролировать правильность полученной информации.
Кэш-память (сверхоперативная) – это память, используемое в качестве буфера между процессором и оперативной памятью. Быстродействие процессора намного выше, чем динамической памяти. Использование кэш-памяти позволяет уменьшить количество циклов ожидания в работе процессора.
Если кэш-память интегрирована на кристалле процессора, то ее называют кэш-памятью 1 уровня (Level-1). Когда кэш реализован в виде отдельных микросхем на системной плате, то говорят о кэше 2-го уровня (Level-2).
Когда микропроцессору требуется информация, он обращается через системную шину к основной памяти. При этом прочитанная информация запоминается также в кэше. При повторном ее чтении процессором, в процессор поступают данные уже из кэша, а не из основной памяти. Редко используемая информация в кэше заменяется информацией, прочитанной из ОЗУ.
ROM BIOS и CMOS-RAM
Базовую систему ввода/вывода (BIOS – Basic Input Output System) можно рассматривать и как составную часть аппаратных средств и как один из программных модулей ОС. BIOS включает в себя набор программ ввода/вывода, благодаря которым ОС и прикладные программы могут взаимодействовать с различными внешними устройствами.
BIOS также содержит программу тестирования ПК при включении питания (POST – Power On Self Test) и программу загрузчика. Большинство современных видеоадаптеров и контроллеры накопителей имеют собственную систему BIOS, которая обычно дополняет системную.
Система BIOS обычно реализована в виде 1 – 2 микросхем, установленных на системной плате ПК. Известные производители BIOS: AMI, Award, Phoenix.
Под CMOS-RAM понимается "энергонезависимая" память (с аккумулятором), в котором хранится конфигурация ПК – размер и тип модулей ОЗУ, типы накопителей, время и т.п.
В системе BIOS имеется программа, называемая Setup, которая может изменять содержимое CMOS-памяти, т. е. задавать параметры конфигурации системы.
Адресное пространство персонального компьютера
Максимальный объем внутренней памяти для МП 8086/8088 составляет 1 Мбайт или 220 байт. Он определяется разрядностью адресной шины (20) и устройством центрального микропроцессора, позволяющим адресоваться в командах к 220 байт памяти.
В этом диапазоне адресов (или адресном пространстве) разработчики ПК предусмотрели память только для чтения (BIOS) и зарезервировали часть памяти для внутренних нужд компьютера. Общий объем зарезервированной памяти составляет 384 Кбайт.
Так возникло ограничение максимального объема базовой или стандартной памяти для МП 8086/8088- 640 Кбайт.
Память в диапазоне адресов 640-1024 Кбайт называется областью старшей (верхней) памяти (UMB – Upper Memory Block). В этой области находится память видеоадаптера и область ROM BIOS. Кроме того, в ней остаются свободные участки ("дыры") оперативной памяти.
Вначале 80-х годов фирмы-производители оборудования для ПК стали выпускать платы расширения памяти. Доступ к этой памяти осуществляется через специальную программу-драйвер управления памятью (EMM – Expanded Memory Manager). В старшей памяти (384 Кбайт) выделяется окно размером 64 Кбайт, в котором отображаются произвольные 4 "страницы" по 16 Кбайт из всего объема памяти на плате расширения. В обращении к драйверу программа номера страниц, которые следует отобразить в окне. Поэтому название этой памяти – "отображаемая память" (expanded memory).
Микропроцессоры 80286 и выше могут непосредственно работать с оперативной памятью более 1 Мбайт в специальном защищенном режиме (protected mode). Они также могут работать и в обычном режиме, совместимом с микропроцессором 8086 (real mode).
В защищенном режиме микропроцессор 80286 может обращаться к 16 Мбайт (224 байт) памяти, а микропроцессоры 80386 и старше – к 4 Гбайт (232 байт). В ПК с этими микропроцессорами часть памяти сверх 1 Мбайт называется дополнительной памятью (extended memory).
Способ доступа к дополнительной памяти был унифицирован в стандарте XMS 3.0 (Extended Memory Specification). Он предусматривает выделение области высокой памяти (HMA – High Memory Area) в адресах 1024 – 1088 Кбайт и собственно XMS-память в адресном пространстве выше 1088 Кбайт. Микропроцессоры 80386 и выше могут эмулировать EMS-память, используя XMS-память.
Программы управления памятью
Драйвер дополнительной памяти HIMEM.SYS обеспечивает стандарт XMS для доступа к расширенной и верхней памяти в микропроцессорах 80286 и выше. Задается в файле CONFIG.SYS командной строкой DEVICE=HIMEM.SYS. Чтобы загрузить ядро ДОС в высокую память необходимо добавить команду DOS=HIGH.
Драйвер отображаемой памяти ЕММ386.ЕХЕ для микропроцессоров 80386 и выше использует XMS-память для эмуляции EMS-памяти, а также обеспечивает DOS-программам доступ к старшим адресам памяти (UMB). Задается в файле CONFIG.SYS командной строкой DEVICE=EMM386.EXE RAM. Дополнительная настройка доступа к верхней памяти обеспечиваются строкой DOS=UMB. После этого можно загружать резидентную программу DOS в верхнюю память по команде LH (LoadHigh). Например, LH KEYRUS.COM.
Микропроцессор персонального компьютера его программная модель
Микропроцессор (МП) – это полупроводниковый кристалл или комплект кристаллов, на которых реализован центральный процессор компьютера.
МП является главным компонентом ПК. Он выполняет все операции обработки команд и данных. Обязательными компонентами МП являются арифметико-логическое устройство и блок управления.
В ПК применяются следующие МП: 8086, 8088, 80286, 80386, 80486, Pentium, Pentium Pro, Pentium II, III, IV производства фирмы Intel и их аналоги 5х86, К5, К6 фирм AMD, IBM, CYRIX,
Все эти МП различных фирм совместимы по системе команд и контактным выводам (в соответствующих поколениях МП).
На системной плате МП, как правило, устанавливается в специальный разъем (Socket) и при необходимости легко заменяется другим МП такой же марки или его аналог. Целью замены может быть повышение производительности (тактовой частоты) либо надежности работы, устранение неисправности.
При установке МП с другой тактовой частотой или другого типа с помощью перемычек (Jumpers) на системной плате устанавливают соответствующие настройки (её режимы работы).
МП характеризуется:
быстродействием (тактовой частотой)
длиной слова (внутренней и внешней)
архитектурой
набором команд
Архитектуру МП определяют регистры, стеки, систему адресации, средства ввода/вывода, типы обрабатываемых данных.
Типы данных представляют собой базовые информационные объекты, манипулирование которыми осуществляется системой команд: обычно это бит, полубайт (4 бита), байт (8 бит), слово (16 бит) и двойное слово (32 бита).
Слово определяется, как правило, числом двоичных разрядов, поступающих по шине данных МП.
Команды обычно предусматривают арифметические действия, логические операции, передачу управления и перемещение данных (между стеками, регистрами, памятью и портами ввода/вывода).
МП может быть дополнен сопроцессором, например, для работы с вещественными числами (с плавающей запятой), вычисления тригонометрических функций и др.
Первый МП был изготовлен фирмой Intel на четырёх кристаллах (ЦП, ПЗУ, ОЗУ и сдвиговый регистр) в 1971 г.. Его характеристики: шина данных – 4 бит; адресуемая память – 4,5 Кбит, 45 команд.
Представление МП для программиста называется его программной моделью. В программной модели не учитывается аппаратная реализация МП, его электрические характеристики, технологические особенности.
При создании нового поколения МП в его программную модель, как правило, включают программную модель МП предыдущего поколения, дополненную новыми регистрами, командами и т.п.
Программная модель МП Intel 8086 (отечественный аналог – КР1810ВМ86) включает:
16-разрядное арифметико-логическое устройство;
четырнадцать 16-разрядных регистров;
адресное пространство памяти размером 1 Мбайт (220 байт);
адресное пространство ввода/вывода размером 64 Кбайт (216 байт).
Для программиста ячейки памяти и порты ввода/вывода доступны, как 8/16-битные элементы (байты и слова).
Слово образуют 2 любых байта с последовательными адресами: младший байт слова является байтом с меньшим адресом, старший – с большим адресом.
Процессор поддерживает два способа адресации устройств ввода/вывода:
через отдельное адресное пространство ввода/вывода
через (с отображением на) адресное пространство памяти.
Системы с отображением на адресное пространство ввода/вывода имеют адреса в диапазоне от 0 до 64 Кбайт.
Адресация порта осуществляется с помощью регистра DX или прямо с помощью байта, закодированного в команде (непосредственная, прямая адресация). Прямая адресация портов ввода/вывода допустима только для адресов в диапазоне 0…255.
Регистры
МП 8086 имеет четырнадцать 16-разрядных регистров, которые используются для управления исполнением команд, адресации и выполнения арифметических операций. Регистры подразделяются на группы.
Регистры общего назначения (РОН) являются основными рабочими регистрами программ. Это регистры AX, BX, CX, DX.
Их отличают то, что к ним можно адресоваться как отдельным словом, так и однобайтным словом. Например, АХ: старший байт АН, младший байт AL.
Регистр АХ – аккумулятор, который используется во всех операциях ввода/вывода, в операциях со строками и в арифметических операциях.
Регистр ВХ – базовый регистр, единственный из РОН, используемый в индексной адресации. Он также используется в вычислениях.
Регистр DX – регистр данных. Используется в операциях ввода/вывода, а также в операциях умножения и деления больших чисел (совместно с АХ).
Любой из РОН может использоваться для сложения или вычитания 8 или 16-разрядных величин.
Регистр указателя команд (IP – Instruction Pointer) используется для выборки очередной команды с целью её выполнения.
Регистр флагов (Flags) содержит следующие биты, которые отражают состояние компьютера и признаки выполнения машинных команд.
Бит 11 OF (Overflow Flag) – переполнение – равен 1, если объём результата превышает размер ячейки назначения.
Бит 10 DF (Direction Flag) – направления – устанавливается 1 для автоматического декремента в командах обработки строк (0 – для инкремента).
Бит 9 IF (Trace Flag) – разрешения прерывания – если 1, то прерывания разрешены, а если 0, то распознаются т.н. "немаскируемые " прерывания.
Бит 8 TF (Trace Flag) – флаг трассировки. Если = 1, то процессор переходит в состояние программного прерывания INT3 после выполнения каждой команды.
Бит 7 SF (Sign Flag) – признак знака. = 1 – для отрицательных чисел результата и = 0 для положительных.
Бит 6 ZF (Zero Flag) – признак нуля. =1, если результат равен нулю.
Бит 4 AF (Auxiliary Flag) – дополнительный признак переноса. Устанавливается в 1 во время выполнения команд десятичного сложения (и вычитания) при необходимости переноса или заёма между полубайтами.
Бит 2 PF (Parity Flag) – признак четности – равен 1, если результат имеет чётное число единиц.
Бит 0 CF (Carry Flag) – признак переноса – равен 1, если имеет место перенос или заём из старшего бита результата. Он используется для выполнения операций сложения (вычитания) над числами длиной в несколько слов, которые сопряжены переносом из слова в слово.
Регистры указателя SP и BP используются для обращения к данным в стеке.
Регистр SP (Stack Pointer) – указатель стека. Он используется для временного хранения адресов и иногда данных. Адресует стек.
Регистр BP (Base Pointer) – указатель базы. Он обеспечивает ссылки на параметры (адрес, данные), передаваемые через стек.
Стек – это линейный список, записи в котором выбираются, вставляются и удаляются с одного конца, называемого вершиной стека. Это обеспечивает доступ к записям по принципу "магазина": последний вошел, первый вышел (LIFO – Last In First Out).
Индексные регистры SI и DI используются для адресации (а также для выполнения операций сложения и вычитания). Регистр SI (Source Index) – индекс источника и регистр DI (Destination Index) – индекс приемника используются в некоторых операциях со строками или символами.
Регистры сегмента: CS, DS, SS, ES.
Сегментом называется область памяти, которая начинается на границе параграфа, т.е. в любой точке, адрес которой кратен 16. Регистр сегмента содержит адрес его начала (базовый адрес). В программе все адреса заложены относительно начала сегмента, и они определяются как смещение (offset) от начала компонента.
Существуют сегменты:
кода – содержит машинные команды; адресуется регистром CS совместно с IP.
данных – содержит данные, т.е. константы, переменные и рабочие области программы; адресуется регистром DS.
стека – содержит передаваемые в МП параметры и адреса возврата в точку вызова МП; адресуется регистром SS совместно с SP.
дополнительных данных; адресуется регистром ES.
Способы адресации и команды микропроцессора
Адреса ячеек памяти. В МП 8086 шина адреса состоит из 20 линий, следовательно он может адресовать 220 байт. Однако размерности регистров, с помощью которых они адресуются, ограничены 16 битами. Поэтому при формировании адреса из двух частей (сегмента и смещения) для его вычисления внутри сегмента используется формула:
EA=AS*16+A0
где AS – адрес начала сегмента (т.е. содержит содержимое одного из регистров CS, SS, DS, ES)
А0 – смещение относительно начала сегмента (содержимое регистра IP, SP или смещение адреса переменной, расположенной в сегменте данных).
Для записи адреса используется форма AS:A0 например, запись 400:20 определяет следующий логический адрес:
EA=400L*16+20h=4000L+20h=4020h
Это равнозначно 401:10, 402:0 и т.д.
Т.к. в программах начальный адрес сегмента всегда определяется содержимым одного из сегментных регистров, то в некоторых случаях адреса записываются в виде, например, DS:10. в этом случае адрес составляет текущее значение регистра сегмента данных и смещение в 10h байт от начала сегмента. В случае косвенной адресации возможна запись адреса, например, в виде SS:BP. Т.е. содержимое SS определяет компоненту AS, регистре BP – компоненту А0 адреса). Если при определении адреса в программе используется только часть А0, с AS остаётся неизменной, то адрес называется ближним (near address), если используется и А0 и AS, то адрес называется дальним (far address).
В MS-DOS адресное пространство памяти имеет несколько выделенных областей. Это вектора прерываний (начинаются с 0:0, длиной 1 Кбайт), системная область (начинается с 40:0), область видеопамяти (графическая с А000:0, текстовая с В000:0).
Команды микропроцессора
Программа представляет собой набор байтов, воспринимаемых МП как коды той или иной команды вместе с соответствующими данными для этой команды. Для упрощения программирования используется мнемоническая запись команд МП (обычно в виде сокращения английских слов.)
Исходя из логики их выполнения команд разбиты на следующие группы:
- Пересылки данных;
- Арифметические;
- Сдвига;
- Логические;
- Передачи управления;
- Ввода/вывода;
- Работы со строками;
- Дополнительные.
Способы адресации
Под адресацией данных в МП подразумеваются способы описания соответствующих адресов хранения операндов, которые можно применять в командах.
Основные способы описания операндов:
- Операнды-регистры
- Непосредственные операнды
- Операнды в памяти
Регистровая адресация. Операнды (источники и приемники) – это внутренние регистры МП: AX, BX, CX, DX, SP, BP, SI, DI, а в операциях пересылки – дополнительные сегментные регистры. Пример: MOV AH, BH.
Непосредственная адресация. Операнды – это константы, непосредственно задаваемые в команде МП (байты, слова, двойные слова). Пример: MOV AH, –2.
Адресация ячеек памяти. При вычислении адреса в памяти используются две составляющие – сегмент и смещение относительно его начала. Пример: MOV W1, 31h.
При прямой адресации в команде указывается то смещение, которое соответствует размещению в памяти соответствующего операнда. Обычно считается, что операнды находятся в сегменте данных DS. Прямая адресация используется, когда явно известен адрес операнда, например, при работе с системными областями памяти.
При косвенной адресации смещение соответствующего операнда в сегменте содержится в одном из регистров МП. Пример: MOV [BX], AL. Косвенная адресация позволяет легко организовывать доступ к сложным элементам данных, например, для обеспечения доступа к массиву данных. Для обозначения косвенной адресации название регистра заключают в квадратные скобки (BX – регистровая адресация, а [BX] – косвенная). Обычно в качестве регистра косвенной адресации используются [BX], [SI], [DI], [BP]. Для [BX], [SI], [DI] неявно подразумевается сегмент DS, а для [BP] – сегмент SS.
Косвенная адресация по базе означает, что исполнительный адрес вычисляется как сумма содержимого соответствующего регистра и некоторой константы. Этот способ адресации используется для доступа к полям структуры, начальный адрес которой задается в регистре, а смещение соответствующего поля – константой, записанной непосредственно в команде (используются базовые регистры [BX], [BP] с соответствующими сегментами DS, SS).
Прямая индексная адресация эквивалентна косвенной по базе. При этом используются регистры SI, DI и соответствующий DS сегмент. Примеры:
MOV X3[DI], 0 (то же самое: MOV [X3+DI], 0);
MOV X3[BX][DX+2], AH (Х3 – адрес массива).
Адресация по базе с индексированием. В этом случае исполнительный адрес определяется как сумма трех составляющих: содержимого двух регистров и константы, задаваемой непосредственно в команде. База – ВХ, BP, Индекс – SI, DI.
[BX+SI], [BX+DI] – с сегментом DS.
[BP+SI], [BP+DI] – с сегментом SS.
В общем случае при использовании косвенной адресации исполнительный адрес можно представить как EA = [регистр базы] + [индексный регистр] + константа. Любая из этих компонент может отсутствовать.
Команды пересылки данных имеют общий формат с двумя операндами – источником и приемником: MOV <приемник>, <источник>
Примеры:
MOV AH, BH
MOV AH, BX
MOV AX, -2
MOV DL, B1 , где В1 – адрес ячейки
Команда XCHG <оп.1>, <оп.2> – обмен операндов используется для любых РОН и переменных в памяти, кроме 2-х ячеек памяти.
Примеры арифметических команд
ADD <приемник>, <источник>
ADC <приемник>, <источник>
INC <приемник>
SUB <приемник>, <источник>
SBB <приемник>, <источник>
DEC <приемник>
MUL <источник>
IMUL <источник>
DIV <источник>
IDIV <источник>
Примеры команд сдвига
SAL <операнд>, <величина>
SAR <операнд>, <величина>
SHL <операнд>, <величина>
SHR <операнд>, <величина>
Примеры логических команд
AND
OR
XOR
NOT
Примеры команд передачи управления
перехода JMP, JZ, JNZ, JCXZ;
цикла LOOP;
вызова подпрограммы и возврата из нее CALL, RET;
вызова прерывания и возврата из него INT, IRET.
Примеры дополнительных команд
работы со стеком: PUSH, POP;
установки и очистки флагов STC, CLC;
холостого хода NOP.
Примеры команд ввода/вывода
IN ..<аккумулятор>, <адрес>
OUT..<адрес>, <аккумулятор>
Примеры команд работы со строками
MOVS
CMPS
OUTS