Шпаргалка по предмету "Основы информатики"

Автор работы: Пользователь скрыл имя, 18 Марта 2015 в 02:52, шпаргалка

Описание работы

Ответы на вопросы к экзамену по предмету "Основы информатики".

Файлы: 1 файл

Архитектура ЭВМ.docx

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

ID - флаг поддержки CPUID (Identification flag, Pentium+). Если программа может изменить этот флаг (т.е. процессор хранит то значение, которое программа запишет в этот флаг), то процессор поддерживает инструкцию CPUID. Инструкцию CPUID поддерживают не только Pentium и P6, но и некоторые модели i486.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10.Архитектура  IA-32. Организация прерываний.

Архитектура 32-разрядного микропроцессора

Первую часть вопроса см. 5 вопрос

Система прерываний в архитектуре IA-32

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

 Классификация  событий в системе на основе  ЦП IA-32. Прерывания обычно возникают  в произвольный момент времени. Прерывания бывают аппаратные (или  внешние) и программные.

Внешние прерывания генерируются по аппаратному сигналу, поступающему от периферийного оборудования, когда оно требует обслуживания. Процессор определяет необходимость обработки внешнего прерывания по наличию сигнала на одном из контактов INTR# или NMI#. При появлении сигнала на линии INTR# внешний контроллер прерываний (например, 8259A) должен предоставить процессору вектор (номер) прерывания. С линией NMI# всегда связано прерывание #2.

В процессорах Pentium, P6 и Pentium 4 эти линии могут быть сконфигурированы на использование встроенным контроллером прерываний - APIC (Advanced Programmable Interrupt Controller), тогда они называются LINT0 и LINT1 и их назначение определяется настройками APIC.

Прерывания, которые генерируются при поступлении сигнала на вход INTR#, называют маскируемыми аппаратными прерываниями. Бит IF в регистре флагов позволяет заблокировать (замаскировать) обработку таких прерываний.

Прерывания, генерируемые сигналом NMI#, называют немаскируемыми аппаратными прерываниями. Немаскируемые прерывания не блокируются флагом IF. Пока выполняется обработчик немаскируемого прерывания, процессор блокирует получение немаскируемых прерываний до выполнения инструкции IRET, чтобы исключить одновременную обработку нескольких немаскируемых прерываний. Прерывания всегда обрабатываются на границе инструкций, т.е. при появлении сигнала на контакте INTR# или NMI# процессор сначала завершит выполняемую в данный момент инструкцию (или итерацию при наличии префикса повторения), а только потом начнет обрабатывать прерывание. Помещаемый в стек обработчика адрес очередной инструкции позволяет корректно возобновить выполнение прерванной программы.

С помощью инструкции INT n (n - номер прерывания) можно сгенерировать прерывание с любым номером 0...255. Такие прерывания называют программными. Состояние бита IF в регистре флагов не влияет на возможность генерации программных прерываний. Программные прерывания могут использоваться для доступа к сервисам операционной системы (например, INT $21 - сервисы DOS, INT $80 - сервисы Linux), функциям драйверов устройств (например, INT $33 - драйвер мыши) или специальным сервисам (INT $10 - видео-сервис BIOS, INT $31 - DPMI-сервис), INT $67 - сервис EMS).

Хотя номер прерывания в этой инструкции может быть любым, следует отметить, что, например, при использовании вектора #2 для вызова обработчика немаскируемого прерывания внутреннее состояние процессора будет отличаться от того, которое бывает при обработке аппаратного немаскируемого прерывания. Аналогично, попытка вызвать обработчик исключения с помощью этой инструкции может оказаться неудачной, т.к. при возникновении большинства исключений в стек включается код ошибки, а при генерации программного прерывания этого не происходит. Обработчик исключения извлекает из стека код ошибки, а в случае программного прерывания из стека будет ошибочно извлечен адрес возврата, что нарушит целостность стека и, в конечном итоге, скорее всего, приведет к исключению #13 или более тяжелому.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11.Ассемблер. Области применения. Достоинства  и недостатки.

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

Язык ассемблера (автокод) — язык программирования низкого уровня. В отличие от языка машинных кодов, позволяет использовать более удобные для человека мнемонические (символьные) обозначения команд. При этом для перевода программы с языка ассемблера в понимаемый процессором машинный код требуется специальная программа, называемая ассемблером.

Содержание языка

Команды языка ассемблера один к одному соответствуют командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько команд процессора. (http://www.samvel.net/text/lib/00034542.txt)

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

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

Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT&T-синтаксис.

Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76); фактически, в них он является языком ассемблера.

Достоинства и недостатки

Достоинства

* Язык ассемблера  позволяет писать самый быстрый  и компактный код, как минимум  не хуже, чем генерируемый трансляторами  языков более высокого уровня; всё зависит от способностей  программиста.

