컴퓨터 CPU가 0과 1의 기계어를 어셈블리어로 변환하는 과정에 대한 이야기를 해보려 합니다.
기본적으로 CPU는 많은 수의 트랜지스터로 이루어져 있습니다. 그리고 주 임무는 상황에 따른 on, off를 표시하여, 디지털 신호인 0과 1을 만들어 냅니다.
아래 코드는 기계어와 어셈블리어입니다.
00000000: 10110000 01100001 ; mov eax, 0x61
여기에서 기계어와 어셈블리어를 분리하면
– 기계어: 00000000: 10110000 01100001
– 어셈블리어: mov eax, 0x61
위 코드 ‘mov eax, 0x61’ 명령어를 나타내며, 이는 레지스터 eax에 0x61 값을 할당하는 역할을 합니다.
이러한 어셈블리어 명령문은 어셈블러에 의해 해당 CPU 아키텍처에 맞는 기계어로 변환됩니다. 따라서 “mov eax, 0x61″은 어셈블리어 명령문이고, 해당 어셈블리어 명령문을 어셈블러가 처리하여 해당 CPU에서 실행 가능한 기계어로 변환됩니다.
컴퓨터 CPU에서 기계어 0과 1을 이진수로 출력하거나 입력 받습니다. 그리고 그 결과 역시 전기적 신호인 on과 off를 통해 이진수로 출력을 해줍니다.
이때 이진수는 사람이 알아보기 어렵기 때문에 우리가 알아볼 수 있는 어셈블리어로 변환시켜 주는 것입니다. 이 변환장치를 어셈블러라고 합니다.

“mov eax, 0x61″은 어셈블리어 명령문입니다.
기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 0과 1로 이루어진 이진 형태의 명령어입니다. 어셈블리어는 사람이 이해하기 쉽도록 기계어를 대체할 수 있는 낮은 수준의 프로그래밍 언어입니다.
기계어와 어셈블리어를 연결시켜 주는 것은 어셈블러입니다.
어셈블러는 어셈블리어로 작성된 프로그램을 해당 CPU 아키텍처에 맞는 기계어로 변환하는 역할을 합니다.
따라서 어셈블러는 어셈블리어 코드를 읽고 이를 해당 CPU가 이해하고 실행할 수 있는 기계어 코드로 번역합니다.
이렇게 번역된 기계어 코드는 CPU에서 직접 실행됩니다. 따라서 어셈블러는 어셈블리어와 기계어 간의 다리 역할을 합니다.

