함수도 주소값을 가지고 있고 함소를 사용할 때마다 그 주소값을 호출한다는 건 알겠는데, 그럼 return 가능한 함수는 return값을 어떤 방식으로 반환하는거야? 텅 빈 함수를 호출해도 특정 값을 반환하는걸로 봐서, 또 여러번 호출함에 따라 특정 값에 수렴하는걸로 봐서 내부적인 메커니즘이 있는것 같은데....... 컴퓨터 구조 잘 아시는 분 대답좀 ㅠㅠ
함수가 return값을 반환하는 과정...
ㅁㅇㄴㅁㅁ(220.125)
2015-12-14 17:04
추천 0
댓글 14
다른 게시글
-
조선 중공 제조업이 쳐 망하고 있단다.. 새로운 공대 서열은 컴 전화기다 [3]무적반수생(muvan) | 15.12.14추천 1
-
용접이 답이다 용접해서 싱가폴 가자 [4]무적반수생(muvan) | 15.12.14추천 0
-
어쩐히 원화 환률이 존나 떨어지더라 [1]익명(211.5) | 15.12.14추천 0
-
두산건설이 왜 박살나는지 알려면 부동산에도 빠삭해야 되는데.. [16]장소삼(175.120) | 15.12.14추천 1
-
득산이 우리학교 재단인데 참 안타깝다무적반수생(muvan) | 15.12.14추천 0
-
한국 15년주기마다 일본지원 받아야 경젝문제가 해결된다 [3]hongiro(hongiro) | 15.12.14추천 0
-
3D 1S 가 현실화 되네무적반수생(muvan) | 15.12.14추천 0
-
두산 맛 가고 잇네 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ [14]무적반수생(muvan) | 15.12.14추천 0
-
캬. 어셈블리는 역시 코드가 이쁨. [10]ㅅㅅㅅ(178.162) | 15.12.14추천 0
-
너의마음을 프로그래밍한다우왕ㅋ굿(rexzizo) | 15.12.14추천 0
주소값->주솟값
별 거 없어. EAX라는 레지스터를 통해 반환 값을 전달하거든. return 문이 없으면 EAX 레지스터의 값이 수정되지 않기 때문에 레지스터에 있던 원래 값이 반환 값처럼 취급되는 거고.
그러니까 int test() { return 1; } int blank() {} 이렇게 함수 두 개 만들어 놓고 test(); 부른 뒤 blank(); 함수의 반환 값을 조사해 보면 1이 돼.
디스어셈블 해보면 알겠지만 callee에선 eax에 값을 셋해주고 caller에선 eax에서 값을 빼오는데 callee가 비어있으니 그냥 eax에 있는 쓰레기값 출력해주는거임
오유 프로그래머 게시판에도 비슷한 질문 글이 올라왔었는데 그거 생각나네. 아무튼 컴퓨터 구조론을 공부해야 확실하게 이해할 수 있어.
오 컴터구조 공부 안했는데도 어렴풋이 감이 잡히네. ㄳㄳ 근데 원래 레지스터에 남아있는 쓰레기값이 반환된다면
빈 함수를 반환했을때 출력 순서가 1 10 11 11 11 ..... 이렇게 되는건 왜이런거임? 레지스터에 남아있는데로면 출력이 1 1 1 1 1..... 이렇게 되야되지 않음?
ㄴ되야->돼야
디스어셈블 해서 eax 중간에 바꾸는지 봐봐
ㅁㅇㄴㅁㅁ//데로->대로
그건, printf 함수에서 EAX 레지스터의 값을 바꾸기 때문이지. printf 함수도 반환 값이 있거든. 찾아보렴.
아 그걸 간과했네. printf에서 eax 값 바꾼다
어 찌찌뽕
오 완벽히 이해했어. ㄳ 삿스가 플밍갤 유동고수들 많네 ㄳㄳ