Автор работы: Пользователь скрыл имя, 05 Июня 2013 в 18:56, реферат
Формулирование задачи:
> разработать программу, вычисляющую значение функции
> программа должна иметь модульную структуру
- один на ЯВУ (в данной работе Turbo Pascal)
- другой на Assembler
> вычисление значения функции с использованием системы команд устройства FPU процессора I*86
Функция Y=Ln(x)/x
1. Постановка задачи 3
1.1 Формулирование задачи 3
1.2 Постановка задачи на Assembler(преобразование LN) 3
2. Разработка алгоритма 3
2.1 Блок схема алгоритма 3
2.2 Описание алгоритма 4
3. Разработка проекта программы 4
3.1 Выбор средств проектирования 4
3.2 Разработка исходного текста программы 4
3.2.1Модуль на языке высокого уровня – Turbo Pascal 4
3.2.2Модуль на языке низкого уровня – Assembler 5
4. Описание продукта 8
5. Инструкция по использованию 8
6. Тестирование 9
Федеральное государственное автономное образовательное учреждение высшего
профессионального образования
"Национальный исследовательский университет
"Высшая школа экономики"
Факультет информационных технологий и вычислительной техники МИЭМ
Кафедра: Информационных технологий и автоматизированных систем
КУРСОВАЯ РАБОТА
по курсу дисциплины
ОПЕРАЦИОННЫЕ СИСТЕМЫ
Тема работы
Исследование способов использования процедур и функций, написанных на языке низкого
уровня, в программах на языке высокого уровня
Работу выполнила
студент группы К-31
ФИТиВТ
Магид Юлия
ПРОВЕРИЛ
Погорелов Л. А.
Москва 2013
1.2 Постановка задачи на Assembler(преобразование LN) 3
3.2.1Модуль на языке высокого уровня – Turbo Pascal 4
3.2.2Модуль на языке низкого
уровня – Assembler
4. Описание продукта
5. Инструкция по использованию
6. Тестирование
> разработать программу, вычисляющую значение функции
> программа должна иметь модульную структуру
- один на ЯВУ (в данной работе Turbo Pascal)
- другой на Assembler
> вычисление значения функции с использованием системы команд устройства FPU процессора I*86
Функция Y=Ln(x)/x
1.2 Постановка задачи на Assembler(преобразование LN)
1.Загружаем Х2=1 FLD DS :X2
2.Загружаем Х1 FLD DS: X1
3.Вычисляем X2Log 2(X1) FYL2X
4.Загружаем Log 2(Е) FLD2E
5.Умножаем Log 2(Е)* X2Log 2(X1) FMUL
6.Загружаем Х1
7.Делим Loge(X1)/X1
1. Вводим значение х
2. Переходим к процедуре на Assembler
3. Обращение в стек
4. Возвращение полученного значения в модуль на Pascal и вывод результата
Используемые стредства:
- ЯВУ (Turbo Pascal)
- Assembler (Tasm, TLink)
Program Lab3_1;
uses crt;
FUNCTION asmADD :double;external;
{$L E:\Lab3\LAB3_2\Lab3_1.obj}
VAR
X1,Y:double;
X2:double;
REZ: double;
BEGIN
Clrscr;
X2:=1;
Write('X1 = ');
Readln(X1);
Writeln(X1);
Y:=Ln(X1)/X1;
Writeln(‘Y= ‘,Y);
REZ:= asmADD;
Writeln;
Writeln('X1 = ', X1);
Writeln('REZ = ',REZ );
Writeln;
Readln;
END.
;Задание - изучить и исследовать
организацию процедур на
; с передачей параметра(
; Изучить возврат значения
MASM
MODEL small
STACK 256
data segment Dword public;
extrn X1:Qword
extrn X2:Qword
data ends
.code ;
assume ds:data;
main:
p386
asmproc proc near
PUBLIC asmproc
; пролог
push BP
mov BP,sp
;конец пролога
;pusha ; включаем в стек ax,cx, dx, bx, исходный sp, bp, si, di
push ax
mov AH,02h;Задаем функцию ДОС вывода установки видеокурсора
; извлекаем параметры из стека
mov dh, [bp+6] ; переданный первым - номер строки
mov dl, [bp+8] ; переданный первым - номер столбца
int 10h ;
mov AH,09h ;Задаем функцию BIOS вывода символа и атрибута символа в позицию курсора
;Вход: AH = 09h
; AL = АSCII-код символа
; BH = номер дисплейной страницы
; BL = атрибут (текст) или цвет (графика) символа
; CX = счетчик выводимых символов (не нуль!)
; Выход: нет
; Описание: Выводит в заданную страницу дисплея символ AL с
; атрибутом BL с текущей позиции курсора CX раз. Текущая позиция;
; курсора не изменяется.
mov al, [bp+10] ; Ch - передан с стек первым
mov bl, 07h
mov cx, [bp+4] ; col - параметр, был передан в стек последним перед CALL
; 4 - так как в стеке IP ,BP и далее переданные данные
int 10h ;
pop ax
;эпилог
MOV SP,BP
POP BP
RET 8 ; возврат из процедуры с указанием количества извлечений из стека
;конец эпилога
asmproc endp
asmADD proc near
PUBLIC asmADD
; пролог
push BP
mov BP,sp
;конец пролога
push dx
push ds ; настроил сегментн рег данных на CS
; так как message1 находится в сегменте кода
MOV ax,cs
MOV ds,ax
mov AH,09h ;
mov DX,offset message1;
int 21h
pop ds ; Возвращае настройку на сегмент данных для обращения за Х1 и Х2
pop dx
FLD DS:X2
FLD DS: X1 ; После переноса за восстановлением DS этих команд -УСПЕХ!
FYL2X
FLD2E
FMUL
FLD DS:X1
FDIV
;эпилог
MOV SP,BP
POP BP
RET 2 ; возврат из процедуры с указанием количества извлечений из стека
;конец эпилога
asmADD endp
PUBLIC message1;
message1 db 'Процедура asmADD отработала REZ = $';
end main ; конец программы
LAB3_1.exe Исполняемый файл
LAB3_1.obj Объектный файл
Lab3_1.asm Код на Assembler
LAB3_1.pas Код на Pascal для вычисления
TASM.exe Компилятор Assembler
TP Папка со средой TURBO Pascal
Программа запускается посредством двойного нажатия мыши по исполняемому файлу Lab3_1.exe. Значения вводятся любые в диапазоне: [5.0*10e324…1.7*10e308 ] с 15-16 кол-вом значащих цифр. Программа воспринимает только числовые символы, в противном случае программа завершится с ошибкой (при переходе к десятичной записи используется знак ".").
Пример работы программы:
ЛИСТ ЛИСТОВ 10