Исследование способов использования процедур и функций, написанных на языке низкого уровня, в программах на языке высокого уровня

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

Kursovayai.doc

— 181.00 Кб (Скачать документ)

Федеральное государственное  автономное образовательное учреждение высшего 

профессионального образования  
"Национальный исследовательский университет  
"Высшая школа экономики"

Факультет информационных технологий и вычислительной техники МИЭМ

Кафедра: Информационных технологий и автоматизированных систем

 

 

КУРСОВАЯ РАБОТА

по курсу дисциплины

ОПЕРАЦИОННЫЕ СИСТЕМЫ

 

Тема работы

Исследование способов использования  процедур и функций, написанных на языке  низкого 

уровня, в программах на языке высокого уровня

 

 

Работу выполнила

студент группы К-31

ФИТиВТ

Магид Юлия

ПРОВЕРИЛ

Погорелов Л. А.

 

 

Москва  2013 

  1. Постановка задачи                                                                                3
    1. Формулирование задачи          3

1.2 Постановка задачи на Assembler(преобразование LN)                3

  1. Разработка алгоритма                                                                            3
    1. Блок схема алгоритма                                                                       3
    2. Описание алгоритма                                                                         4
  2. Разработка проекта программы                                                             4
    1. Выбор средств проектирования                                                       4
    2. Разработка исходного текста программы                                        4

3.2.1Модуль на  языке высокого уровня – Turbo Pascal                  4

3.2.2Модуль на языке низкого уровня – Assembler                         5

4. Описание продукта                                                                               8

5. Инструкция по использованию                                                            8

6. Тестирование                                                                                         9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

    1. Формулирование задачи

  > разработать программу, вычисляющую значение функции

  > программа должна иметь модульную структуру

  - один на ЯВУ (в данной работе 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                            FLD DS :X1

7.Делим Loge(X1)/X1                     FDIV

 

  1. Разработка алгоритма

    1. Блок схема алгоритма



 

 


 

 

 

 

    1. Описание алгоритма

1. Вводим значение  х

2. Переходим к процедуре  на Assembler

3. Обращение в стек

4. Возвращение полученного  значения в модуль на Pascal и вывод результата

  1. Разработка проекта программы

    1. Выбор средств проектирования

Используемые стредства:

  - ЯВУ (Turbo Pascal)

  - Assembler (Tasm, TLink)

 

 

    1. Разработка исходного текста программы

      1. Модуль на языке высокого уровня – Turbo Pascal

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.

 

 

      1. Модуль на языке низкого уровня – Assembler

;Задание - изучить и исследовать   организацию процедур на Ассемблере

; с передачей параметра(аргумента)  через стек,

; Изучить возврат значения функции  в паскаль

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 ; конец программы

 

 

  1. Описание продукта

LAB3_1.exe    Исполняемый файл

LAB3_1.obj    Объектный файл

Lab3_1.asm     Код на Assembler

LAB3_1.pas     Код на Pascal для вычисления

TASM.exe        Компилятор Assembler

TP Папка со средой TURBO Pascal

  1. Инструкция по использованию

Программа запускается  посредством двойного нажатия мыши по исполняемому файлу Lab3_1.exe. Значения вводятся любые в диапазоне: [5.0*10e324…1.7*10e308 ] с 15-16 кол-вом значащих цифр.  Программа воспринимает только числовые символы, в противном случае программа завершится с ошибкой (при переходе к десятичной записи используется знак ".").

  1. Тестирование

Пример работы программы:

 

 






          ЛИСТ             ЛИСТОВ 10


Информация о работе Исследование способов использования процедур и функций, написанных на языке низкого уровня, в программах на языке высокого уровня