Data Transfer Instructions
CPU 내부의 레지스터는 32개밖에 없다.
만약 4byte 데이터 배열 100개를 선언하는 것과 같이 레지스터의 저장 공간을 넘어서는 용량이 필요한 경우, 메모리를 활용해야 한다.
따라서 MIPS 모든 CPU는 레지스터와 메모리 사이에 데이터를 주고 받을 수 있는 명령어를 제공한다.
메모리에 데이터를 쓰는 동작은 Store (Write) 라고 한다.
메모리에서 데이터를 읽는 동작은 Load (Read) 라고 한다.
메모리에 접근할 때는 메모리 주소를 사용해야 하는데, 메모리 주소는 메모리 공간의 8bit = 1 byte 마다 하나의 주소값을 가진다.
(이를 byte - addressable 하다고 한다.)
레지스터와 메모리 사이에 데이터를 주고받을 때는, 4 byte = 1 word 단위로 주고 받는다.
따라서 word 단위로 주고 받는 경우, 메모리의 주소값은 반드시 word의 크기인 4의 배수여야하며,
그 주소로부터 연속된 4칸의 공간에 4byte 데이터를 읽고 쓴다.
이때 데이터를 읽고 쓰는 순서에 따라 Big Endian 과 Little Endian 으로 구분할 수 있다.
Endianness
16진수 0x12345678을 4byte 공간에 저장한다고 하자.
이때 MSB를 메모리의 작은 주소에 저장하는 방식을 Big Endian 방식이라고 한다.
반면 MSB를 메모리의 큰 주소부터 저장하는 방식을 Little Endian 방식이라고 한다.
4byte data를 쓰고나서, 4byte 데이터를 읽을 때는 어떤 방식을 사용하든 동일하게 해석하므로 문제가 없다.
하지만 만약 이렇게 4byte를 쓰고나 2byte 데이터를 읽을 때는 차이가 발생한다.
Big Endian 방식은 낮은 주소에 높은 비트, 즉 원래 더 큰 값을 의미했던 데이터가 들어가있으므로,
2byte를 읽으면 상위 2byte의 데이터를 읽게 된다.
Little Endian 방식은 낮은 주소에 낮은 비트, 즉 원래 더 작은 값을 의미했던 데이터가 들어가있으므로,
2byte를 읽으면 하위 2byte의 데이터를 읽게 된다.
MIPS는 상위 2byte를 읽는 Big Endian 방식이라는 점에 유의하면서 메모리를 읽고 쓰는 명령어를 살펴보자.
메모리에 Word 데이터 읽고 쓰기
lw rt, address : load word, 메모리에서 word (4byte) 데이터를 읽어 레지스터에 저장한다.
lw rt, imm(rs) 형태로 사용한다. ( rt <= [rs + imm] )
lw $t0, 32($s0) 이라고 적으면, $s0 레지스터에 저장된 메모리 주소를 base 주소로 해서, 32byte 만큼 떨어진 주소에 있는 값을 읽어, $t0 레지스터에 저장하라는 의미이다.
sw rt, address : store word, 레지스터에서 word 데이터를 읽어 메모리에 저장한다.
sw rt, imm(rs) 형태로 사용한다. ( rt => [rs + imm] )
위에서도 언급했듯, word 데이터를 주고받고 있으므로 주소값을 연산한 결과는 4의 배수여야 한다.
base address 로부터 떨어진 간격은 imm 필드의 값을 사용한다.
이 값의 단위는 byte이며, 범위는 -2^15 ~ 2^15 - 1 로 대략 -32000 ~ 32000 내외의 값이다.
메모리의 주소값과 메모리 크기
메모리의 가장 큰 주소값으로부터 메모리의 크기를 계산할 수 있다.
메모리의 가장 큰 주소값이 만약 0x7FFFFFFF 라고 해보자.
7 = 111 이므로 3bit 값이고
F = 1111 이므로 4bit 값이다.
따라서 이 주소값은 총 31 bit로 이루어진 주소값이다.
메모리의 용량은 2^(주소값 길이) 로 계산할 수 있다.
따라서 2 ^ 31 = 2 * 2 ^ 30 = 2 * 2^(10 * 3) = 2 * 10 ^ (3 * 3) = 2 GB
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 6. MIPS Branch Instructions (0) | 2024.04.15 |
---|---|
[컴퓨터 구조] 5. MIPS Data Transfer Instructions (2) (0) | 2024.04.14 |
[컴퓨터 구조] 3. MIPS Arithmetic & Logical Instruction (0) | 2024.04.06 |
[컴퓨터 구조] 2. Clock & Verilog (0) | 2024.04.06 |
[컴퓨터 구조] 1. MIPS Instruction & Register (0) | 2024.03.12 |