프로그래밍 언어/어셈블리언어

어셈블리어란?

원원 2022. 4. 1. 17:43

안녕하세요. 오늘은 어셈블리어에 대해 알아보겠습니다

어셈블리어란 기계어랑 1:1 매칭이 가능한 언어입니다. 기계어란 CPU가 직접 사용하는 언어이고 1000 0000 1000 0000이런 식으로 숫자로 되어있습니다. 그래서 코딩을 하다가 예상한 대로 동작을 안 할 때, 어셈블리어를 보면 CPU가 동작을 어떻게 하는지 정확히 알 수 있습니다. 

어셈블리언어에는 표기하는 방법이 크게 두 가지가 있습니다. INTEL과 AT&T표기법입니다.
INTEL표기법은 윈도우OS에서 많이 사용되고 AT&T표기법은 리눅스에서 많이 사용합니다.
일단 기본적으로 어셈블리언어는 아래의 포맷을 따릅니다
opcode operand1 operand2
opcode(연산코드): CPU가 수행할 동작을 나타내는 코드
operand(피연산자): 동작의 대상

INTEL표기법은 opcode Destination Source이고
AT&T표기법은 opcode Source Destination 입니다.
예를 들면 가장 큰 차이는 a에 1을 ADD(더하기)를 한다고 했을 때 인텔표기법은 ADD a,1으로 표시하고 AT&T표기법은 ADD $1,$a로 합니다. 그리고 숫자를 표기할때 인텔은 1,2,3,4로하고 AT&T는 $1,$2,$3,$4로 합니다.

어셈블리어를 할 때 알아야 할 게 있습니다
1)
8bit = 1byte
16bit = 2byte = 1word

2)
16진수를 0xff으로도 표현하고 ffH라고도 표현합니다. 뒤에 H가 붙어있으면 16진수입니다

3) 레지스터란? CPU에서 사용하는 변수다
레지스터 변수에는 운영체제 비트기준 AH(8비트용), AX(16비트용), EAX(32비트용), RAX(64비트용)등등이 있습니다. 8비트를 제외하고 비트에 따라서 앞에 붙는 접두어가 같습니다. E는 32비트용, R는 64비트용입니다