개발/컴퓨터구조

[컴퓨터구조] Instruction과 MIPS를 알아보자 1편

IT의 타이탄 2023. 9. 5. 14:06
SMALL

다양한 타이탄의 도구중 하나인 컴퓨터공학적인 사고를 기르기 위해 컴퓨터공학과 대학 수업을 듣고 있습니다.

 

 

금일 배운 컴퓨터구조 수업의 Instruction과 MIPS에 대한 내용을 기록하고자 합니다.

 

 

만약 컴퓨터구조를 듣고 계시거나, 궁금하신 분들이라면 한번 읽어보시는 것을 추천드립니다

 

 

최대한 이해하기 쉽게 설명할 예정이니, 끝까지 읽어주시면 감사하며 만약 제가 잘못알고 있는 내용을 기재한다면 댓글로 알려주시면 감사하겠습니다

 

 

 Instruction과 MIPS를 알아보자 1편

컴퓨터구조를 왜 알아야하는가?

우리는 컴퓨터구조를 배우기전에 우리가 왜 컴퓨터구조를 알아야하는가에 대해 알아보아야합니다.

 

 

이 글을 읽는 분들은 아마 대부분 코딩을 하고 계시는 분일 것입니다. 코딩이라면, 소프트웨어 개발을 의미하며 쉽게 말해 프로그램을 작성하는 것입니다.

 

 

여러분들이 아는 C++, python, R언어, C언어, 자바, 자바스크립트등을 예시로 들수있겠네요.

 

 

이러한 소프트웨어적인 프로그램의 성능을 최적화시키기 위해선 반드시 컴퓨터 구조를 알아야합니다.

 

 

컴퓨터 구조는 우리가 컴퓨터에게 어떤 요청을 보냈을때, 그 요청들을 어떻게 연산하는지에 대한 과정들을 배우는 학문이라고 생각하시면 됩니다.

 

 

성능을 최적화시킨다는 것은 프로그램의 속도를 빠르게 높인다는 의미며, 속도를 빠르게 해야 우리가 이루고자하는 목표를 달성할 수 있을 것입니다.

 

 

그렇다면 컴퓨터 구조안에서의 Instruction과 MIPS는 무엇인지 알아보도록 하겠습니다.

 

 

프로그램의 실행과정

우리는 컴퓨터에게 연산이라는 과정을 요청하게 됩니다. 예를들어, 2를 100번 곱하면 뭐가돼?와 같은 것을 컴퓨터에게 요청합니다.

 

 

이러한 연산을 우리는 코드로 작성하게 되는데 코드를 실행하게 되면 컴파일러라는 것을 통해 컴퓨터는 연산을 시작하게 됩니다.

 

 

 

이때, 연산을 요청할때의 코드를 High-level language라고 부르며, 연산을 하기 위해 컴파일러를 통해 변환된 값들을 Assembly language라 부르며, 변환된 값을 Instruction이라 부르게됩니다.

 

 

Instruction은 명령어라는 의미로 쓰이게 되고 하나의 연산을 컴퓨터에게 명령한다고 이해하시면 됩니다.

 

 

또한 assembler를 통해 CPU (중앙처리연산장치)가 이해할 수 있는 언어로 바뀌게 되는데 이때 2진수로 바뀌게 되고 저장되는 파일을 executable file이라고 부릅니다.

 

 

executable file은 어셈블러(assembler)를 통해 비휘발성메모리에 저장되고 실행이 된다면 RAM이라는 휘발성 메모리로 올라가 CPU가 연산을 시작하게됩니다.

 

 

비휘발성 메모리 : 컴퓨터 전원을 꺼도 파일이 날아가지 않는 저장소

 

휘발성 메모리 : 컴퓨터 전원을 끄고 켜면 파일이 날아가는 저장소 

 

 

사진과 같이 한줄 한줄이 instruction이라고 부르고 하나의 instruction은 32bit로 표현되게 됩니다.

 

High-level language : 컴퓨터에게 연산을 하기위해 작성하는 프로그래머의 코드

Assembly language : 컴파일러를 통해 컴퓨터가 연산을 할 수 있게 만든 언어

