어셈블리어는 지금까지 나온 모든 언어를 통틀어 가장 간단하고 쉬운 언어이다.
그러나 대부분의 프로그래머에게 어렵다는 많은 오해를 받고 있는 언어이다.
그 이유는 어셈블리어가 아닌 다른 컴퓨터 언어는 컴퓨터의 구조를 알지 못해도 코딩이 가능하나,
어셈블리어로 코딩을 하기 위하여는 CPU 및 컴퓨터 메모리 등의 구조를 먼저 이해하여야 코딩이 가능한 언어이다.
요즘 나오는 컴퓨터의 CPU는 무척이나 복잡한 기능과 명령어들을 많이 가지고 있다. 이로 인하여 어셈블리어를 공부하기가
더욱 어려워지고 있으며. 특히 Operating System (운영 체제)가 실행되고 있는 컴퓨터에서 어셈블리어로 코딩한
프로그램을 실행하기에는 많은 제약이 따른다.
지금까지의 경험으로 보아 어셈블리어를 공부하기 가장 좋은 방법은 구조가 간단한 CPU의 어셈블리어를 공부하고,
나중 우리가 사용하는 컴퓨터의 어셈블리어를 공부하는 방법이 가장 좋은 방법인 것 같다.
어셈블리어를 공부하기 가장 간단한 CPU는 6502, z80 등의 8bit CPU가 있으나, 어셈블러 및 프로그램의 실행 환경 등을 갖추기가 어렵다.
(CPU, ROM, RAM, PIO, SIO등으로 구성된 트레이닝 보드를 만들거나 구입해야 한다.)
이런 이유로 여기서는 요즘 유행하고 있는 저가의 아두이노 우노에서 사용하는 ATmega328P로 어셈블리어를 강의하고자 한다.
ATmega328P는 Atmel 이라는 회사(Microchip 사가 인수함)의 AVR 아키텍쳐를 사용하는 MPU 이다.
또한 ATmega328P을 위한 IDE(Integrated Development Environment, 통합 개발 환경)를 무료로 자유롭게 사용 가능하다는 장점이 있다.
여기서는 어셈블리어를 공부하기 위한 정도(正道)보다는 각 과정에 필요한 최소한의 개념만 설명하고 차츰 개념을 늘여 설명하고자 한다.
1. 참고로 보통의 경우 코딩과 프로그래밍을 같은 의미로 사용하나,
"프로그래밍"과 "코딩"은 엄격히 말하면 프로그래머의 다른 행동을 말하는 것이며,
여기서 "코딩"의 의미는 컴퓨터 언어로 프로그램을 작성하여 실행하는 동작을 말하는 것이다.
2. CPU : Central Processing Unit(중앙 처리 장치)
3. MPU (Microprocessor Unit) : CPU, 메모리, I/O 장치 등을 하나의 단일 IC(Integrated Circuit, 집적 회로)에 넣어 만든 반도체 소자
ps. 여기서 사용하는 많은 용어들이 있다. 이 용어들은 열실히 공부를 하고 시간이 지나 실력이 늘면 자연히 그 용어의 의미는 이해하기 된다.
처음부터 용어의 정의나 의미를 이해하고 소화하려고 하면 앞으로 나아가기가 불가능해 진다. 이해하기 위하여는 충분한 시간이 지나야 한다.