소스코드의 한 문장을 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로 프밍하라는 것은 인간이 아니라 기계가 되라는 말이다.
'공부 > JUN STUDY' 카테고리의 다른 글
탐색을 위한 해시 (해시가 값 검색을 위해 사용되는 원리) (0) | 2021.11.11 |
---|---|
패킷 손실과 딜레이 / 패킷 손실 4가지 원인 (packet loss, delay, 4 sources of packet delay) (0) | 2021.10.10 |
컴파일 VS 인터프리터 (Compile VS Interpreter) (0) | 2021.09.14 |
Zeroday VS Oneday VS Olday(N-day) 제로 데이 VS 원데이 VS 올데이 (0) | 2021.01.24 |
인터넷에 연결되는 과정(2) - DNS(Domain Name Service)에 대해 (0) | 2020.05.30 |