Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

2.9 MIPS의 32비트 수치를 위한 주소지정 및 복잡한 주소지정 방식 본문

CS/컴퓨터 구조

2.9 MIPS의 32비트 수치를 위한 주소지정 및 복잡한 주소지정 방식

보근 2020. 10. 14. 22:20

 

 

 

 

 

 

 

 

 MIPS의 명령어 길이를 32비트로 고정한 덕에 하드웨어가 간단해졌지만, 32비트짜리 상수나 주소를 사용하면 편한 경우가 많다. MIPS는 32비트 상수나 주소 역시 지원한다.

 

 

 

 

 

 

 

 

 MIPS의 명령어는 상수타입(I타입)을 지원하지만, 16비트가 한계이다. 대부분의 상황에서 16트로 충분하지만 예외의 경우에 더 큰 상수가 필요할 때가 있다. 그런 경우를 위해 MIPS는 lui(Load Upper Immediate) 명령어를 제공한다. lui는 상위 16비트에 상수를 넣고 그 다음에 나오는 다른 명령어로 하위 16비트를 채움으로써 32비트 상수를 사용할 수 있다.

 

ex) $s0에 32비트 상수를 채워라.

     lui $s0, 320  // $s0 = 0000 0001 0100 0000 0000 0000 0000 0000

     ori $s0, 648  // $s0 = 0000 0001 0100 0000 0000 0010 1000 1000  

 

 컴파일러나 어셈블러는 큰 숫자를 직접 다룰 수 없기 때문에 몇 조각으로 나눈 후 레지스터에서 재조립해야 한다. MIPS 소프트웨어처럼 어셈블러가 이 문제를 해결하기 하도록 임시 레지스터를 제공해야 한다. 어셈블러를 위해 예약된 레지스터가 $at이다.

 

 

 

 

 

 

 

분기와 점프 명령에서의 주소지정

 

 MIPS에서 가장 간단한 주소지정 방식은 점프 명령에서 사용하는 것이다. 점프 명령은 16비트의 op코드와 26비트의 주소 필드로 구성되는 J타입 명령어 형식을 사용한다.

 

ex) j 10000

 

 

 프로시저는 가까이 붙어있을 이유가 없기 때문에 매우 긴 주소 범위가 필요하다. 그렇기 때문에 j나 jal 명령어들은 J타입 형식을 사용한다. MIPS는 워드 단위로 주소를 표현하기 때문에 최대한 더 넓은 주소 범위를 위해 26비트를 2칸 왼쪽으로 밀어서, 주소의 lsb부터 2비트는 사용하지 않고 28비트의 주소로 사용한다.

 

 

 

 

 

 

 조건부 분기 명령에는 피연산자 두 개와 분기 주소가 있으므로, 주소로 16비트만 쓸 수 있다.

 

 

ex) bne $s0, $s1, Exit

 

 

 조건부 분기는 대부분이 그리 멀지 않은 주소를 나타내는 점을 이용해서 PC 상대 주소지정(PC-relative addressing) 방식을 사용한다. PC 레지스터 값이 현재 프로그램의 위치를 저장한다는 점을 이용해 PC ± 2^15 범위의 주소지정을 허용하게 된다.

 

 대부분의 경우에는 16비트로 주소를 나타낼 수 있지만, 역시 예외의 경우가 있다. 그런 경우에는 분기 조건을 반대로 만들어서 큰 주소를 처리한다.

 

ex) beq $s0, $s1, L1  // L1의 주소를 16비트보다 멀리 있는 경우.

   

     bne $s0, $s1, L2  // 이런 방식으로 처리 가능.

      j  L1

L2 :

 

 

 

 

 

 

MIPS 주소지정 방식 요약

 

1. 수치 주소지정 : 피연산자는 명령어 내에 있는 상수이다.

2. 레지스터 주소지정 : 피연산자는 레지스터이다.

3. 베이스 또는 변위 주소지정 : 메모리 내용이 피연산자이다. 메모리 주소는 레지스터 + 명령어 내 상수 이다.

4. PC 상대 주소지정 : PC값과 명령어 내의 상수를 더해서 구한다.

5. 의사직접 주소지정 : 명령어 내의 26비트를 PC의 상위 비트들과 연접하여 점프 주소를 구한다.

 

 

 

 

 

 

 

 

 

 

 

 

'CS > 컴퓨터 구조' 카테고리의 다른 글

2.11 프로그램 번역과 실행  (0) 2020.10.14
2.10 병렬성과 명령어: 동기화  (0) 2020.10.14
2.8 하드웨어의 프로시저 지원  (0) 2020.10.14
2.7 판단을 위한 명령어  (0) 2020.10.14
2.6 논리연산 명령어  (1) 2020.10.14
Comments