2.11M
Категория: ПрограммированиеПрограммирование

Алгоритм работы процессора

1.

Алгоритм работы процессора
Выбор команды
Дешифрация
Запрос операндов
Выполнение
команды с
получением
результата и/или
формированием
признаков
• Запись результата
• Увеличение
(изменение)
счетчика команд

2.

Формат команды процессора

N (1,2,…) байт (в зависимости от архитектуры)
Числовая комбинация,
определяющая
действия процессора
Данные для команды
или указание, откуда
взять данные для
команды

3.

4.

Команды микропроцессора
1) Как правило, ассемблерная строка однозначно соответствует одной
процессорной команде.
2) Команда языка Ассемблера имеет следующую структуру:
Меткаl: КОП Оп1,Оп2,… ;
пример команды на языке ассемблера
L1: mov r1, #12A9h ; Загрузка регистра константой
Данный оператор содержит команду пересылки, которая загружает константу 12A9h в
регистр процессора r1. Константа задана программистом в виде шестнадцатиричного
числа.
Оператор включает в свой состав следующие поля:
Метка — это символическое обозначение адреса.
В мнемонике команды, приведенной выше, метка обозначает адрес, начиная с которого
байты данной команды будут расположены в ОЗУ после загрузки программы в память.
Имя метки часто используется как операнд в командах переходов.
КОП — мнемоническое обозначение кода операции, выполняемой данной командой,
например mov — переслать
Оп1, Оп2,… — символические обозначения операндов, обычно они разделяются
запятыми (хотя в некоторых Ассемблерах для разделения операндов используется пробел).

5.

Количество операндов в команде может быть различным, в большинстве современных
процессоров — от 0 до 3. Если операндов больше, чем один, некоторые из них являются
"источниками", а некоторые другие — "приемниками".
Например, команда сложения
add sum,op1,op2
содержит указания на два операнда-приемника (слагаемые) — op1 и op2, а также указание
на элемент данных (sum), куда команде следует поместить результат.
Количество операндов, которые программист
может указать в команде, определено отдельно для каждой
команды конкретного процессора его разработчиками. Для
многих команд делают допустимым несколько форматов.
В Ассемблерах процессоров фирмы Intel, по большей части,
операнды-источники записываются левее операндов-приемников.
В Ассемблерах других фирм это может быть наоборот. В
качестве операнда можно использовать метку, в этом случае метка будет
обозначать адрес, с которого располагается в памяти соответствующий
операнд.
Хотя каждый процессор имеет свой Ассемблер (соответствующий его системе команд),
многие мнемонические обозначения в разных Ассемблерах одинаковы для одинаковых
операций.
Этот факт сильно облегчает изучение следующего Ассемблера (и процессора), после
того, как хотя бы один уже изучен.

6.

7.

Набор команд микропроцессора

8.

9.

Например

10.

11.

12.

Количество команд для разных типов ЭВМ колеблется от малых десятков до
сотен. В таком множестве разобраться достаточно трудно, поэтому для
рассмотрения разобьем все команды на группы (проклассифицируем).
В разных книгах эта классификация тоже сделана по-разному. Выделяют от 3 до
более 10 групп.

13.

14.

15.

Постоянно происходит технический прогресс и особенно разработка компьютеров не стоит на
месте, совсем недавно лучшими были 8 битные процессоры, а последнее время речь идёт
уже о 64 битных.
Битность процессора напрямую связана с битностью регистров и их аббревиатурой, поэтому:
AX, CX, SP, IP, ... - характеризуют 16 битные регистры EAX, ECX,
ESP, EIP, ... - 32 битные (добавляется буква E от англ. Extended "расширенный") RAX, RCX, RSP, RIP, ... - 64 битные (добавляется
буква R)

16.

Регистр eax является 32-х разрядным. Если представить его значение в двоичной системе
счисления как последовательность из 32-х нулей и единиц, то, если взять правые 16 бит
подряд, это и будет младшая часть регистра eax, которая будет определять значение
регистра ax. Левые 16 бит подряд - это старшая часть регистра eax. Аналогично, 16-ти
разрядный регистр ax делится на регистр ah и al, которые соответственно являются
старшей и младшей частями регистра ax. Также регистр ebx (ecx, edx тоже) например
делится на старшую часть и младшую часть.

17.

18.

