어셈블리어의 개요, 사용이점과 활용도
* using x86 processor-based Assembly Language (all compatible with Intel x86 processor, AMD CPU, 64bits CPU, and even Mac own M1,M2 chip set CPU)
* utilzing MASM(Microsoft Assembler)
high level(상단) - low-level language(하단)
기본적으로, C.S. 공부를 하는 사람이면 M.Language까지는 알아야 한다. 아무리 web 공부가 우선인 개발자라고 해도, performance 차이를 만들기 위해 기계어의 동작과 처리에 대해 이해하고 있어야 한다.
c,c++,python, java 같은 high level language(이하 h.l)는 assembly language(이하 a.l)와 기계어(이하 m.lang- 0,1로만 이뤄짐.)로 바뀐다.
이 때, a.l.과 m.lang은 서로 1:1로 대응된다. 즉, m.lang에서 0,1을 통해 정해진 명세에 따라 사용된 숫자코드들이 a.l에서 특정 명령을 나타내는 단어에 1:1대응된다. 하지만 h.l과 a.l 사이의 관계는 1:1이 아니다. 오히려 1:N 관계다.
다음을 참고.
C로 표현된 단순 initializing code다. 이 식을 a.l.형태로 바꾸면 아래와 같다.
훨씬 코드 양이 많아졌다. CPU에 한정적으로 존재하는 register를 이용해 그 register에 변수를 대입하고 multiple연산을 진행하는 과정이다. 이처럼 1:N 관계다.
a.l은 여러 종류가 있으며, processor마다 그 기능들이 조금씩 다르기에, unportable하다는 단점이 있다.
그럼에도 각광받는 이유는, embedded program에 적합하기 때문이다. 앞서 CPU에 register가 한정적으로 존재한다고 했는데, 자원이 한정적이면 CPU에서 사용할 수 있는 메모리 크기 역시 한정적이어서 코드가 간결하고 효율을 추구할 수밖에 없다.
따라서, 제한된 메모리 hardware를 가진 상황에서 높은 효율을 요하는 console 게임 개발 환경에서 a.l은 각광받는다.
또한 h.l과 다르게, m.lang과 1:1 대응되는 언어이므로 입력하는 프로그램 명령어의 수가 프로그램 size 그 잡채가 된다. 따라서 rea-time application 구축 환경에서 뛰어난 성능을 보일 수 있다.
그리고 hardware(의 환경)와 더 가까운 언어이다 보니, 기계 입장에서 더 직관적인(straightforward) 관점으로 코드를 짤 수 있다. Hardware device driver나 embedded systems and computer games requiring direct hardware access에서 활용되는 이유가 이 때문이다.
추가적으로 공부해 볼 부분: overflow, carry, Translating Unsigned(only positive.. e.g. positive set includes zero in computer science) Decimal Integers to Binary