рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

К теме о регистрах 2.3 Регистры состояния и управления

К теме о регистрах 2.3 Регистры состояния и управления - Лекция, раздел Программирование, Основы алгоритмизации и программирования В Процессор Включены Два Регистра, Постоянно Содержащие Информацию О Состояни...

В процессор включены два регистра, постоянно содержащие информацию о состоянии как самого процессора, так и программы, команды которой он в данный момент обрабатывает:

регистр-указатель команд EIP/IP;

регистр флагов ЕFLAGS/FLAGS.

С помощью этих регистров можно также ограниченным образом управлять состоянием процессора.

Регистр-указатель команд (Instruction Pointer register) EIP/IP имеет разрядность 32(16) бита и содержит смещение следующей подлежащей выполнению команды относительно содержимого регистра сегмента кода CS в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра EIP/IP.

Разрядность регистра флагов (flag register) EFLAGS/FLAGS равна 32(16) битам. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть регистра EFLAGS/FLAGS полностью аналогична регистру FLAGS процессора i8086.

Исходя из особенностей использования, флаги регистра EFLAGS/FLAGS можно разделить на три группы.

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

Флаг переноса (carry flag) CF:

1 — арифметическая операция произвела перенос из старшего бита результата, старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда;

0 — переноса не было.

Флаг четности (parity flag) PF:

1—8 младших разрядов (этот флаг только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;

0 — 8 младших разрядов результата содержат нечетное число единиц.

Вспомогательный флаг переноса (auxiliary carry flag) AF применяется только для команд, работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата:

1 — в результате операции сложения был произведен перенос из разряда 3в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;

0 — переносов и заемов в третий разряд (из третьего разряда) младшей тетрады результата не было.

Флаг нуля (zero flag) ZF:

1 — результат нулевой;

0 — результат ненулевой.

Флаг знака (sign flag) SF отражает состояние старшего бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов соответственно):

1 — старший бит результата равен 1;

0 — старший бит результата равен 0.

Флаг переполнения (overflow flag) OF используется для фиксации факта потери значащего бита при арифметических операциях:

1 — в результате операции происходит перенос в старший знаковый бит результата или заем из старшего знакового бита результата (биты 7,15 или 31 для 8-, 16- или 32-разрядных операндов соответственно);

0 — в результате операции не происходит переноса в старший знаковый бит результата или заема из старшего знакового бита результата.

Уровень привилегированности ввода-вывода (Input/Output privilege level) IOPL используется в защищенном режиме работы процессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.

Флаг вложенности задачи (nested task) NT используется в защищенном режиме работы процессора для фиксации того факта, что одна задача вложена в другую.

Во вторую группу флагов (группа флагов управления) регистра EFLAGS/FLAGS входит всего один флаг направления (directory flag) DF. Он находится в десятом бите регистра ЕFLAGS и используется цепочечными командами. Значение флага DF определяет направление поэлементной обработки в этих операциях: от начала строки к концу (DF = 0) либо, наоборот, от конца строки к ее началу (DF =1). Для работы с флагом DF существуют специальные команды CLD (снять флаг DF) и STD (установить флаг DF). Применение этих команд позволяет привести флаг DF в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками.

В третью группу флагов регистра EFLAGS/FLAGS входит 8 системных флагов, управляющих вводом-выводом, маскируемыми прерываниями, отладкой, переключением между задачами и режимом виртуального процессора 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это ведет к прерыванию работы программы. Далее перечислены системные флаги и их назначение.

Флаг трассировки (trace flag) TF предназначен для организации пошаговой работы процессора:

1 — процессор генерирует прерывание с номером 1 после выполнения каждой машинной команды (может использоваться при отладке программ,в частности отладчиками);

0 — обычная работа.

Флаг прерывания (interrupt enable flag) IF предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR):

1 — аппаратные прерывания разрешены;

0 — аппаратные прерывания запрещены.

Флаг возобновления (resume flag) RF используется при обработке прерываний от регистров отладки.

Флаг режима виртуального процессора 8086 (virtual 8086 mode) VM является признаком работы процессора в режиме виртуального 8086:

1 — процессор работает в режиме виртуального процессора 8086;

0 — процессор работает в реальном или защищенном режиме.

Флаг контроля выравнивания (alignment check) AC предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом AM в системном регистре CRO. К примеру, Pentium разрешает размещать команды и данные начиная с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию.

Флаг виртуального прерывания (virtual interrupt flag) VIF, появившийся в процессоре Pentium, при определенных условиях (одно из которых — работа процессора в v-режиме) является аналогом флага IF. Флаг VIF используется совместно с флагом VIР.

Флаг отложенного виртуального прерывания (virtual interrupt pending flag) VIP, появившийся в процессоре Pentium, устанавливается в 1 для индикации отложенного прерывания. Используется при работе в v-режиме совместно с флагом VIF.

