곱셈 초등학교때 배운 곱셈 방식을 이용하면 이렇게 곱셈을 한다. 컴퓨터에서도 같은 방식으로 곱셈한다. 위에 곱하는 1000 을 곱해지는 수 ( = 피승수, multiplicand ) 라고 하고 아래에 곱하는 1001을 곱하는 수 ( = 승수, multiplier ) 라고 한다. 곱셈은 그 특성상, n bit 수와 m bit 수를 곱했을 때, 최대 n + m bit 수가 나올 수 있다. MIPS 의 경우, 32bit 수와 32bit 수를 곱해 최대 64 bit 수가 결과로 나올 수 있다. 이 수는 레지스터 하나에 저장할 수 없기 때문에 2개 레지스터를 사용하여 저장한다. 그래서 곱셈과 관련된 명령어는 위와 같이 사용한다. mult 는 r, s 레지스터의 값을 곱한다. 결과는 hi, low 라는 별도 공간에..
컴퓨터 성능의 측정 지표1. Response Time ( Execution time, Latency)특정한 작업을 시작해서 끝낼 때까지 걸린 시간을 측정한다.개개인의 유저가 중요하게 생각하는 지표이며, 임베디드 컴퓨터와 개인용 컴퓨터는 response time 을 중요하게 생각한다. 2. Throughput정해진 시간동안 처리하는 일의 양을 측정한다.데이터센터나 슈퍼컴퓨터 관리자들이 중요하게 생각하며, '서버' 는 스루풋을 중요하게 여긴다. 컴퓨터 머신의 종류와 사용처에 따라 중요하게 생각하는 지표가 다르다.(쓰루풋을 단순히 response time 의 역수로 생각할 수는 없다.) Example한번 다음과 같은 과정을 거쳐 빨래를 한다고 해보자.세탁기는 30분, 건조기는 40분, 빨래를 개는데 20분이 ..
산술 명령어 (Arithemtic Instructions) R - Format add, sub add rd, rs, rt => rd = rs + rt sub rd, rs, rt => rd = rs - rt mult $r, $s => r * s, 곱셈의 경우, 연산 결과는 따로 어딘가에 저장됨 mfhi $d => set hi to $d 연산 결과의 상위 32bit를 $d 레지스터에 이동 mflo $d => set lo to $d 연산 결과의 하위 32bit를 $d 레지스터에 이동 div I - Format addi / addiu addi rt, rs, imm => rt = rs + imm (rd 가 없으니 rt 를 대신 목적지로 사용한다. addiu 는imm 값을 zero extend 한다.) 논리 명령어..
Load ConstantMIPS에서 32bit 상수를 레지스터로 읽어올 때 2가지 방법이 있다.첫번째는 메모리에 32bit 상수를 저장한 뒤, lw 명령어로 읽어오는 방법이다.두번째는 lui, ori 2개의 instruction을 사용하여 읽어오는 방식이다. lui 명령어는 load upper immediate 의 줄임말로, immediate 필드에 있는 16bit 상수를 레지스터의 상위 16bit에 저장하는 명령어이다.그리고 나머지 하위 16bit 의 상수는 ori 명령어로 bit combine 하여 가져온다. 위 이미지와 같이 1234 를 상위 16bit에 쓰고, 5678을 하위 16bit에 쓰도록 해서 원하는 32bit 크기의 상수를 레지스터에 저장할 수 있다. Pseudo Instructions..
Zero Register0번 레지스터는 항상 값을 0으로 유지하는 레지스터이다.이 레지스터에 값을 쓰려고 할 수 있지만, 그 결과는 언제나 0이다. 이 레지스터는 다른 레지스터에 값을 옮기는 move 명령어를 구현할 때 0과 or 연산을 취해서 다른 레지스터에 값을 쓰는 식으로 move 명령어를 구현하는 용도로 사용된다. 또는 상수값을 레지스터에 쓰고자 할 때, 0과 더하기를 해서 원하는 상수값을 레지스터에 쓰는 용도로 쓸 수도 있다. 메모리에 접근하는 상황우리의 컴퓨터는 stored program 방식을 사용하고 있다.즉, 프로그램의 명령어와 데이터가 오프칩 메모리에 저장되어 있고, CPU는 명령어와 데이터를 메모리로부터 읽어와 연산하는 방식이다. CPU가 메모리에 접근하는 상황은 크게 2가지이다.첫..
Data Transfer Instructions CPU 내부의 레지스터는 32개밖에 없다. 만약 4byte 데이터 배열 100개를 선언하는 것과 같이 레지스터의 저장 공간을 넘어서는 용량이 필요한 경우, 메모리를 활용해야 한다. 따라서 MIPS 모든 CPU는 레지스터와 메모리 사이에 데이터를 주고 받을 수 있는 명령어를 제공한다. 메모리에 데이터를 쓰는 동작은 Store (Write) 라고 한다. 메모리에서 데이터를 읽는 동작은 Load (Read) 라고 한다. 메모리에 접근할 때는 메모리 주소를 사용해야 하는데, 메모리 주소는 메모리 공간의 8bit = 1 byte 마다 하나의 주소값을 가진다. (이를 byte - addressable 하다고 한다.) 레지스터와 메모리 사이에 데이터를 주고받을 때는, ..
MIPS 명령어의 포맷명령어 하나는 결국 컴퓨터라는 기계가 이해하기 위해 32bit 의 0과 1의 조합으로 나타내야한다.32bit 의 공간 안에 이 명령어가 어떤 명령어인지, 어떤 데이터를 가지고 명령어를 실행하는지를 기술한다.이를 위해 32bit 명령어의 어디부터 어디까지 어떤 데이터를 담을지 형식을 정의해두었는데 이를 명령어 포맷이라고 한다. MIPS 명령어는 R-format, I-format, J-format 이렇게 3가지 포맷이 존재한다.( MIPS의 설계 원칙 중 좋은 디자인을 위해 타협이 필요하다는 원칙에 입각하여,편의를 위해 명령어 포맷을 1가지로 통일하기보다 3가지로 구분하는 쪽으로 타협을 본 것이다.)이번 글에서는 R-formant, I-format 2가지를 살펴보며, 그 중 산술, 논리..
Clock 사람이 오후 5시, 오전 9시와 같은 시간을 기준으로 모임, 약속, 회의와 같은 행위 시간을 잡듯, 컴퓨터의 모든 부품들도 하나의 기준 시간에 따라 돌아가며 단위 부품들이 실행되어야 한다. (이를 '모듈간의 동기화' 라고 한다.) 따라서 각 부품들이 실행될 타이밍을 기술할 시간 단위가 필요하다. 하지만 컴퓨터는 사람이 사용하는 24시간, 60분, 60초의 단위를 그대로 이해할 수 없다. 그래서 컴퓨터 부품들을 위한 전용 시계를 만들어두었는데, 이를 '클럭' 이라고 한다. 클락은 말 그대로 시계처럼 똑딱똑딱하듯 일정한 주기로 0, 1의 신호가 번갈아 나오는 파형이다. 모든 컴퓨터 부품은 이 클럭 주기에 맞춰 움직이기 때문에, 클럭 주기가 높을수록, 컴퓨터 부품이 움직이는 속도도 빨라진다. (그래..
컴퓨터 구조 수업의 목표는 MIPS CPU를 직접 디자인하는 것이다. CPU를 디자인하기 전에, 먼저 MIPS CPU가 이해하고 사용할 수 있는 명령어에 대해 정리하자. Instruction (명령어) Instruction 컴퓨터가 사용하는 단어를 가리킨다. 만약 외국인과 대화를 하고 싶다면, 나는 그 외국인의 언어를 사용할 줄 알아야한다. 마찬가지로, 우리가 컴퓨터와 대화하기 위해서는 컴퓨터의 언어를 사용할 줄 알아야 한다. instruction은 컴퓨터와 대화할 때 사용하는 단어 하나를 가리킨다. Instruction Set 컴퓨터가 사용하는 어휘 (단어들의 집합) 을 가리킨다. 정확하게는 CPU가 이해하는 단어의 집합을 가리킨다. 따라서 CPU가 달라지면 컴퓨터가 이해하는 언어가 달라진다. CISC..