나는 숙제로 인해 혼란 스럽다. 아래에 나열된 C 코드와 어셈블리가 제공됩니다. 이것은 x86 어셈블리입니다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 내가 이해하고있는 것에 기초하여 그것을 해결하려고 시도했다.어셈블리와 C 매트릭스 assays
C 코드 : 만 내부 루프에 대한
void transpose(Marray_t A) {
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < i; j++) {
int t = A[i][j];
A[i][j] = A[j][i];
A[j][i] = t;
}
}
어셈블리 코드 :
A. M의 값이 무엇을 : 여기
1 .L3:
2 movl (%ebx), %eax //is this getting the mem location of %ebx and setting to %eax?
3 movl (%esi,%ecx,4), %edx //ecx * 4 + esi into edx
4 movl %eax, (%esi,%ecx,4) //
5 addl $1, %ecx //add 1 to ecx
6 movl %edx, (%ebx) //move edx to mem location of ebx???
7 addl $52, %ebx //I think this is M but I could be wrong
8 cmpl %edi, %ecx //compare edi & ecx
9 jl .L3
내가 대답 할 필요가 무엇인가? ... 나는 이것이 52라고 생각한다 ...?
B. 어떤 레지스터가 프로그램 값 i와 j를 유지합니까? ... 나는 edx와 eax라고 생각 하나?
C.이 루프에서 발생하는 최적화 을 사용하는 transpose의 C 코드 버전을 작성하십시오. 숫자 상수가 아닌 코드에서 M 매개 변수를 사용하십시오. (C)에서
시도 :이 코드에 따라서
void tranpose(Marray_t A) {
int i, j;
for(i = 0; i < M; i++) {
for(j = 0; j < i; j++) {
int *row = &A[i][0];
int *col = &A[0][j];
int value = (*row * 4) + *col;
}
}
}
이 아마도 당신이 검토 할 (그리고 내 대답 해당되는 경우를 동의) 어셈블리의 다른 질문에 대한 것 (배열 요소 크기가 4로) - 더 가기 전에> C? –
그게 내가 뭘 혼란 스러웠는지 모르겠다. 나는 이것을 모른 채 텍스트 책에서 똑바로 복사했습니다. – user1758231