컴퓨터(Computer Science)/컴퓨터구조(Computer Arichitecture)

MIPS Addressing for 32-Bit [컴퓨터구조]

게임이 더 좋아 2020. 3. 31. 23:26
반응형
728x170

프로그래밍을 하다보면 상수가 쓰인다.

하지만 상수의 크기가 대부분 작기 때문에 고려하지 않았지만 16-bit면 충분히 표현될 줄 알았다.

 

32 - bit 상수도 필요하기 마련이다.

하지만 32 bit의 수를 어떻게 만들까??

 

 

그 때 사용하는 명령어가 lui이다.

lui, Load Upper immediate

 

 

즉, 상수값을 target register(rt)에 상위 16비트, 왼쪽에 복사하는 것이다.

그리고 나머지 하위 16bit는 0으로 만든다.

 

그렇다면 끝??

0으로만 채워넣는 것이 아니라.

or 명령어의 immedaite 타입으로 2304에 대해서 1을 채워넣는 것이다.

즉, ori 로  61^16 + 2304의 충분한 큰 값을 만들었다.

**이렇게 하는 이유는32-bit의 메모리를 저장을 불러오는 것 보다는

이렇게 lui 와 ori 연산을 하는 것이 더 빠르기 때문이다.

 


다음으로는 branch, 분기 이다.

 

 

거의 브랜치가 될 타겟들은 브랜치 근처에 있다.(거의.. 임 아닌 것도 있다)

앞에 있든 뒤에 있든 간에 근처에 있다.

 

이러한 것을 PC-relative addressing 이라고 한다. -> 근처에 있으니까 가능함

**conditional branch는 주로 순환문이나 if문에서 사용되므로 가까이 있는 명령어로 분기하는 경향이 있다.

 

다시말하면 현재 PC 값에다 offset(위에서의 16bit) * 4를 더한다.

** 왜 4냐고 물으면 1개의 워드가 32bit, 4byte 라는 것을 기억하자.

 

**또한 해당 instruction을 실행할 때는 이미 PC는 다음 Instruction의 값을 가리키고 있다.

 

명심하자

80000 instruction을 실행중이라면

PC는 이미 80004를 가리키고 있다.

 

 

 


 

이번엔 jump이다.

 

 

우선 6비트는 opcode, 나머지 26 비트가 offset이다.

하지만 32비트의 주소가 필요하지만 26비트밖에 없다.

그래서 Target address는 이렇게 구한다.

PC에서 상위 4비트를 가져오고 

왜?? -> PC의 상위 4비트는 변하지 않으니까..

 

26bit에 4를 곱해준다.( 2bit 를 left shift하는 것과 마찬가지이다.)

총 그러면 4 + 26(+2)  = 32가 된다.

 

다시 말하자면

 

 

???? 뭐야??

 

 

 

이해하기 위한 모든 자료를 가져왔다.

그래도 솔직히 이해가 잘 가지 않을 수 있다.

예시를 보자

 

 

 

각 operation마다 opcode, rs, rt, rd, shamt, funct 등 뭐가 무엇인지 잘 보고 따라오자

 

1. $s3 의 값을 2 bit left shift 시킨 것을 $t1에 저장

2. $t1과 $s6 를 더해서 $t1에 저장

3. $t1의 값을 가져와서 $t0에 복사

4. $t0의 값과 $s5의 값이 같지 않으면 Exit로 branch.

.... 이런식이다.

 

잘 보면서 이해해보자

 


다음은 다시 브랜치인데

타겟이 멀리 있다면..?이다.

 

즉, 16bit로 주소를 가리킬 수 없으면..? 

어셈블러가 자동으로 코드를 바꿔버린다.

jump를 이용하게끔 바뀐다.

jump는 26bit를 쓰니까 브랜치보다 큰 숫자, 주소를 표현할 수 있다.

 

물론 멀리 있으면 PC relative addressing보다 효율성보다 낮아진다.

 

 


 

우리가 Addressing을 배워보았다.

 

요약을 하면

이렇게 된다.

 

1. Immediate로 바로 접근했었고

2. R-format 레지스터들이 해당됐었고

3. Load, Store 명령어들이 해당됐었고

4. Branch에 해당됐었고

5. jump에 해당됐었다.

 

5가지를 기억하는 것이 좋다.

 

728x90
반응형
그리드형