3.65 Multiple Dimension Array II

The following code transposes the elements of an M×MM\times M array, where MM is a constant defined by #define:

void transpose(long A[M][M]) {
    long i, j;
    for(i = 0; i < M; i++) {
        for(j = 0; j < i; j++) {
            long t = A[i][j];
            A[i][j] = A[j][i];
            A[j][i] = t;
        }
    }
}

When compiled with optimization level -O1, GCC generates the following code for the inner loop of the function:

.L6:
    movq     (%rdx), %rcx
    movq     (%rax), %rsi
    movq     %rsi, (%rdx)
    movq     %rcx, (%rax)
    addq     $8, %rdx
    addq     $120, %rax
    cmpq     %rdi, %rax
    jne     .L6

We can see that GCC has converted the array indexing to pointer code.

A. Which register holds a pointer to array element A[i][j]?

%rdx

B. Which register holds a pointer to array element A[j][i]?

%rax

C. What is the value of MM ?

15

Last updated