Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Реалізація функцій ABS(X), [X], {x}

Тип Реферат
Предмет Информатика и программирование
Просмотров
854
Размер файла
24 б
Поделиться

Ознакомительный фрагмент работы:

Реалізація функцій ABS(X), [X], {x}

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

Курсова робота

з дисципліни “Програмування на мові ASM-86” на тему:

Реалізація функцій ABS(X), [X], {x}

ЗМІСТ

1. Вступ

2. Постановка задачі

3. Обґрунтування вибору методів розв’язку задачі

4. Алгоритм програми.

5. Реалізація програми

6. Системні вимоги

7. Інструкція для користувача

8. Висновки

9. Використана література

Додаток. Лістинг програми


1. Вступ

У процесі роботи з комп’ютером виникає необхідність роботи з різними видами даних. Так, наприклад, мови високого рівня можуть працювати з цілими, дробовими числами, символами, рядками і т.д. Програмуючи на мові асемблера, найчастіше маємо справу з цілими числами. Стандартні розміри чисел такі: 8-розрядні (байти), 16-розрядні (слова), 32-розрядні (подвійні слова). У пам’яті вони записуються послідовно, починаючи з молодшого байта.

Також в асемблері є можливість роботи з дробовими числами. Для роботи з ними використовується математичний сопроцесор або його емулятор (він входить до складу основного процесора починаючи з 486DX). Цей сопроцесор оперує з цілими числами та з числами з плаваючою комою. Використовуються 32-, 64- та 80-розрядні формати запису чисел. Наприклад, формат 32-бітного дробового числа має такий формат (тип float в С, REAL в PASCAL):

Найстарший біт – знак мантиси (0- “+”, 1- “-“).

Далі – 8 розрядів порядку, до якого додано 127.

Потім – 23-розрядна мантиса.

Отже, з цими числами можуть робити різні операції як сопроцесор, так і основний процесор.


2. Постановка задачі

Необхідно створити програму, яка б перетворювала ціле число в дробове і навпаки, а також функції [x], {x}, |X|.

3. Обґрунтування вибору методів розв’язку задачі

У зв’язку з тим, що не на кожній машині присутній сопроцесор, то програма буде оперувати з 32-розрядними числами з плаваючою комою, які розташовані у простій пам’яті. Вони матимуть стандартний запис, і тому з ними може проводити роботу і сопроцесор, і програми, які його замінюють.

Робота буде полягати в конвертуванні бітів у числах і деяких обчисленнях. Для цього використовуються команди мови асемблер передачі інформації, обчислень, зсувів та логіки. Також, для демонстрації роботи програми використовується завантаження даних в регістри сопроцесора (fld, fst).

4. Алгоритм програми

а) Алгоритм перетворення цілого числа в дійсне

1. Обчислити знак числа, якщо число від’ємне – обернути його.

2. Записати число без знака у вигляді мантиси.

3. Взяти початкове значення порядку – 127.

4. Зсувати мантису вліво до тих пір, поки старший біт не стане рівним 1. Зсунути ще раз (старший біт мантиси ігнорується). Збільшити порядок на кількість зсувів.

5. Скомбінувати отримані знак, мантису і порядок у відповідності з форматом.

б) Алгоритм переведення числа з дійсного в ціле

1. Визначити знак дійсного числа.

2. Визначити мантису і порядок

3. Від порядку відняти 127 – це дорівнює Х.

4. Зсунути мантису на Х вправо – це і буде ціле число.

в) Функція [Х]

1. Перетворити дійсне число в ціле

2. Результат знову перетворити в дійсне

г) Функція |X|

1. Поставити в 0 знак мантиси дробового числа

д) Функція {X}

1. Виділити цілу і дробову частину (аналогічно як при переведенні дійсного в ціле) і відкинути цілу.

2. Взяти порядок рівний 127.

3. Зсувати мантису вліво поки старший біт рівний 1 не вийде за межі мантиси.

4. Зменшити порядок на кількість зсувів.

5. Записати результат у відповідний формат.

5. Реалізація програми

Програма написана на мові ASM-86 з використанням команд сопроцесора та команд процесора 286/386. Вона складається з функцій, які мають цілі вхідні та вихідні дані в регістрі AX, а дробові дані – за адресою DS:SI та ES:DI. Для роботи необхідно записати у відповідні регістри дані або їх адреси, викликати функції і прочитати результат з вказаного місця.

Програма компілюється Turbo Assembler, зв’язується за допомогою TLINK.

6. Системні вимоги

- Математичний сопроцесор (для демонстрації)

- Мікропроцесор Intel 80386 або старший.

- Для перегляду результатів – Turbo Debugger або інший відлагоджувач.

7. Інструкція для користувача

Програма для роботи з числами містить 5 функцій. Розглянемо приклади їх викликів.

Необхідно описати такі дані:

r dd 0 ;дійсне число

I dw 0 ;ціле число

а) перетворення цілого в дійсне:

mov ax,word ptr [I]

mov di,seg r

mov es,di

mov di,offset r

call WORD_TO_REAL

б) перетворення дійсного в ціле

mov ax,word ptr [I]

mov si,seg r

mov ds,si

mov si,offset r

call REAL_TO_WORD

в) визначення [X]

mov si,seg r

mov ds,si

mov si,offset r

call REAL_TRUNC

г) визначення {X}

mov si,seg r

mov ds,si

mov si,offset r

call REAL_REAL

д) визначення {X}

mov si,seg r

mov ds,si

mov si,offset r

call REAL_ABS

8. Висновки

Отже, є розробленою програма, яка виконує операції з дробовими та цілими числами – конвертування, {X} |X| [X]. Був розглянутий формат дійсних чисел, і наведені алгоритми розв’язку.

9. Використана література

