보근은 참고 있다
2.7 판단을 위한 명령어 본문
컴퓨터가 단순한 계산기와 다른 점은 판단 기능이 있다는 것이다.
-----------------------------------------------------------------------------------------------------------------------------------
판단을 위한 명령어에는 ① beq, ② bne, ③ slt, ④ slti, ⑤ sltu, ⑥ sltiu 들이 있다.
① beq (Branch if EQual), ② bne (Branch if Not Equal) 이 두 명령어들은 두 값이 같은지 다른지 결과에 따라 프로그램 내의 다른 주소로 제어를 넘길 수 있다. 이것을 조건부 분기라고 한다.(if-then-else)
① beq는 두 피연산자를 비교해 같으면 새로운 주소로 이동, 같지 않으면 직후의 명령어를 수행하고,
② bne는 두 피연산자를 비교해 다르면 새로운 주소로 이동, 같으면 직후의 명령어를 수행한다.
ex) beq $s0, $s1, L1 // $s0의 값과 $s1의 값이 같으면 L1에 해당하는 문장으로 이동 bne $s0, $s1, L1
// $s0의 값과 $s1의 값이 다르면 L1에 해당하는 문장으로 이동
- 조건부 분기 외에도 순환문 등에도 쓰인다.
두 변수의 대소 비교가 필요한 경우도 있다. 그 경우에 쓰이는 명령어가 ③ slt (Set on Less Than)와 ④ slti(Set on Less Than Immediate)이다.
③ slt은 두 피연산자 rs와 rt를 비교해 rs < rt라면 rd에 1의 값을, rs >= rt라면 rd에 0의 값을 주고,
④ slti는 레지스터 값과 상수를 비교해 rs < constant라면 rt에 1의 값을, rs >= constant라면 rt에 0의 값을 준다.
ex) slt $t0, $s0, $s1 // $s0 < $s1 이면 $t0 = 1, $s0 >= $s1 이면 $t0 = 0
slti $t0, $s0, 10 // $s0 < 10 이면 $t0 = 1, $s0 >= 10 이면 $t0 = 0
위의 대소 비교 연산자들은 부호있는 수의 경우이고, 부호없는 수의 경우는 ⑤ sltu (Set on Less Than Unsigned), ⑥ sltiu (Set on Less Than Immediate Unsigned)가 있다.
- MIPS 컴파일러는 slt, slti, beq, bne와 0번 레지스터 $zero의 상수 0을 이용해 모든 비교 조건(같다, 다르다, 작다, 작거나 같다, 크다, 크거나 같다)을 만들 수 있다.
- 간단한게 좋다는 하드웨어 설계 원칙에 따라 MIPS는 복잡한 blt(Branch on Less Than) 명령어를 제외시켰다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
2.9 MIPS의 32비트 수치를 위한 주소지정 및 복잡한 주소지정 방식 (0) | 2020.10.14 |
---|---|
2.8 하드웨어의 프로시저 지원 (0) | 2020.10.14 |
2.6 논리연산 명령어 (1) | 2020.10.14 |
2.5 명령어의 컴퓨터 내부 표현 (0) | 2020.10.14 |
2.4 부호있는 수와 부호없는 수 (0) | 2020.10.14 |