시험 끝난 기념 번외 (어셈블리 문제 풀어보기)
문제
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
반응형
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조](17)[버퍼 오버플로우] (0) | 2025.01.31 |
---|---|
[컴퓨터 구조 번외](2)[어셈블리 문제 풀어보기 2] (0) | 2025.01.30 |
[컴퓨터 구조](16)[어셈블리어 7] (0) | 2025.01.28 |
[컴퓨터 구조](15)[어셈블리어 6] (0) | 2025.01.27 |
[컴퓨터 구조](14)[어셈블리어 5] (1) | 2025.01.24 |