isPowerfulBlog

[컴퓨터구조] #05 | branch 본문

CS

[컴퓨터구조] #05 | branch

왕밤빵도라에몽 2023. 10. 16. 20:26

임은진 교수님의 컴퓨터구조 lecture11을 학습하고 작성한 TIL입니다


MIPS 분기 명령어

branch instructions
✅ 명령어들은 순서대로 진행되지만, branch instructions는 예외
MIPS 명령어들은 32-bit의 이진수로 표현되어 메모리에 저장
Assembly code에서는 기호로 된 Label을 명령어 앞에 써서 숫자로 된 주소 대신 사용


Unconditional Branch

jr

unconditional jump to instruction stored in register

R-format

op(6-bit) | rs(5-bit) | rt(5-bit) | rd(5-bit) | shamt(5-bit) | func(6-bit)

js $rs
000000 rs(5-bit) 00000 00000 00000 001000

j

unconditional jump to instruction labeled L1

J-format

op(6-bit) | branch target address(26-bit)

j L1
000010 bta(26-bit)

jal

unconditional jump to instruction labeled L1
and store the next address in $31 ($ra: return address)

J-format

op(6-bit) | branch target address(26-bit)

jal L1
000011 bta(26-bit)

📌 j/jal 명령어의 BTA를 계산하는 법

  1. bta(26-bit)에 해당하는 2진수의 맨 뒤에 00을 붙인다.
    명령어의 주소는 4의 배수이므로 2진수를 왼쪽으로 2칸 옮기는 것 = 4를 곱하는 것
  2. PC의 상위 4-bit맨 앞에 붙인다.

✅ 주소와 그 주소에 저장된 값을 헷갈리지 말자!


Conditional Branch

beq

branch equal
if(R[$rs]==R[$rt]) branch to instruction labeled L1

I-format

op(6-bit) | rs(5-bit) | rd(5-bit) | offset(16-bit)

beq $rs, $rt, L1

bne

branch not equal
if(R[$rs]!=R[$rt]) branch to instruction labeled L1

I-format

op(6-bit) | rs(5-bit) | rd(5-bit) | offset(16-bit)

bne $rs, $rt, L1

📌 beq/bne 명령어의 BTA를 계산하는 법

  1. PC의 값
  2. 명령어의 immediate field(signed extension) × 4
    명령어의 주소는 4의 배수이므로 2진수를 왼쪽으로 2칸 옮기는 것 = 4를 곱하는 것
  3. 1 + 2

✅ beq/bne에서 BTA를 계산할 때는 현재 PC의 상대적인 값으로 나타냄. offset 값을 add해주어 나타냄
❓ beq/bne instruction의 주소와 BTA의 차이가 너무 커서 16-bit로는 표현할 수 없을 때
❗ compiler에 의해 instruction의 주소와 BTA의 차이를 작게하면서 같은 결과값을 도출할 수 있는 다른 코드로 coding된다.


참고 임은진 교수님 컴퓨터구조 강의안


2021년 벨로그 글 옮겨옴

'CS' 카테고리의 다른 글

[시스템디자인] Key Value Store  (1) 2024.01.29
[컴퓨터구조] #06 | slt  (0) 2023.10.16
[컴퓨터구조] #04 | data transfer  (0) 2023.10.16
[컴퓨터구조] #03 | MIPS R/I-format  (0) 2023.10.16
[컴퓨터구조] #02 | Arithmetic for Computers  (0) 2023.10.16