- •Цикл команды процессора.
- •2. Методы повышения производительности. Кэш-память. Конвейеризация. Суперскалярные процессоры.
- •Микроархитектура Intel Pentium 4.
- •4. Регистры и режимы адресации процессора Intel Pentium 4.
- •5. Язык Ассемблер. Области применения Ассемблера. Программы на ассемблере. Общая схема трансляции программы.
- •6. Команды пересылки данных. Косвенная адресация памяти. Команды работы со стеком.
- •7. Команды сложения и вычитания. Команды умножения и деления. Команды распространения знака.
- •8. Команды работы с битами. Логические команды. Операции сдвига.
- •9. Команды передачи управления. Команда безусловного перехода. Команды условного перехода.
- •10. Команды вызова процедур. Команды организации циклов.
- •11. Работа с массивами. Одномерные массивы, двумерные статические массивы.
- •12. Работа с массивами. Двумерные динамические массивы.
- •13. Команды обработки строк.
- •14. Консольные приложения: api-функции для работы с консольными приложениями.
- •15. Обработка событий в консольных приложениях.
- •17. Структура gui-приложения. Регистрация класса окон.
- •21. Оптимизация: цель, критерии, требования, методика, средства.
- •22. Алгоритмическая оптимизация: временная сложность, сравнение алгоритмов, примеры.
- •23. Способы измерения времени. Применение рекурсии. Примеры.
- •24. Программная оптимизация: связь с архитектурой процессора, приемы оптимизации, векторизация, оптимизация циклов.
Микроархитектура Intel Pentium 4.
При рассмотрении процессоров различают понятия «архитектура» и «микроархитектура». Архитектура – это логическое построение процессора, т.е. то, какой машина представляется программисту. Это понятие охватывает перечень и формат команд, формы представления данных, способы адресации памяти и т. д. Все процессоры Intel, начиная с Intel386, поддерживают архитектуру IA-32. Микроархитектура – это структура процессора, отраженная в его составных частях и связях между ними. Микроархитектура – это конкретный способ реализации архитектуры. NetBurst (пакетно-сетевая) – Pentium 4.
Рассмотрим микроархитектуру NetBurst:
гарвардская архитектура кэш-памяти 1-го уровня
конвейер длиной 20 ступеней (Hyper Pipelined)
суперскалярная архитектура
128 физических регистров на 8 основных логических
два блока АЛУ, работающих на двойной частоте процессора (Rapid ALU)
изменение последовательности команд (out-of-order execution)
предсказание переходов (branch prediction)
144 команды SSE2 (Streaming SIMD Extensions – поточная SIMD обработка)
Технология HyperThreading (только Xeon).
4. Регистры и режимы адресации процессора Intel Pentium 4.
Регистр – многоразрядная ячейка памяти, предназначенная для временного хранения текущей информации. Регистровая память – самая быстродействующая в компьютере. Совокупность регистров называется регистровым файлом. Регистры процессора делятся на: доступные программисту (user-visible registers), внутренние регистры процессора (internal registers).
Основные регистры процессоров Intel:
регистры общего назначения
сегментные регистры
регистр указателя команд
регистр флагов
системные регистры
регистры FPU, MMX- и SSE-расширений
Регистры общего назначения (РОН) – регистры, предназначенные для выполнения текущих вычислений. Регистров общего назначения 8, все они – 32-разрядные: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
Сегментные регистры (16-разрядные): CS – сегмент кода, DS – сегмент данных, SS – сегмент стека, ES, GS, FS – дополнительные регистры. В сегментных регистрах хранится адрес соответствующего сегмента (указатель на строку в таблице GDT или LDT).
Регистр указателя команд – EIP (Expanded Instruction Pointer), 32 разряда. Содержит адрес следующей команды относительно начала сегмента. Прямого доступа к нему нет, но команды перехода косвенно его изменяют.
Регистр флагов – EFLAGS, 32 разряда. Хранит информацию о состоянии процессора и о результатах выполнения команд. Флаг – это бит, принимающий значение 1, если он установлен, и 0, если сброшен.
Системные адресные регистры: GDTR, LDTR. IDTR, TR.
Управляющие регистры: СR0-CR4 (Control Registers).
Регистры отладки: DR0-DR7 (Debug Registers).
5. Язык Ассемблер. Области применения Ассемблера. Программы на ассемблере. Общая схема трансляции программы.
Язык ассемблер - это язык низкого уровня. Структура и взаимосвязь цепочек языка близки к машинным командам вычислительной системы, где должна выполняться результирующая программа. Применение языка ассемблера позволяет разработчику управлять ресурсами вычислительной системы (ЦП, ОП, внешние устройства и т.д.) на уровне машинных команд. Каждая команда исходной программы на языке ассемблере в результате компиляции преобразуется в 1 машинную команду. Транслятор с языка ассемблера часто называется «ассемблер» или «программа ассемблера».
Язык ассемблера может применяться как самостоятельный инструмент разработки приложений, так и в качестве встроенного средства разработки языков высокого уровня.
Транслятор - это программа, которая переводит (с англ. translate) с нотации одного языка в нотацию другого языка.
Компилятор - это транслятор, который переводит программу из нотации одного языка в нотацию машинного языка. Машинным языком может быть код конкретной машины, любой объектный код.
Трансляторы могут быть интерпретаторами (interpreter), т.е. совмещать анализ исходной программы с ее выполнением. Различие тут в том, что результатом работы интерпретатора будет не машинный код, а последовательность обращений к библиотеке функций интерпретатора.
Интерпретатор в отличие от компилятора может выбирать одну за другой инструкции и сразу их выполнять. При интерпретации (это важно!!!), в отличии от трансляции или компиляции, может быть начато выполнение программы, которая содержит синтаксические ошибки.
Процесс трансляции программы на языке ассемблера в объектный код принято называть ассемблированием. В отличие от компилирования, ассемблирование — более или менее однозначный и обратимый процесс. В языке ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время как в языках программирования высокого уровня за каждым выражением может скрываться большое количество различных инструкций. В принципе, это деление достаточно условно, поэтому иногда трансляцию ассемблерных программ также называют компиляцией.