컴퓨터 구조

컴퓨터 구조(06)

cheesecrust1008 2022. 9. 23. 14:56

mips 분기 명령어 = branch instructions 라고 한다. 

 

종류로는 jr, j, ,jal, beq, bne 가 있는데 모두 Label 로 넘기는 기능을 하는 instructions 들이다.

 

따라서 우선 Label에 대해 알아보자 

Label 이란 instrustions 에서 넘길때에 사용하는 것이다. 

 

예시로는 Loop : add $2, $3, $4 가 있다. 이 명령어 처럼 앞에 영문자로 시작하고, 영문과 숫자로 이루어진 식별자를 Label로 사용한다.

 

unconditional branch 이의 종류는 jr, j, jal 이 있다. 

 

jr은 jump register, 이는 지정한 register로 넘어가는 것

j는 jump 이는 지정한 Label 로 넘어가는 것이다.

jal은 jump and ink 이는 지정한 Label로 넘어감과 동시에 다음줄의 명령어를 $31에 저장한다. 

 

jr의 assembly format은  i format이다.

따라서 위의 그림과 같이 되는데, 명어 코드에 rs 부분에 목적레지스터가 할당된다. 

이 명령어가 실행되면 $t1으로 가게 되는데, 이때의 $t1의 값이 main Label의 주소 값이 할당되어 있으므로 main을 무한 루프를 돌게 된다.

 

j, jal insruction은 j format을 활용하는데, j format은 32bit 중에서 6bit, 26bit 로 나누어진다.

 

j instrustion의 경우에는 아래와 같이 만들어집니다. 

앞의 6bit에는 명령어 코드가 들어가게 된다. 뒤의 BTA의 계산은 위와 같이 이루어진다. 

 

이때의 명령 수행시의 pc의 값이란 해당 명령줄이 저장된 메모리의 값이다. 

 

jal 명령어 또한 j 와 같다 하지만, jal의 경우에는 ra, return address 가 저장된다. 따라서 밑의 jr $ra 에서 rest address로 jump 하게 된다.

 

이때의 return address에는 jal 명령라인의 다음 줄의 명령어 메모리 주소가 들어간다.

 

conditional branch beq/bne 

 

beq : branch equal

beq $rs, $rt, L1 : $rs 와 $rt가 서로 같을 때에 L1을 실행시킨다.

 

bne : branch not equal 이다. 

bne $rs, $rt, L1 : $rs != $rt 일때에 L1을 실행한다. 

 

위의 instrustion 은 condiational 이기에 조건문과 같다.

 

이러한 bne/beq를 나타낼때에는 i format 을 활용하는데,  작성할때에 명령어 와 레지스터는 똑같이 작성하고 immediate feild에 BTA를 저장하게 된다. 이떄에도 규칙이 존재한다. 

위는 bne/beq의 명령어에서 BTA를 도출해내는 과정이다.

 

따라서 반대로 BTA의 주소를보고 bne/beq 를 완성 시킬수도 있다.

하지만, 위와 같은 경우에 bne/beq를 계산 할때에 있어서 + 계산을 하기때문에, 이때에는 signed extend를 활용하는데, 그렇게 되면 위의 ?의 값이 1로 채워지게 된다.  따라서 위의 x를 표현하는 것을 불가능하다. 

 

따라서 이러한 경우에는 다른 방법으로 나타낸다.

이때에 해당 beq의 명령을 bne로 변경후에 다음 명령라인을 Label로 넣고 원래 가야하는 label은 j 를 사용한다.

 

이떄의 j format에서는 합연산이 아니라 앞에 4bit에 그냥 pc의 값을 붙이기 떄문에 더 큰 범위를 표기할 수 있다. 

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

컴구 translation and startup  (1) 2022.09.30
컴퓨터 구조 (07)  (0) 2022.09.29
컴퓨터 구조(05)  (0) 2022.09.20
컴퓨터 구조 (04)  (0) 2022.09.16
컴퓨터 구조 (03)  (1) 2022.09.16