binary-code

시작

해당 코드의 차이들에 대해 살펴보기 전에 알아야할 내용:

  • 컴퓨터는 1 bit(=binary digit), 즉 2진수 (0,1) 밖에 이해하지 못한다
  • 이때 0은 전기 신호가 없음, 1은 전기 신호가 있음을 의미한다
  • 0과 1은 컴퓨터가 이해하는 알파벳이라고 보면 된다
  • 컴퓨터는 0과 1을 사용해 정보를 저장할 뿐이다. 저장된 정보를 정해둔 약속에 맞게 해석한 것이 언어가 되는 것이다

1. 바이너리 코드와 머신 코드

바이너리 코드나 머신 코드나 0과 1로 나열되어 표현된 정보이다. (예: 00011000 11011111)

차이는 머신 코드는 머신이 이해할 수 있는 언어이고 바이너리 코드는 그냥 일반적인 정보이다.

2. 바이너리 코드 = 머신 코드?

관점에 따라 바이너리 코드 = 머신 코드가 성립할 수 있지만 약간의 차이가 있다.

컴퓨터에 저장되어 있는 모든 정보는 바이너리 코드이다. 바이너리 코드를 특정한 문법에 따라 해석해 컴퓨터를 조작할 수 있는 것이 머신 코드이다.

컴퓨터는 bit 단위로 정보를 저장할 뿐이고 이 저장된 바이너리 코드들은 CPU에 따라 다르게 해석될 수 있다. 이 정보를 해석하는 규칙이 CPU에 포함 되어 있으면 바이너리코드 = 머신 코드가 성립하고 그렇지 않고 정보만을 표현한다면 바이너리 코드라고 보면된다.

그러니까 바이너리 코드는 일반적인 것이고 기계어는 바이너리 코드에 해석을 더한 것인듯 하다.

3. 어셈블리 코드?

어셈블리 코드는 머신 코드를 사람이 쉽게 이해할 수 있도록 하기 위해 만든 언어이고 일반적으로 머신코드와 어셈블리 코드는 일대일 대응이 된다고 한다. 그래서 보통 머신코드 = 어셈블리 코드다 라고 암묵적으로 이해하고 사용해 나를 포함해 많은 사람들이 해당 용어를 많이 헷갈려 했던 것 같다.

일대일 대응이란건 양방향으로 직역이 가능하다고 보면 된다.

4. 그럼 바이트 코드는?

바이트 코드는 가상 머신이 이해할 수 있는 언어로 변경된 소스 코드이다. 명령어 크기가 1바이트라서 이름이 바이트 코드일 뿐이다.

5. 어셈블리 코드와 바이트 코드의 차이는?

처음 봤을때는 어셈블리 코드와 바이트 코드가 헷갈렸는데 자세하게 살펴보니 차이가 명확하다.

첫번째로 명령어 크기가 다른 것이 가장 큰 차이이고

두번째로는 해당 코드를 누가 해석하는지가 다르다.

바이트 코드는 인터프리터가 머신 코드로 변환하는 언어이고 어셈블리 코드는 어셈블러가 머신 코드로 변환한다.

원래 bit operator가 어떻게 사용되는지 공부하려다가 삼천포로 빠졌는데 해당 부분을 정리하니 자바스크립트 엔진 동작 원리도 궁금해져서 해당 부분도 나중에 정리해봐야겠다.

😊