По назначению регистры различаются на:
аккумулятор — используется для хранения промежуточных результатов
арифметических и логических операций и инструкций ввода-вывода;
флаговые — хранят признаки результатов арифметических и логических
операций;
общего назначения — хранят операнды арифметических и логических
выражений, индексы и адреса;
индексные — хранят индексы исходных и целевых элементов массива;
указательные — хранят указатели на специальные области памяти (указатель
текущей операции, указатель базы, указатель стека);
сегментные — хранят адреса и селекторы сегментов памяти;
управляющие — хранят информацию, управляющую состоянием процессора, а
также адреса системных таблиц.
Начиная с 80386 процессоры Intel предоставляют 16 основных
регистров для пользовательских программ плюс еще 11 регистров для
работы с мультимедийными приложениями (MMX(Multimedia Extension))
и числами с плавающей запятой (FPU/NPX (Float Point Unit / Numerical
Processor Extension)). Все команды так или иначе изменяют значения
регистров, и всегда быстрее и удобнее обращаться к регистру, чем к
памяти.

19.

Регистры общего назначения.
32-битные регистры EAX (аккумулятор), EBX (база), ECX
(счетчик), EDX (регистр данных) могут использоваться без
ограничений для любых целей – временного хранения данных,
аргументов или результатов различных операций.
регистр AX — умножение, деление, обмен с
устройствами ввода/вывода (команды ввода и
вывода);
регистр BX — базовый регистр в вычислениях
адреса;
регистр CX — счетчик циклов;
регистр DX — определение адреса
ввода/вывода.
Для регистров данных существует
возможность раздельного использования
обоих байтов (например, для регистра AX они
имеют обозначения AL – младший байт и AH
— старший байт).

20.

Примеры команд с регистрами
Во многих процессорах выделяется специальный регистр,
называемый аккумулятором (то есть накопителем). При этом, как
правило, только этот регистр-аккумулятор может участвовать во всех
операциях, только через него может производиться взаимодействие с
устройствами ввода/вывода. Иногда в него же помещается результат
любой выполненной команды (в этом случае говорят даже об
"аккумуляторной" архитектуре процессора).
Команды пересылки и загрузки данных:
- MOV R1,R2 – пересылка из регистра в регистр;
- LD AX B(D) – пересылка из ячейки памяти, адрес которой
записан в регистровой паре ВE (DE), в аккумулятор;
Команды сложения :
- ADD R – сложение содержимого аккумулятора с содержимым
регистра R (A) (A) + (R);
- ADI_B2 – сложение содержимого аккумулятора со вторым байтом
команды (A) (A) + B2;
- ADC R – сложение содержимого аккумулятора с содержимым
регистра R и признаком (С) (А) (A) + (R) + (С);

21.

Остальные четыре регистра – ESI (индекс источника), EDI (индекс
приемника), EBP (указатель базы), ESP (указатель стека) - имеют более
конкретное назначение и применяются для хранения всевозможных временных
переменных.
Регистры ESI и EDI необходимы в строковых операциях, EBP и ESP –
при работе со стеком.

22.

В FLAGS каждый бит является флагом, то есть устанавливается в 1 при
определенных условиях или установка его в 1 изменяет поведение
процессора.
Все флаги, расположенные в старшем слове регистра, имеют отношение к
управлению защищенным режимом, поэтому будем рассматривать только
регистр FLAGS.

23.

Регистр флагов
•CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в
приемнике и произошел перенос старшего бита или если требуется заем
•PF – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды
содержит четное число битов, равных 1, и в 0, если нечетное.
•AF – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате
предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг
используется автоматически командами двоично-десятичной коррекции.
•ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль.
•SF – флаг знака. Он всегда равен старшему биту результата.
•TF – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищенный
режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды
управление временно передается отладчику (вызывается прерывание 1 – описание команды INT).
•IF – флаг прерываний. Сброс этого флага приводит к тому, что процессор перестает обрабатывать
прерывания от внешних устройств (описание команды INT). Обычно его сбрасывают на короткое
время для выполнения критических участков кода.
•DF – флаг направления. Он контролирует поведения команд обработки строк: когда он установлен в
1, строки обрабатываются в сторону уменьшения адресов, когда DF=0 – наоборот.
•OF – флаг переполнения. Он устанавливается в 1, если результат предыдущей арифметической
операции над числами со знаком выходит за допустимые для них пределы. Например, если при
сложении двух положительных чисел получается число со старшим битом, равным единице, то есть
отрицательное, и наоборот.
English     Русский Правила