Reference :
- 컴퓨터 구조 및 설계 MIPS EDITION [6판] / David A. Patterson / 한빛에듀
- 건국대학교 컴퓨터구조 강의 / 박능수 교수님
- https://developbear.tistory.com/ (김베어의 개발일지)
컴퓨터의 2가지 중요한 원칙과 내장 프로그램
1. 명령어는 숫자로 표현된다.
명령어는 컴퓨터 내부에서 높고 낮은 전기 신호의 연속(이진수)으로 저장되므로 숫자로 표현할 수 있다.
실제로 명령어의 각 부분을 숫자로 볼 수 있고, 이 숫자들을 나란히 늘어놓으면 명령어가 된다.
2. 프로그램은 메모리에 기억되어 있어서 숫자처럼 읽고 쓸 수 있다.
이 두 원칙은 내장 프로그램의 개념이 된다.
내장 프로그램 개념은 회계 처리를 하던 컴퓨터가 눈 깜짝할 사이에 작가의 원고 집필을 도와주는 컴퓨터로 변할 수 있게 한다.
프로그램과 데이터를 메모리에 적재하고 컴퓨터한테 어떤 위치에서 실행을 시작할지만 알려주면 이런 전환이 일어난다.
명령어를 데이터와 똑같이 취급함으로써 컴퓨터 시스템의 메모리 하드웨어와 소프트웨어가 모두 간단해진다.
특히 데이터 저장을 위해 개발된 메모리 기술이 프로그램 저장에도 그대로 사용되며,
컴파일러 같은 프로그램이 인간에게 편리한 형태로 작성된 코드를 컴퓨터가 이해할 수 있는 코드로 바꿀 수 있는 것도 이 특성 덕분이다.
즉, 명령어를 숫자처럼 취급하게 된 결과 프로그램이 이진수 파일 형태로 판매되게 되었고
이것이 만약 기존 명령어 집합과 호환성이 있다면, 다른 컴퓨터의 소프트웨어를 물려받을 수 있다는 것이다.
이를 이진 호환성(binary compatibility)이라고 한다.
MIPS-32 ISA
* ISA : Instruction Set Architecture
MIPS 명령어의 길이는 데이터 워드와 마찬가지로 32비트의 길이를 가진다.
"간단하게 하기 위해서는 규칙적인 것이 좋다"라는 설계 원칙에 따라 모든 MIPS 명령어는 예외 없이 32비트이다.
명령어의 종류마다 이 32비트가 가지고 있는 형식들이 정해져 있다.
MIPS R-format Instruction
R : Register
피연산자가 두 개 있고 목적지가 하나인 명령어에 쓰인다. (add, sub, and 등의 산술 연산)
- op : 명령어가 실행할 연산의 종류로서 연산자(opcode)라고 부른다.
- rs : 첫 번째 근원지(source) 피연산자 레지스터
- rt : 두 번째 근원지(source) 피연산자 레지스터
- rd : 목적지(destination) 레지스터. 연산의 결과가 기억된다.
- shamt : 자리이동(shift) 연산 시 shift 양을 나타낸다. (shift 연산이 아닐 시 0으로 채워 둠)
- funct : 기능 코드(function code). op 필드에서 연산의 종류를 표시하고 funct 필드에서 그중의 한 연산을 구체적으로 저장한다.
(예시)
아래의 명령어를 기계어로 표현한다면,
add $t0, $s1, $s2
이렇게 표현될 것이다.
* 레지스터가 명령어에서 참조되기 때문에 레지스터 이름을 숫자로 매핑하는 규칙이 필요하다.
MIPS에서는 레지스터 $s0 ~ $s7까지는 레지스터 번호 16 ~ 23번,
레지스터 $t0 ~ $t7까지는 번호 8 ~ 15번에 매핑한다.
컴퓨터는 이진수를 사용하므로, 최종적으로 아래와 같이 이진수로 변환하여 기계 코드를 만들어낼 수 있다.
* 명령어를 숫자로 표현한 것을 기계어(machine language)라고 하고,
이런 명령어들의 시퀀스를 기계 코드(machine code)라고 한다.
그렇다면 레지스터들은 어디에 존재하기에
우리가 번호를 통해 어떤 레지스터에 저장된 값을 사용하고, 값을 저장할 수 있는 것일까?
모든 레지스터는 Register File에서 관리된다.
32개의 32비트 레지스터들을 모두 관리하는데,
2개의 읽기 포트(read port)와 1개의 쓰기 포트(write port)가 존재한다.
두 개의 read port로 피연산자 레지스터 번호를 보내면 해당 레지스터의 값을 받아올 수 있고,
하나의 write port로 목적지 레지스터 번호를 보내면 해당 레지스터에 값을 저장하게 되는 것이다.
'컴퓨터 구조 > Ch2. 명령어 : 컴퓨터 언어' 카테고리의 다른 글
7. 판단을 위한 명령어 (0) | 2023.03.28 |
---|---|
6. 논리 연산 명령어 (0) | 2023.03.28 |
4. 부호있는 수와 부호없는 수 (0) | 2023.03.28 |
3. 피연산자 (0) | 2023.03.28 |
2. 하드웨어 연산 (0) | 2023.03.28 |