Instrution : 어셈블리 언어의 한줄 값 (명령어)

 

여기서 컴퓨터, 프로그램마다 Instruction을 표기하는 방법이 다르면 어떻게 될까요? 컴퓨터마다 호환이 되기 어렵고 사람마다 해석하는 방법이 다를것입니다.

 

 

이를 위해 Instruction을 표현하기 위한 몇개의 규칙을 만들게 되는데 그 중 하나가 바로 MIPS ISA인 것입니다.

 

(ISA :  Instruction Seat Architecture)

 

 

ISA는 다른 컴퓨터별로 가질 순 있지만 일반적으로 MIPS ISA를 많이 사용하곤 합니다.

 

 

쉽게말해, 요리사가 레시피를 통해 요리를 하는 것처럼 컴퓨터도 MIPS ISA라는 규칙을 통해 연산을 하는 것입니다.

 

 

또한 대부분의 컴퓨터는 간단한 Instruction sets을 가지고 있는데요 이는 성능을 높이기 위해서입니다.

 

 

회로 200개와 회로 2개의 연산처리 속도는 당연하게도 회로2개가 빠를 것입니다. 그렇기 때문에 Instruction의 수도 많지 않으며 보통 32bit정도로 가지고 있습니다.

 

 

우리는 Instruction 중에서 예제로 Arithmetic(뜻 : 산수) 연산에 대한 Instruction을 배워보도록 하겠습니다.

 

 

MIPS Arithmetic instruction에 대해 알아보자 

MIPS Arithmetic instruction이란 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 논리 연산 명령어로 컴퓨터가 산수에 대한 연산을 위해 실행하는 규칙들을 의미합니다.

 

 

예를들어 b와 c라는 값을 더해라라는 연산 규칙 표기와 구조는 다음과 같습니다.

 

add a,b,c

= 명령어 목적지 목적어, 소스 목적어, 소스 목적어 (목적어는 Operand로 표현됨)

 

이에 대한 뜻을 풀어보면 add는 operation으로 명령어입니다. 컴퓨터에게 더하라는 명령하는 것입니다. sub라고 하면 빼라고 하는것입니다.

 

 

곱셈은 mul, mulu 이며 나눗셈은 div, divu로 표현됩니다.

 

 

a는 목적지 목적어며 2번째와 3번째에 위치한 b와 c는 소스목적어로 a에 담을 값들을 의미합니다.

 

 

영문표기로는 Operands로 표현됩니다. 아마 영어 시간에 3형식 문장인 S V O 의 구조에서 O라고 생각하시면 이해하기 쉬울 것입니다.

 

 

위의 문장을 한글로 풀어내면 다음과 같습니다

 

 

"b와 c를 더해서 a에 담아라"

 

 

여기서 b와 c가 만약 변수라면 어떻게 될까요?

 

 

예를 들어 C언어에서 다음과 같은 코드를 작성했다고 합시다

 

f = g + h;

 

컴파일 된 코드가 add f, g, h라면 과연 컴퓨터는 어떻게 될까요? 바로 에러가 출력됩니다.

 

 

왜 변수를 담으면 컴퓨터는 연산을 하지 못할까요? 또한 add라는 명령어 말고도 addi 라는 명령어가 존재합니다.

 

 

위에 설명드린 명령어에서 곱셈과 나눗셈은 mulu, divu가 존재하고 뺄셈은 sub만 존재하는 것을 확인할 수 있을 것입니다. 왜그런것일까요?

 

 

이에 대한 대답은 제가 다음글에서 작성하도록 하겠습니다 ㅎㅎ

 


 

이번 시간에는 instruction과 MIPS에 대해 알아보았습니다. 이를 그림으로 표현된 사진을 보면 다음과 같습니다.

 

 

 

 

사진만 봐도 굉장히 어지럽다는 것을 느낄 수 있는데요. 최대한 쉽게 설명할 수 있도록 저도 깊게 공부하도록 하겠습니다.

 

 

 

긴 글 읽어주셔서 감사드리고 이번주 시간내로 작성하도록 하겠습니다

LIST