Libasm 해석

 

목차

  1. 인트로
  2. 지침
  3. 필수 파트
  4. 보너스 파트

 

인트로

 

주로 asm이라고 줄여 쓰는 어셈블리 언어는 저수준 프로그래밍 언어이다. 이런 저수준 언어는 컴퓨터 또는 언어-*아키텍쳐가 잘 호환되는 기기에 사용할 수 있다. 각각의 어셈블리 언어는 특정 컴퓨터 아키텍쳐 마다에 specific하다. (주. 아키텍쳐마다 어셈블리 언어가 적용되는 방식이 다르다는 것을 말하고 싶은 것 같음) 반대로 대부분의 고수준 언어는 여러 아키텍쳐에 호환되지만 interpret 또는 compile이 필요하다(주. interpreter 언어: 파이썬, compile 언어: 자바 가 대표적). 어셈블리어는 symbolic machine code*가 될 수 있다.

 

* 아키텍쳐 - 컴퓨터를 기능면에서 본 구성 방식. 기억 장치의 번지 방식, 입출력 장치의 구성 방식 등을 가리킴. 일반적으로 같은 아키텍처의 컴퓨터에는 소프트웨어의 호환성(互換性)이 있음. (주. unix, linux, windows 정도?)

* Symbolic language - 컴퓨터 사이언스에서 심볼릭 언어는 characters와 symbols를 사용하여 수학적인 연산을 수행하는 언어이다. 현대의 프로그래밍 언어도 심볼을 이용하여 and/or을 나타내므로 심볼릭 언어이다.

 

지침

 

  • 당신의 함수는 예상치 못하게 종료되면 안 된다.(segmentation fault나 bus error, double free 등.) 만약 이런 오류가 발생할 경우 당신의 프로젝트는 non-functional하다고 여겨질 것이며 평가에서 0점을 받게 될 것이다.
  • 당신의 Makefile은 $(NAME), all, clean, fclean, re를 가지고 있어야 한다. relink되어서는 안 된다.(make make x)
  • 보너스 파트를 추가하려면 메이크 파일에도 보너스를 추가해라.
  • 테스트 프로그램 만들어서 당신이 다른 사람을 평가할 때 유용하게 써먹을 수 있도록 하는 것을 권고한다.
  • 당신의 작업을 할당된 git repo에 ga ./ gc -m "something"/ gp해라.

 

  • 당신은 64비트 ASM(어셈블리어)를 사용하여야 한다. "calling convention"이 무엇인지 알고 있어라. *
  • ASM을 *inline해서는 안 된다. 반드시 .s 파일로 해라.
  • 당신의 어셈블리 코드는 반드시 nasm으로 컴파일 해야 한다.
  • Intel 문법을 지켜라. AT&T는 안 된다.

 

  • * 호출 규약(영어: calling convention)은 컴퓨터 과학에서 어떻게 서브루틴이 그들의 호출자(caller)로부터 변수를 받고, 어떻게 결과를 반환하는지에 대한 규약이다.

    프로그래밍 언어마다 각기 다른 호출 규약을 사용하며 각기 다른 플랫폼에서도 마찬가지이다. (CPU 아키텍처 + 운영 체제) 이는 여러 언어에서 작성한 모듈을 병합할 때, 또는 작성 장소가 다른 언어의 운영 체제 및 라이브러리 API를 호출할 때 문제를 일으킬 수도 있다. 이러한 경우 호출자(caller)와 피호출자(callee)가 사용하는 호출 규약을 조율하는데 특별한 관심을 가져야 한다. 단일 프로그래밍 언어를 사용하는 프로그램일지라도 여러 개의 호출 규약을 사용할 수도 있고, 코드 최적화를 위해 컴파일러가 선택하거나 프로그래머가 지정하는 경우도 있다.

  • inline - sodocumentation.net/ko/c/topic/4263/%EC%9D%B8%EB%9D%BC%EC%9D%B8-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC

 

 

필수 파트

 

  • 라이브러리는 반드시 libasm.a에 의해 호출돼야 한다.

  • 당신의 함수를 평가 할 main 함수를 제출해야 한다. main 함수를 돌리면 컴파일이 제대로 돼야 한다.

  • asm으로 다음의 함수를 만들어보라

    • 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, malloc 호출 가능)
  • syscalls 동안 에러를 체크해야 하며 필요한 경우 그것들은 적절히 set 되어야 한다.

    (You must check for errors during syscalls and properly set them when needed)

  • 당신의 코드는 변수의 errno을 적절히 set해야 한다.

  • 이를 위해, 당신은 extern ___error를 호출할 수 있다.

 

보너스 파트

 

과제를 확인하시오.

 

https://cdn.intra.42.fr/pdf/pdf/15443/en.subject.pdf
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom