본문 바로가기
System SW

[2.2] MIPS Instruction Set Architecture II - 비트 포맷 및 산술 연산

by Hangii 2022. 10. 12.

MIPS의 비트 포맷과 네 가지의 연산 종류 중 산술 연산에 대해 알아본다.

 

  • (Recap)MIPS에서는 모든 instruction이 32bit로 구성된다.

  • 그런데 메모리 주소 공간도 32bit이니까, 메모리를 instruction에 사용하기엔 공간이 부족한 것 아닌가?
  • -> 맞다. Instruction을 나타내는 32bit 중 처음 6bit(opcode: 연산의 종류를 나타냄)를 제외한 모든 공간을 다 쓴다고 해도 26bit밖에 사용할 수 없으므로, 전체 메모리 주소를 나타내기에 부족하다.
    • 따라서 메모리 주소를 직접 나타내야 하는 연산의 경우 26bit만을 사용하는 방법이 있다. 이 경우 전체 메모리 위치를 다 나타내진 못한다. 
    • 메모리 주소를 직접 적는 대신 레지스터에 넣어두고 그 레지스터를 기계어의 피연산자로 사용하는 방법도 있다. 이 방법을 사용하면 레지스터의 주소 값을 메모리에서 찾아야 하므로 속도가 느리다.
    • 경우에 따라서는 레지스터와 16bit 메모리 주소를 함께 사용할 수도 있다. 
  • 연산을 나타내는 opcode는 6bit이므로 이를 통해 사용 가능한 연산의 종류는 2^6 = 64 가지이다. 하지만 피연산자가 모두 레지스터인 연산의 경우 기계어 뒷 부분의 shamt, funct영역이 남아 도는 공간이므로 이 부분을 이용해 추가적인 연산을 표현할 수 있다.
  • MIPS의 산술 연산
    • add, sub 등의 명령어: opcode(6 bits) + 레지스터(5 bits) 3개 = 21bits만을 사용한다.
    • addi, subi 등: 피연산자 값 자체가 기계어에 들어가 있는 연산이다.
      • opcode(6bits)+ 레지스터(5 bits) 2개 + 16bit 숫자 1개 = 32bit를 꽉 채워서 사용한다.
      • 다른 곳으로부터 값을 읽어오는 추가적인 과정이 필요하지 않다. 
      • 다른 피연산자들은 기계어에 값이 아닌 위치 정보가 들어있는 것이다.
    • immediate, 레지스터, 메모리 접근 시간을 비교해보자.
      • 기계어 수행 시간은 worst case를 고려한다.
      • 접근 시간: immediate < register < memory
    • mult: 32bit와 32bit를 곱하면 결과가 최대 64bit까지 가능하다.
      • 따라서 input 레지스터 2개, output 레지스터 2개(HI, LO)가 필요하다.
      • 결과값 중 낮은 자릿수는 LO 레지스터에, 높은 자릿수는 HI 레지스터에 저장된다.
    • div
      • 컴퓨터 세계에서는 정수의 나눗셈과 실수의 나눗셈이 완전히 다른 과정을 거친다. 정수의 나눗셈 결과는 몫과 나눗셈으로 나뉜다. MIPS에서 몫은 LO레지스터에, 나머지는 HI레지스터에 저장하도록 정의되어있다.
    • mfhi, mflo
      • 곱셈이나 나눗셈을 여러 번 반복하려면 HI, LO 레지스터의 값을 다른 곳에 옮겨두어야 한다.(그렇지 않으면 계산 결과가 덮어쓰기 될 것이므로) 이 결과 값을 32개의 범용 레지스터에 저장하는 명령어가 mfhi, mflo이다.

댓글