지난 포스팅에서 CPU Machine 의 타입으로 Stack Machine, Single Register Machine, Multiple Register 이렇게 3가지가 있다고 정리하였다. 이번에는 각 타입마다 (A+B) * (C+D) 의 연산을 어떤 과정으로 수행하는지 자세히 보면서 각 머신의 특징을 정리하고자한다. 1. Stack Machine 스택 머신은 말 그대로, 레지스터 대신 스택을 사용하여 연산을 수행한다. 스택에는 Push, Pop 2가지 연산이 있다. 스택 머신은 어떤 데이터가 필요한지 명시할 필요가 없다는 특징이 있다. add 를 한다고 하면, 그냥 스택에서 pop을 두 번 수행해서 나온 값들을 더하면 된다. 스택 머신에서 (A+B) * (C+D) 연산을 수행하는 과정은 다음과 같다. ..
지난 포스팅에서는 ISA 의 큰 두가지 분류 CISC, RISC의 특징과 RISC에 속하는 SPARC ISA의 멍령어 타입에 대해 정리하였다. 이번에는 컴퓨터 구조를 조금 더 들어가서, 기본적인 CPU가 연산 과정과 CPU Machine Type을 정리하고자 한다. 1. 메모리의 표현 32bit CPU 는 명령어(데이터) 의 사이즈가 32bit = 4byte = 1word 임을 의미한다. 연속된 메모리 공간의 칸을 나눠서 한칸에 1byte 라고 하였을 때 32bit 컴퓨터는 4byte 단위의 데이터를 처리하므로 4칸씩 묶어서 메모리 구조를 생각할 수 있다. => 한칸에 8bit 면 주소값이 8씩 증가하는게 맞지 않나 순간 궁금했는데, 메모리 주소는 '논리적인' 부분이니까 한 칸을 8bit 의 1byte ..
지난 포스팅에서 어셈블리언어는 CPU가 이해할 수 있는 0과 1로 구성된 기계어에 인간이 보기 쉽게 의미를 부여한 언어라고 하였고, ISA 는 CPU 가 다룰 수 있는 명령어 종류 셋으로서, CPU에 종속되어있는 일종의 카탈로그라고 하였다. 그렇다면 ISA마다 명령어 종류가 다르다는 것은 ISA마다 어셈블리언어가 다르다고 봐도 무방할 것이다. ISA는 크게 2가지 종류가 있다. CISC 와 RISC (리스크 라고 읽는다.) CISC (Complex Instruction Set Computer) 는 말 그대로 명령어 종류가 복잡하다. 명령어의 종류가 많아 지난 포스팅에 적었듯 그래서 할 수 있는 기능이 RISC에 비해 많다. 각 종류마다 명령어의 크기가 가변적이다. (1byte ~ 15bytes) 그래서 ..
- What's Assembly Language CPU는 전기 신호를 받아들이는 '회로' 이다. 따라서 CPU로 명령을 전달할 때는 전기 신호로 전달하는데, 이 신호를 전압에 따라 0과 1로 표현할 수 있다. 이 0과 1로 구성된 신호를 '기계어' 라고 한다. 프로그램은 CPU에게 일련의 명령을 내리는데, 사람이 CPU에게 내릴 명령을 작성할 때 0과 1로 구성된 기계어로 명령을 작성하는 것은 매우 어렵다. 따라서 프로그램을 작성하는 사람의 편의를 위해 만들어진 High Level Language 가 C, Python 같은 언어이다. 물론 High Level Language 는 CPU 같은 회로가 이해할 수 있는 형태가 아니기에 이를 변환하는 과정이 필요하고, 이를 '컴파일' 이라고 한다. 컴파일의 과정..