#define M 20
#define N 20
void main()
{
int i,j;
int A[M][N] = {0};
for (i=0; i < M; i++)
{
for (j=0; j< N; j++)
{
//A[i][j +1] = A[i][j] + 5;
A[i][j] = 0;
}
}
printf("%d\n", A[2][3]);
}
生成的彙編代碼是幫助需要從C
main:
pushl %ebp
xorl %eax, %eax
pxor %xmm0, %xmm0
movl %esp, %ebp
andl -16, %esp
pushl %edi
movl 400, %ecx
subl 1628, %esp
leal 16(%esp), %edi
rep stosl
leal 16(%esp), %edx
leal 1616(%esp), %eax
.p2align 4,,7
.p2align 3
.L2:
movdqa %xmm0, (%edx)
movdqa %xmm0, 16(%edx)
movdqa %xmm0, 32(%edx)
movdqa %xmm0, 48(%edx)
movdqa %xmm0, 64(%edx)
addl 80, %edx
cmpl %eax, %edx
jne .L2
movl 188(%esp), %eax
movl .LC0, (%esp)
movl %eax, 4(%esp)
call printf
addl 1628, %esp
popl %edi
movl %ebp, %esp
popl %ebp
ret
我不能夠理解從主高達標籤L2的彙編代碼。該彙編代碼使用自動矢量化進行了優化。 在此先感謝。
它設置一個堆棧幀並將'A'初始化爲零。你究竟有什麼困難的理解? – user786653
什麼用的以下說明: 和L -16,ESP%萊亞爾 16(%ESP),電子數據交換%萊亞爾 16(%ESP),EDX%萊亞爾 1616(%ESP),%eax中 – PhantomM