Скачиваний:
35
Добавлен:
15.09.2014
Размер:
2.26 Кб
Скачать
#include <iostream>  
#include <windows.h> 
#include <conio.h>

using namespace std; 

void showMMXRegisters();  // просмотр содержимого регистров

void minus();

int main()
{
	int i, n, j, k;
	char str2[] = "Gavrushkin";
	unsigned char str[100];
	char c;

	printf("Ar the beginning:\n\n");
	showMMXRegisters();  
	
	printf("%s", str2);
	n = strlen(str2); 
	str[n] = '\0';
	k = n+1;
	while(k<16)
	{
		str[k] = '\0';
		k++;
	}
	for (i = 0; i < n; i++)
		str[i] = str2[i];
	printf("\n");
	for (i = 0; i < n; i++)
		printf("%d ", (int) str[i]);
	printf("\n");
	i = 0;
	// помещаем начальную часть (1-е восемь символов)
	__asm {
		mov esi, i				
		movq mm0, str[esi]
	}

	for (i = 0, j = 8; j < n; j += 8)
	{
		printf("\nRegisters\n\n");
	// помещаем оставшуюся часть 	
		__asm {
			mov edi, j
			movq mm1, str[edi]
		}
		showMMXRegisters();
		minus();
		showMMXRegisters();
	// выгружаем из регистра	
		__asm {
			mov esi, i
			movq str[esi], mm0
		}
	}
	for (i = 0; i < 8; i++)
		printf("%u ", str[i]);
	c = getch();

	return 0;
}

void minus()
{
	__asm {
		psubb mm0, mm1
	}
}

void showMMXRegisters()
{
	const int N = 8;
	unsigned char str[N+1];
	for (int i = 0; i < N; i++) {
		str[i] = '0';
	}
	str[N] = 0;
	
	__asm {
		movq str, mm0
	}
	printf("MM0: ");
	for (int i = 0; i < N; i++) 
		printf("%u ", str[i]);
	printf("\n");
	__asm {
		movq str, mm1
	}
	printf("MM1: ");
	for (int i = 0; i < N; i++) 
		printf("%u ", str[i]);
	printf("\n");
	__asm {
		movq str, mm2
	}
	printf("MM2: ");
	for (int i = 0; i < N; i++) printf("%u ", str[i]);
	printf("\n");
	__asm {
		movq str, mm3
	}
	printf("MM3: ");
	for (int i = 0; i < N; i++) printf("%u ", str[i]);
	printf("\n");
	__asm {
		movq str, mm4
	}
	printf("MM4: ");
	for (int i = 0; i < N; i++) printf("%u ", str[i]);
	printf("\n");
	__asm {
		movq str, mm5
	}
	printf("MM5: ");
	for (int i = 0; i < N; i++) printf("%d ", str[i]);
	printf("\n");
	__asm {
		movq str, mm6
	}
	printf("MM6: ");
	for (int i = 0; i < N; i++) printf("%d ", str[i]);
	printf("\n");
	__asm {
		movq str, mm7
	}
	printf("MM7: ");
	for (int i = 0; i < N; i++) printf("%d ", str[i]);
	printf("\n\n");

}