Aembly의 함수 호출
함수 호출시 뒤에서 넣는 방식 앞에서 넣는 방식 두가지가 존재한다.
인텔형 함수 호출 방식
1. 함수의 조건 모든 함수는 종료 전에 모든것을 원래대로 돌려놓아야 한다.
예외: eax는 어떤값을 가지든 상관이 없다.
eax는 반환값이 존재하므로 예외이다.
Assembly는 변수의 자료형 크기와 개수를 계산하여 한방에 Stack영역에 할당한다.
이 방법은 배열을 사용하여도 동일하게 적용 된다.
이렇듯 우리가 void 형을 쓰든 int형을 쓰고 return을 쓰지 않아도 컴파일러가 0을 자동으로 채워주기 때문에 컴파일 하는것이 에러 없이 잘 동작 할 수 있다는 것을 확인 할 수 있었습니다.
위의 C코드를 보면 변수 i가 초기화가 두번 된 것을 확인할 수 있다.
그렇기 때문에 그것을 Assembly파일을 열어보면 마찬가지로 변수 i가 0으로 두번 초기화
된 현상을 확인 할 수 있었다.
코드의 최적화를 위해서는 변수를 두번이나 초기화 할 필요가 없기 때문에 한번만 하는 것이 좋다.
하지만 펜티엄 컴퓨터로 넘어오면서 용량에 관한 부분적 제약이 거의 사라지고 속도면에서도 거의 차이가
없기 때문에 메인 함수는 초기화 할 필요 없지만 자주 쓰는 함수의 경우에는 최적화 하지 않은 것과 한것의
차이가 많이 날 수 있기 때문에 개발할 때 생각 하며 코드를 작성해야 한다.
- C 소스에서 호출할 asm 함수.
이번 소스에서 구조체를 사용하는 이유는 함수를 만든 후 인자를 많이 사용 후 어셈블리 소스를 보게 되면 push가 많이 생성되어 속도면에서 느려질 수 있기 때문이다.
그렇기때문에 구조체를 만들어 그 안에 변수를 넣은후 구조체 하나만 인자로 사용하면 push를 한번만 사용하게 되어 속도면에서 최적화 효과를 볼 수 있다.
이 문제를 윤석이가 맞췄다.................................................................
그럴수가........................... 뽀록이겠지
어제 오후꺼는 도저히 아직도 헤깔리므로 계속 수정해 올리도록 하겠습니다.
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
LDST 과제 (1) | 2014.08.18 |
---|---|
20140808업무일지 김재성[7번] (15) | 2014.08.08 |
STST 과제 (2) | 2014.08.07 |
2014.08.06 업무보고 출석번호 6번 김용우 (10) | 2014.08.06 |
2014.08.04 업무일지 [김대희] (12) | 2014.08.04 |
2014.08.01 업무일지 [고한솔] (14) | 2014.08.01 |
20140731 업무일지 출석번호 1번 고윤석 (11) | 2014.07.31 |
2014.07.30. 업무일지 출석번호 22번 허수웅 (11) | 2014.07.31 |