Приведем пример самой простой программы NPU1 (листинг 10.1), которая выполняет вычисления по следующей несложной формуле:
z = x + y;
В этой программе значения x и y задаются в виде констант.
Листинг 10.1. Файл npu1\npu1.asm
; =====================================================
; Простейшая программа для работы с арифметическим
; сопроцессором
;
; (C) A. Frolov, 1997
;
; E-mail: frolov@glas.apc.org
; WWW: http://www.glasnet.ru/~frolov
; or
; http://www.dials.ccas.ru/frolov
; =====================================================
.model small
.STACK 100h
.DATA
; Здесь находятся константы с одинарной
; точностью x и y
x dd 1.0
y dd 2.0
; Резервируем четыре байта для результата
z dd ?
.CODE
begin:
mov ax, DGROUP
mov ds, ax
; Записываем в стек численных регистров
; значение x
fld x
; Складываем содержимое верхушки стека
; с константой y
fadd y
; Записываем результат в ячейку z
fstp z
; Завершаем работу программы и
; возвращаем управление операционной системе
mov ax, 4C00h
int 21h
END begin
Как убедиться в том, что программа работает правильно?
Для этого мы используем отладчик CodeView, содержащий очень удобные средства отладки программ, работающих с арифметическим сопроцессором.
Запустим отладчик CodeView, передав ему в качестве параметра имя приведенной выше программы:
cv npu1.exe
После того, как отладчик запустится, откройте окно регистров сопроцессора. В нижней части экрана появится окно регистров сопроцессора, показанное на рис. 10.20.
Рис.10.20. Окно регистров сопроцессора
Пусть вас не смущает то, что в этом окне пока не показывается состояние регистров сопроцессора. Нажмите клавишу F8, выполнив один шаг программы.
Теперь вы видите содержимое регистров управления и состояния (cControl, cStatus), регистра тегов (cTag), регистров указателей команд и данных (Instr Ptr, Data Ptr), код выполняемой команды (Opcode).