Лекция по программированию

Автор работы: Пользователь скрыл имя, 11 Января 2011 в 19:34, лекция

Краткое описание

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

Содержимое работы - 1 файл

LECTS.DOC

— 893.00 Кб (Скачать файл)

СКАНИРОВАНИЕ И ЗАМЕНА

     В  процессе  обработки  текстовой   информации    может    возникнуть необходимость замены определенных символов в тексте на  другиенапример, подстановка  пробелов  вместо  различных   редактирующих    символов.    В приведенном ниже фрагменте программы  осуществляется  сканирование  cтроки STRING и замена символа амперсанд (&) на  символ  пробелаКогда  команда SCASB обнаружит символ &  (в  примере  это  будет  позиция  STRING+8),  то операция сканирования прекратится  и  регистр  DI  будет  содержать  aдрес STRING+9. Для получения адреса символа & необходимо  уменьшить  содержимое DI на единицу и записать по полученному адресу символ пробела.

 

               STRLEN    EQU  15             ;Длина поля STRING

               STRING    DB   'The time&is now'

                         ...

                         CLD

                         MOV  AL,'&'         ;Искомый символ

                         MOV  CX,STRLEN      ;Длина поля STRING

                         LEA  DI,STRING      ;Адрес поля STRING

                         REPNE SCASB         ;Сканировать

                         JNZ  K20            ;Символ найден?

                         DEC  DI             ;Да - уменьшить адрес

                         MOV  BYTE PTR[DI],20H  ;Подставить пробел

               K20:      RET

 

Лекция(11,12,13,14): Сопроцессоры

 

    В этой лекции речь идет о способах обмена информацией между ЦП и сопроцессором, о функциях математического сопроцессора и особенностях программирования ПЭВМ с сопроцессором. Рассматривается структура сопроцессоров семейства Intel x87 и блока вещественной арифметики (FPU) процессоров Pentium, а также организация сопроцессорного интерфейса ЦП семейства Motorola MC680х0.

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

    Сопроцессоры. Способы обмена информацией  между ЦП и сопроцессором

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

    Использование сопроцессоров с различной функциональностью позволяет решать проблемы широкого круга:

  • обработка экономической информации;
  • моделирование;
  • графические преобразования;
  • промышленное управление;
  • системы числового управления;
  • роботы;
  • навигация;
  • сбор данных и др.

    Можно выделить два способа обмена информацией между ЦП и сопроцессором:

  • прямое соединение входных и выходных портов (ЦП имеет специальный интерфейс для взаимодействия с сопроцессором);
  • с обменом через память (обмен информацией между ЦП и сопроцессором происходит благодаря доступу сопроцессора к оперативной памяти через системную магистраль).

Математический  сопроцессор: основные функции

    Один  из наиболее распространенных типов  сопроцессоров - математический сопроцессор. Математический сопроцессор предназначен для быстрого выполнения арифметических операций с плавающей точкой, предоставления часто используемых вещественных констант ( , log210, log2e, ln2, :), вычисления тригонометрических и прочих трансцендентных функций (tg, arctg, log, ...).

    Большинство современных математических сопроцессоров для представления вещественных чисел используют стандарт IEEE 754-1985 "IEEE1) Standard for Binary Floating-Point Arithmetics". Старший разряд двоичного представления вещественного числа всегда кодирует знак числа. Остальная часть разбивается на две части: экспоненту и мантиссу. Вещественное число вычисляется как: (-1)S·2E·M, где S - знаковый бит числа, E - экспонента, M - мантисса. Если 1 M<2, то такое число называется нормализованным. При хранении нормализованных чисел сопроцессор отбрасывает целую часть мантиссы (она всегда 1), сохраняя лишь дробную часть. Экспонента кодируется со сдвигом на половину разрядной сетки, таким образом, удается избежать вопроса о кодировании знака экспоненты. Т.е. при 8-битной разрядности экспоненты код 0 соответствует числу -127, 1 - числу -126, ..., 255 числу +126 (экспонента вычисляется как код 127).

    Стандарт IEEE-754 определяет три основных способа  кодирования (типа) вещественных чисел.

Таблица 8.1. Типы (способы кодирования) вещественных чисел
Тип Диапазон значений(по модулю) Двоичное  представление
вещественное  ординарной точности (single precision) - 32 бит 1,18·10-38... 3,40·1038
вещественное  двойной точности (double precision) - 64 бит 2,23·10-308... 1,79·10308
вещественное  расширенной точности (extended precision) - 80 бит 3,37·10-4932... 1,18·104392

