공부/JUN STUDY

구문 VS 명령어 (Statement VS Instruction) 소스코드 어셈블리어 인간이 하이 레벨 언어를 쓰는 이유

JUNFUTURE 2021. 9. 14. 01:24

소스코드의 한 문장을 statement(구문)이라고 하고,

실제로 컴퓨터가 명령을 수행하는 하나의 단위를 instruction(명령어)라고 한다.

 

프로그램은 명령어의 유한집합을 의미하며, 여기서 명령어는 instruction에 해당한다.

CPU는 한번에 하나의 instruction을 수행한다. (구체적으로 CPU의 ALU, Arithmethic Logic Unit)

 

c = a+b;

이렇게 C언어 소스코드의 한 문장(statement)을 쓰게되면,

컴퓨터 내부에서는 레지스터에 값을 가져오고 계산해서 C의 위치에 더한 값을 집어넣는

세부적인 일(instruction)들이 필요하다.

  • 컴파일러가 이 하나의 statement를 수행하기 위해서 세개의 instruction을 실행해야한다.
mov eax, dword ptr [ebp-4]

: 메모리에 A가 있는 위치 (ebp-4 : 스택베이스 포인터 ebp에서 4바이트번째 주소? 첫번째 지역변수)에서 A값을 eax 레지스터로 가져온다.

add eax, dword ptr [ebp-8]

: 메인메모리 B가 있는 위치 (ebp-8 : 스택베이스 포인터 ebp에서 8바이트번째 주소? 두번째 지역변수)에서 B값을 eax 레지스터에 있는 값이랑 더한다 ⇒ 결국 A+B

mov dword ptr [ebp-0Ch], eax

: eax에 있는 값을 C가 있는 위치 (ebp-c : : 스택베이스 포인터 ebp에서 8바이트번째 주소? 세번째 지역변수)에 가져와라 ⇒ 결국 C에다가 대입

 

 

하이 레벨 언어를 쓰면 편한 이유(==인간이 하이 레벨 언어를 쓰는 이유)는 instruction이 아니라 statement 표현을 통해 프로그래밍할 수 있기 때문이다.

  • c = a+b 두개값을 더해서 새로운 값을 C에 집어넣는다 이렇게 쓰면 쉽고 직관적으로 이해가 가능하다.
  • 어셈블리어로 프로그래밍을 하는 것은 세부적인 instruction들을 표현해야하기 때문에 어렵다.
  • 기계어로 0과1로 프밍하라는 것은 인간이 아니라 기계가 되라는 말이다.