Реферат Курсовая Конспект
Зміст звіту - раздел Образование, Програмуванням задач з використанням команд співпроцесора 1. Постановка Задачі Для Конкретного Варіанта. 2. Блок-Схема Алгорит...
|
1. Постановка задачі для конкретного варіанта.
2. Блок-схема алгоритму виконання прикладу.
3. Лістинг програми з детальним коментарем та описом роботи.
4. Рrint screen екрана 32-розрядного налагоджувача з виконанням програми та результатами виконання.
5. Короткий опис виконання програми.
6. Висновки за результатами роботи.
Приклад 10.15. Обчислити 3 значення функції Yn = 5х2/1,1 (x змінюється від 1 з кроком 1). Результат розмістити в пам’яті та вивести на екран.
Алгоритм вирішення прикладу 10.15 наведено на рис. 10.23.
У зв’язку з тим, що необхідно вивести три числа, для розділу комірок використовується додатковий елемент (регістр EDX). Спочатку цей регістр дорівнює нулю. Співпроцесор записую в пам’ять 80-розрядні числа (десять байтів). Тому в циклі виконується команда
add edx,0Ah
для виконання зміщення відносно попередньої комірки, яка потім буде адресуватися як res[edx].
У прикладі при отриманні х2 використовуються цілі числа. Тому необхідно виконати команду
fild dword ptr resEAX.
Якщо виконати команду fld … , то в даному випадку результат буде з похибкою.
А оскільки АРІ-функції при своєму виконанні змінюють регістри, то значення тих регістрів, які потрібні при виконанні програми, необхідно зберігати (найкраще – в стеку).
Лістинг 10.18. Програма виконання прикладу 10.15:
title CopyRight by Rysovaniy A. N. Обчислення Yn = 5х2 / 1,1
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам’яті
; та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includefpu.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
includelib masm32libfpu.lib
BSIZE equ 30 ; розмір буфера
.data ; директива визначення даних
const1 DWORD 1.1 ; визначення в 32-розрядній комірці числа 1.1
const2 DWORD 5.0 ; визначення в 32-розрядній комірці числа 5.0
resEAX DWORD 0 ; 32-розрядна комірка для тимчасового результату
res TBYTE 3 dup (0) ; три 80-розрядні комірки для результатів
stdout DWORD ? ; резервування в пам’яті 32-розрядної комірки
; з ім’ям stdout для збереження дескриптора виведення
cWritten DWORD ? ; резервування 32-розрядної комірки пам’яті
; з ім’ям cWritten для адреси символів виведення
buf BYTE BSIZE dup (?) ; кількість байтів для запису послідовності символів
.code ; директива початку коду програми
_st: ; мітка початку програми
xor edx,edx ; початкове значення (для зміщення)
mov ecx,3 ; лічильник циклів
mov ebx,1 ; початкове значення х
m1: mov eax,ebx ; підготування до піднесення в степінь
mul ebx ; піднесення в степінь
mov resEAX,eax ; збереження х2 в пам’яті
finit ; ініціювання співпроцесора
fld dword ptr const1 ; st(0) := 1.1
fld dword ptr const2 ; st(0) := 5.0, st(1) := 1.1
fild dword ptr resEAX ; st(0) := resEAX, st(1) := 5.0, st(2) := 1.1
fmul st,st(1) ; st(0) := resEAX x 5.0
fdiv st,st(2) ; st(0) := st(0)/st(2)
fstp res[edx] ; збереження результату в комірці res[edx]
push ecx ; підготовка до виклику АРІ-функції
push edx ; підготовка до виклику АРІ-функції
invoke GetStdHandle, STD_OUTPUT_HANDLE ; отримання дескриптора
mov stdout, eax ; збереження одержаного дескриптора у пам’яті
invoke FpuFLtoA, ; функція перетворення 80-розрядного числа
ADDR res[edx], ; адреса числа, що відображається
10, ; кількість десяткових знаків після коми (10)
ADDR buf, ; адреса буфера для символів, які перетворяться
SRC1_REAL or SRC2_DIMM ; операанд SRC1в пам’яті
; операнд SRC2 з параметром DIMM
invoke WriteConsoleA, ; АРІ-функція виведення на екран
stdout, ; дескриптор стандартного пристрою виведення
ADDR buf, ; адреса початку повідомлення
BSIZE, ; розмір повідомлення
ADDR cWritten, ; адреса, де зберігається число символів
pop edx ; встановлення edx
add edx,0Ah ; підготовка до вибору наступної комірки
inc ebx ; збільшення х
pop ecx ; встановлення есх
loop m1 ; перейти, якщо не нуль
invoke ExitProcess, 0 ; повернення керування ОС Windows
; та визволення ресурсів
end _st ; директива закінчення програми
На рис. 10.24 наведено результат виконання лістингу 10.18.
Приклад 10.16.Обчислити 6 значень функції: Y = cos x, де x змінюється в градусах від 10 з кроком 8.
Лістинг 10.20. Програма виконання прикладу 10.16:
title Rysovaniy A.N. rysov@rambler.ru
; Y = cosx, x змінюється в градусах від 10 з кроком 8.
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам’яті
; та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includefpu.inc
include masm32includeuser32.inc ; для MessageBox
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
includelib masm32libfpu.lib
BSIZE equ 30 ; розмір буфера
.data ; директива визначення даних
const DWORD 0.01745 ; (π = 3,14)/180 – градуси в радіанах
i1 DWORD 10 ; початкове значення градусів
st1 db " y=cosx",0
st2 db "Автор: Рысованый А.Н.",0
st3 db " Прощание",0
st4 db "До свидания",0
st6 db "До следующей лабораторной работы !!!",0
res TBYTE 6 dup (0) ; шість 80-розрозрядних комірок для результатів
stdout DWORD ? ; резервування в пам’яті 32-розрядної комірки
; з ім’ям stdout для збереження дескриптора виведення
cWritten DWORD ? ; резервування 32-розрядної комірки пам’яті
; з ім’ям cWritten для адреси символів виведення
buf BYTE BSIZE dup (?); кількість байтів для запису послідовності символів
.code ; директива початку коду програми
start: ; директива початку коду програми
xor edx,edx ; початкове значення (для зміщення)
mov ecx,6 ; лічильник циклів
finit ; ініціювання співпроцесора
@@: fild dword ptr i1 ; завантаження в st(0) змінної і1 (градусів)
fmul dword ptr const ; st(0) := st(0) ´ const
fcos ; st(0) := cos(i1) в радіанах
fstp res[edx] ; збереження результату в комірці res[edx]
push ecx ; підготовка до виклику АРІ-функції
push edx ; підготовка до виклику АРІ-функції
invoke GetStdHandle, STD_OUTPUT_HANDLE ; отримання дескриптора
mov stdout, eax ; збереження одержаного дескриптора у пам’яті
invoke FpuFLtoA, ; функція перетворення 80-розрядного числа
ADDR res[edx], ; адреса числа, що відображається
10, ; кількість десяткових знаків після коми (10)
ADDR buf, ; адреса буфера для символів, які перетворяться
SRC1_REAL or SRC2_DIMM ;адреса 80-розрядного числа в пам’яті
; та саме число
invoke WriteConsoleA, ; АРІ-функція виведення на екран
stdout, ; дескриптор стандартного пристрою виведення
ADDR buf, ; адреса початку повідомлення
BSIZE, ; розмір повідомлення
ADDR cWritten, ; адреса, де зберігається число символів
pop edx ; встановлення edx
add edx,0Ah ; підготовка до вибору наступної комірки
add i1,8 ; збільшення градусів на крок дискретизації
pop ecx ; встановлення есх
loop @b ; перейти, якщо не нуль
invoke MessageBox, ; АРІ-функція виведення спрощеного вікна консолі
NULL, ; hwnd – ідентифікатор вікна
addr st2, ; адреса рядка, яка містить текст повідомлення
addr st1, ; адреса рядка, яка містить заголовок повідомлення
MB_YESNO or MB_ICONINFORMATION ; вигляд діалогового вікна
xor eax,6 ; виділення розрядів коду повернення кнопки YES
jz m1
invoke MessageBox, NULL, addr st6, addr st3, MB_ICONWARNING
jmp m2
m1: invoke MessageBox, NULL, addr st4, addr st3, MB_ICONERROR
m2: invoke ExitProcess, 0 ; повернення керування ОС Windows
; та вивільнення ресурсів
end start ; директива закінчення програми з іменем start
У цій програмі команда з унікальною міткою @@: fild означає, що до неї звертається у циклі команда, яка розташовується після неї в тексті та має символ з літерою @b. Такі мітки можна змінити на звичайні.
Результат виконання програми з лістингу 10.20 у вигляді вікна наведено на рис. 10.26.
Константи NULL та MB_OK, використані у функції Messagebox, покращують читабельність коду. До них можна безпосередньо звертатися в програмі.
Оператор addr використовується для передачі адреси мітки функції. Він дійсний тільки в контексті директиви invoke.
Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.
– Конец работы –
Эта тема принадлежит разделу:
Програмуванням задач з використанням команд співпроцесора... Мета заняття... поглибити і закріпити знання з архітектури МП платформи х і навички його програмування...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Зміст звіту
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов