Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
Архитектура информационных систем
АРХИТЕКТУРА ИНФОРМАЦИОННЫХ СИСТЕМ
1. Архитектура фон Неймана
Архитектура фон Неймана — широко известный принцип совместного хранения программ и данных в памяти компьютера. Вычислительные системы такого рода часто обозначают термином «машина фон Неймана», однако соответствие этих понятий не всегда однозначно. В общем случае, когда говорят об архитектуре фон Неймана, подразумевают физическое отделение процессорного модуля от устройств хранения программ и данных.
Принципы фон Неймана:
Принцип двоичного кодирования
Согласно этому принципу, вся информация, поступающая в ЭВМ, кодируется с помощью двоичных сигналов (двоичных цифр, битов) и разделяется на единицы, называемые словами.
Принцип однородности памяти
Программы и данные хранятся в одной и той же памяти. Поэтому ЭВМ не различает, что хранится в данной ячейке памяти — число, текст или команда. Над командами можно выполнять такие же действия, как и над данными.
Принцип адресуемости памяти
Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка. Отсюда следует возможность давать имена областям памяти, так, чтобы к хранящимся в них значениям можно было бы впоследствии обращаться или менять их в процессе выполнения программы с использованием присвоенных имен.
Принцип последовательного программного управления
Предполагает, что программа состоит из набора команд, которые выполняются процессором автоматически друг за другом в определенной последовательности.
Принцип последовательного программного управления
Предполагает, что программа состоит из набора команд, которые выполняются процессором автоматически друг за другом в определенной последовательности.
Программная модель микропроцессора.
Программная модель микропроцессора, которая содержит 32 регистра в той или иной мере доступных для использования программистом. Данные регистры можно разделить на две большие группы:
- 16 пользовательских регистров;
- 16 системных регистров.
В программах на языке ассемблера регистры используются очень интенсивно. Большинство регистров имеют определенное функциональное назначение.
Пользовательские регистры
Как следует из названия, пользовательскими регистры называются потому, что программист может использовать их при написании своих программ. К этим регистрам относятся (рис. 1):
- восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов (их еще называют регистрами общего назначения (РОН)):
- eax/ax/ah/al;
- ebx/bx/bh/bl;
- edx/dx/dh/dl;
- ecx/cx/ch/cl;
- ebp/bp;
- esi/si;
- edi/di;
- esp/sp.
- шесть регистров сегментов: cs, ds, ss, es, fs, gs;
- регистры состояния и управления:
- регистр флагов eflags/flags;
- регистр указателя команды eip/ip.
Регистры общего назначения
- eax/ax/ah/al (Accumulator register) — аккумулятор.
Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно; - ebx/bx/bh/bl (Base register) — базовый регистр.
Применяется для хранения базового адреса некоторого объекта в памяти; - ecx/cx/ch/cl (Count register) — регистр-счетчик.
Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды. К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра ecx/cx; - edx/dx/dh/dl (Data register) — регистр данных.
Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно. Следующие два регистра используются для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:
- esi/si (Source Index register) — индекс источника.
Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике; - edi/di (Destination Index register) — индекс приемника (получателя).
Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике. В архитектуре микропроцессора на программно-аппаратном уровне поддерживается такая структура данных, как стек. Для работы со стеком в системе команд микропроцессора есть специальные команды, а в программной модели микропроцессора для этого существуют специальные регистры:
- esp/sp (Stack Pointer register) — регистр указателя стека.
Содержит указатель вершины стека в текущем сегменте стека. - ebp/bp (Base Pointer register) — регистр указателя базы кадра стека.
Предназначен для организации произвольного доступа к данным внутри стека.
Сегментные регистры
Микропроцессор поддерживает следующие типы сегментов:
- Сегмент кода. Содержит команды программы.
Для доступа к этому сегменту служит регистр cs (code segment register) — сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора). - Сегмент данных. Содержит обрабатываемые программой данные.
Для доступа к этому сегменту служит регистр ds (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей программы. - Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком.
Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) — сегментный регистр стека, содержащий адрес сегмента стека. - Дополнительный сегмент данных.
Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).
Таблица 1. Флаги состояния
Мнемоника флага
| Флаг
| Номер бита в eflags
| Содержание и назначение
| cf
| Флаг переноса (Carry Flag)
|
| 1 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда; 0 — переноса не было
| pf
| Флаг паритета (Parity Flag)
|
| 1 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц; 0 — 8 младших разрядов результата содержат нечетное число единиц
| af
| Вспомогательный флаг переноса (Auxiliary carry Flag)
|
| Только для команд работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата: 1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде; 0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было
| zf
| Флаг нуля (Zero Flag)
|
| 1 — результат нулевой; 0 — результат ненулевой
| sf
| Флаг знака (Sign Flag)
|
| Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно): 1 — старший бит результата равен 1; 0 — старший бит результата равен 0
| of
| Флаг переполнения (Overflow Flag)
|
| Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях: 1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно); 0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата
| iopl
| Уровень Привилегий ввода-вывода (Input/Output Privilege Level)
| 12, 13
| Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи
| nt
| флажок вложенности задачи (Nested Task)
|
| Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую
|
Таблица 2. Системные флаги
Мнемоника флага
| Флаг
| Номер бита в eflags
| Содержание и назначение
| tf
| Флаг трассировки (Trace Flag)
|
| Предназначен для организации пошаговой работы микропроцессора. 1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. Может использоваться при отладке программ, в частности отладчиками; 0 — обычная работа
| if
| Флагпрерывания (Interrupt enable Flag)
|
| Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR). 1 — аппаратные прерывания разрешены; 0 — аппаратные прерывания запрещены
| rf
| Флаг возобновления (Resume Flag)
|
| Используется при обработке прерываний от регистров отладки.
| vm
| Флаг виртуального (Virtual 8086 Mode)
|
| Признак работы микропроцессора в режиме виртуального 8086. 1 — процессор работает в режиме виртуального 8086; 0 — процессор работает в реальном или защищенном режиме
| ac
| Флаг контроля выравнивания (Alignment Check)
|
| Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом am в системном регистре cr0. К примеру, Pentium разрешает размещать команды и данные с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию
|
eip/ip (Instraction Pointer register) — регистр -указателькоманд. Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.
Регистры системных адресов
Эти регистры еще называют регистрами управления памятью. Они предназначены для защиты программ и данных в мультизадачном режиме работы микропроцессора.
При работе в защищенном режиме микропроцессора адресное пространство делится на:
- глобальное — общее для всех задач;
- локальное — отдельное для каждой задачи.
Этим разделением и объясняется присутствие в архитектуре микропроцессора следующих системных регистров:
- регистра таблицы глобальных дескрипторов gdtr (Global Descriptor Table Register) имеющего размер 48 бит и содержащего 32-битовый (биты 16—47) базовый адрес глобальной дескрипторной таблицы GDT и 16-битовое (биты 0—15) значение предела, представляющее собой размер в байтах таблицы GDT;
- регистра таблицы локальных дескрипторов ldtr (Local Descriptor Table Register) имеющего размер 16 бит и содержащего так называемый селектор дескриптора локальной дескрипторной таблицы LDT. Этот селектор является указателем в таблице GDT, который и описывает сегмент, содержащий локальную дескрипторную таблицу LDT;
- регистра таблицы дескрипторов прерываний idtr (Interrupt Descriptor Table Register) имеющего размер 48 бит и содержащего 32-битовый (биты 16–47) базовый адрес дескрипторной таблицы прерываний IDT и 16-битовое (биты 0—15) значение предела, представляющее собой размер в байтах таблицы IDT;
- 16-битового регистра задачи tr (Task Register), который подобно регистру ldtr, содержит селектор, то есть указатель на дескриптор в таблице GDT. Этот дескриптор описывает текущий сегмент состояния задачи (TSS — Task Segment Status). Этот сегмент создается для каждой задачи в системе, имеет жестко регламентированную структуру и содержит контекст (текущее состояние) задачи. Основное назначение сегментов TSS — сохранять текущее состояние задачи в момент переключения на другую задачу.
Регистры отладки
Это очень интересная группа регистров, предназначенных для аппаратной отладки. Средства аппаратной отладки впервые появились в микропроцессоре i486. Аппаратно микропроцессор содержит восемь регистров отладки, но реально из них используются только 6.
Регистры dr0, dr1, dr2, dr3 имеют разрядность 32 бит и предназначены для задания линейных адресов четырех точек прерывания. Используемый при этом механизм следующий: любой формируемый текущей программой адрес сравнивается с адресами в регистрах dr0...dr3, и при совпадении генерируется исключение отладки с номером 1.
Регистр dr6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами, которые вызвали возникновение последнего исключения с номером 1.
Перечислим эти биты и их назначение:
- b0 — если этот бит установлен в 1, то последнее исключение (прерывание) возникло в результате достижения контрольной точки, определенной в регистре dr0;
- b1 — аналогично b0, но для контрольной точки в регистре dr1;
- b2 — аналогично b0, но для контрольной точки в регистре dr2;
- b3 — аналогично b0, но для контрольной точки в регистре dr3;
- bd (бит 13) — служит для защиты регистров отладки;
- bs (бит 14) — устанавливается в 1, если исключение 1 было вызвано состоянием флага tf = 1 в регистре eflags;
- bt (бит 15) устанавливается в 1, если исключение 1 было вызвано переключением на задачу с установленным битом ловушки в TSS t = 1.
Все остальные биты в этом регистре заполняются нулями. Обработчик исключения 1 по содержимому dr6 должен определить причину, по которой произошло исключение, и выполнить необходимые действия.
Регистр dr7 называется регистром управления отладкой. В нем для каждого из четырех регистров контрольных точек отладки имеются поля, с помощью которых можно уточнить следующие условия, при которых следует сгенерировать прерывание:
- место регистрации контрольной точки — только в текущей задаче или в любой задаче. Эти биты занимают младшие восемь бит регистра dr7 (по два бита на каждую контрольную точку (фактически точку прерывания), задаваемую регистрами dr0, dr1, dr2, dr3 соответственно).
Первый бит из каждой пары — это так называемое локальное разрешение; его установка говорит о том, что точка прерывания действует если она находится в пределах адресного пространства текущей задачи. Второй бит в каждой паре определяет глобальное разрешение, которое говорит о том, что данная контрольная точка действует в пределах адресных пространств всех задач, находящихся в системе; - тип доступа, по которому инициируется прерывание: только при выборке команды, при записи или при записи/чтении данных. Биты, определяющие подобную природу возникновения прерывания, локализуются в старшей части данного регистра.
Прямая адресация
При прямой адресации исполнительный адрес является составной частью команды (так же, как значения при непосредственной адресации). Микропроцессор 8x86 добавляет этот исполнительный адрес к сдвинутому содержимому регистра сегмента данных DS и получает 20-битовый физический адрес операнда.
Обычно прямая адресация применяется, если операндом служит метка. Например, команда
MOV AX,TABLE
загружает содержимое ячейки памяти TABLE в регистр АХ. На рис. 1 показана схема исполнения этой команды. Обратите внимание на то, что против ожидания микропроцессор 8x86 заполняет данные в памяти в обратном порядке. Старший байт слова следует за младшим байтом, а не предшествует ему. Чтобы усвоить это, запомните, что старшая часть (старшие биты) данных располагается в ячейках памяти со старшими адресами.
Адресация по базе
При адресации по базе Ассемблер вычисляет исполнительный адрес с помощью сложения значения сдвига с содержимым регистров ВХ или ВР.
Регистр ВХ удобно использовать при доступе к структурированным записям данных, расположенным в разных областях памяти. В этом случае базовый адрес записи помещается в базовый регистр ВХ и доступ к ее отдельным элементам осуществляется по их сдвигу относительно базы. А для доступа к разным записям одной и той же структуры достаточно соответствующим образом изменить содержимое базового регистра.
Предположим, например, что требуется прочитать с диска учетные записи для ряда работников. При этом каждая запись содержит табельный номер работника, номер отдела, номер группы, возраст, тарифную ставку и т.д. Если номер отдела хранится в пятом и шестом бантах записи, а начальный адрес записи содержится в регистре ВХ, то команда
MOV AХ,[ВХ]+4
загрузит в регистр АХ номер отдела, в котором служит данный работник (рис. 3). (Сдвиг равен 4, а не 5, потому что первый байт записи имеет номер 0.)
Ассемблер позволяет указывать адресуемые по базе операнды тремя разными способами. Следующие команды эквивалентны:
MOV AХ,[ВР]+4;3то стандартная форма записи,
MOV AХ,4[ВР]; но сдвиг можно указать на первом месте
MOV AХ,[ВР+4]; или внутри скобок
Команды пересылки данных
Мнемоника
| Формат
| Пояснение
| Команды общего назначения
| MOV
| MOV приемник, источник
| Переслать значение
| PUSH
| PUSH источник
| Поместить в стек
| POP
| POP приемник
| Извлечь из стека
| XCHG
| XCHG приемник, источник
| Обменять значения
| XLAT
| XLAT таблица
| Загрузить в AL байт из таблицы
| Команды ввода-вывода
| IN
| IN аккумулятор, порт
| Читать из порта
| OUT
| OUT порт, аккумулятор
| Записать в порт
| Команды пересылки адреса
| LEA
| LEA регистр 16, память 16
| Загрузить исполнительный адрес
| LDS
| LDS регистр 16, память32
| Загрузить в DS:регистр16 полный адрес
| LES
| LES регистр 16, память32
| Загрузить в ES:регистр16 полный адрес
| Команды пересылки флагов
| LAHF
| LAHF
| Загрузить флаги в АН
| SAHF
| SAHF
| Установить флаги из АН
| PUSHF
| PUSHF
| Поместить флаги в стек
| POPF
| POPF
| Извлечь флаги из стека
|
Арифметические команды
Мнемоника
| Формат
| Комментарий
| Команды сложения
| ADD
| ADD приемник, источник
| Сложить
| ADC
| ADC приемник, источник
| Сложить, добавить перенос
| ААА
| ААА
| Скорректировать сложение для таблицы ASCII
| DAA
| DAA
| Скорректировать сложение для двоично-десятичных чисел
| INC
| INC приемник
| Увеличить на единицу
| Команды вычитания
| SUB
| SUB приемник, источник
| Вычесть
| SBB
| SBB приемник, источник
| Вычесть с заемом
| AAS
| AAS
| Скорректировать вычитание для таблицы ASCII
| DAS
| DAS
| Скорректировать вычитание для двоично-десятичных чисел
| DEC
| DEC приемник
| Уменьшить на единицу
| NEG
| NEG приемник
| Обратить знак
| СМР
| СМР приемник, источник
| Сравнить
| Команды умножения
| MUL
| MUL источник
| Умножить без знака
| IMUL
| IMUL источник
| Умножить со знаком
| AАМ
| ААМ
| Скорректировать умножение для таблицы ASCII
| Команды деления
| DIV
| DIV источник
| Делить без знака
| IDIV
| IDIV источник
| Делить со знаком
| AAD
| AAD
| Скорректировать деление для таблицы ASCII
| Команды расширения знака
| CBW
| CBW
| Преобразовать байт в слово
| CWD
| CWD
| Преобразовать слово в двойное слово
|
Их большое количество, подробнее на сайте: http://www.hardline.ru/selfteachers/Info/Programming/!TurboPascal/gl12/gl12_4.html
Безусловные переходы
Безусловный переход — это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом (меткой), регистром или ячейкой памяти, содержащей адрес. Существуют также «дальние» переходы — между сегментами, однако здесь мы их рассматривать не будем. Примеры безусловных переходов:
jmp metka ;Переход на метку jmp bx ;Переход по адресу в BX jmp word [ bx ] ;Переход по адресу, содержащемуся в памяти по адресу в BX
Условные переходы
Все команды условных переходов приведены в таблице:
Команда
| Переход, если
| Условие перехода
| JZ/JE
| нуль или равно
| ZF=1
| JNZ/JNE
| не нуль или не равно
| ZF=0
| JC/JNAE/JB
| есть переполнение/не выше и не равно/ниже
| CF=1
| JNC/JAE/JNB
| нет переполнения/выше или равно/не ниже
| CF=0
| JP
| число единичных бит чётное
| PF=1
| JNP
| число единичных бит нечётное
| PF=0
| JS
| знак равен 1
| SF=1
| JNS
| знак равен 0
| SF=0
| JO
| есть переполнение
| OF=1
| JNO
| нет переполнения
| OF=0
| JA/JNBE
| выше/не ниже и не равно
| CF=0 и ZF=0
| JNA/JBE
| не выше/ниже или равно
| CF=1 или ZF=1
| JG/JNLE
| больше/не меньше и не равно
| ZF=0 и SF=OF
| JGE/JNL
| больше или равно/не меньше
| SF=OF
| JL/JNGE
| меньше/не больше и не равно
| SF≠OF
| JLE/JNG
| меньше или равно/не больше
| ZF=1 или SF≠OF
| JCXZ
| содержимое CX равно нулю
| CX=0
| http://asmworld.ru/uchebnyj-kurs/016-uslovnye-i-bezuslovnye-perexody/
АРХИТЕКТУРА ИНФОРМАЦИОННЫХ СИСТЕМ
1. Архитектура фон Неймана
Архитектура фон Неймана — широко известный принцип совместного хранения программ и данных в памяти компьютера. Вычислительные системы такого рода часто обозначают термином «машина фон Неймана», однако соответствие этих понятий не всегда однозначно. В общем случае, когда говорят об архитектуре фон Неймана, подразумевают физическое отделение процессорного модуля от устройств хранения программ и данных.
Принципы фон Неймана:
|