- •1.Способи адресації
- •3.Пряма адресація пам'яті. .
- •6. Сторінкова пам'ять.
- •7.Сегмента адресація.
- •8. Опосередкована адресація з масштабуванням
- •9.Адресація по базі з сувом.
- •10.Адресація по базі з індексуванням
- •11. Адресація по базі з індексуванням та масштабуванням
- •12.Вирівнювання даних та коду.
- •13. Регістри загального призначення
- •14. Сегментні регістри.
- •15.Індексні регістри.
- •16. Спеціальні регістри
- •17. Флаги ознак.
- •18. Регистры управления (Control Registers)
- •19.20. Стек, регітсри стека.
- •22. Флаг нуля zf
- •23. Флаг знака sf
- •25. Флаг четности.
- •26. Флаг полупереносу.
- •27. Флаг трассировки.
- •28. Флаг напрямку.
- •29. Флаг переривание.
- •35. Арифметические команды
- •36. Команди блочної обробки даних
- •37. Команды ввода и вывода
- •38. Команды управления флагами
- •39. Команда пересылки данных: возможности и ограничения
- •40. Команди керування
- •41. Стек математичного співпроцесора
- •42.Команди пересилки співпроцесора
- •43. Арифметические команды сопроцессора
- •46. Різновиди чисел
- •47. Способи округлення
- •48.Трансцендентні команди
- •49. Команди завантаження констант співпроцесора
- •50. Порівняння чисел з плаваючою комою
- •51. Структура жёсткого диска
- •58. Структура каталогов Linux
- •59. Структура ufs
- •60. Суперблок. Ufs
- •61. Индексный дескриптор ufs
- •62. Основні механізми передачі параметрів
- •63. Основні місця передачі параметрів
- •64. Вкладені обчислення
- •65. Різновиди комбінацій сегментів
- •66. Порядок завантаження сегментів, директиви
- •67. Оптимізація обчислень
- •68. Математична оптимізація
- •69. Алгоритмічна оптимізація
- •70 .Низькорівнева оптимізація
- •71. Основні методи алгоритмічної оптимізації
- •72. Основні рекомендації низького рівня
- •74. Особенности архитектуры процессоров Pentium Pro и Pentium II
- •76. Конвеєр fpu
- •77. Принципи роботи кешу
- •79. Регистры управления (Control Registers)
- •80. Індексні регістри дескрипторів
- •81. Віртуалізація пам’яті
- •82. Переривання, маскування та обробка.
- •84. Кеш з зворотнім записом
- •85. Кеш з відкладеним записом
- •86. Наскрізний кеш
- •87. Кеш читання
- •88. Повністю асоціативний кеш
- •91. Структура кешу
- •92. Теги, призначення
- •93. Конвеєри mmx та sse
40. Команди керування
Решение о переходе может быть условным либо безусловным, это известно и по другим языкам. «То, какая команда программы должна выполняться следующей, процессор узнает по содержимому пары регистров CS:(E)IP, в которой: CS — регистр сегмента кода, в котором находится физический (базовый) адрес текущего сегмента кода; EIP/IP — регистр указателя команды, в котором находится значение, представляющее собой смещение в памяти следующей выполняемой команды относительно начала текущего сегмента кода".
Классификация команд передачи
Команды безусловной передачи управления: безусловного перехода; вызова процедуры и возврата из процедуры; вызова программных прерываний и возврата из программных прерываний. Команды условной передачи управления: перехода по результату команды сравнения; перехода по состоянию определенного флага; перехода по содержимому регистра ЕСХ/СХ. Команды управления циклом: организации цикла со счетчиком ЕСХ/СХ; организации цикла со счетчиком ЕСХ/СХ с возможностью досрочного выхода из цикла по дополнительному условию.
Точка куда передается - метка. Она состоит из трех аттрибутов:
имя сегмента кода, где эта метка описана; смещение — расстояние в байтах от начала сегмента кода, в котором описана метка; тип, или атрибут расстояния, метки. Последний атрибут может принимать два значения: near — переход на метку возможен только в пределах сегмента кода, где эта метка описана, то есть для перехода на метку физически достаточно изменить только содержимое регистра EIP/IP; far — переход на метку возможен только в результате межсегментной передачи управления, для осуществления которой требуется изменение содержимого как регистра EIP/IP, так и регистра CS.
Метку можно определить двумя способами: оператором : (двоеточие); директивой LABEL
При втором способе можно сказать, near оно или far:
ml: mov ax,pole_1 ml label near mov ax,pole_1
41. Стек математичного співпроцесора
Арифметический сопроцессор (FPU) предназначен для выполнения операций над числами в формате с плавающей точкой (вещественные числа) и длинными целыми числами. Он значительно (в десятки раз) ускоряет вычисления, связанные с вещественными числами. Сопроцессор может выполнять как простые арифметические операции (сложение, вычитание, умножение, деление и т.п.), так и вычислять значения различных функций (синус, косинус, тангенс, логарифмы и т. п.)
Основная область применения арифметического сопроцессора - научные расчеты, машинная графика и, разумеется, игры, моделирующие реальный мир (визуальный или звуковой), поскольку такие игры, как правило, включают и машинную графику, и инженерные расчеты.
В играх, где оказывается задействован весь вычислительный потенциал компьютера, непосредственное программирование арифметического сопроцессора позволяет более оптимально построить код программы и ускорить вычисления. Многие среды программирования (например, основанные на языке программирования Си/Си++, а также Borland Delphi) позволяют делать ассемблерные вставки, которые дают возможность напрямую обращаться к сопроцессору. Это, в свою очередь, позволяет отказаться от подключения дополнительных библиотек, необходимых для работы с вещественными числами. В самом деле, зачем подключать целую библиотеку, увеличивая размеры программы, если необходимо всего-навсего вычислить значения тригонометрических функций и осуществить операции умножения и деления. Разумеется, что ответственность за корректность операндов и проверку результата в случае непосредственного программирования арифметического сопроцессора полностью ложится на программиста.
В настоящее время подавляющее большинство персональных компьютеров в качестве центрального процессора используют разновидности процессора Pentium фирмы Intel. Этот процессор имеет встроенный математический сопроцессор. По этой причине ниже не рассматриваются особые случаи, связанные с программированием преддыдущих моделей сопроцессоров Intel.
Принципы работы
Математический сопроцессор запускается центральным процессором. После запуска он выполняет все вычисления самостоятельно и параллельно с работой центрального процессора. Если центральный процессор направляет очередную команду сопроцессору в тот момент, когда сопроцессором еще не закончена предыдущая команда, центральный процессор переводится в состояние ожидания. Если же сопроцессор ничем не занят, центральный процессор, направив команду сопроцессору, продолжает свою работу, не дожидаясь завершения вычисления. Следовательно, всегда необходимо помнить, что вычисления, производимые математическим сопроцессором, выполняются параллельно с работой центрального процессора. Иногда последовательное расположение команд сопроцессора и центрального процессора в листинге программы создают иллюзию последовательного их выполнения. Проще говоря, возможна такая ситуация, что когда центральный процессор обратиться к ячейке памяти, куда арифметический сопроцессор должен был записать результат своих вычислений, то результата в ячейке может и не быть (точнее, содержимое ячейки памяти может быть произвольным). Все дело тут в том, что сопроцессор еще не закончил вычислений. Впрочем, есть специальные средства синхронизации (команда FWAIT).