CS/컴퓨터 구조

[컴퓨터 구조 번외](1)[어셈블리 문제 풀어보기 1]

황올뱀 2025. 1. 29. 19:01

시험 끝난 기념 번외 (어셈블리 문제 풀어보기)

문제

long P[M][N];
long Q[N][M];

long sum_element(long i, long j){
    return P[i][j] + Q[j][i];
}


이고,

// i in %rdi, j in %rsi
sum_element:
leaq    0(, %rdi, 8), %rdx
subq    %rdi, %rdx
addq    %rsi, %rdx
leaq    (%rsi, %rsi, 4), %rax
addq    %rax, %rdi
movq    Q(, %rdi, 8), %rax
addq    P(, %rdx, 8), %rax
ret


라 컴파일 되었을 때, M, N의 값은?

 

해답


- %rdx = 8*rdi = 8*i
- %rdx = %rdx - %rdi = 8i-i = 7i
- %rdx = %rdx + %rsi = 7i + j
- %rax = %rsi + 4*%rsi = 5j
- %rdi = %rdi + %rax = 5j + i
- %rax = (Q + 8*%rdi) = (8(5j + i) + Q)에 있는 값 = Q[j][i]
- %rax = Q[j][i] + (P + 8*%rdx) = Q[j][i] + (8(7i + j) + P)에 있는 값 = Q[j][i] + P[i][j]
- 왜 i, j앞에 7, 5가 곱해져있는가? -> 한 행당 7, 5개의 long원소가 있어서 그럼
- 따라서 M, N은 각각 5, 7



728x90
반응형