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

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

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

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

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

LECTS.DOC

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

Лекция  (1,2,3). Введение. Цели и задачи дисциплины. Программная модель микропроцессора INTEL 8080, регистры, форматы и системы команд, методы адресации

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

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

    Поэтому изучение языка ассемблер - мы начнем с изучения архитектуры ЭВМ. Это понятие характеризует ЭВМ с точки зрения его функциональных программно-управляемых свойств. Выясним какая часть ЭВМ является видимой и доступной для программирования на этом языке. На языках высокого уровня этого знать не обязательно.

    Архитектура ЭВМ - это абстрактное представление ЭВМ, которое отражает ее структурную, схематичную и логическую организацию. Это понятие включает в себя следующее:

  • Структурную схему ЭВМ
  • Средства и способы доступа к элементам структурной схемы ЭВМ
  • Организация и разрядность ЭВМ
  • Набор и доступность регистров
  • Организацию и способы адресации памяти
  • Способы представления и форматы данных ЭВМ
  • Набор машинных команд ЭВМ
  • Форматы машинных команд
  • Обработку нештатных команд

    Любая выполняющаяся  программа получает в свое распоряжение определенный набор ресурсов микропроцессора.  Эти ресурсы необходимы для выполнения и хранения в памяти команд программы, данных и информации о текущем состоянии программы и микропроцессора. Набор этих ресурсов представляет собой программную модель микропроцессора, которая представлена на схеме.

    Программные модели более ранних микропроцессоров (I486, Pentium) отличаются меньшим размером адресуемого пространства оперативной памяти (2 32 -1), т.к разрядность их шины составляет 32 бита и отсутствием некоторых регистров. На данной схеме в скобках обозначено, начиная с какой модели данная группа регистров появилась в программной модели микропроцессоров Intel. Если обозначения не, то данная группа регистров присутствовала в более ранних моделях (i386).

    

    

 Программная модель Intel (Pentium III)

Регистры - это  память микропроцессоров. Программную модель микропроцессора Intel составляют:

  • Пространство адресуемой памяти (для Pentium III- 2 36- 1 байт)
  • Набор регистров для хранения данных общего назначения
  • Набор сегментных регистров
  • Набор регистров состояния и управления
  • Набор регистров вычислений с плавающей точкой
  • Набор    регистров    целочисленного    ММХ-    расширения,    отображенных    на    регистры сопроцессоров
  • Набор регистров ММХ- расширения с плавающей точкой
  • Программный стек

Регистры  общего назначения.

    Данный  тип регистров используется для  хранения.

    И состоят из четырех регистров  данных и четырех регистров индексов и указателей., еах (ax/ah/al) -аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование данного регистра обязательно, иногда использование его неявно, ebx (bx/bh/bl) - базовый регистр. Используется для хранения базового адреса некоторого объекта в памяти.

    есх    (cx/ch/cl)    -   регистр-счетчик. Применяется в  командах, производящих    некоторые повторяющиеся действия. Например в команде организации цикла. edx(dx/dh/dl) - регистр данных. Используется для хранения данных. Регистры указателей и индексов. Их 4 штуки.

    esi (si) - индекс источника. Этот регистр используется в цепочных операциях содержит текущий адрес элемента в цепочке-источнике.

    edi(di) -индекс приемника(получателя). Этот регистр в цепочных операциях содержит текущий адрес в цепочке- приемнике.

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

    Для работы со стеком используются следующие  регистры.

    esp (sp) - регистр указателя стека. Содержит указатель на вершину стека в текущем сегменте стека.

    ebp(bp) - регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека

Сегментные  регистры

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

  1. Сегментированная модель. В этой модели программе выделяются непрерывные области памяти (сегменты), а сама программа может обращаться только к данным, которые находятся в этих сегментах.
  2. Страничная модель. Ее можно рассматривать как надстройку над сегментированной моделью  памяти.  В  случае  использования  этой  модели  памяти  оперативная  память рассматривается как совокупность блоков фиксированного размера (4 Кбайта). Основное применение этой модели связано с организацией виртуальной памяти, что позволяет операционной системе использовать для программ пространство памяти большее, чем объем физической памяти. Для МП i486 и Pentium размер возможной виртуальной памяти может достигать 4Тбайт.

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

