Assembly yourself!
요약 : 프로젝트의 목표는 어셈블리어와 친숙해지는 것이다.
보통 asm이라는 약어로 불리는 어셈블리어(또는 어셈블러)는 저급 프로그래밍 언어로서, 아키텍쳐의 기계어 지시와 매우 잘 대응(1:1이 아닌 경우도 있지만)된다. 각각의 어셈블리어는 특정한 컴퓨터 아키텍쳐(컴퓨터 구조)에 따라 세분화된다. 반면, 대부분의 고급 프로그래밍 언어는 다양한 아키텍쳐에 호환되지만 인터프리팅이나 컴파일링의 과정이 반드시 선행되어야 한다. 어셈블리어는 symbolic machine code라고도 불린다.
함수는 예상치 못한 오류로 종료되어서는 안 된다(세그먼테이션 오류, 버스 오류, free의 중복 사용 등). 하지만 정의되지 않은 행동의 경우에는 예외. 만약 오류가 발생하면, 그 프로젝트는 제대로 기능하지 못하는 것으로 판별되며 0점을 받게될 것.
Makefile은 적어도 $(NAME), all, clean, fclean, re 명령어를 가지고 있어야 한다. 또한, 필요한 파일들만 다시 컴파일/다시 링크해야 한다.
보너스를 함께 제출하는 경우에는, 반드시 Makefile에서 bonus 명령어를 추가해야 한다. Bonus Part에서는 Main part에서 금지되었던 헤더, 라이브러리, 함수들을 사용할 수 있다. 보너스는 _bonus.{c/h}라는 이름으로 구별되어야 한다. Mandatory와 Bonus part에 대한 평가는 별개로 진행된다.
너의 프로젝트에 대한 테스트 프로그램을 스스로 만들어보길 권장한다. 물론 그 내용은 제출할 필요는 없으며 평가에 반영되지 않는다. 테스트 프로그램을 만들게 되면 너의 프로젝트와 동료의 프로젝트를 평가하기 훨씬 수월해진다. 그리고 그 테스트케이스들을 평가에서 잘 활용할 수 있을 것이다. 당연히 평가에서는 너와 동료의 테스트케이스들을 모두 자유롭게 활용할 수 있다.
개인적으로 배정된 git repository에 과제물을 제출해라. git repository 내의 과제물만으로 평가가 진행된다. 만약 Deepthought이 평가에 참여하는 경우, 동료 평가 이후에 최종적으로 이루어질 것이다. 만약 Deepthought이 평가하던 중 당신의 과제물 중 어느 부분에서라도 에러가 하나라도 발생하는 즉시 평가가 중단된다.
64비트 ASM 양식으로 작성해야 한다. 호출 규약(calling convention)을 숙지해라.
인라인 ASM을 작성해서는 안 되며, 반드시 .s 파일에 작성해야 한다.
nasm을 이용하여 컴파일하여야 한다.
AT&T가 아닌 Intel 문법을 사용해야한다.
라이브러리의 이름은 libasm.a 로 한다.
main 함수를 과제물로 함께 제출해야 한다. 그 함수는 너의 라이브러리와 함께 컴파일되어 함수와 라이브러리가 정상적으로 작동하는지 테스트할 것이다.
다음 함수들을 어셈블리어로 구현해라 :
syscall 도중 에러가 발생하는지 반드시 체크하여야 하며, 필요한 경우 에러를 적절히 관리해야 한다.
errno 변수를 적절하게 설정해야한다.
이를 위해서 extern ___error를 호출하는 것이 허용된다.