게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
어셈블리 강좌를 하면 관심있는 분 있을지 궁금합니다.
게시물ID : programmer_10780짧은주소 복사하기
작성자 : 중용자
추천 : 4
조회수 : 1090회
댓글수 : 4개
등록시간 : 2015/06/03 20:21:03
FASM - 2. 테트리스 소개 (테트리스 실행 파일 포함)
FASM - 3. Quick Viewer 소개 (퀵뷰어 실행 파일 포함)
FASM Quick Library IDE with AcroEdit 화면

작년말에 위의 FASM관련해서 글을 썼던 사람입니다.
테트리스 제작과정을 이용한 FASM 강의를 한다고 했었는데 개인사정으로 작년말 이후 FASM에 대해서는 완전히 방치해 두고 있다가 이제 다시 틈틈히 시간나는대로 FASM을 다루려고 합니다.

막상 FASM 관련 자료와 강의를 시작하려니 이게 과연 누군가에게 도움이 될지 걱정이 됩니다.
어셈블리는 가면 갈수록 다루는 사람이 적어질게 확실한 분야인데 시대에 역행하는 작업에 누가 관심을 갖을지 의문스럽네요.
진입장벽 또한 일반 프로그래밍 언어와는 비교자체가 안되구요.

FASM으로 프로그래밍을 하기 위한 필수조건은

1. Windows API 프로그래밍에 익숙해야 한다.
윈도우에서 어셈블리로 애플리케이션을 만드는 일은 당연히 윈도우 API를 직접 호출하며 API에 존재하지 않는 기능은 직접 개발해야 합니다.
C, C++로 제작된 DLL, 라이브러리를 사용한다면 어셈블리 프로그래밍을 할 이유가 없습니다.
어셈블리로 애프리케이션을 만드는 이유는 극단의 성능과 최소의 메모리 사용에 있기 때문입니다.
물론 성능향상을 위한 애플리케이션 일부를 어셈블리로 개발하는 것은 예외입니다.

2. 영어로 된 프로그래밍 자료를 읽는데 문제가 없아야 한다.
국내에 어셈블리를 주언어로 프로그래밍 하는 사람이 소수인데 그 중에 윈도우에서 어셈블리 프로그래밍을 하는 사람은 극소수입니다.
거기다 MASM이 아닌 FASM으로 애플리케이션을 만들어 본사람은 10명이 넘을지 의심스러운 수준입니다.
따라서 FASM에 관련된 거의 모든 자료는 영문으로 되어 있기에 영어를 해석하는 데 문제가 있다면 FASM은 아예 접근하지 않는 것이 좋습니다.

3. 디버깅에 익숙해야 한다.
어셈블리 디버깅은 모든 디버깅의 가장 고난이도에 있습니다.
디버깅에 자신이 없다면 어셈블리로 하는 개발은 고난의 연속이 될 겁니다.


그럼 도대체 이 FASM을 왜 사용해야 하는지 의문이 들겁니다.
FASM의 장점은

1. 매우 막강한 매크로 기능을 갖고 있다.
매크로를 사용하여 자신만의 새로운 언어처럼 만들 수 있습니다.

  1. ; __________________________________________________________________________________________________
  2. ;
  3. ; Description:  윈도우 메세지 콜백 함수
  4. ; __________________________________________________________________________________________________
  5. winproc WndProc
  6.     BEGIN_MESSAGE_MAP
  7.         ;ON_MESSAGE  WM_CREATE,      .OnCreate
  8.         ON_DESTROY  OnDestroy
  9.         ON_PAINT    OnPaint
  10.         ON_SIZE     OnSize,         OnPaint
  11.         ON_ERASEBKGND
  12.         ON_MESSAGE  WM_KEYDOWN,     .OnKeyDown
  13.         ON_COMMAND  IDM_FILE_EXIT,  .OnFileExit
  14.         ON_COMMAND  IDM_HELP_ABOUT, .OnHelpAbout
  15.     END_MESSAGE_MAP
  16.  
  17.     ; ______________________________________________________________________________________________
  18. .OnKeyDown:
  19.     BEGIN_KEY_MAP
  20.         ON_KEY VK_ESCAPE, .OnKeyESC
  21.     END_KEY_MAP
  22.  
  23.     ; ______________________________________________________________________________________________
  24.     ; 데이터를 초기화 한다.
  25.     ; ______________________________________________________________________________________________
  26. ;.OnCreate:
  27. ;    Return 0
  28.  
  29.     ; ______________________________________________________________________________________________
  30. .OnFileExit:
  31.     ?SendMessage WM_DESTROY
  32.     Return 0
  33.  
  34.     ; ______________________________________________________________________________________________
  35. .OnHelpAbout:
  36.     ShowAboutDialog
  37.     Return 0
  38.  
  39.     ; ______________________________________________________________________________________________
  40.     ; 프로그램을 종료한다.
  41.     ; ______________________________________________________________________________________________
  42. .OnKeyESC:
  43.     ?SendMessage WM_DESTROY
  44.     Return 0
  45.  
  46. endp

제가 제작한 매크로를 이용한 윈도우 메세지 콜백 함수 기본 템플릿입니다.
전혀 어셈블리 처럼 보이지 않을 겁니다.
위의 코드는 성능의 저하 없이 어셈블리 코드로 변환됩니다.
어셈블리 코드로 직접 개발 했다 해서 위의 코드보다 성능이나 메모리가 줄지 않는다는 것이죠.
위와 똑같은 기능을 C 코드로 구현하면 속도와 메모리 둘 다 성능이 하락합니다.

본인의 역량에 따라 기계어 코드의 초고속 성능과 적은 메모리를 차지하는 이점을 그대로 살리면서 빠른 개발이 가능합니다.

2. WIndows와 프로그래밍에 대한 이해가 깊어진다.
어셈블리 프로그래밍을 하게 되면 직접 OS API호출을 하고 일반 언어에서 제공되는 라이브러리의 기능들을 직접 구현해야 하기 때문에 프로그래밍에 대한 이해가 깊어질 수 밖에 없습니다.
알고리듬, 메모리 관리, 화면 출력, 예외 처리 등을 언어의 라이브러리가 아닌 본인이 전부 직접 개발해야 하니 저절로 이해가 깊어지는 것이죠.
거기다 어셈블리로 개발한게 C, C++ 라이브러리보다 느리고 용량을 더 많이 차지하는 것만큼 의미없는게 없기 때문에 자연스럽게 최적화에 익숙해지게 됩니다.
비트단위 알고리듬에 익숙해지고 다양한 최적화 기법에 눈을 뜨며 디버깅 실력 또한 훨씬 좋아집니다.
디버깅의 종착지가 어셈블리 디버깅이기 때문이죠.


생각나는 대로 적었더니 두서가 좀 없네요.
제 글을 읽고 FASM으로 개발하는 사람이 한명도 생기지 않는다면 쓸모없는 일이 될까바 글이 길어 졌습니다.
취미, 공부 등 어떤 목적이던 이 글을 읽고 FASM으로 개발할 마음이 생긴분이 계신다면 FASM 강의를 해볼까 합니다.

출처 본인
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호