1. 곱하기 연산의 경우, 레지스터를 두 개 써야 함. 일반적인 레지스터가 아닌, HI, LO 레지스터. 왜냐하면, 32비트 곱하기 32 비트를 하게 되면, 64비트가 되기 때문에. 그러므로 값을 32비트씩 나누어 담음.
  2. 나누기의 경우, 기본적으로 컴퓨터에서는 나머지를 몫과 나머지로 계산함. 따라서 몫을 LO 에 담고 나머지를 HI 에 담음.
  3. 이렇게 LO 와 HI 의 값을 일반 레지스터로 복사해 와 저장하는 명령어가 각각 move from HI 와 move from LO 임. $s1 ← HI 와 $s2 ← LO
  4. and, or, xor, andi, ori 는 모두 논리 연산자임. and 는 둘 다 1일 경우만 1 이고 or 은 둘 중 하나라도 1이면 1임. xor 은 홀수 개의 1 이 있을 때만 1. andi ori 의 경우 직접 수를 입력한 뒤 그것을 이진수로 바꿈.

Untitled

  1. MIPS 에서는 메모리 직접 접근이 불가함. 즉 add 와 같은 연산자가 메모리에 직접 접근할 수가 없음. 따라서 메모리에서 레지스터로 일차적으로 값을 가져와야 함. 이 역할을 하는 것이 load 임. 또 연산을 하고 나서 레지스터에 저장된 값을 다시 메모리로 옮기는 작업을 해야 함. 이 역할을 하는 것이 store 임. 이때, 몇 바이트씩 옮기느냐에 따라, 4바이트를 옮긴다면 load word 를 쓰고, 1byte 만 옮긴다면 load byte unsingned 를 쓰게 됨.

Untitled

맨 위 식을 설명하자면, $s2 에는 메모리의 주소값이 적혀 있음. 예를 들어 1000번지. 그럼 1000에 100을 더한 1100 번지의 메모리에 접근해서 그 값을 레지스터 $s1 에 저장함.

  1. 정리해서, MIPS 에서 모든 메모리 접근은 load, store 를 통해서만 가능함.
  2. 4byte 즉 32비트를 받아오는 word 의 경우 그럴 일이 없는데 만약 halfword 나 byte 단위로 load 할 경우, signed operation 의 경우 sign-extended 즉 부호로 앞의 빈 공간을 다 채워주고, unsigned operation 의 경우 zero-extension 을 진행함.
  3. Word address 는 4의 배수여야 하고, halfword address 는 2의 배수여야 함. 참고로 두 방식의 메모리는 혼용될 수 없음.

Untitled

약간 if 문이라고 생각을 하면 되는데, Program Counter 의 준말이 PC 임. PC 는 다음에 수행할 명령어의 주소를 알려주는 역할을 함. 그리고 여기서는 지금 4바이트 즉 워드 단위임. equal 같은 경우에는 만약 레지스터1 과 2의 값이 서로 같으면, (참고로 원래 PC 값은 4바이트가 디폴트로 추가됨. 다음 명령어로 가야해서) 25워드만큼 이동한 주소로 가서 그 명령어를 실행해라는 것임. 반면 set on less than 의 경우 조건문이 참인 경우 레지스터1에 1을 넣고 아니면 레지스터1에 0을 넣으라는 의미임.

Untitled

Jump 에는 두 가지 종류의 명령어가 있음. 첫 번째는 워드 단위로, pc 에게 해당 주소로 가라라고 워드 단위로 주기 때문에 *4해서 그 메모리 주소로 가야 하고, 레지스터 점프는 그냥 그 레지스터로 가면 됨. 즉 메모리에서의 점프와 레지스터에서의 점프 두 가지가 있음

Untitled