※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


이제 어셈블리 언어에 대해서 이야기해보자.

우선 어셈블리 언어가 무엇인지 다시 한번 짚어보고 공부를 시작해보자.


우리가 하나의 C프로그램을 만든다. 


Preprocessing by preprocesssor (전처리 과정)

.C파일이 전처리 과정을 거치면 .i 파일이 나온다. .i파일은 100% 사람이 이해하기 쉬운 코드로서 .c파일과의 차이점은 단순히 #include <stdio.h>와 같은 부분이 실제 .h파일 내용으로 바뀌어져 있다는 것 뿐이다.


Compiler (컴파일 과정)

.i 파일이 이제는 기계어로 1:1 매칭될 수도 있고 사람이 이해할 수 도 있는 .s 파일로 바뀌게 된다. 이 것이 어셈블리 언어이다. 이것이 컴파일러에 의해 수행되는 과정이다.


Assembler

어셈블러가 .s파일을 기계어 코드로 매핑시켜준다. 중요한 것은 .s파일에 있는 모든 명령어는, 예를 들어 push %ebp 등등, 기계어와 1:1로 매칭된다는 점이다. 이 파일의 결과는 relocatable object file이다. 메모리의 어디든지 끼워맞출 수 있다는 뜻이다. 이게 무엇인지는 이전의 여러 포스팅에 거쳐서 굉장히 길게 자세하게 설명해놨으니 이전의 포스팅을 보도록 하자.


Linker (링킹 과정)

relocatable object file 형태를 가상 메모리로 매핑시키는 과정이다.


우리가 지금부터 공부할 부분은 컴파일 과정이 될 것이다.

보통 컴파일되어 생성된 .s파일은 다음과 같은 형태를 띈다.



제일 왼쪽의 숫자들은 이전의 포스팅에서 아주 자세하게 설명했다. 한번 더 짚고 가면, 저 숫자들은 실제 메모리가 아닌 가상메모리 주소이다. 즉, PC값이다. PC는 프로세스가 다음에 실행할 명령어의 주소를 가리킨다. "이 값이 PC라고? 가상메모리라고 그랬잖아요?" 라고 질문하는 사람들은 이전의 포스팅을 다시 한번 보자. 결국 그 말이 그 말이다. 가상 메모리 주소가 바로 CPU가 접근하는 메모리 주소이기 때문이다.


위의 어셈블리 코드가 실제로 어떻게 되어있는 것인지 아래 그림을 통해서 바이트 단위로 이해해보자. 가상 메모리에 아래와 같이 로드되어있는 것이다.



그 다음 알아야 할 것은 바로 레지스터이다. 레지스터는 CPU가 직접 direct로 접근할 수 있는 저장 장소이다. CPU에 있기 때문에 가장 빠른 속도로 접근이 가능하다. 레지스터는 속도가 빠르기 떄문에 그 양이 매우 적다. 컴퓨터 구조를 공부해본 사람은 알겠지만, 용량이 크면 클수록 보통 느리고 작으면 작을수록 빠르다. 레지스터는 무지하게 빠르게 접근이 가능하기 때문에 용량도 무지하게 적다. (빠른 것이 용량도 많아버리면 얼마나 가격이 비싸질까?)


CPU는 여러 종류의 레지스터를 가지고 있다. 그 레지스터가 어떤 종류가 있는지 알아보자.

CPU 내부는 다음과 같이 되어있다.



보면 우측 상단/하단에 Register file과 FP register 그리고 Condition Code와 PC도 있다. 이것들이 모두 레지스터들이다. 우리가 앞으로 자주 이야기할 레지스터들은 다음과 다음과 같다.



Application Programming Registers 들이 말 그대로 어플리케이션을 사용하면서 쓰게되는 레지스터들이기 때문에 이제부터 우리가 자주 보게 될 것이다.


우선 여기에서는 레지스터들의 이름을 읇어보고 그런 레지스터가 있다는 것 정도만 알아두자. 그리고 이 레지스터는 메모리나 하드디스크가 아닌 CPU에 있는 것이라는 것 역시 중요하게 알아둬야 한다.


자 이제 기본적으로 어셈블리언어를 공부하기 위해 알아두어야 할 것들은 모두 끝났다. 다음 포스팅부터는 진짜로 어셈블리 언어를 공부해보자.

'System Programming' 카테고리의 다른 글

[SP] Assembly Language Example  (0) 2013.04.30
[SP] Assembly Language  (1) 2013.04.30
[SP] Purpose for Virtual Memory  (0) 2013.04.29
[SP] Virtual Memory  (3) 2013.04.29
[SP] Virtual Memory (Swapping)  (0) 2013.04.24
Posted by 빛나유
,