Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

АВМиС - Лабы / 7 ММХ / отчет по MMX

.doc
Скачиваний:
35
Добавлен:
15.09.2014
Размер:
57.34 Кб
Скачать

Белорусский государственный университет информатики

и радиоэлектроники

Кафедра ЭВМ

Отчет по лабораторной работе

Тема: « Изучение регистров MMX»

Выполнил:

студент группы 750501

Демидовец А.Г.

Проверил:

к.т.н., доцент __________________ Одинец Д.Н.

Минск 2009

1. Цель работы:

Изучение работы с регистрами MMX.

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

Написать и отладить программу, которая демонстрирует использование регистров MMX процессора при выполнении математических операций.

Предусмотреть возможность ввода с клавиатуры ФИО, типа логической операции (ИЛИ-НЕ), отражения на экране дисплея текущего состояния регистров MMX.

3. Краткие теоретические сведения:

MMX (Multimedia Extensions — мультимедийное расширение) — коммерческое название дополнительного набора инструкций, выполняющих характерные для процессов кодирования/декодирования потоковых аудио/видео данных действия за одну машинную инструкцию. Впервые появился в процессорах Pentium MMX. Разработан в лаборатории Intel в Хайфе, Израиль, в первой половине 1990-х.

4. Текст программы:

#include <windows.h>

#include <conio.h>

#include <iostream>

using namespace std;

#define N 32

char* NOT_OR(char str1[], char str2[]);

void _declspec() registers(char *MMX);

int main()

{

setlocale(LC_ALL, "Russian");

char str1[N], str2[N], MMX[N];

char *arr;

int t, i;

while(1)

{

system("cls");

cout << " Реализация операции ИЛИ-НЕ!" << endl;

cout << "Меню:" << endl;

cout << "1. Ввести строки" << endl;

cout << "2. Показать содержимое регистров" << endl;

cout << "3. Выполнить операцию 'ИЛИ-НЕ'" << endl;

cout << "0. Выход из программы" << endl << endl;

cout << "Выберите действие!!!" << endl;

t=_getch();

switch(t)

{

case '1': system("cls");

cout << "Введите строку №1!" << endl;

cin >> str1;

cout << "Введите строку №2!" << endl;

cin >> str2;

break;

case '2': system("cls");

cout << "Содержание регистров:" << endl;

registers(MMX);

for (i = 0; i < N; i++)

printf("%d ", MMX[i]);

_getch();

break;

case '3': system("cls");

cout << "Результат:" << endl;

arr = NOT_OR(str1, str2);

for (i=0; i<32; i++)

{

printf("%3d(%c) ",arr[i],arr[i]);

if (i % 16 == 7 || i % 16 == 15 || i % 16 == 23) printf("\n");

}

_getch();

break;

case '0': system("cls");

cout << "Спасибо за работу!" << endl;

_getch();

return 0;

default: break;

}

}

return 0;

}

char* NOT_OR(char str1[], char str2[])

{

long d = 0;

int a, b;

int c = 0xff, i;

char* test = new char[32];

_asm{

movd mm1,c

}

for (i=0; i<32; i++)

{

a = str1[i];

b = str2[i];

_asm{

movd mm0,a

por mm0,b

pandn mm0,mm1

movd d,mm0

}

if (d < -128) test[i] = d + 320;

else test[i] = d + 192;

};

return test;

}

void _declspec(naked) registers(char *MMX)

{

_asm{

push ebp

mov ebp, esp

mov esi, [ ebp + 8 ]

movq [esi] + 0, mm0

movq [esi] + 8, mm1

movq [esi] + 16, mm2

movq [esi] + 24, mm3

pop ebp

ret

}

}

Вывод:

В данной работе были изучены методы работы с регистрами MMX.

Скриншот:

Соседние файлы в папке 7 ММХ