설마 어셈블러까지 건드리겠어 라고 생각하시는 분들이 많으시겠지만,
실무에서 타사랑 경쟁하고 있다면 어셈블러를 쓰는게 더 낳은경우가 많습니다. (아무래도 기계 성능을 100%활용하니..)
문제는 C언어의 #if, #ifdef 같은걸 어셈에 쓰기가 애매하죠. 자료도 그닥 없고.. ㅠㅠ
gcc경우
$gcc -D DEBUG_WINDOWS=1 ...
하면 #if DEBUG_WINDOWS부분이 활성화 되서 이쪽만 소스가 컴파일 되지만
어셈도 그짓을 할려면 조금 특수한 방법을 써야 합니다.
우선 어셈 소스중 분기하고 싶은곳의 맨앞에
.ifdef DEBUG_WINDOWS
를 추가하고, 끝의 머리엔
.endif
를 추가합니다.
다음 컴파일 할땐
$gcc -c -x assembler-with-cpp -pipe -Wa,--defsym=DEBUG_WINDOWS=0 ...
식으로 컴파일 하면 됩니다.빨간부분은 띄어쓰기 하면 안되고, 심볼을 넘길땐 = 기호가 없으면 안됩니다.
의미는
as에 심볼을 넘겨라 인데.
Wa가 as에 파라메터를 넘기는 옵션이고
--defsym은 심볼을 지정하는 옵션입니다.
심볼을 넘길땐, 심볼이름=데이터 를 넘기지만, 여기선 데이터엔 의미가 없으니 그냥 0을 썻습니다.
즉, 위의 어셈 소스는, 심볼이 선언되었다면 실행....
그보다... 울나란 어셈블러 자료가 너무 없는거 같은... ㅠㅠ
'C/C++언어' 카테고리의 다른 글
Predefined Macros (0) | 2012.01.05 |
---|---|
[C/C++] Debug Printf (0) | 2012.01.03 |
함수포인터를 이용한 콜백함수란? (0) | 2011.04.24 |
Doxygen을 사용한 코드 문서 쉽게 생성하기 (0) | 2010.07.04 |
상속, 함수 재정의(function overriding) (0) | 2010.07.04 |