명령어 (4) - 메모리 오퍼랜드

컴퓨터구조

2020. 4. 8. 11:09

1. Memory Operand

  • 보통 메모리는 혼합된 데이터(배열, 구조체, 동적할당 등)을 위해 사용된다.
  • Arithmetic Operation을 위해 Register Operand를 사용하려면,
  • 가장 먼저 Memory의 데이터를 Register로 Load 해야한다.
  • 그리고 Register에서 연산하고, 결과 값을 다시 Memory에 Store한다.
  • 이런 구조를 Load - Store 구조라고 한다.

 

아래 예시를 통해 메모리 오퍼랜드를 사용하는 것에 대해 알아보자.

// C Code : 
g = h + A[8];

// MIPS Code :
// g in $s1, h in $s2, A in $3

lw $t0, 32($s3)
add $s1, $s2, $t0
  • lw는 Load Word의 준말로 메모리에서 데이터를 가져오는 것을 의미한다.
  • 위에서 보다시피 배열 A의 베이스 주소가 $s3에 저장되어있고, A는 integer타입 배열이다.
  • 때문에 32($s3)를 사용하는데, 이는 $s3의 베이스 주소에서 32Byte를 더한다는 의미이다.
  • 4Byte씩 8번 뒤로 가면 1Word인 A[8]을 얻을 수 있고 이 값을 $t0에 로딩하는 것이다.

 

// C Code :
A[12] = h + A[8];

// MIPS Code :
lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)
  • lw는 Load Word, sw는 Store Word이다. sw는 말 그대로 레지스터의 데이터를 메모리에 저장하는 것이다.
  • 먼저 A($s3)에서 32만큼 움직여서 A[8]을 $t0에 로드하고, 이 값을 h($s2)와 더해서 다시 $t0에 저장한다. 
  • 결과 값 $t0를 sw를 통해 48($s3) = A[12]에 저장하는 소스코드이다.
  • MIPS는 이렇게 Load - Store Architecture를 따르는 프로세서이다. (Instruction이 직접 Memory 엑세스 X)
  • Load Store 방식을 쓰면 lw, sw등 때문에 더 많은 Instruction을 사용하고, 많은 Register를 사용하게 되는데
  • Register를 효율적으로 사용(위처럼 다시 $t0 넣어서 공간 절약)하는 것이 굉장히 중요함.

 

2. 추가적인 명령어

  • lb / sb : 메모리에서 1 바이트만 로드 / 저장
  • lh / sh : 메모리에서 half word (절반)만 로드 / 저장
  • lbu . lhu 등 : Unsigned로 로드 / 저장
  • sb나 sh등을 수행하면 right most (오른쪽 끝의) 데이터가 메모리에 저장됨
  • lb나 lh등을 수행하면 32비트로 extend하여 저장함 (0000 0011 저장 -> 0000 0000 .... 0000 0011)

 

3. Reference

 

컴퓨터구조

이 과목에서는 컴퓨터 시스템의 구성, 동작원리와 설계를 다룬다. 특히 컴퓨터 성능, 명령집합, 제어와 마이크로프로그래밍, 파이프라인, 정수와 부동 소수점수 연산, 기억부 시스템, 입출력 부시스템, 고급 컴퓨터구조 등과 같은 내용에 중점을 둔다. 교과목을 통해 고속 Data Network 시스템에 들어가는 여러 Processors를 이해하고, 이들을 설계 또는 Programming 할 수 있는 능력을 배양한다.

www.kocw.net