(밑바닥부터 만드는 컴퓨팅 시스템 2판, 인사이트(insight), 2023)을 학습하고 개인 학습용으로 정리한 내용입니다.
기계어는 기계 수준의 명령어를 코딩할 수 있도록 미리 정의된 언어로, 기계어와 고수준 언어는 목표가 다르다.
설계 목표 | |
기계어 | 고수준 언어 |
하드웨어 제어 | 플랫폼 간 호환성 확보 |
기계어가 어떤 하드웨어 플랫폼을 제어하도록 설게된 것이라고 한다면, 그 하드웨어 플랫폼은, 그 기계어로 작성된 명령어를 실행할 수 있도록 만들어졌다고 말할 수도 있다. 즉, 기계어는 CPU별로 각각 존재하며, 이들은 서로 문법이 통하지 않는다.
- 하드웨어 구성 요소
하드웨어는 메모리, 프로세서, 레지스터로 구성되어 있다. 따라서 기계어의 목표는 프로세서와 레지스터들로 메모리를 조작하는 것이다.
- 메모리
메모리는 컴퓨터에서 데이터와 명령어를 저장하는 장치로, 고유한 주소를 가진다.
메모리 주소를 이용해서 각각의 메모리에 접근할 수 있다.
- 프로세서
보통 중앙 처리 장치(Central Processing Unit, CPU)라 불리며, 산술 및 논리 연산, 메모리 접근 연산, 제어 연산을 수행한다.
CPU는 2진 명령어를 파싱하고 실행할 수 있는 게이트 논리, ALU, 레지스터 모음으로 구성된다.
- 레지스터
CPU와 메모리는 개별적이고 독립적인 두 개의 칩으로 구현되며, 두 칩 사이에 데이터를 옮기는 건 상대적으로 느린 작업이다. 레지스터는 이 두 칩 사이에 고속으로 데이터를 옮길 수 있도록 돕는다. 이런 이유로 CPU는 여러개의 레지스터를 내부에 포함하고 있다.
CPU 내에 위치한 레지스터들은 두 가지 종류로 나뉜다. 하나는 데이터를 저장하는 데이터 레지스터(data register)고, 다른 하나는 메모리 주소를 저장하는 주소 레지스터(address register)다.
- 어셈블리어 (assembly language)
기계어 프로그램은 2진(binary)과 기호(symbolic)의 두 가지 버전으로 동일하게 작성될 수 있다.
예를 들어 "R1 + R2"를 1010110001000001와 같이 특정한 2진 값으로 정의할 수도 있지만, add R1 R2 같은 기호를 도입해서 표현할 수도 있다.
사람의 입장에서는 기호 버전이 코드 작성, 디버그, 유지보수 측면에서 훨씬 더 쉽다. 하지만 기호 명령어로 프로그램을 작성하면, 그 기호 명령어를 실행 가능한 2진 코드로 번역하는 번역 작업이 필요하다.
기호 언어를 2진 코드로 번역하는 프로그램을 어셈블러(assembler)라 하고, 기호 언어를 어셈블리어(assembly language)라 부른다.
'밑바닥부터 만드는 컴퓨팅 시스템 (Nand to Tetris)' 카테고리의 다른 글
[Chapter 4] 핵 기계어 문법 (0) | 2024.02.27 |
---|---|
[Chapter 4] 핵 기계어 (0) | 2024.02.23 |
[Chapter 3] project 03 (0) | 2024.02.18 |
[Chapter 3] 순차 칩 (Sequential Chip) (0) | 2024.02.15 |
[Chapter 3] Memory (0) | 2024.02.14 |