명령어 (12) - 조건 연산, J Format

컴퓨터구조

2020. 4. 8. 15:14

Conditional Operation은 if, else, goto, for, while, switch 등의 제어문을 구현하기 위해 사용된다. 대표적으로 beq(if ==), bne (if !=), j(goto)가 있다. 이들은 I format 혹은 J format 명령어들이다.

 

1. beq (Branch Equal)

  • beq는 I format instruction으로 rs와 rt에 있는 값이 같으면 특정 라벨로 이동시킨다.
  • beq rs, rt, L1과 같이 표기한다. (L1은 특정 명령어가 포함된 주소공간이 된다)
  • 만약 rs와 rt가 다르면 그냥 무시하고 다음 명령어를 실행하게 된다.
// C Code :
if(a == b) {
	a = a + b;
}

a = a - b;


// MIPS Code :
main:
	beq t0, t1, L1
	sub t0, t0, t1

L1:
	add t0, t0, t1

 

2. bne (Branch Not Eqaul)

  • bne는 I format instruction으로 rs와 rt의 값이 다르면 특정 라벨로 이동시킨다. 
  • else를 구현하는데 용이하게 사용될 수 있다. 
// C Code : 
if (a==b)
	a = 3;
else
	a = 0;

a += b;
	
    
    
// MIPS Code :

main:
	beq t0, t1, L1
	bne t0, t1, L2
	add t0, t0, t1
    
L1:
	addi t0, zero, 3

L2:
	addi t0, zero, 0

 

3. j (Jump) & J format Instruction

 

[그림] J format instruction

 

  • j는 jump로서 J format Instruction이다. J format Instruction의 구조는 다음과 같다.
  • J format의 구조는 매우 간단한데 opcode(jump)와 이동할 주소를 표현할 26비트의 주소필드로 구성된다.
  • j L1과 같이 호출하면, L1의 필드로 곧장 분기하여 점프한다.
// C Code :

Label:
a = a + 3;

if (a == b)
	goto Label:
else
	a = b;
    

// MIPS Code:

L1:
	addi t0, t0, 3
	beq t0, t1, Label
	bne t0, t1, L2

Label:
	j L1
    
L2:
	addi t0, zero, t1

 

4. Loop Condition (While, For 등)

beq, bne, j를 이용하면 반복문을 구현할 수 있다.

// C Code :
while(s[i] == k)
	i ++;

s[i] = k + 4;



// MIPS Code :
// i = t0, k= s0, s = s1

main:
	j LOOP              // LOOP로 이동
	addi t3, s0, 4      // z = k + 4
	sw t3, 0(t1)        // s[i] = z (t1에 s[i]의 주소가 남아있음)
    
LOOP :
	sll t1, t0, 2       // t1 = i * 4; (offset 만들기)
	add t1, t1, s1      // t1 = s + t1; (base + offset)
	lw t2, 0(t1)        // t2에 s[i] 로드
	bne t2, s0, MAIN    // s[i]와 k 비교 다르면 main으로 빠져나감
	addi t0, t0, 1      // 조건에 맞으면 i++;
	j LOOP              // 루프 재시작

 

5. Reference

 

컴퓨터구조

이 과목에서는 컴퓨터 시스템의 구성, 동작원리와 설계를 다룬다. 특히 컴퓨터 성능, 명령집합, 제어와 마이크로프로그래밍, 파이프라인, 정수와 부동 소수점수 연산, 기억부 시스템, 입출력 부시스템, 고급 컴퓨터구조 등과 같은 내용에 중점을 둔다. 교과목을 통해 고속 Data Network 시스템에 들어가는 여러 Processors를 이해하고, 이들을 설계 또는 Programming 할 수 있는 능력을 배양한다.

www.kocw.net

 

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

명령어 (15) - MIPS 프로그래밍 해보기  (0) 2020.05.04
명령어 (14) - 프로시져 / 함수 (1)  (1) 2020.05.01
명령어 (13) - 대소 비교 (<)  (0) 2020.04.08
명령어 (11) - 논리 연산  (0) 2020.04.08
명령어 (10) - 주소 지정  (0) 2020.04.08
명령어 (9) - I Format  (0) 2020.04.08
명령어 (8) - R Format  (0) 2020.04.08