Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторна робота “Дослідження програм з використанням команд

Читайте также:
  1. B.2.Описание дополнительных команд для семейства PIC 16СХХ
  2. B1. Опис команд PIC 12CXX і PIC 16C5X
  3. C) жеке командалар немесе команда топтары көп рет қайталанатын болса
  4. C. Движение информации и ее трансформация от исходной в командную
  5. D) программа
  6. I)Однофакторный дисперсионный анализ (выполняется с применением программы «Однофакторный дисперсионный анализ» надстройки «Анализ данных» пакета Microsoft Excel).
  7. I. Параметры абзацазадаются командойФормат→Абзац
  8. I. ПРИКЛАДНОЕ ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ
  9. I. ПРОГРАМА КУРСУ
  10. I. Программирование на CF Pascal

1. Постановка задачі для конкретного варіанта.

2. Блок-схема алгоритму виконання прикладу з детальним коментарем та описом роботи.

3. Лістинг програми з виведенням даних на екран монітора з використанням АРІ-функцій під Win32 та детальним коментарем і описом роботи.

4. Рrint screen екрана 32-розрядного налагоджувача з виконаною програмою.

5. Короткий опис виконання програми.

6. Висновки за результатами роботи.

Приклад 18.2. Виконати паралельне порівняння за допомогою SSE2-команд 2-х масивів по 9 чисел. Якщо один масив менший від другого, то виконати операцію

(a – e) bd/b, де a = 0,1; b = 1,05; c = 2,1; d = 3,2;

інакше – виконати операцію d/b.

 

Лістинг 18.3:

title Rysovaniy A.N. & Хмеленко Д., НТУ “ХПІ”, КІТ-17а

.386; директива визначення типу мікропроцесора

.model flat,stdcall; завдання лінійної моделі пам’яті та угоди ОС Windows

.XMM; використання регістрів SSE

option casemap:none; відмінність малих та великих літер

include \masm32\include\windows.inc; файли структур, констант …

include \masm32\macros\macros.asm

uselib kernel32, user32, fpu

BSIZE equ 50

 

.data

mas1 dd 11.4, 14.02, 9.8, 4.0, 12.14, 1.82, 67.54, 9.95, 7.16; масив №1

len EQU $- mas1

mas2 dd 11.4, 14.02, 3.14, 2.718, 5.0, 45.45, 23.35, 9.95, 79.2; масив №2

rez dd len dup(0); результат порівняння

rez2 dq?; для результату виконання операцій

a1 dd 0.10

b1 dd 1.05

c1 dd 2.10

d1 dd 3.20

buf BYTE BSIZE dup(?)

st1 db "The Rezult mas1!=mas2",0; заголовки вікна повідомлень

st2 db "The Rezult mas1==mas2",0

st3 dd 0

flag db 0

 

.code

_st:

xor edx,edx

mov eax,len; завантаження 40 байтів масиву

shr eax,2; len/4 = 10 - визначення кількості чисел

mov ebx,4

div ebx; визначення кількості циклів

mov ecx,eax

lea esi,mas1; завантаження масиву №1 в esi

lea edi,mas2; завантаження масиву №2 в edi

xor ebx,ebx

 

.WHILE(ecx!=0)

movupd XMM0,[esi]; завантаження масиву №1 в регістр XMM0

movupd XMM1,[edi]; завантаження масиву №1 в регістр XMM0

cmppd XMM0, XMM1, 0; виконання паралельного порівняння масивів

movupd rez[ebx],XMM0; збереження результату порівняння

add esi,16; перехід на наступну адресу

add edi,16

add ebx,16

dec ecx

 

.ENDW

mov ecx,edx; залишок чисел, що не ввійшли до паралельного порівняння

 

.WHILE(ecx!=0)

movupd XMM0,[esi]; завантаження масиву №1 в регістр XMM0

movupd XMM1,[edi]; завантаження масиву №1 в регістр XMM0

cmpsd XMM0, XMM1,8; виконання скалярного порівняння масивів

movupd rez[ebx],XMM0; збереження результату порівняння

add esi,4; перехід на наступну адресу

add edi,4

add ebx,4

dec ecx

.ENDW

mov ecx,9

xor ebx,ebx

.WHILE(ecx!=0)

.IF (rez[ebx]==0); якщо елементи масивів хоча б один раз не дорівнюють

mov al,1; одне одному, то встановлюємо прапорець в 1

mov flag,al

.ENDIF

dec ecx

inc ebx

.ENDW

.IF (flag==1); якщо масиви не рівні, виконуємо вираз (а-с)b-d/b

finit

fld a1

fsub c1

fmul b1

fld d1

fdiv b1

fsub

fst rez2

lea ebx,st1

 

.ELSE; якщо ж масиви рівні, то виконуємо d/b

finit

fld d1

fdiv b1

fst rez2

lea ebx,st2

 

.ENDIF

mov st3, ebx; збереження заголовку вікна

 

invoke FpuFLtoA,0,10,addr buf,SRC1_FPU or SRC2_DIMM; перетворення чисел

invoke MessageBox, NULL, ADDR buf, st3, MB_OK; виведення на екран

invoke ExitProcess,0

end _st

 

Результат виконання програми з лістингу 18.2 наведено на рис. 18.11.

 

 
 

 

 


Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.

 

Лабораторна робота “Дослідження програм з використанням команд

SSE-розширень”

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– набути практичних навичок складання, налагодження і виконання програм з використанням командSSE, написаних мовою асемблеру для програмування МП платформи х86.

“SSE-команди”




Дата добавления: 2014-12-18; просмотров: 27 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав