'Embedded Programming/Assembler'에 해당되는 글 3건

  1. 2014.06.26 Assembly어의 문장 형식 6
  2. 2014.06.16 식별자와 상수
  3. 2014.06.14 Assembler의 장점



Assembly어의 문장 형식

- AVR Assembly어 문장은 총 4부분으로 나누어집니다.

- Comment를 제외하고 120문자까지 사용할 수 있습니다.



1) Label(레이블)

- ':(콜론)'으로 끝납니다.

- 점프할 곳이나 서브루틴의 위치, 데이터 메모리와 RAM에서 데이터가 저장된 위치(주소)의 이름입니다.

- 내부적으로는 label은 16비트 주소값을 갖는 포인터 변수입니다.


2) Instruction(명령어)

- mnemonic(니모닉)과 directive(지시어)로 구별됩니다.

    • mnemonic - 실질적인 명령을 수행하는 명령어입니다(예제1을 참고).

    • directive - 주변 환경변수 등을 지정하는 명령어입니다(예제2를 참고).


3) Operand(오퍼런드)

mnemonic에 대응하는 피연산자입니다.

- 숫자 상수 혹은 directive에 사용되는 수식 등이 옵니다.

- 명령어에 따라서 연산자의 갯수가 0~2개가 되며, 2개 연산자를 사용할 경우 ',(쉼표)'로 분리합니다.


4) Comment(코멘트)

- ';(세미콜론)'으로 시작되며 컴파일시 Assembler는 이를 무시합니다.

- 프로그램에 대한 주석을 넣는 부분입니다.

- C-언어와는 달리 Assembly어는 특히 가독성이 떨어짐으로 비록 스스로 짠 프로그램일지라도 나중에 유지 및 관리를 위하여 반드시 주석을 다는 습관을 들여야 합니다.







'Embedded Programming > Assembler' 카테고리의 다른 글

식별자와 상수  (0) 2014.06.16
Assembler의 장점  (0) 2014.06.14
Posted by Nature & Life



식별자 (identifier) : 변수명이나 label 명으로 사용할 수 있는 단어입니다.

- 사용가능한 문자들은 A~Z, a~z, 0~9, 그리고 _(underbar) 입니다.

- 식별자의 첫 자는 숫자를 사용할 수 없습니다.

- 255문자까지만 사용할 수 있습니다.

- C 언어와 달리 대소문자를 구별하지 않습니다.





상수를 표기하는 규칙입니다.

- 특별히 지정하지 않은 숫자는 10진수로 취급합니다.

- ASCII 문자는 인용부호(')로 시작해서 인용부호(')로 마칩니다.

- 문자열로 사용할 수 있는 문자는 프린트가 가능한 문자와 공백문자로 한정됩니다.

- 10진수가 아닌 경우는 아래와 같이 첨자로 표기합니다.



참고로 16진수의 경우에 0x와 $ 모두 16진수를 가리키는 첨자로 사용되며 0x의 0은 알파벳 'O'가 아닌 숫자 zero입니다. C 언어와 다르게 어셈블러에서는 간편함으로 $가 자주 사용됩니다.





'Embedded Programming > Assembler' 카테고리의 다른 글

Assembly어의 문장 형식  (6) 2014.06.26
Assembler의 장점  (0) 2014.06.14
Posted by Nature & Life



과거에는 PC DOS 응용프로그램 개발시 어떻게 메모리를 효율적으로 관리하느냐가 관건이었던 적이 있습니다. 당시에는 메모리 집적기술의 한계로 PC에 1Mbyte를 설치하였다면 큰 자랑꺼리였으며 가격도 비쌌던 시절였습니다. 그러므로 응용프로그램은 DOS가 사용하는 영역의 나머지인 상위메모리를 사용하곤 하였습니다.


하지만 근래에는 메모리가 부족하여 응용프로그램을 실행하지 못하는 경우는 거의 없습니다. CPU의 속도와 메모리 용량 그리고 대용량 하드디스크의 발전은 더이상 가독성이 떨어지는 낮은 수준(low level)의 언어 사용은 물론 엄격한 메모리 관리의 부담을 덜어주게 되었습니다.


