728x90

드림핵에서 공부하다가 헷갈려서 정리한다.

아래와 같이 레지스터와 메모리가 있고, Code1번을 실행한다고 할때 rax에 저장되는 값은 무엇일까?

[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2
=================================
[Memory]
0x555555554000| 0x0000000000000000
0x555555554008| 0x0000000000000001
0x555555554010| 0x0000000000000003
0x555555554018| 0x0000000000000005
0x555555554020| 0x000000000003133A
==================================
[Code]
1: add rax, [rbx+rcx*8]

 

[풀이]

- 먼저 0x로 표현되는 것은 16진수이다.
- rcx는 0x2(16진수로 2)이고 여기에 8을 곱하게 되면 10진수로는 16이다.
- 10진수 16은 16진수로 10이다. (참고링크)
- rbx의 값은 0x555555554000이므로 여기에 0x10을 더하게 되면 0x555555554010이 된다.
- 위의 Memory표를 참고하였을때 0x555555554010의 값은 0x0000000000000003이다.
- 0x31337에 0x0000000000000003을 더하게 되면 0x000000000003133A가 된다. (16진수 이므로 9다음에는 A가된다.)
- 0x000000000003133A는 0x3133A이다.

728x90

+ Recent posts