어셈블리어

[Assembly] 어셈블리어의 기본

LimeCoding 2022. 9. 28. 00:48

어셈블리어란?(What is Assembly language?)


 어셈블리어는 기계어와 1대 1 맵핑이 가능한 한마디로 사람이 알아들을 수 있는 기계어이다. 기계어는 0과 1로 이루어져 있는데 초기 컴퓨터는 이 0과 1을 이용하여 프로그래밍을 했다. 그러나 시간이 지나면서 0과 1로 프로그래밍을 하는 것에 불편함을 느끼고 어떻게 하면 좀 더 쉽게 프로그래밍을 할 수 있을지 고민했고 그 결과가 바로 기계어를 사람이 알아들을 수 있는 단어(Symbol)로 나타낸 것이다. 그래서 어셈블리어를 Symbolic language라고도 한다.

 기존에 알고 있는 프로그래밍 언어에서는 저레벨이라고 해도 C언어가 가장 저레벨 언어일 것이다. 그러나 어셈블리어는 그보다 더 저급언어이고 때문에 CPU를 직접 조작하게 된다. CPU내에 레지스터나 메모리를 직접적으로 다룰 줄 아는 것이 어셈블리어의 기본이자 핵심이다. 어셈블리어는 기계어이기 때문에 CPU의 환경에 따라 명령어와 실행 조건이 달라지게 된다. 이는 기계어에 특징인 종속적인 성향때문이다. 여기서는 다양한 CPU중 Intel processor를 기준으로 한다.

 

레지스터(Register)


레지스터는 컴퓨터에서 메모리와 CPU 사이에서 데이터를 중간저장하는 역할을 하는 장치이다. 이 레지스터의 크기는 프로세서마다 다른데 기본적으로 레지스터의 크기는 다음과 같다.(레지스터 종류는 다른 포스팅에서 설명하겠다.)

레지스터의 이름과 크기
레지스터의 상대적인 크기

 

먼저 64bit에서 RAX에서 R은 "Register"의 약자라고 하지만 정확하지는 않다. (궁금하면 다음 링크 참조) 

 

What does the 'R' in x64 register names stand for?

I know the 32 bit registers were named like the 16 bit registers with an 'E' prefix to mean extended. I've always assumed that meant extended from 16 to 32 bits although I've never seen that explic...

softwareengineering.stackexchange.com

 

32bit에서는 EAX로 Extend의 약자고 E를 사용하고 16bit는 AX로, 8bit는 AX레지스터의 상위 바이트인 AH와 하위 바이트인 AL로 나눈다.