Архитектура компьютера
Структурные схемы компьютеров мало чем отличаются у разных моделей компьютеров. У всех компьютеров есть оперативная память, процессор, внешние устройства. Различными являются способы, средства и используемые ресурсы, с помощью которых компьютер функционирует как единый механизм. Совокупность функциональных программно-управляемых свойств компьютера называют архитектурой.
Архитектура ЭВМ – это абстрактное представление ЭВМ, которое отражает структурную, схемотехническую и логическую организацию. Приступить к изучению языка ассемблера любого компьютера имеет смысл только после выяснения того, какая часть из вышеперечисленных аспектов архитектуры оставлена видимой и доступной для программирования. Это так называемая программная модель компьютера. В приложении 1 приведена программная модель микропроцессора Intel (Pentium III) [1]. Как видно из приведенной модели, ее основу составляют регистры общего назначения, состояния и ряд других. В разных моделях компьютеров одной и той же фирмы-производителя количество и разрядность регистров могут существенно изменяться. Но в качестве базовой модели для языка программирования микропроцессоров Intel используется 14-регистровая система, на которой остановимся далее подробнее.
Универсальные регистрыAX, BX, CX, DX имеют разрядность 16 бит (2 байта) и могут использоваться для временного хранения любых данных, при этом можно работать с каждым регистром целиком, а можно отдельно с каждым его байтом. Старшие байты РОН имеют имена AH, BH, DH, CH, а младшие – AL, BL, DL, CL. Регистры AL, AH образуют соответственно младший и старший байты условного регистра AX.
Кроме того, каждый из РОН может использоваться как специальный регистр при выполнении некоторых команд программы:
регистрАХ, аккумулятор, используется при умножении и делении слов, в операциях ввода-вывода и в некоторых операциях над строками;
регистр AL используется при выполнении аналогичных операций над байтами, а также при преобразовании десятичных чисел и выполнении над ними арифметических операций;
регистр AHиспользуется при умножении и делении байтов;
регистр BX, базовый регистр, часто используется при адресации данных в памяти;
регистр CX, счетчик, используется как счетчик числа повторений цикла и в качестве номера позиции элемента данных при операциях над строками. Регистр CL используется как счетчик при операциях сдвига и циклического сдвига на несколько битов;
регистр DX, регистр данных, используется при умножении и делении слов. Кроме этого используется в операциях ввода-вывода как номер порта.
В микропроцессорах Intel программы и данные хранятся в отдельных областях памяти - сегментах, с объемом до 64 КБ (килобайт). Одновременно микропроцессор может иметь дело с 4 сегментами, начальные адреса которых содержатся в сегментных регистрахCS, DS, SS, ES. Эти регистры выполняют следующие функции:
- регистр сегмента команд CS указывает на сегмент, содержащий текущую исполняемую программу. Для вычисления адреса следующей подлежащей исполнению команды процессор складывает значение CS умноженное на 16 с указателем команд IP;
- регистр сегмента стека SS указывает на текущий сегмент стека - области памяти предназначенной для временного хранения данных и адресов;
- регистр сегмента данных DS указывает на текущий сегмент данных, который обычно содержит используемые в программе переменные;
- регистр дополнительного сегмента ES указывает на текущий дополнительный сегмент, который используется при выполнении операций над строками.
Регистры смещенийIP, SP,BP, SI, DI используются для хранения относительных адресов ячеек памяти внутри сегментов (иначе говоря, смещений относительно начала сегментов):
- регистр IP хранит смещение адреса текущей команды программы;
- регистр SP указывает на вершину стека – смещение относительно начала стека;
- в регистр BP записывается начальный адрес поля памяти, непосредственно отведенного под стек;
- регистры SI и DI предназначены для хранения адресов индексов источника и приемника данных при операциях над строками и другими структурами данных.
Регистр флагов FL представляет собой 16-битовый регистр, где фиксируется информация о текущем состоянии процессора.
15 0
OF | DF | IF | TF | SF | ZF | AF | PF | CF |
Рисунок 1 – Регистр флагов
Флаг OF называется флагом переполнения и OF=1 свидетельствует о наличии ошибки в операциях над числами со знаком.
Флаг направления DF используется в командах работы со строками. При DF=1 регистр индекса, используемый в командах работы со строками, увеличивается на 1 при каждом следующем выполнении команды, при DF=0 – регистр индекса на 1 уменьшается.
Флаг прерывания IF обычно он устанавливается в 1 и такое его значение позволяет исполняемой программе пользователя реагировать на прерывания. Однако, когда вызывается программа обработки прерывания, флаг IF устанавливается в 0, чтобы никакие другие прерывания не могли помешать текущей обработке прерывания.
Флаг TF называется флагом трассировки, при его значении, равном 1, разрешается выполнение программы по шагам.
Флаг знака SF устанавливается в 1, если в результате выполнения операции над числами со знаком, получается отрицательное число.
Флаг нуля ZF устанавливается в 1, если результатом операции является нулевое значение.
Флаг вспомогательного переноса АF используется в двоично-десятичной арифметике. Этот флаг устанавливается в 1, если результат такой операции не является десятичной цифрой.
Флаг четности РF устанавливается в 1, если результат операции имеет четное количество битов, равных 1, в двоичном представлении результата.
Флаг СF называется флагом переноса и в него заносится перенос (или заем) из знакового (старшего) разряда числа.
Нужно уяснить, что не все команды программы на Ассемблере устанавливают в 0 или в 1 флаги. Причем, выполнение тех или иных команд связано с установкой конкретных флагов. Обратите внимание на это обстоятельство при изучении команд ассемблера.