2010년 11월 8일 월요일

2010.11.09_어셈

#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)
{
}

댓글 없음:

댓글 쓰기