Каждая  программа может состоять из любого количества сегментов (в зависимости  от организации модели памяти), но реально имеется доступ к трем основным сегментам памяти сегмент кода, сегмент данных, сегмент стека. Программа никогда не знает, по каким физическим адресам размещены ее сегменты. Этим занимается ОС. ОС размещает сегменты программы по определенным физическим адресам, после чего помещает значения этих адресов в определенные места. Куда именно поместит сегменты программы ОС зависит от работы МП. Так, в реальном режиме эти адреса помещаются непосредственно в соответствующие сегментные регистры, а в защищенном режиме они размещаются в элементы специальной системной дескрипторной таблице. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Это относительный адрес или смещение, который МП использует для доступа к данным внутри сегмента, называется эффективным. Различают три основных модели сегментированной организации памяти.

  • сегментированная модель памяти реального режима
  • сегментированная модель памяти защищенного режима
  • сплошная модель памяти защищенного режима.

Рассмотрим  порядок формирования физического  адреса в реальном режиме.

    Физический  адресэто адрес памяти, выдаваемый на шину адреса микропроцессора. Другое название физического адреса - линейный адрес. 

    Сегментированная модель памяти реального режима.

 

    

В реальном режиме механизм адресации физической памяти имеет следующие характеристики:

  • диапазон изменения физического адреса от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий.
  • максимальный размер сегмента 64 Кбайта. Это объясняется 16-разрядной архитектурой I8086. Нетрудно подсчитать, что максимальное   значение, которое могут содержать 16- разрядные регистры, составляют 216-1, что применительно к памяти и определяет величину 64 Кбайт.
  • для обращения к конкретному физическому адресу оперативной памяти необходимо определить  адрес  начала  сегмента  (сегментную  составляющую)  и  смещение  внутри сегмента.   В сегментном регистре находятся только старшие 16 бит физического адреса начала сегмента.  недостающие 4 бита 20-битового адреса получаются путем сдвига значения в сегментном регистре влево на 4 разряда.  Получение 20-битового адреса выполняется   аппаратно   и   для   программного   обеспечения   абсолютно   прозрачна. Полученный адрес соответствует адресу начала сегмента.  Вторая составляющая адреса - смещение,   которое   представляет   собой   16-битовое   значение.   Это   значение   может присутствовать  в   команде   в  явном  или  косвенном  виде.   В  результате   получается следующим образом физический адрес

    физический  адрес= смещение+24*(регистр сегмента)

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

    1. сегменты бесконтрольно размещаются с любого адреса, кратного 16 (т.к. 
      содержимое сегментного регистра аппаратно смещается на 4 разряда). В результате 
      чего, программа может обращаться по любым адресам, в том числе и реально не 
      существующим.
    2. сегменты имеют максимальный размер 64 Кбайт
    3. сегменты могут перекрываться с другими сегментами.

    Для устранения этих недостатков и было введено сегментирование памяти в защищенном

    режиме.

    Мы  рассмотрели понятие сегментация  и теперь определим сегментные регистры, которые

    используются  для доступа к соответствующему   сегменту шесть основных сегментных

    регистров: cs, ss, ds, es, gs, fs.

    1. Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) - сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ МП.
    2. Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (date segment register). - сегментный регистр данных, который хранит адрес сегмента данных текущей программы.
    3. Сегмент стека.  Этот сегмент представляет собой область памяти,  называемую стеком. Для доступа к этому сегменту служит регистр ss (stack segment register).
    4. Дополнительный сегмент данных. Неявно алгоритмы выполнения машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находятся в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных es, gs,fs.

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

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

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