isPowerfulBlog
[컴퓨터구조] #05 | branch 본문
임은진 교수님의 컴퓨터구조 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를 계산하는 법
- bta(26-bit)에 해당하는 2진수의 맨 뒤에 00을 붙인다.
명령어의 주소는 4의 배수이므로 2진수를 왼쪽으로 2칸 옮기는 것 = 4를 곱하는 것 - 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를 계산하는 법
- PC의 값
- 명령어의 immediate field(signed extension) × 4
명령어의 주소는 4의 배수이므로 2진수를 왼쪽으로 2칸 옮기는 것 = 4를 곱하는 것 - 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 |