Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 501 / Лаб_ММХ / Солодуха Е.М / MMX
.cpp
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <iostream>
using namespace std;
void _declspec(naked) Ymnojenie(char *name, char *surname, char *result)
{
START:
_asm push ebp
_asm mov ebp,esp
_asm mov esi,[ ebp + 8 ]
_asm mov edi,[ ebp + 12 ]
_asm movq mm0, [esi] + 0
_asm movq mm1, [esi] + 8
_asm movq mm2, [esi] + 16
_asm movq mm3, [esi] + 24
_asm movq mm4, [edi] + 0
_asm movq mm5, [edi] + 8
_asm movq mm6, [edi] + 16
_asm movq mm7, [edi] + 24
_asm PMULLW mm0, mm4
_asm PMULLW mm1, mm5
_asm PMULLW mm2, mm6
_asm PMULLW mm3, mm7
_asm mov esi,[ ebp + 16 ]
_asm movq [esi] + 0, mm0
_asm movq [esi] + 8, mm1
_asm movq [esi] + 16, mm2
_asm movq [esi] + 24, mm3
_asm pop ebp
_asm ret
}
void _declspec(naked) GetReg(char *MMX)
{
START:
_asm push ebp
_asm mov ebp,esp
_asm mov esi, [ ebp + 8 ]
_asm movq [esi] + 0, mm0
_asm movq [esi] + 8, mm1
_asm movq [esi] + 16, mm2
_asm movq [esi] + 24, mm3
_asm movq [esi] + 32, mm4
_asm movq [esi] + 40, mm5
_asm movq [esi] + 48, mm6
_asm movq [esi] + 56, mm7
_asm pop ebp
_asm ret
}
///////////////////////////MAIN
int main()
{
while(1)
{
system("cls");
printf("Operation:\ny - ymnojit'\nv - viev registrs MMX\ne - exit\n");
char c=getch();
int i;
switch(c)
{
case 'y':
char str1[32], str2[32], str[32];
//str1=new char[32];
//memcmp(str1, 0, 32);
int size;
system("cls");
printf("Enter first string:");
//str1++;
scanf("%s",&str1);
//str1--;
printf("Enter second string:");
scanf("%s",&str2);
if(strlen(str1)>strlen(str2))
size=strlen(str1);
else
size=strlen(str2);
printf("%s * %s = ",str1,str2);
Ymnojenie(str1, str2, str);
for(i = 0; i < size; i++)
printf("%c",str[i]);
printf("\n\n");
int s1,s2,s;
s1=strlen(str1);
s2=strlen(str2);
s=size;
for(i=0;i<s;i++)
{
if(s-i<=s1)
printf("%4d ",str1[i]);
else
printf(" ");
}
printf("\n");
for(i=0;i<s;i++)
{
if(s-i<=s2)
printf("%4d ",str2[i]);
else
printf(" ");
}
printf("\n----------------------\n");
for(i=0;i<s;i++)
{
printf("%4d ",256+str[i]);
}
getch();
break;
case 'v':
char reg[64];
system("cls");
printf("Registers:\n");
GetReg(reg);
int j;
for(i=0;i<8;i++)
{
printf("\nMMX%d - ",i);
for(j=0;j<8;j++)
printf("%4d ",reg[i*8+j]);
}
getch();
break;
}
if(c=='e')
break;
}
return 0;
}