그러므로 언제부턴가 어셈블러(ASM)나 C-언어가 아닌 사용자에 즉, 사람에게 친숙한 높은 수준(high level)의 언어인 비쥬얼베이직(Visual Basic), C++ 언어 등이 대세가 되었습니다. 그럼에도 불구하고 AVR이나 PIC계열의 마이크로콘트롤러(MCU)에서는 여전히 낮은 수준의 프로그램 언어를 사용하고 있습니다.


MCU의 속도나 메모리 용량 등과 같은 성능의 발전과 avr-gcc와 같은 컴파일러의 지속적인 향상에 힘입어 요즈음은 어셈블러보다는 C-언어를 선호하게 된 것도 사실입니다. C-언어로 작성해 굳이 오버헤드(overhead)가 있을지라도 속도와 메모리 같은 개선된 MCU 성능으로 적용하는데 크게 문제가 되지 않은다는 것입니다.


하지만 아직도 상업적인 용도의 AVR 펌웨어(firmware)는 여전히 어셈블러를 사용하고 있습니다. 고성능의 MCU를 사용하여 단가를 높이기 보다는 합리적인 성능의 자원에 펌웨어를 어셈블러로 정교하게 작성하고 최적화하여 시장 경쟁력을 얻는다는 것입니다.





그러므로 어셈블러는 적어도 한번은 다루어봐야 하는 언어로 C-언어와 비교하여 다음과 같은 장점을 갖습니다.


1) 새로운 언어를 배운다는 스트레스는 문법을 익혀야 한다는 부담일 것입니다. 하지만 어셈블러는 문법이 C-언어에 비해서 매우 간단하다는 것입니다. 어셈블러는 원하는 코드 구현 자체가 까다로운 것이지 문법을 처음 익히기는 매우 쉽다는 것입니다. 


구현이 까다롭다는 것은 하드웨어에 대해 일일이 알아야 한다는 것과 아마도 120여개에 이르는 다양한 AVR 명령어가 존재하기 때문일 것입니다. 그러나 다양한 명령어는 기능이 유사한 소위 파생된 명령어로 인하여 용도별로 분류하면 사실상 몇 종류가 되지 않으며, 필요시 그때 그때 가져다 사용하면 됩니다.


2) 어셈블러를 다루면 특히 메모리 영역과 같은 하드웨어를 자세하게 익힐 수 있으며 이러한 지식은 향후 C-언어로 구현시 최적화된 코드를 생성할 수 있는 기회를 제공한다는 것입니다.


기존의 C-언어에서는 하드웨어를 자세히 다룰 필요는 없었습니다. 왜냐하면 사용코자 하는 AVR를 지정하면 컴파일러가 알아서 해주기 때문입니다. 메모리가 부족하면 컴파일러는 이를 사용자에게 일러주고 사용자는 불필요한 변수를 삭제해주면 되었기 때문입니다.


3) 정밀한 타이밍을 요구하는 펌웨어를 작성할 수 있습니다. 


어셈블러 명령어는 1~2 사이클의 클럭을 필요로 하며 사용자는 이를 직접 보면서 다루기 때문입니다. 하지만 C-언어를 사용할 때는 해당코드가 컴파일 후에 얼마의 클럭을 요구하는지 알 수가 없고, 알아낸다 하더라도 1us 정도의 정밀한 타이밍은 사실상 불가능하다는 것입니다. 예를 들어, 브러쉬리스(brushless) 모터를 제어시에 C-언어로 작성된 펌웨어는 고속 회전 영역에서 제어 불능상태가 될 수 있다는 것입니다.







'Embedded Programming > Assembler' 카테고리의 다른 글

Assembly어의 문장 형식  (6) 2014.06.26
식별자와 상수  (0) 2014.06.16
Posted by Nature & Life