Процессоры 80286 и 80287 могут выполнять команды одновременно. Когда
процессор 80286 встречает команду процессора 80287, он ожидает, пока процессор
80287 не освободится, разрешает процессору 80287 начать выполнение команды,
сразу переходит к следующей команде. Процессор 80286 не ожидает, пока процессор
80287 закончит выполнение команды. Но если процессор 80287 не закончил свои
действия, когда процессор 80286 встречает другую команду процессора 80287, то
процессор 80286 будет ожидать (см. выше первое действие). Такой подход разрешает
процессору 80286 продолжать выполнение программы, пока процессор 80287 занят
"медленной" командой. Например, времени выполнения команды FPATAN достаточно для
того, чтобы процессор 80286 произвел около 500 операций сложения 16-битных целых
чисел. Обычно программист не задумывается о параллельной работе процессоров,
если ему, конечно, не нужна тонко настроенная программа. Благодаря ожиданию на
первом шаге процессор 80286 гарантирует, чта почти все программы дают такие же
результаты, как будто работает один процессор, а не два. Но все же в двух редких
случаях эта иллюзия исчезает. Предположим, что процессор 80287 должен запомнить
что-то в памяти, а это что-то требуется процессору 80286, например:
FIST I
MOV АХ,I
Здесь процессор 80286 начнет выполнять команду MOV раньше, чем процессор
80287 закончит команду FIST, и в регистр АХ будет передано неправильное
значение. Отметим, что этой проблемы не возникает, если есть промежуточные
команды процессора 80287, например
FIST I
MOV J,BX
MOV AX,I
Здесь процессор 80286,
встретив команду FADD, должен ожидать завершения команды FIST. Однако
промежуточные команды процессора 80286, например
FIST I
FADD ST(3)
MOV AX,I
не помогают, если,
конечно, они не задержат процессор 6Ш86 на время, достаточное процессору 80287
для завершения команды FIST/