Флаг идентификации (identification flag) ID используется для того, чтобы показать факт поддержки процессором инструкции CPUID. Если программа может установить или сбросить этот флаг, это означает, что данная модель процессора поддерживает инструкцию CPUID.

 

2.2. Целые числа

Если вы уже знакомы с каким-либо алгоритмическим языком (что ОЧЕНЬ желательно), то вы знаете, что, например, в C/C++ целые величины могут иметь тип char или int. Каждое из этих данных может быть знаковое (т.е. положительное или отрицательное) — signed или беззнаковое (только положительное!) — unsigned, а тип int еще может быть коротким — short или длинным — long. Все эти типы данных имеют определенную длину ячейки, а отсюда и допустимый диапазон значений.

Если Вам ближе алгоритмический язык Pascal, то идеологически здесь все то же самое, только описываются данные немного по-другому.

В Ассемблере программист сам решает, какие данные (целые или вещественные) он поместит в ту или иную ячейку. Например, простое арифметическое данное, под которое отведено 32 или 64 бита, может быть как целым, так и вещественным. Поэтому продвинутые программисты часто говорят о коротких или длинных целых, а также о коротких или длинных вещественных числах.

Разберемся вначале с целочисленными данными.

 

2.2.1 Целые числа без знака

Из области допустимых значений для платформы Winl6, целые числа без знака — это ПОЛОЖИТЕЛЬНЫЕ числа (или НОЛЬ) и они могут занимать 8, 16 или 32 бита памяти ЭВМ. Считается, что бит 0 — младший бит (для удобства будем считать, что он расположен крайним СПРАВА). Старший бит — 7(15 или 31) — для удобства расположим крайним СЛЕВА. Для БЕЗЗНАКОВЫХ данных все биты считаются информационными.

Информационное поле числа {ОД}
.../16 / 15 / 14 / 13 / 12 / 11 / 10 / 9 / 8 / 7 / 6 / 5 / 4 / 3 / 2 / 1
старший Биты младший

РИС. 2.1. Формат представления для 32-битного БЕЗЗНАКОВОГО числа.

 

ПРИМЕР 2.1.

Пусть имеется десятичное целое число 40000. В каком формате его можно представить? Т.е. сколько ему требуется бит и каково будет его внутреннее (машинное) представление?

Решение. Для начала нужно перевести это число в двоичную систему счисления. Для этого можно воспользоваться табл. или стандартным калькулятором Windows (режим Scientific — научный). Остановимся на калькуляторе. Получаем:

40000d → 1001 1100 0100 0000b → 9C40h

По количеству полученных бит видно, что для хранения такого числа нам понадобится минимум 16 двоичных разрядов. В терминах алгоритмического языка C/C++ это формат unsigned int для платформы Winl6, а для Pascal — это формат word.

Можно это число (с запасом) разместить и в 32-х битах:

40000d → 0000 0000 0000 0000 1001 1100 0100 0000b →0000 9C40h

Обратите внимание на ведущие НУЛИ!!!

Это будут для C/C++ соответственно, форматы: unsigned long, long (Winl6) или unsigned int, int, unsigned long, long (Win32). Для Pascal — это форматы: Longlnt (Winl6) или Integer, Longlnt, LongWord, Cardinal (см. Win32).

2.2.2. Целые числа со знаком

Целые ЗНАКОВЫЕ дан­ные, во-первых, могут быть как ПОЛОЖИТЕЛЬНЫМИ, так и ОТРИЦАТЕЛЬНЫМИ, включая НОЛЬ, и, во-вторых, они по диапазону допустимых значений в два раза мень­ше беззнаковых (для положительных значений). Почему?

Это происходит, потому что НЕ вся область бит отводится под информацию, как было с беззнаковыми данными. Старший бит всегда отводится под знак. Он называется бит S — Signum (знак — лат.):

S = 0 - для ПОЛОЖИТЕЛЬНЫХ чисел;

S = 1 - для ОТРИЦАТЕЛЬНЫХ чисел.

 

S Информационное поле числа {ОД}
.... 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 10
Знак Биты

РИС. 2.2. Формат представления для 32-битного знакового числа.

 

Поэтому под информацию отводится всегда на ОДИН бит МЕНЬШЕ.

А теперь немного отвлечемся на небольшую задачку: что получится, если мы исходное де­сятичное число 12345 лишим последней цифры 5? Получим число 1234. В программировании это называется сдвиг вправо на один десятичный разряд. И наше число получилось в 10 раз мень­ше! Совершенно аналогично происходит и с двоичным числом, если мы его сдвинем на один, но двоичный, разряд вправо. Исходное число уменьшится в 2 раза! Попробуйте сделать это сами, например, было число 111001101b, а стало11100110b. Действительно ли оно уменьши­лось в два раза? Забегая немного вперед, можно сказать, что сдвиги — ОЧЕНЬ важная деталь в программировании вообще, и в Ассемблере в частности.

