기계어2 [C언어]어셈블(Assemble) 단계 어셈블이란? 전처리와 컴파일을 거쳐서 나온 어셈블리어 코드를 이용해서 어셈블단계에 대해서 설명해 보도록 하겠다. 어셈블 단계에서는 어셈블러가 담당을 하고 그 결과로 오브젝트 코드가 나오게 된다. 기계어와 1:1 대응이 되는 어셈블리어 코드를 어셈블러가 오브젝트 코드로 변환을 시키는데 이 오브젝트 코드가 이제야 기계가 읽을 수 있는 언어인 이진코드, 기계어로 변환이 된다. 오브젝트 코드 기계가 곧바로 이해가 가능한 기계코드로 이진코드(binary code)로 되어있다. 하지만 어셈블단계에서 입력을 받을 때 구멍이 뚫린 어셈블리어 코드를 받았기 때문에 오브젝트 코드도 아직까지는 구멍이 메꿔지지 않았다. 그 구멍을 메꾸는 것은 링커가 해준다. 오브젝트 코드 보는 방법(.o) (Clang 기준) -c 플래그를 .. 2023. 2. 16. [C언어]컴파일(Compilation) 단계 전처리 단계에 이어서 컴파일 단계에 대해서 알아보자. 컴파일은 컴파일러가 담당을 하고 확장된 소스코드 하나를 입력받아서 어셈블리어로 출력을 하게 된다. 어셈블리어란? 어셈블리어는 기계어와 1:1로 대응하는 언어로 하드웨어에 가깝다. 출력되는 파일이 아직까지도 텍스트 파일이기 때문에 사람들이 읽을 수 있다. 기계는 아직까지도 읽지 못한다. 어셈블리어는 바이러니(이진) 코드가 아니기 때문이다. 그리고 어셈블리코드는 정의를 모르는 심볼을 사용할 수 있다. 심볼의 예를 들면 함수나 변수의 이름을 뜻한다. 그래서 이전에 배운 헤더파일을 통한 선언 만으로 컴파일이 가능하게 된다!! 컴파일러가 심볼의 선언만 보고 판단하는 과정을 설명하겠다. 함수나 변수가 선언이 되어 있네? 근데 정의를 찾지 못하겠다. 일단 프로그래.. 2023. 2. 16. 이전 1 다음