Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
10.09.2019
Размер:
9.47 Mб
Скачать

Регистры: 8-дынные, 5-вспомогательные

Регистры данных

Регистры данных сопроцессора R0-R7 имеют длину 80 бит (т.е. пять 16-разрядных слов) и рассматриваются как круговой стек,

вершина которого (ТОР) называется ST или ST(0) и является плавающей. Принцип работы с круговым стеком сопроцессора аналогичен обычному калькулятору. Любая команда загрузки

данных сопроцессора автоматически перемещает вершину стека сопроцессора: ТОР=ТОР+1. На рис. 13.1 показана

гипотетическая ситуация, когда в результате выполнения какой- то команды вершиной стека стал регистр R6. Остальные

регистры распределяются подряд по кругу: R7-ST(1), R0- ST(2),...,R5-ST(7). Это и есть их текущие имена ST(i), i=l,...,7 на

момент выполнения данной команды сопроцессора. Если в этих регистрах есть данные, то они могут служить операндами в

командах сопроцессора. Обращаться напрямую к регистрам R0-R7 нельзя.

Система команд

Система команд сопроцессора достаточно простая, если знать ключ и немного понимать английский язык. Для их подключения нужно сделать следующее.

Воспользоваться одной из директив Ассемблера: .8087, .287 (.286р), .387(.386 .487 (.486р). Необходимо иметь в виду, что не все

команды сопроцессора, к сожалению, совместимы сверху вниз. Кроме того, директива использования процессора .х86р предполагает компиляцию и работу программы в 32-разрядном режиме. Поэтому результаты расчета, выполненные с использованием команд младших моделей сопроцессора, могут отличаться от результатов, полученных на старших моделях.

Сделать инициализацию сопроцессора с помощью команды FINIT

При компиляции использовать ДОПОЛНИТЕЛЬНЫЙ ключ /г или /е

(Emulated or Real floating-point instructions). Таким образом, теперь вызов компилятора Ассемблера для стыковки с C++ может иметь следующий вид:

tasm.exe Name.asm /I /r /ml

Арифметические команды

; Вычислить действительные корни квадратного уравнени¤:

; a*x*x + b*x + c = 0

.387

.model large,C

.data

EXTRN C a:Dword,b:Dword,c:Dword,x1:dword,x2:dword,d:dword

EXTRN C ac:Dword,bb:Dword

.code

 

public

quadr

four

dd

4.

two

dd

2.

Соседние файлы в папке Файлы преподавателя (наиболее достойные)