[42Seoul] libasm 서브젝트 번역

hyeonze·2021년 3월 3일
0

42Seoul

목록 보기
1/9

Git repository

Libasm

Assembly yourself!

요약 : 프로젝트의 목표는 어셈블리어와 친숙해지는 것이다.

Chapter 1 : Introduction

보통 asm이라는 약어로 불리는 어셈블리어(또는 어셈블러)는 저급 프로그래밍 언어로서, 아키텍쳐의 기계어 지시와 매우 잘 대응(1:1이 아닌 경우도 있지만)된다. 각각의 어셈블리어는 특정한 컴퓨터 아키텍쳐(컴퓨터 구조)에 따라 세분화된다. 반면, 대부분의 고급 프로그래밍 언어는 다양한 아키텍쳐에 호환되지만 인터프리팅이나 컴파일링의 과정이 반드시 선행되어야 한다. 어셈블리어는 symbolic machine code라고도 불린다.

Chapter 2 : Common Instructions

함수는 예상치 못한 오류로 종료되어서는 안 된다(세그먼테이션 오류, 버스 오류, 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 문법을 사용해야한다.

Chapter 3 : Mandatory part

라이브러리의 이름은 libasm.a 로 한다.

main 함수를 과제물로 함께 제출해야 한다. 그 함수는 너의 라이브러리와 함께 컴파일되어 함수와 라이브러리가 정상적으로 작동하는지 테스트할 것이다.

다음 함수들을 어셈블리어로 구현해라 :

  • ft_strlen (man 3 strlen)
  • ft_strcpy (man 3 strcpy)
  • ft_strcmp (man 3 strcmp)
  • ft_write (man 2 write)
  • ft_read (man 2 read)
  • ft_strdup (man 3 strdup, you can call to malloc)

syscall 도중 에러가 발생하는지 반드시 체크하여야 하며, 필요한 경우 에러를 적절히 관리해야 한다.

errno 변수를 적절하게 설정해야한다.

이를 위해서 extern ___error를 호출하는 것이 허용된다.

profile
Advanced thinking should be put into advanced code.

0개의 댓글