지난 포스팅에서는 SPARC 에서 사용하는 레지스터의 종류 4가지와, 레지스터 윈도우에 대하여 정리하였다. 이번에는 어셈블리 언어 프로그래밍의 기본 문법과 어셈블리 언어 명령어의 분류를 정리한다. 어셈블리 언어 기본 문법 - 각 줄의 코드는 명령어 또는 데이터 정의이다. - 매 줄 끝마다 세미콜론은 사용하지 않는다. - 콜론(:) 으로 끝나는 문자열을 '레이블' 이라고 한다. 이는 프로그램의 지표가 된다. - /* */ 를 를 이용해 다중 라인 주석을 적거나 ! 을 이용해 한 줄 주석을 적을 수 있다. - 어셈블리 언어의 명령어는 크게 3가지로 나뉜다. 1. Pseudo-operation (의사 명령어) 2. Synthetic instruction (합성 명령어) 3. Machine instruction..
지난 포스팅에서는 프로세서가 각 명령어들을 빠르게 처리하기 위해 파이프라이닝을 사용할 경우 발생할 수 있는 해저드의 종류와 해결 방법을 정리하였다. 이번 포스팅에서는 SPARC 라는 ISA 의 아키텍처와 레지스터 종류에 대해 정리하여 본다. 우리 학교는 어셈블리 실습으로 SPARC를 사용한다. 이 SPARC 라는 ISA의 주요 특징은 다음과 같다. 1. RISC 타입이다. 2. 명령어와 데이터의 크기가 모두 32bits 이다. 따라서 레지스터 하나의 사이즈도 32bit 이다. .3. 한번에 사용 가능한 레지스터의 개수가 32개이다. 하드웨어적으로는 더 많은 레지스터가 있지만, 한번에 32개씩만 쓸 수 있다. (Register Window System) SPARC 의 레지스터는 4가지 타입이 있다. 그리고..
지난 포스팅까지 각 CPU 타입마다 주어진 연산을 어떤 과정과 명령어들로 처리하는지 정리하여보았다. 이번에는 이 각각의 명령어 하나하나를 어떤 과정으로 처리하는지 정리하고자 한다. 1. 명령어 처리 하나의 명령어를 실행하는 과정을 Instruction Cycle 이라고 한다. (실행주기 or 실행과정) 이를 간단하게 수도코드로 표현하면 아래와 같다. pc = 0; // pc => program counter do { instruction = memory[pc++]; // Instruction fetch (명령어 인출) decode(instruction); // Instruction decoding (명령어 해석) fetch(operands); // Operand fetch (피연산자 인출) execute..
지난 포스팅에서 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) 그래서 ..