Если вы поняли эту маленькую задачку, значит, разобрались, почему максимальный диа­пазон для ПОЛОЖИТЕЛЬНЫХ знаковых чисел получается в два раза меньше. Например, для ПОЛОЖИТЕЛЬНОГО знакового данного, которому отведен один байт информации, получается следующее:

0111 1111b → 7Fh → 127d

А как быть с ОТРИЦАТЕЛЬНЫМИ числами? Здесь может быть НЕСКОЛЬКО ва­риантов решений. Ребята из фирмы IBM решили взять за основу представление отрица­тельных чисел в ДОПОЛНИТЕЛЬНОМ коде, суть которого заключается в следующем:

1) Берем МОДУЛЬ отрицательного числа (т.е. число положительное) и по известным Вам алгоритмам переводим dec→hex;

2) Делаем инверсию hex-кода (т.е. нули становятся единицами, а единицы — нулями);

3) К полученному hex-коду добавляем 1.


 

– Конец работы –

Эта тема принадлежит разделу:

Основы алгоритмизации и программирования

Основы алгоритмизации и программирования... Литература В И Юров Ассемблер Учебник для вузов Н И Голубь Искусство программирования на Ассемблере Лекции и упражнения...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: К теме о регистрах 2.3 Регистры состояния и управления

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Организация памяти
Физическая память к которой процессор имеет доступ по шине адреса называется оперативной памятью. Реально ОЗУ организовано как последовательность ячеек, т.е. байтов. Диапазон значений физи

Основное применение организации виртуальной памяти
Сегментация – это механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного вли

Регистры общего назначения
Регистры общего назначения используются в программах для хранения: операндов

Сегментные регистры
Процессоры Intel аппаратно поддерживают сегментную организацию программы. Это означает, что любая программа состоит из трех сегментов: кода, данных и стека. Логически машинные команды в архитектуре

Регистры состояния и управления
В процессор включены два регистра, постоянно содержащие информацию о состоянии как самого процессора, так и программы, команды которой он в данный момент обрабатывает:

Формат команд
Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд

Обработка прерываний
Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполнятся немедленно: сигналы от машинных таймеров, нажатия

Жизненный цикл программы
Процесс разработки программы на ассемблере, включая постановку задачи, получение первых результатов и дальнейшее сопровождение программы, мало чем отличается от традиционного подхода с использовани

Процесс разработки программы
На рис. 6.1 приведена общая схема процесса разработки программы на ассемблере. Название программы соответствует рассмотренному далее примеру программы. На схеме выделено четыре этапа этого процесса

Лекция 6.
1. Синтаксис Ассэмблера Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами. Программа может состоять из одного или нескольких таких блоков-сегмент

Лекция 7.
1. Простые типы данных Ассемблера Любая программа предназначена для обработки некоторой информации, поэтому вопрос о том, какие типы данных языка программирования доступны для использовани

Лекция 8.
1.Структура машинной команды. Способы задания операндов. Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторой операц

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

Байт режима адресации modr/m.
Значения этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти в одном или двух регистрах. Если операнд находится в памяти, то байт modr/m определяет компон

Поле смещения в команде.
8-, 16– или 32-разрядное целое число со знаком, представляющее собой, полностью или частично (с учетом вышеприведенных рассуждений), значение эффективного адреса операнда. 6. Поле

Прямая адресация
Это простейший вид адресации операнда в памяти, так как эффективный адрес содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров. Эффектив

Косвенная базовая (регистровая) адресация
При такой адресации эффективный адрес операнда может находиться только в базовом регистре bx/ebx.   Синтаксически в команде этот режим адресации выражается заключением имени

Лекция 9.
1.Функциональная классификация машинных команд Система команд Pentium 4, последнего на сегодняшний день процессора архитектуры IA-32, включает в себя около 330 мнемоник машинных команд. Ес

Команды общего назначения
Командами данной категории охватывается базовый набор операций по обработке данных. Классификация целочисленных машинных команд приведена на рис.9.1.

Команды сопроцессора
Возможны три формата команд сопроцессора, аналогичные форматам команд центральных процессоров фирмы Intel. Это команды с обращением к оперативной памяти, команды с обращением к одному из численных

MMX-расширения
Расширение MMX ориентировано в основном на использование в мультимедийных приложениях. Основная идея MMX заключается в одновременной обработке нескольких элементов данных за одну инструкцию. Расшир

XMM-расширения
В 1999 году семейство процессоров Pentium фирмы Intel пополнилось новой мо­делью — процессором Pentium III. Основу его архитектуры составляет ядро про­цессора Pentium II, дополненное модулем SSE (S

Лекция 10.
1.Пересылка данных Алгоритм, представляет собой формализованное описание логики работы программы. Способы такой формализации весьма разнятся: от текстового описания последовательности дейс

Работа со стеком
Стек — это область памяти, специально выделяемая для временного хранения данных программы. Важность стека определяется тем, что для него в структуре программы предусмотрен отдельный сегмент. На тот

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги