Аппаратное обеспечение персонального компьютера



           

Программа NPU1


Приведем пример самой простой программы 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).


Содержание  Назад  Вперед