我这里有一个DCT变换的函数,现在想把它改为用汇编语言(最好是Intel汇编指令)实现,请各位高手帮忙,谢谢先!int Dct( int *block, int *coeff)
{
int   i, j, k;
int   j1;
float b[8];
float b1[8];
float d[8][8];
float f0=(float)0.7071068;  // 1/sqrt(2)
float f1=(float)0.4903926;
float f2=(float)0.4619398;
float f3=(float)0.4157348;
float f4=(float)0.3535534; // 1/sqrt(8)
float f5=(float)0.2777851;
float f6=(float)0.1913417;
float f7=(float)0.0975452;
for (i = 0, k = 0; i < 8; i++, k += 8) 
{
for (j = 0; j < 8; j++) 
{
b[j] = (float)block[k+j];
}
/* Horizontal transform */
for (j = 0; j < 4; j++) 
{
j1 = 7 - j;
b1[j] = b[j] + b[j1];
b1[j1] = b[j] - b[j1];
}
b[0] = b1[0] + b1[3];
b[1] = b1[1] + b1[2];
b[2] = b1[1] - b1[2];
b[3] = b1[0] - b1[3];
b[4] = b1[4];
b[5] = (b1[6] - b1[5]) * f0;
b[6] = (b1[6] + b1[5]) * f0;
b[7] = b1[7]; d[i][0] = (b[0] + b[1]) * f4;
d[i][4] = (b[0] - b[1]) * f4;
d[i][2] = b[2] * f6 + b[3] * f2;
d[i][6] = b[3] * f6 - b[2] * f2; b1[4] = b[4] + b[5];
b1[5] = b[4] - b[5];
b1[6] = b[7] - b[6];
b1[7] = b[7] + b[6]; d[i][1] = b1[4] * f7 + b1[7] * f1;
d[i][5] = b1[5] * f3 + b1[6] * f5;
d[i][7] = b1[7] * f7 - b1[4] * f1;
d[i][3] = b1[6] * f3 - b1[5] * f5;
}
/* Vertical transform */
for (i = 0; i < 8; i++) 
{
for (j = 0; j < 4; j++) 
{
j1 = 7 - j;
b1[j] = d[j][i] + d[j1][i];
b1[j1] = d[j][i] - d[j1][i];
}
b[0] = b1[0] + b1[3];
b[1] = b1[1] + b1[2];
b[2] = b1[1] - b1[2];
b[3] = b1[0] - b1[3];
b[4] = b1[4];
b[5] = (b1[6] - b1[5]) * f0;
b[6] = (b1[6] + b1[5]) * f0;
b[7] = b1[7]; d[0][i] = (b[0] + b[1]) * f4;
d[4][i] = (b[0] - b[1]) * f4;
d[2][i] = b[2] * f6 + b[3] * f2;
d[6][i] = b[3] * f6 - b[2] * f2; b1[4] = b[4] + b[5];
b1[7] = b[7] + b[6];
b1[5] = b[4] - b[5];
b1[6] = b[7] - b[6]; d[1][i] = b1[4] * f7 + b1[7] * f1;
d[5][i] = b1[5] * f3 + b1[6] * f5;
d[7][i] = b1[7] * f7 - b1[4] * f1;
d[3][i] = b1[6] * f3 - b1[5] * f5;
}
/* Zigzag - scanning */
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++) 
{
*(coeff + zigzag[i][j]) = (int)(d[i][j]);
                            // 这里zigzag[i][j]是一个8X8的常量数组
}
}
return 0;
}