MIPS의 Branch & Jump 연산과 비트 구조가 각 연산에서 어떻게 나타나는지 알아본다.
- Conditional branch instructions
- branch on equal: register 2개 + 16bit immediate
- 두 레지스터 값이 같으면 branch
- immediate값은 다음 수행해야 할 위치로부터 얼만큼 떨어진 instruction인지를 나타낸다.
- 이를 주소 값으로 따지면 기계어 하나의 크기가 4byte이므로 다음에 실행했어야 한 명령어의 주소로부터 {4*(immediate)}byte만큼 떨어진 주소를 가리키라는 것이다.
- 왜 굳이 이렇게 하는가? -> 32bit로 크기가 한정된 기계어 내에서 정보를 최대한 효과적으로 표현하기 위함이다.
- branch on not equal: register 2개 + 16bit immediate
- 두 레지스터 값이 다르면 branch
- beq와 같은 원리이다.
- set on less than
- 현재 MIPS에서는 두 레지스터 $s1, $s2의 값을 비교해 $s1이 $s2보다 작으면 branch하는 명령어가 존재하지 않는다. 하지만 $s1이 $s2보다 작으면 또 다른 레지스터 $s3의 값을 1로 설정하는 slt연산은 가능하다. 따라서 slt연산을 통해 $s3에 1을 저장하고 beq를 사용해 $s3 == 1 인 경우 특정 위치로 branch하도록 설계하는 것은 가능하다.
- set on greater than, set on less than equal 등도 존재한다.
- set on less than immediate
- 어떤 레지스터 값이 immediate값보다 작으면 새 레지스터의 값을 1로 세팅
- 어떤 값이 0인지 아닌지에 따라 branch하는 명령어의 경우, 숫자 0을 표현하기 위해 $0을 사용한다.
- Unconditional jump instructions
- jump
- opcode(6 bit)+ (target address(26bit)/4)
- 26bit*4 = target address
- conditional branch과 달리 target address가 절대적인 주소이다.
- 28bit까지만 jump가 가능하다.
- jump register
- opcode(6bit) + jump하고 싶은 곳의 주소를 담은 레지스터($ra)
- 레지스터 내의 주소로 접근해야하므로 jump보다 시간이 오래 걸린다.
'System SW' 카테고리의 다른 글
[2.6] MIPS Instruction Set Architecture VI - 언어와 MIPS 어셈블리언어 (1) | 2022.10.13 |
---|---|
[2.5] MIPS Instruction Set Architecture V - 연산별 비트 구조 (0) | 2022.10.13 |
[2.3] MIPS Instruction Set Architecture III - 논리연산 & Data Transfer 연산 (0) | 2022.10.12 |
[2.2] MIPS Instruction Set Architecture II - 비트 포맷 및 산술 연산 (0) | 2022.10.12 |
[2.1] MIPS Instruction Set Architecture - 레지스터 및 메모리 모델 (0) | 2022.10.12 |
댓글