← All Posts

[TIL] 260918 공부기록

csapp 3장 읽기

TIL#

오늘은 오전에 CSAPP를 몰아치기로 다읽고 4시 코어타임을 가졌다 아직 과제를 시작하지않았는데 벌써 다들 하고있어서 해야되나?? 내속도에 맞추고싶은데 또 뭔가 잘못된 방향으로 가는것같아서 어떻게 해야될지 고민이 크다.. 화요일 시험이라서 거기에 몰두를 좀 해보고싶은데 아직 c문법도 익숙하지않던 터라 문제를 풀기엔 좀 어려울것같아 월요일에 시작할 게획이였으나 1번과제라도 해야되나 좀 고민이 막판에 들었다..

배운점#

csapp 다읽고나서 2.연산과 주소계산 까지 공부를 다시 해보고있는데 틀렸던것을 정리하고자 여기에 적어본다.

leaq(%rdi,%rsi,4)%rax 명령어에 대한 설명으로 옳은것은?#

답.메모리에 접근하지않고 오직 주소 계산 결과만을 %rax에 저장한다

leaq는 메모리 참조 형태를 빌려 산술 연산을 수행할 뿐 실제 메모리 데이터를 읽어오지않는다

함수 호출 시 원래의 값을 보존해야 하거나, 함수 내부에서 사용하기 위해 스택에 백업해야 하는 ‘Callee-saved’ 레지스터들을 고르시오#

답 %rbq,%rbx,%r12

어셈블리 함수 호출 규약상 %r12 역시 %rbx,%rbq와 마차가지로 호출된 함수 내부에서사용하려면 스택에 이전값을 백업(pushq %r12)하고 함수가 끝나기 전에 원래값으로 복원 (popq %r12)해야 하는 규칙을 따른다

x86-64의 데이터 이동 명령어인 mov 계열 명령어의 규칙으로 올바르 것을 고르시오#

답. 출발지와 목적지가 모두 메모리인 연산은 한번의 명령어로 수행할수없다 (메모리에서 메모리로 직접 데이터 복사할수없고 레지스터를 거쳐야함)

movl(4바이트 이동) 명령어는 목적지 레지스터의 상위 32비트를 자동으로 0으로 만든다

32비트 연산 결과를 64비트 레지스터에 쓸때 상위 비트를 0으로 채우는 zero-extend규칙이 적용됨

느낀점#

외운다기보단 처음보는 용어 자체가 어려워서 용어를 외운다시피 하고 나머지들을 이해하는식을 해보고있는데 이게 맞는것같기도.. 마치 가나다라를 외우고 고양이 강아지 한글을 써보는 느낌이다…

내일 환경설정을 끝내보기로