Читайте также:
|
|
1. Постановка задачі для конкретного варіанта.
2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи.
3. Лістинг програми з виведенням даних на екран монітора з використанням АРІ-функцій під Win32 та детальним коментарем і описом роботи.
4. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмою.
5. Короткий опис виконання програми.
6. Висновки за результатами роботи.
Приклад 16.3. Виконати операцію паралельного додавання за допомогою ММХ-команд над масивами цілих чисел. Якщо друге слово більше 55, то виконати операцію
a – e/b – de, де a = 0,2; b = 8,05; c = 2,2; d = 3,3;
інакше – виконати операцію a – e/b.
Лістинг 16.15:
title Rysovaniy A. N. & Gerasimovich N., НТУ ”ХПІ”, KIT-27v
; a - c/b - dc; a = 0,2; b = 8,05; c = 2,2; d = 3,3;
; a - c/b if (second word < 55)
.686; директива визначення типу мікропроцесора
.model flat,stdcall; завдання лінійної моделі пам’яті
; та угоди ОС Windows
.MMX; директива визначення команд MMX
option casemap: none; відмінність малих та великих літер
include \masm32\include\windows.inc; файли структур, констант …
include \masm32\macros\macros.asm
uselib kernel32, user32, fpu
fpuDiv macro _a,_c,_b; макрос з ім’ям fpuDiv
fld _c
fdiv _b
fld _a
fsubr
endm;; закінчення макросу
.data; директива визначення даних
_a REAL4 0.2
_b REAL4 8.05
_c REAL4 2.2
_d REAL4 3.3
arr1 WORD 1,2,3,4; масив чисел arr1 розміром у слово
len1 equ ($-arr1)/type arr1; кількість чисел масиву
arr2 WORD 5,6,7,5; масив чисел arr2 розміром у слово
len2 equ ($-arr2)/type arr2; кількість чисел масиву
arr1_2 BYTE (len1+len2) dup(0); розмір буфера для чисел масивів
st1 db "FPU-MMX Result",0; назва віконця
info db "x1 = "; підпис числа для віконця результату
st2 db 10 dup(?),0; буфер чисел для виведення повідомлення
.code; директива початку коду програми
_st:; мітка початку програми з ім’ям _st
movq MM1,QWORD PTR arr1; завантаження масиву чисел arr1
movq MM2,QWORD PTR arr2; завантаження масиву чисел arr2
paddb MM1,MM2; паралельне циклічне додавання чисел масивів
movq QWORD PTR arr1_2,MM1; збереження результату додавання
.if((WORD ptr arr1_2+2)>55); якщо друге слово більше 55
emms
fpuDiv [_a],[_c],[_b]
fld _d
fmul _c
fsub
invoke FpuFLtoA, 0, 10, ADDR st2, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr st2, addr st1, MB_ICONQUESTION
.else; інакше
emms; остання ММХ-команда
fpuDiv [_a],[_c],[_b]
invoke FpuFLtoA, 0, 10, ADDR st2, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr info, addr st1, MB_ICONINFORMATION
.endif; закінчення директиви.if
invoke ExitProcess, 0; повернення керування ОС Windows
; та вивільнення ресурсів
end _st; директива закінчення програми
Результат виконання програми з лістингу 16.15 наведено на рис. 16.26.
Для надання інформаційності спрощеного віконця використано параметр MB_ICONINFORMATION. Підпис числа результату "x1 = " виконано за допомогою послідовності команд:
info db "x1 = "; підпис числа для віконця результату
st2 db 10 dup(?),0; буфер чисел для виведення повідомлення
Виклик підпису з результатом виконується функцією MessageBox параметром addr info. А у зв’язку з тим, що в імені info відсутній 0 на кінці, виконується зчитування й наступного буфера, де безпосередньо розташовується результат операції.
Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.
Дата добавления: 2014-12-18; просмотров: 30 | Поможем написать вашу работу | Нарушение авторских прав |