Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
33.28 Кб
Скачать

Санкт-Петербургский государственный электротехнический университет

Отчёт по лабораторной работе №8

по дисциплине «Организация и функционирование ЭВМ»

Вариант №6

Проверил:

Выполнил: Юбрин А.Н.

Шин Е.Д.

Санкт-Петербург

2002

Постановка задачи

Разработать подпрограмму на языке Ассемблера, обеспечивающую вычисление заданной математической функции с использованием математического сопроцессора. Подпрограмма должна вызываться из головной программы, разработанной на языке С. При этом должны быть обеспечены заданный способ вызова и обмен параметрами.

Выполнить трансляцию программы с подготовкой ее ассемблерной версии и отладочной информации. Для выбранного контрольного набора исходных данных прогнать программу под управлением

отладчика td. При этом для каждой команды сопроцессора следует фиксировать содержимое используемых ячеек памяти, регистров ЦП и численных регистров сопроцессора до и после выполнения этой команды.

Проверить корректность выполнения вычислений для нескольких наборов исходных данных.

Требуется вычислить значение функции xe

  1. Цель работы

Научиться использовать команды сопроцессора, а так же научиться использовать ассемблер для написания подпрограмм используемых в языках высокого уровня таких например как C.

При выполнении вычисления функции, сначала в стек сопроцессора заносится значение x, затем значение константы 2e, после этого выполняется умножение с выталкиванием fmulp

Содержимое регистров сопроцессора после выполнения каждой команды показано на листинге 1.

Компиляция осуществляется с помощью строки вида: tcc -f87 lab8c lab8.asm,

где tcc - Turbo C Version 2.01 Copyright (c) 1987, 1988 Borland International

-f87 - 8087 floating point,

  1. Проверка работоспособности программы

X=3, то 32e=19.74 Истинное значение 19.742658

X=1, то 2e= 6.58 Истинное значение 6.580886

X=1/2e, то ldexp=1 Истинное значение 1

Листинг 1

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)

Fld exp2

Valid ST(0) 6.580886

Valid ST(1) 3

Empty ST(2)

Empty ST(3)

Empty ST(4)

Empty ST(5)

Empty ST(6)

Empty ST(7)

fmulp

Valid ST(0) 19.742658

Empty ST(1)

Empty ST(2)

Empty ST(3)

Empty ST(4)

Empty ST(5)

Empty ST(6)

Empty ST(7)

Текст программа на C

#include <stdio.h>

extern double ldexp(double);

void main()

{

float i;

printf("*** Вычисление значения x*2^exp ***\n");

printf("Введите значение x:");

scanf("%f",&i);

printf("%f*2^exp=%f",i,ldexp(i));

}

Текст программы на assembler

dosseg

.model small

.data

Exp2 dq 6.580885988

.code

public _ldexp

_ldexp proc

.386

arg x:qword

push BP

mov BP, SP

fld [x] ; ST = x

fld Exp2 ; ST (1) = x ST=2^exp

fmulp ; ST =x*2^exp

pop BP

ret

_ldexp endp

end

5. Вывод: В результате проведенной лабораторной работы, мы освоили работу с сопроцессором.

Соседние файлы в папке Лабораторная работа №81