Приведем пример кодирования вещественного числа 178,625:

178,62510 = 128 + 32 + 16 + 2 + 0,5 + 0,125 =

= 1·27 + 0·26 + 1·25 + 1·24 +

+ 0·23 + 0·22 + 1·21 + 0·20 +

+ 1·2-1 + 0·2-2 + 1·2-3 = 10110010,1012

Для представления  этого числа в соответствии с IEEE-754 его нужно нормализовать (привести в экспоненциальный вид):

1,78625E102 = 1,0110010101E2111

В формате вещественного  числа одинарной точности оно  будет представлено так:

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

  • нормализованные вещественные числа со знаком;
  • денормализованные вещественные числа со знаком;
  • ноль со знаком;
  • бесконечность со знаком;
  • нечисла (NaN - not a number).
Таблица 8.2. Представление чисел и нечисел  на примере IEEE-754 single precision
Тип Двоичное  представление
Ноль со знаком
Денормализованное вещественное число со знаком
Нормализованное вещественное число со знаком
Бесконечность со знаком
Нечисло

Математические  сопроцессоры фирмы Intel

    Современные процессоры архитектуры IA-32 содержат блок операций с вещественными числами (Floating Point Unit - FPU). Функционирование этого  блока во многом основано на архитектуре первого представителя семейства математических сопроцессоров Intel - 8087.

    Сопроцессор 8087 был разработан в 1980 г. Структура  сопроцессора 8087 показана на рис. 8.1. В схеме сопроцессора 8087 можно выделить две подсистемы: устройство шинного интерфейса и устройство с плавающей точкой. Развитием этого семейства стал сопроцессор 80287, созданный в 1985 году. Основные изменения произошли только в устройстве шинного интерфейса. В отличие от 8087, сопроцессор 80287 не имеет доступа к шине адреса, поэтому все обращения к памяти выполняет ЦП. В сопроцессоре 80387 изменения коснулись устройства с плавающей точкой: изменилась схема обработки ошибок, а также был реализован больший набор трансцендентных функций.

    

Рис. 8.1.  Структура сопроцессора 8087

    Выпуск  очередного поколения ЦП фирмы Intel ознаменовался  внедрением блока вещественной арифметики в структуру ЦП. Первым таким представителем семейства процессоров стал i486DX.

    В пятом поколении процессоров  интеграция блока FPU в суперскалярную архитектуру позволила значительно повысить эффективность выполнения операций с вещественными числами. Блок FPU может выполнять одну операцию с плавающей точкой в каждом такте или же получать и одновременно выполнять 2 команды с плавающей точкой, одной из которых должна быть команда обмена. Команды с плавающей точкой проходят по целочисленному конвейеру (обычно только по U-конвейеру - 5 ступеней) и передаются на исполнительные ступени конвейера FPU (3 ступени). В целом же, несмотря на то, что блок FPU интегрирован в центральный процессор, этот блок работает независимо и одновременно с устройством целочисленных вычислений.

    Дальнейшее  развитие этого семейства сопровождалось дополнением набора команд блока FPU специальными функциональными подмножествами: MMX, SSE, SSE2.

    В целом базовая программная модель всех перечисленных сопроцессоров и блока FPU у IA-32 сходная (рис. 8.2): регистровый стек (восемь 80-битных регистров R0-R7), слово тегов, регистр управления, регистр состояния, указатель команды и указатель данных.

 
Рис. 8.2.  Программная модель сопроцессоров семейства Intel х87

    Для хранения данных в сопроцессоре предназначены регистры R0-R7. Эти регистры организованы в стек, и доступ к ним производится относительно вершины стека - ST. Номер регистра, соответствующего вершине стека, хранится в регистре состояния (поле TOS). Как и у ЦП, стек сопроцессора растет к регистрам с меньшими адресами. Команды, которые производят запоминание и извлечение из стека, передают данные из текущего регистра ST, а затем производят инкремент поля TOS в регистре состояния. Многие команды сопроцессора допускают неявное обращение к вершине стека, обозначаемой ST или ST(0). Для указания i-го регистра относительно вершины используется обозначение ST(i), где I = 0,:,7. Например, если поле TOS регистра состояния содержит значение 0112 (вершиной стека является регистр R3), то команда FADD ST,ST(2) суммирует содержимое регистров R3 и R5. Стековая организация упрощает программирование подпрограмм, допуская передачу параметров в регистровом стеке сопроцессора.

Информация о работе Лекция по программированию