CS/컴퓨터 구조론

컴퓨터 구조론 1장 [정보의 표현과 저장]

devrabbit22 2025. 3. 6. 10:31

정보의 표현과 저장

  • 컴퓨터가 받아들이고 처리하는 정보의 종류로는 프로그램 코드(Program Code)와 데이터(Data)가 있다.
  • 디지털 컴퓨터에서 정보들은 모두 2진수(Binary Number)를 나타내는 비트(bit)들의 조합으로 표현된다.

컴퓨터 프로그램은 C, C++ 혹은 Python과 같은 고급 언어(High-Level-Language)를 이용하여 작성된다. 이렇게 작성된 프로그램은 영문자들과 숫자들로 이루어져 있어서 사람들이 이해하기는 쉽지만, 디지털 회로들로 이루어진 컴퓨터 하드웨어는 전혀 이해하지 못한다. 따라서 이 프로그램은 컴파일러(Compiler)라고 부르는 소프트웨어에 의해 하드웨어가 이해할 수 있는 언어로 번역된다.

컴퓨터를 계산기계(computer machine)라고 부르기도 하므로, 그와 같이 컴퓨터 하드웨어가 이해할 수 있도록 번역된 언어를 기계어(machine language) 혹은 기계 코드(machine code)라고 한다.

고급 언어들은 어느 컴퓨터에서 사용되든 거의 동일하지만, 기계어는 CPU 마다 서로 다르다.

  • CPU의 내부 구조에 따라 하드웨어가 이해할 수 있는 언어도 달라진다. 그러한 언어상의 차이를 해결하기 위하여 고급 언어와 기계어 사이에는 각 CPU 고유의 중간 언어가 존재하는데, 이 언어를 어셈블리 언어(assembly language)혹은 어셈블리 명령어(assembly instruction)라고 부른다.
  • 또한 그러한 언어로 작성된 프로그램을 어셈블리 프로그램(assembly program)이라고 한다.
  • 고급 언어 프로그램이 컴퓨터에서 처리되기 위해서는 먼저 어셈블리 프로그램으로 번역되고, 그런 다음 해당 CPU를 위한 기계어 프로그램으로 번역되어야 한다.

  • LOAD A, X : 기억장치 X 번지의 내용을 읽어서 레지스터 A에 적재(Load)하라
  • ADD A, Y : 기억장치 Y번지의 내용을 읽어서 레지스터 A에 적재된 값과 더하고, 결과를 레지스터 A에 적재하라.
  • STOR Z, A 레지스터A의 내용을 기억장치 Z번지에 저장(STORE)하라.

각 어셈블리 명령어(이하 명령어(instruction)라고 함)가 지정하는 동작을 개략적으로 나타내는 기호인 'LOAD', 'ADD', 'STOR'를 니모닉스(mnemonics) 라고 부른다. 명령어 CPU가 수행해야 할 동작 뿐 아니라, 처리할 데이터가 저장되어 있는 기억장치 주소나 레지스터 번호도 구체적으로 지정해준다. 이와 같이 명령어들은 CPU 내부의 구조와 밀접한 관계가 있기 때문에 어셈블리 프로그래머는 컴퓨터 내부 구조를 알고 있어야 프로그램을 작성할 수 있다.

어셈블리 언어로 작성된 프로그램은 어셈블러(assembler)라는 소프트웨어가 기계어 프로그램으로 번역해준다.

이는 컴파일 마지막 결과인 기계어 프로그램은 2진수인 1과 0들의 조합으로 이루어진다. 

즉, 어셈블리 명령어들이 각각 8-비트 기계어로 번역되었다.

단어 설명

  • 명령어(instruction) : 어셈블리 명령어(assembly instruction)의 약칭
  • 니모닉스(mnemonics) : 명령어가 지정하는 동작을 나타내는 간략화된 기호
  • 어셈블러 (assembler) : 어셈블리 프로그램을 기계어로 번역해주는 소프트웨어

결과로 기계어가 두 개의 필드(field)들로 구성되는 것으로 가정하였는데, 연산코드 필드(operation code field)에 저장된 

'001'은 '레지스터A로 적재하라'라는 연산을 지정해주는 비트들이며, 오퍼랜드 필드(operand field)의 '00101'은 적재될 데이터가 저장되어 있는 기억장치의 주소를 가리킨다.

위의 기계어에서는 오퍼랜드가 '5'번지를 가리키고 있다. 따라서 이 기계어는 '기억장치 5번지의 내용을 읽어서 레지스터 A에 저장하라'는 명령을 나타내는 것이다.

 

명령어는 비트들의 개수와 용도 및 주소 지정 방식에 따라 다양하게 구성될 수 있다.

  • 만약 위의 예와 같이 연산코드가 3비트로 이루어진다.면, 2^3 = 8가지의 연산들을 지정할 수 있다.
  • 또한 오퍼랜드 비트들의 수가 5개이므로, 주소를 지정할 수 있는 기억 장소들의 최대 수는 2^5 = 32개가 된다.
  • 각 필드의 비트 수가 더 늘어나게 된다면 더 많은 종류의 연산들이 지정될 수 있으며, 더 많은 기억장소들이 사용될 수 있게 된다. 이와 같이 각 명령어에 들어갈 필드의 종류와 각 필드의 비트 수에 대한 구성을 명령어 형식(instruction format)이라고 한다.

  • 번역된 기계어들은 순서대로 기억장치에 저장되는데 위의 그림은 기계어들이 데이터와 함께 기억장치에 저장되고 있는 모습이다. 
  • 기계어들은 0번지부터 저장되어 있고, 계산에 사용될 데이터들은 각각 x번지와 y번지에 저장되어 있다.(실제로는 기억장소들의 주소도 2진수로 표현된다.)
  • 각 기억장소에 저장되는 데이터 단위로서 CPU에 의해 한 번에 처리될 수 있는 비트들의 그룹을 단어(Word)라고 부른다.
  • 단어의 길이는 CPU의 하드웨어 구조에 따라 8비트, 16비트, 32비트, 64비트 등으로 다양하지만 위의 이미지는 단어가 8비트, 즉 한 바이트(byte)인 것으로 가정하고 있다.

Reference

(참고문헌: '컴퓨터구조론', 김종현 저, 생능출판사)