오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 7. MIPS Addressing Mode 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 7. MIPS Addressing Mode

쫑알bot 2023. 9. 30. 14:30
728x90

도입 : 우리는 여태 32비트를 사용해왔다.

그 중에서 우리가 주소를 위해서는 할당된 개수만큼의 비트만 사용할 수 있었음.

 

만약에 할당된 거 이상으로 더 표현해야한다면 어떻게 표현할 수 있나??

 

==> MIPS 스는 LUI 라는 Instruction을 사용한다.

 

 

LUI $t0,255    ( Load Upper Immediately )

라고 하면, 32비트가 있는 t0 Register의 Upper, Lower가 있는데

그 중 Upper에 255를 넣고, Lower는 모두 0으로 채운다.

 

 

문제 ) MIPS 코드에 32비트에  0x0003D 0900 이 Hexa number를 s0 register에 넣으려면??

 

 

--> 1) 우선 앞에 있는 0x는 뗀다 ,

      2) 저 Hexa decimal 8개 =32비트이므로, 0003D  / 0900을 Upper 와 Lower로 나눠준다.

      3) LUI 를 이용하여 t0 레지스터에 Upeer에 003D를 넣는다 => 003D 0000

           LUI $t0 , 0x003D 

      4) ORI 를 이용하여 뒤에 0000인 Lower를 우리가 입력하는 것으로 들어가게 한다.

           ORI $s0, $t0,0X0900  (t0 register에 0X0900 or 연산을 한 결과를 s0 register에 넣는다)

 

OR immediately 
앞에는 값이 다 차있으니 그냥 그대로 감.
뒤(lower)는 다 0이니까 우리가 넣는 값으로 들어감

 

 


 

Extension

 

1) Sign Extension

: Arithmetic 연산할 때 사용

 

   주로 + - 연산할 때 씀.

addi 에서 음수면 Upper는 1로 채우고, 양수면 0

lower는 해당 음수를 표현

 

* Immediately 값은 16비트로만 들어올 수 있다. 그럼 Register에는 Upper 16bits가 남는데,

그런 경우에는 들어온 값의 부호에 따라 Upper 숫자를 통일시킨다 이말  

 

 


 

 

2) Zero Extension 

: : Logic 연산할 때 사용

 

ORI 연산할 때나 그런 류의논리 연산을 할 때도 뒤에 16비트만 사용하고 Upper는 사용하지 않는다.

그럼? 앞 비트는 굳이 이상한 숫자로 있는 거보다 깨끗하게 0으로 통일시켜놓는다.

 

 

 

 


Pseudo Instructions

:원래 MIPS Inst에 있는 게 아닌데 마치 있는 것 처럼 사용하는 명령어
MIPS 가 알아서 처리함

 

효과: 코드를 더 간략화 시킬 수 있다~

 

주로

이런 게 있음

 

Move (Copy)라는 명령어는 없지만 

저렇게 쓰면 아래 add 저거처럼 알아들음

 

 

그 외)

 


 

우리가 아는 Addressing Mode중에 MIPS에서 사용하는 것들

 

 

1) Immediate Addressing 

 

2) Register Addressing

 

 

3) Base Addressing

 

4) PC - Relative Addressing

 

5) Pusudo-direct Addressing

 

 

 

 

Exercise)

 

 

 

(출처)

한동대학교 용환기 교수님 - 컴퓨터구조