Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Юрий Владимирович самый уважаемы человек =)экза...doc
Скачиваний:
3
Добавлен:
12.09.2019
Размер:
1.41 Mб
Скачать

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).