#include <stdio.h>
/*
void subImageByC(uint8 *src1, uint8 *src2, uint8 *dst);
void addImageByC(uint8 *src1, uint8 *src2, uint8 *dst);
void avgImageByC(uint8 *src1, uint8 *src2, uint8 *dst);
*/
void subImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst);
void addImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst);
void avgImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst);
const int image_Size = 256*256;
int main()
{
char input1[]="gLenna_256_256.raw";
char input2[]="gBarbara256_256.raw";
char sub[]="sub.raw";
char add[]="add.raw";
char avg[]="avg.raw";
unsigned char *src1, *src2, *dst;
FILE *fin1=0, *fin2=0, *fout=0;
fin1 = fopen(input1, "rb");
fin2 = fopen(input2, "rb");
if(!fin1 && !fin2)
{
printf("file open error\n");
return 0;
}
src1 = (unsigned char*)calloc(sizeof(unsigned char)*image_Size, 0);
src2 = (unsigned char*)calloc(sizeof(unsigned char)*image_Size, 0);
dst = (unsigned char*)calloc(sizeof(unsigned char)*image_Size, 0);
fread(src1, sizeof(unsigned char), image_Size, fin1);
fread(src2, sizeof(unsigned char), image_Size, fin2);
fclose(fin1);
fclose(fin2);
fout = fopen(sub, "wb");
subImageByAsm(src1, src2, dst);
fwrite(dst, sizeof(unsigned char), image_Size, fout);
fclose(fout);
fout = fopen(add, "wb");
addImageByAsm(src1, src2, dst);
fwrite(dst, sizeof(unsigned char), image_Size, fout);
fclose(fout);
fout = fopen(avg, "wb");
avgImageByAsm(src1, src2, dst);
fwrite(dst, sizeof(unsigned char), image_Size, fout);
fclose(fout);
return 0;
}
void subImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst)
{
__asm
{
lea esi, src1
lea edi, src2
lea edx, dst
mov ecx, 256*32
L1:
movq mm0, [esi]
movq mm1, [edi]
movq mm2, [edx]
psubb mm0, mm1
movq [edx], mm0
loop L1
}
}
void addImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst)
{
}
void avgImageByAsm(unsigned char *src1, unsigned char *src2, unsigned char *dst)
{
}
댓글 없음:
댓글 쓰기