Computer Structure

소스코드 & 명령어

햇썽이 2025. 3. 27. 23:32

소스코드에서 명령어로 

컴퓨터는 소스코드를 곧장이해하지 못한다 

컴퓨터는 명령어를 이해한다. 소스 코드는 실행되기전 명령어(+ 데이터)로 변환되어 실행한다. 

소스코드 : 사람(개발자)가 이해하기 편한 언어 - 고급언어

명령어와 데이터 : 컴퓨터가 이해하기 편한 언어 - 저급언어

즉, 고급언어로 작성된 소스코드는 내부적으로 저급언어로 구성된 명령어나 데이터로 변환된다

저급언어의 두종류 - 기계어(machine code) / 어셈블리어(assembly language)

기계어를 변환하여 사람들이 보기편하게 만든게 어셈블리어

CPU의 따라서 기계어가 달라질수 있다

 

고급언어에서 저급언어로 변환되는 대표적 방식 

컴파일 / 인터프리트

컴파일 - 소스코드 전체가 컴파일러에 의해 검사, 목적코드로 변환

C/C++, Rust 

컴파일러 : gcc, clang, Visual studio

인터프리트 - 소스코드 한줄식 인터프리터에 의해 검사, 목적코드로 변환

python, javascript

한줄씩 검사하기 때문에 n번째에서 오류가 난다면 n-1번째까지는 실행됨

 

소스코드가 저급언어를 변환하는 대표방식 2개일뿐 구분되는 개념이 아니고 컴파일 특성 과 인터프리트 언어 특성 모두 갖춘 언어도 있음

 

컴파일러의 종류 / CPU종류에 따라서 변환되는 명령어는 달라진다

컴파일러 익스플로러 사이트를 통해서 다음과 같이 기계어를 변환하는 것을 볼 수 있다

x86-64 gcc 의 경우, x86-64(Intel/AMD CPU) gcc(컴파일러의 종류)이다

 

간단한 예시를 자세히 보자면 

int c = a + b;에서 기계어를 보면은

eax, edx - 레지스터

mov eax, DWOD PTR [rbp-8] -> DWOD PTR [rbp-8]이라는 것을 eax레지스터로 움직여라

DWOD PTR[rbp-8] -> 이란것은 위에서 결국 2라고 선언되어있음 int b = 2;

 

gcc -S hello.c -o hello.S

-S 어셈블리어를 만드는 명령어 / hello.S라는 어셈블리어를 저장하는 것 

cat hello.S