본문 바로가기
코스웨어/14년 스마트컨트롤러

2014.08.05 업무보고 출석번호 5번 김상엽

by 알 수 없는 사용자 2014. 8. 6.
728x90
반응형

Aembly의 함수 호출

함수 호출시 뒤에서 넣는 방식 앞에서 넣는 방식 두가지가 존재한다.

인텔형 함수 호출 방식

1. 함수의 조건 모든 함수는 종료 전에 모든것을 원래대로 돌려놓아야 한다.

예외: eax는 어떤값을 가지든 상관이 없다.

eax는 반환값이 존재하므로 예외이다.

 

 

Assembly는 변수의 자료형 크기와 개수를 계산하여 한방에 Stack영역에 할당한다.

이 방법은 배열을 사용하여도 동일하게 적용 된다.

 

 

 

이렇듯 우리가 void 형을 쓰든 int형을 쓰고 return을 쓰지 않아도 컴파일러가 0을 자동으로 채워주기 때문에 컴파일 하는것이 에러 없이 잘 동작 할 수 있다는 것을 확인 할 수 있었습니다.

 

위의 C코드를 보면 변수 i가 초기화가 두번 된 것을 확인할 수 있다.

그렇기 때문에 그것을 Assembly파일을 열어보면 마찬가지로 변수 i가 0으로 두번 초기화

된 현상을 확인 할 수 있었다.

코드의 최적화를 위해서는 변수를 두번이나 초기화 할 필요가 없기 때문에 한번만 하는 것이 좋다.

하지만 펜티엄 컴퓨터로 넘어오면서 용량에 관한 부분적 제약이 거의 사라지고 속도면에서도 거의 차이가

없기 때문에 메인 함수는 초기화 할 필요 없지만 자주 쓰는 함수의 경우에는 최적화 하지 않은 것과 한것의

차이가 많이 날 수 있기 때문에 개발할 때 생각 하며 코드를 작성해야 한다.

 


- C 소스에서 호출할 asm 함수.

 

 

더블클릭을 하시면 이미지를 수정할 수 있습니다

이번 소스에서 구조체를 사용하는 이유는 함수를 만든 후 인자를 많이 사용 후 어셈블리 소스를 보게 되면 push가 많이 생성되어 속도면에서 느려질 수 있기 때문이다.

그렇기때문에 구조체를 만들어 그 안에 변수를 넣은후 구조체 하나만 인자로 사용하면 push를 한번만 사용하게 되어 속도면에서 최적화 효과를 볼 수 있다.

이 문제를 윤석이가 맞췄다.................................................................

그럴수가........................... 뽀록이겠지

 

 어제 오후꺼는 도저히 아직도 헤깔리므로 계속 수정해 올리도록 하겠습니다.

 

강낭콩 석고대죄를 드

728x90