Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
379727.doc
Скачиваний:
37
Добавлен:
22.09.2019
Размер:
1.92 Mб
Скачать

48. Команды управления состоянием микропроцессора.

Управление состоянием процессора

 

      Глава посвящена тому, как наиболее извратно поиздеваться над флагами и словом состоянием процессора.

      Строго говоря, изменяя любой бит регистра, программа изменяет состояние процессора, и регистра в частности.

     СЛОВО СОСТОЯНИЯ процессора обозначается как CR0. Подсказка в названии "слово" указывает на 16 бит.

      Биты:

0 - PE - включение защищённого режима

1 - MP - управление сопроцессором

2 - EM - эмуляция сопроцессора

3 - TS - бит переключения задач

Для процессора 80386 и выше:

31 - PG - включение управления страницами

 

     Отдельная песня, по поводу МАТЕМАТИЧЕСКОГО СОПРОЦЕССОРА. Эта специализированная микросхема предназначена для быстрого выполнения операций с дробными числами (с плавающей запятой). В старших моделях процессоров, кроме того, математический сопроцессор позволяет заметно ускорить обработку мультимедиа-данных.

       В моделях, вплоть до 80486, математический сопроцессор был выполнен в виде отдельной микросхемы. 80486SX тоже его не имел (на самом деле он был аппаратно отключен вследствие ошибки Intel, имевшееся рядом гнездо для сопроцессора фактически являлось гнездом самого процессора, разумеется с исправным сопроцессором. :)))))

       Кроме того, присутствуют дополнительные регистры: CR2 - линейный адрес ошибки страницы, CR3 - базовый адрес каталога страниц. Что такое страницы, защищённый режим - ещё поговорим.

       Регистр флагов FLAGS, как упоминалось ранее, содержит биты, называемые флагами. Флаги указывают на результаты выполнения команд. Но это не значит, что флаги реагируют НА ЛЮБОЙ результат и любую команду. Собственно, сами флаги:

0 (CF) - флаг переноса при вычислениях или операциях сдвига

2(PF) - флаг приоритета (что выполняется первым\последним)

4(AF) - флаг дополнительного переноса (последний бит младшей тетрады - биты 0...3)

6(ZF) - флаг нулевого результата

7(SF) - флаг знака числа. Дублирует старший бит результата.

8(TF) - флаг трассировки. Полезен при отладке программ.

9(IF) - флаг разрешения прерываний

10(DF) - флаг направления (в циклических операциях)

11(OF) - флаг переполнения при вычислениях.

Все эти флаги частенько используются в программах, и как показывает анализ кода программ, команды проверки условий занимают до 15...20% вычислительной мощности процессора. ;)

Флаги используются, как правило, в командах проверки условий.

  1. Моделирование структурных типов данных в Ассемблере (строки, векторы, матрицы, записи, структуры). Организация обработки структурных данных.

      1. Массивы

Дадим формальное определение: массив - структурированный тип данных, состоящий из некоторого числа элементов одного типа.

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

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

  1. Перечислением элементов массива в поле операндов одной из директив описания данных. При перечислении элементы разделяются запятыми. К примеру:

    ;массив из 5 элементов.Размер каждого

    элемента 4 байта:

    mas dd 1,2,3,4,5

  2. Используя оператор повторения dup. К примеру:

;массив из 5 нулевых элементов.

;Размер каждого элемента 2 байта:

mas dw 5 dup (0)

Такой способ определения используется для резервирования памяти с целью размещения и инициализации элементов массива.

  1. Используя директивы label и rept. Пара этих директив может облегчить описание больших массивов в памяти и повысить наглядность такого описания. Директива rept относится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между директивой и строкой endm. К примеру, определим массив байт в области памяти, обозначенной идентификатором mas_b. В данном случае директива label определяет символическое имя mas_b, аналогично тому, как это делают директивы резервирования и инициализации памяти. Достоинство директивы label в том, что она не резервирует память, а лишь определяет характеристики объекта. В данном случае объект — это ячейка памяти. Используя несколько директив label, записанных одна за другой, можно присвоить одной и той же области памяти разные имена и разный тип, что и сделано в следующем фрагменте:

...

n=0

...

mas_b label byte

mas_w label word

rept 4

dw 0f1f0h

endm

В результате в памяти будет создана последовательность из четырех слов f1f0. Эту последовательность можно трактовать как массив байт или слов в зависимости от того, какое имя области мы будем использовать в программе — mas_b или mas_w.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]