Лабораторная работа №81 / lab8_max
.docСанкт-Петербургский государственный университет
Кафедра МО-ЭВМ
Отчёт по лабораторной работе №8
по дисциплине «Организация и функционирование ЭВМ»
Выполнил: Добряков М.М.
Ст. гр. 0341
Проверил:
Санкт-Петербург
2002
-
Постановка задачи
Разработать подпрограмму на языке Ассемблера, обеспечивающую вычисление заданной математической функции с использованием математического сопроцессора. Подпрограмма должна вызываться из головной программы, разработанной на языке С. При этом должны быть обеспечены заданный способ вызова и обмен параметрами.
Выполнить трансляцию программы с подготовкой ее ассемблерной версии и отладочной информации. Для выбранного контрольного набора исходных данных прогнать программу под управлением отладчика td. При этом для каждой команды сопроцессора следует фиксировать содержимое используемых ячеек памяти, регистров ЦП и численных регистров сопроцессора до и после выполнения этой команды.
Проверить корректность выполнения вычислений для нескольких наборов исходных данных.
-
Цель работы
Научиться использовать команды сопроцессора, а так же научиться использовать ассемблер для написания подпрограмм используемых в языках высокого уровня таких например как C.
-
Теоретическая подготовка
Вычисление гиперболического косинуса происходит по формуле , для вычисления экспоненты используется эмуляция математического сопроцессора средствами языка C. Содержимое регистров сопроцессора после выполнения каждой команды показано на листинге 1.
Компиляция осуществляется с помощью строки вида: tcc -f87 lab8c lab8.asm,
где tcc - Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International
-f87 - 8087 floating point,
затем указывается исходник тестирующей подпрограммы на C, а затем исходник подпрограммы на ассемблере.
-
Проверка работоспособности программы
X=3, то cos(X)= 10.542768 Истинное значение 10,0676619957777658419539360351159
X=43, то cos(X)= 2363919734114673150.0 Истинное значение 2363919734114673280,7372287
X=0.0000001, то cos(X)= 1 Истинное значение 1,00000000000000500000000000000417
Листинг 1
80486 IPTR=5A5F7 OPCODE=546 OPTR=6D13C ; fld [x]
Valid ST(0) 3
Empty ST(1)
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A5FA OPCODE=1E1 OPTR=5D180 ; fabs
Valid ST(0) 3
Empty ST(1)
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5D039 OPCODE=5D9 OPTR=5D180 ; int 3eh; db 0d9e8h
Valid ST(0) 20.085536923187668
Empty ST(1)
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A600 OPCODE=1E8 OPTR=5D180 ; fld1
Valid ST(0) 1
Valid ST(1) 20.085536923187668
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A602 OPCODE=1C0 OPTR=5D180 ; fld st
Valid ST(0) 1
Valid ST(1) 1
Valid ST(2) 20.085536923187668
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A604 OPCODE=6F9 OPTR=5D180 ; fdivp ST(1), ST
Valid ST(0) 1
Valid ST(1) 20.085536923187668
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A606 OPCODE=6C1 OPTR=5D180 ; faddp
Valid ST(0) 21.085536923187668
Empty ST(1)
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A608 OPCODE=506 OPTR=5D372 ; fld half
Valid ST(0) 0.5
Valid ST(1) 21.085536923187668
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)
80486 IPTR=5A60C OPCODE=6C9 OPTR=5D180 ; fmulp
Valid ST(0) 10.542768461593834
Empty ST(1)
Empty ST(2)
Empty ST(3)
Empty ST(4)
Empty ST(5)
Empty ST(6)
Empty ST(7)