설마 어셈블러까지 건드리겠어 라고 생각하시는 분들이 많으시겠지만,
실무에서 타사랑 경쟁하고 있다면 어셈블러를 쓰는게 더 낳은경우가 많습니다. (아무래도 기계 성능을 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을 썻습니다.

즉, 위의 어셈 소스는, 심볼이 선언되었다면 실행....

그보다... 울나란 어셈블러 자료가 너무 없는거 같은... ㅠㅠ

+ Recent posts