* Если код  программы достаточно большой, данные, которыми он оперирует, не помещаются  целиком в регистрах процессора, т. е. частично или полностью находятся  в оперативной памяти, то искусный  программист, как правило, способен  значительно оптимизировать программу  по сравнению с высокоуровневыми  трансляторами по одному или  нескольким параметрам: скорость  работы (за счёт оптимизации вычислений  и/или более рационального обращения  к ОП, перераспределения данных), объём кода (в том числе за счёт эффективного использования промежуточных результатов).

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

* При программировании  на языке ассемблера возможен  непосредственный доступ к аппаратуре, в том числе портам ввода-вывода, регистрам процессора и др.

* Язык ассемблера  применяется для создания драйверов  оборудования и ядра операционной  системы.

* Язык ассемблера  используется для создания «прошивок» BIOS.

* С помощью  языка ассемблера создаются компиляторы  и интерпретаторы языков высокого  уровня, а также реализуется совместимость  платформ.

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

Недостатки

* Главное  преимущество языка ассемблера  почти незаметно благодаря хорошей  оптимизации в современных компиляторах  языков высокого уровня и полностью  нивелируется хорошей оптимизацией  современных аппаратных платформ  с кэшированием шины процессора.[источник не указан 281 день]

* В силу  машинной ориентации («низкого»  уровня) языка ассемблера человеку  сложнее читать и понимать  программу на языке ассемблера  по сравнению с языками программирования  высокого уровня; программа состоит  из слишком «мелких» элементов  — машинных команд, соответственно  усложняются программирование и  отладка, растёт трудоёмкость, велика  вероятность внесения ошибок. В  значительной степени возрастает  сложность совместной разработки.

* Как правило, меньшее количество доступных  библиотек по сравнению с современными  индустриальными языками программирования.

* Отсутствует  переносимость программ на компьютеры  с другой архитектурой и системой  команд (кроме двоично-совместимых).

Применение

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

На языке ассемблера пишутся программы или фрагменты программ, для которых критически важны:

*быстродействие (драйверы, игры);

*объем используемой  памяти (загрузочные секторы, встраиваемое (англ. embedded) программное обеспечение, программы для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты).

С использованием программирования на языке ассемблера производятся:

*Оптимизация  критичных к скорости участков  программ, написанных на языке  высокого уровня, таком как C++. Это  особенно актуально для игровых  приставок, имеющих фиксированную  производительность, и для мультимедийных кодеков, которые стремятся делать менее ресурсоёмкими и более популярными.

*Создание  операционных систем (ОС). ОС часто  пишут на Си, языке, который специально  был создан для написания одной  из первых версий UNIX. Аппаратно  зависимые участки кода, такие  как загрузчик ОС, уровень абстрагирования  от аппаратного обеспечения (hardware abstraction layer) и ядро, часто пишутся на языке ассемблера. Ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся к переносимости и надёжности, но, тем не менее, он присутствует. Некоторые любительские ОС, такие как MenuetOS, целиком написаны на языке ассемблера. При этом MenuetOS помещается на дискету и содержит графический многооконный интерфейс.

*Программирование  микроконтроллеров (МК) и других  встраиваемых процессоров. По мнению  профессора Таненбаума, развитие МК повторяет историческое развитие компьютеров новейшего времени.[1] На сегодняшний день для программирования МК весьма часто применяют язык ассемблера. В МК приходится перемещать отдельные байты и биты между различными ячейками памяти. Программирование МК весьма важно, так как, по мнению Таненбаума, в автомобиле и квартире современного цивилизованного человека в среднем содержится 50 микроконтроллеров.[2]

*Создание  драйверов. Некоторые участки драйверов, взаимодействующие с аппаратным  обеспечением, программируют на  языке ассемблера. Хотя в целом  в настоящее время драйверы  стараются писать на языках  высокого уровня в связи с  повышенными требованиями к надёжности. Надёжность для драйверов играет  особую роль, поскольку в Windows NT и Linux драйверы работают в режиме ядра. Одна ошибка может привести к краху системы.

*Создание  антивирусов и других защитных  программ.

*Написание  трансляторов языков программирования.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12.Ассемблер. Структура программы. Модель памяти  SMALL. Основные типы предложений.

Язык ассемблера (автокод) — язык программирования низкого уровня. В отличие от языка машинных кодов, позволяет использовать более удобные для человека мнемонические (символьные) обозначения команд. При этом для перевода программы с языка ассемблера в понимаемый процессором машинный код требуется специальная программа, называемая ассемблером. Ассемблер - это программное средство, предназначенное для преобразования исходного текста программы, содержащего мнемонические имена команд и операндов, в последовательность двоичных кодов, которые представляют собой исполняемые команды для процессора. 1. Структура программы на ассемблере Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность предложений языка, каждое из которых занимает отдельную строку кода программы. Программа на языке Assembler представляет собой мнемоническую запись машинных кодов. То есть, вместо машинных кодов используются их обозначения. Так что же такое Ассемблер? Ассемблер - это язык, для которого одна команда преобразуется в одну машинную команду. Чтобы понять, о чем идет речь, посмотрите на таблицу, расположенную ниже:

Информация о работе Шпаргалка по предмету "Основы информатики"