카테고리 없음

SPARC 어셈블리 #1 - 개요

마쿠어 2023. 12. 24. 10:47

개요

 

SPARC 어셈블리, 혹은 일반적인 어셈블리 언어를 다루기 전에 기본적인 용어들에 대해서 이해할 필요가 있다.

 

1. 어셈블리언어란 무엇인가?

 

 우리는 주로 C++, 파이썬 등과 같은 언어로 코딩을 하게 된다. 하지만 실제로 컴퓨터가 알아듣는 명령어는 0과 1로 이루어진 이진수이며, 우리가 어떤 명령을 내리는 것은 사실 수많은 연산의 결과이다. 어셈블리언어는 이 중간 단계를 담당하는 언어라고 이해하면 편리하다. 어셈블리언어가 작동하는 원리, 과정을 이해하기 위해서는 사실 CPU의 작동 방식을 이해할 필요가 있다.

 

 

2. CPU의 구성

 

 CPU는 기본적으로 고급 계산기라고 보면 편하다. 우리는 계산기를 두드릴 때 연산을 해야할 대상 그리고 어떤 연산을 할지, 그리고 그 연산 결과를 어디에 저장할지를 고민해야한다. 어셈블리 작동에 있어서 우리가 이해해야할 공간의 관계는 레지스터파일, ALU, LSU, 그리고 메모리이다. CU(Control Unit)은 그냥 크게 관리자라고 이해해두면 됨.

 

-메모리 : 메모리 공간은 CPU 밖에 위치한 공간이다. 우리가 흔히 컴퓨터에서 메모리라고 칭하는 공간이고 물리적 거리로 인해서 이곳에서의 정보를 다루는 것은 연산 효율에 있어서 굉장히 안좋다. 하지만, CPU의 성능 한계로 인해서 사용하는 공간으로 이해하면 된다.

 

-ALU : CPU의 연산이 작동되는 공간이다. 입력받은 연산 대상을 받고 그 결과를 다시 레지스터로 되돌리는 역할을 한다. ALU는 복잡한 논리회로로 구성이 되어 있다. 논리회로에서 배우는 합연산기, 곱연산기가 이런곳에서 활용되는 것이다.(XOR연산도) 어셈블리 언어에서는 어떻게 이 연산회로가 구성되는가?에 집중하기 보다는 ALU가 어떤 결과를 내는지 정도만 알아도 상관이 없다.

 

-레지스터 : CPU내에 있는 메모리라고 생각하면 편리하다. 즉, 앞서 말한 물리적 거리로 인한 문제가 없다. 다만, 레지스터 공간에는 분명히 한계가 존재한다는 것을 이해해야 한다. 이해하기 편하도록, 레지스터로 가져온 정보들은 사용할 준비가 된 자료라고 보면 좋다.

 

-LSU: 메모리에서 레지스터로 데이터를 옮겨올 때 사용하는 유닛이다. 이정도로만 이해해주면 되며 어떻게 작동하는지를 보기보다 " LSU를 통해서 메모리에서 레지스터로 데이터를 가져온다 " 로 이해하면 된다.

 

결국 CPU 작동 원리의 핵심은 메모리 그리고 레지스터의 관계라고 봐도 무방하다. 사실상 ALU, 레지스터, 메모리 이 3단계로 CPU의 작동이 축약되며, 어셈블리에서 요구하는 바도 현재 이 레지스터는 어떤 변수가 사용하고 있는가? 이 메모리 주소는 어떤 변수가 사용하고 있는가?를 물어보기 때문이다.

 

 

용어 정리

 

ISA : 해당 CPU가 작동하는 메뉴얼을 담은 설명서라고 이해하면 편리하다. 우리가 흔히 쓰는 인텔, AMD의 CPU를 이용해서 프로그래밍 할 때 이런 ISA가 이용된다. 이 CPU는 어떤 연산을 구현할 수 있는지, 이 연산 사용시 어떤 명령어를 요구하는지를 담고 있다.

 

PC(Program Counter) : 현재 실행되고 있는 명령어 주소를 기억하는 레지스터이다. 간단하게 말하면 현재 어떤 명령어가 실행되고 있는가를 기억하는 레지스터이다.

[이를 통해서 우리는 명령어도 하나의 주소를 갖는다는 사실을 알 수 있어야 한다. 물론 변수가 저장되는 주소와는 별개]