printf("Hello World");
해당 코드를 컴퓨터가 바로 이해할 수 있을까?
위와 같은 코드는 고급언어라고 하고, 컴퓨터가 이해하는 언어는 저급언어라고 한다.

C, C++, java 등
오잉 그럼 고급언어를 대체 컴퓨터가 어떻게 받아드리는 거야?


더해라 / 메모리 32번지의 값과 / 값 120을
이처럼 명령어는
연산코드 / 오퍼랜드(주소필드)
로 구성이된다. 오퍼랜드는 값이 될 수도 있지만, 대부분 그 값의 주소가 많이 적히기 때문에 주소 필드라고도 말한다. 그리고 오퍼랜드는 없을 수도 있고, 여러개일 수도 있다.
MOVE : 데이터를 옮겨라
STORE : 메모리에 저장해라
LOAD (FECTCH) : 메모리에서 CPU로 데이터를 가져와라
PUSH : 스택에 데이터를 저장해라
POP : 스택의 최상단 데이터를 가져와라
😭 어.. 근데 스택이 뭔데요?
: 스택은요! 아래 그림 처럼 아래가 막혀있는 자료구조입니다.

-한 쪽 끝이 막혀있는 메모리이기 때문에, 나중에 들어간 게 제일 먼저 나온다 ; Last In First Out 이라고도 합니다.
그래서 PUSH는 데이터를 밀어넣는 거구요. POP은 데이터를 저장 공간에서 팝🌟! 팝🌟! 빼내라는 연산 코드입니다.
📌 추가로 큐 라는 자료구조도 많이 나와요!
: 양쪽 끝이 뚫려있는 자료구조입니다.

-5,4,3,2,1 순서로 메모리가 들어가고, 들어간 순서대로 메모리가 나온다. ; First in First Out
🙋🏻♀️ : 질문이요..! 근데 왜 명령어를 입력할 때 연산코드 / 데이터주소 로 작성하는 거예요? 데이터 그대로 쓰면 안되낭?

-명령어는 16비트의 크기이기 때문에, 데이터를 입력하게 되면 명령어를 작성하는 데에 한계가 있다. 그러므로 주소를 직접 적어서, 더 큰 데이터를 그리고 많은 데이터를 입력할 수 있게 한다.
그리고 이때 사용하는 주소를 유효주소라고 한다.
😵💫사실 나는 해당 부분에서 살짝 헤맸다.
컴공과 학생으로서 멍청한 소리이긴 한데. 명령어가 16비트밖에 안 된다는 게 뭔말일까?
여기서 말하는 명령어는 컴퓨터 내에서 CPU에게 내리는 명령이다. 컴퓨터는 계산기라는 걸 잊지 말자. 계산하는 애가 16비트 컴퓨터고, 우리는 그에 맞춰 16비트명령어를 보내줘야 한다.





PLUS❗ 소스코드가 명령어가 되기까지
전처리기 ➡ 컴파일러 ➡ 어셈블러 ➡ 링커 의 과정을 거친다.
#include <stdio.h> 라이브러리를 싹~ 긁어온다고 생각하면 편해요!🤓웅? 목적파일과 실행파일이 뭐가 다르냐구?
목적파일 main.o, helper.o가 있다고 치자.

목적파일 main에는 helper파일이 있어야 실행 가능한데, 단독적으로 실행하면 어떤 연산도 할 수 없잖아?

그래서 링킹을 통해, 두 파일을 연결한 실행파일을 만들어 내는 거지!!