1. Ровдо А. А. Микропроцессоры от 8086 до Pentium III Xeon и AMD-K6-3. М., ДМК, 2000


Додаток. Лістинг програми

.model small

.stack 100

.486

.data

f dd 0

.code

start:

jmp begin

;------------------------------------------------------------

;обчислення функцiї ABS(x) - DS:SI - REAL

REAL_ABS proc

push bx

mov bh,byte ptr ds:[si+3]

and bh,7fh

mov byte ptr ds:[si+3],bh

pop bx

ret

REAL_ABS endp

;------------------------------------------------------------

;конвертор REAL в DS:SI в WORD (AX)

REAL_TO_WORD proc

jmp start_proc

x dw 0 ;тимчасовий параметр AX

start_proc:

pusha

;1)видiлити окремо знак, порядок i мантису

; bh - знак, bl - порядок, ax - мантиса

mov bh,byte ptr ds:[si+3]

and bh,80h ;видiлили знак

mov bl,byte ptr ds:[si+3]

shl bl,1

mov ah,byte ptr ds:[si+2]

shr ah,7

or bl,ah ;видiлили порядок

mov ah,byte ptr ds:[si+2]

mov al,byte ptr ds:[si+1]

shl ax,1 ;видiлили мантису

cmp bl,127 ;перевiрка на нуль

jb res_zero

sub bl,127

mov cl,15

sub cl,bl ;cl-кiлькiсть зсувiв вправо мантиси

stc ;старший розряд завжди 1

rcr ax,1

shr ax,cl

mov word ptr cs:[x],ax ;... i отримаємо результат!

cmp bh,0 ;враховуємо знак

je res_ok

neg ax

mov word ptr cs:[x],ax

jmp res_ok

res_zero:

mov word ptr cs:[x],0

res_ok:

popa

mov ax,word ptr cs:[x]

ret

REAL_TO_WORD endp

;---------------------------------------------------------------

;конвертор 16-бiтного слова в AX в коротке дiйсне es:di (4 байта)

WORD_TO_REAL proc

pusha

;нуль?

cmp ax,0

jne no_zero

mov dword ptr es:[di],0

popa

ret

no_zero:

push di

;1) якщо d15=1 - bh=80h (знак), iнакше bh=0

xor bh,bh

test ax,8000h

jz plus

neg ax

mov bh,80h

plus:

;2)зсунути AX влiво так, щоб старша одиниця була в CF.

; пiдрахувати кiлькiсть зсувiв

xor di,di

mov cx,16

shift: inc di

shl ax,1

jc stop_shift

loop shift

stop_shift:

;3)обчислити порядок: bl=127+16-di

mov cx,di

mov bl,127+16

sub bl,cl

pop di

;отже,маємо:bh-знак,bl-порядок,ax-мантиса

;ставимо найстарший байт (3) в 0

mov byte ptr es:[di],0

;ставимо молодший байт: знак+7 старших бiтiв порядку

mov dl,bh

push bx

shr bl,1

or dl,bl

pop bx

mov byte ptr es:[di+3],dl

;ставимо 1-й байт: останнiй байт порядку i 7 ст байт мантиси

and bl,1

shl bl,7

shr ax,1

or bl,ah

mov byte ptr es:[di+2],bl

;ставимо 2-й байт: молодшi 8 байт мантиси

mov byte ptr es:[di+1],al

popa

ret

WORD_TO_REAL endp

;------------------------------------------------------------

;обчислення функцiї [X] - DS:SI - REAL

REAL_TRUNC proc

push ax

call REAL_TO_WORD

call WORD_TO_REAL

pop ax

ret

REAL_TRUNC endp

;------------------------------------------------------------

;обчислення функцiї {X} - DS:SI - REAL

REAL_REAL proc

push eax

push edx

push bx

push cx

;в EDX записати у зворотньому порядку число

mov dh,byte ptr ds:[si+3]

xor bh,bh

mov bl,dh

shl bl,1

adc bh,0

shl bh,7

mov dl,byte ptr ds:[si+2]

mov ah,dl

and ah,80h

shr ah,7

or bl,ah ;в BH - знак, в BL - порядок, в EDX - число

shl edx,16

mov dh,byte ptr ds:[si+1]

mov dl,byte ptr ds:[si]

cmp bl,127

jb stop_tr ;це вже число <0!

shl edx,9 ;прибрати все зайве (знак i порядок)

sub bl,127 ;кiлькiсть зсувiв (бiтiв з цiлою частиною)

mov cl,bl

shl edx,cl ;вiдкинути цiлу частину

;зараз в EDX - дробова частина

;тепер обчислюємо порядок

mov bl,127

shift_l:

dec bl

shl edx,1

jnc shift_l ;отже, тепер порядок в bl, а в edx готова мантиса

;тепер зсунути EDX вправо на 9

shr edx,9

xor eax,eax

mov al,bh

shl eax,1

or al,bl

shl eax,23

or edx,eax ;i комбiнуємо!

;тепер записати в пам`ять

mov byte ptr ds:[si],dl

mov byte ptr ds:[si+1],dh

shr edx,16

mov byte ptr ds:[si+2],dl

mov byte ptr ds:[si+3],dh

stop_tr: ;вихiд

pop cx

pop bx

pop edx

pop eax

ret

REAL_REAL endp

;------------------------------------------------------------

begin:

mov ax,@data

mov es,ax

mov ds,ax

mov di,offset f

mov si,offset f

;mov ax,-32768

;call WORD_TO_REAL

;fst dword ptr es:[di]

;call REAL_TRUNC

fst dword ptr es:[di]

;call REAL_TO_WORD

call REAL_REAL

fld dword ptr es:[di]

mov ah,4ch

int 21h

end start


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно