isPowerfulBlog
[컴퓨터구조] #03 | MIPS R/I-format 본문
임은진 교수님의 컴퓨터구조 lecture08~09을 학습하고 작성한 TIL입니다
R-format
6개의 field로 구성
| op(6bits) | rs(5bits) | rt(5bits) | rd(5bits) | shamt(5bits) | funct(6bits) |
- 어떤 instruction인지?
op
operation code
funct
function code - operands
rs
fist source register number
rt
second source register number
rd
destinationregister number - shift amount
shamt
shift amount (default 00000)
✅ 기계어와 어셈블리어는 순서가 다름!
기계어는 destination이 operands 셋 중에 젤 나중에 옴!
000000 rs rt rd 00000 100000
add $t0, $s1, $s2
R-format instructions
add / addu
sub / subu
or / and / nor
sll / srl
I-format
5개의 field로 구성
R-format은 상수를 바로 더해주는 i연산(ex: addi, ori....)을 할 수 없음
| op(6bits) | rs(5bits) | rt(5bits) | constant or address(16bits) |
어떤 instruction인지?
op
operation codeoperands
rs
source register number
rt
destination or source register numberimmediate field
(constant or address field) can represent -2^15 ~ (+2^15-1)
I-format instructions
ori, andi
논리연산
no sign extension of immediate value
addi
산술연산
sign extension of immediate value
lui
load upper immediate instruction
lui rt, constant
op 00000 rt imm
- 16-bit인 constant를 rt 레지스터의 왼쪽(upper) 16-bit에 쓴다.
- rt 레지스터의 오른쪽(lower) 16-bit는 0x000으로 쓴다.
✅ ALU 연산은 32-bit짜리 두 개를 받아서 연산을 수행한다!
그런데 immediate field
는 16-bit이므로 앞에 16-bit가 남음
- 논리연산
앞의 16-bit를 0으로 채움
no sign extension - 산술연산
immediate field의 sign값과 같은 값으로 앞의 16-bit를 채워줌
sign extension
ex) 16-bit로 표현된 -2를 32-bit로 extend
- 양수 2를 2진수로 표현
0000 0000 0000 0010
- 2를 2의 보수로 나타내기
```
1111 1111 1111 1101
- 1
= 1111 1111 1111 1110
3. 32-bit로 extend
위의 수의 sign bit가 1이므로
1111 1111 1111 1111 1111 1111 1111 1110
## out of range error for I-format instruction
`immediate field`는 **16-bit**의 constant를 저장한다.
addi $10, $0, 0x8000
위의 코드는 10번 레지스터에 16진수 0x8000을 저장하겠다는 코드인데, 이 수를 2진수로 나타내었을 때 아래와 같다.
1000 0000 0000 0000
위에서 언급했듯이 `immediate field`이 **표현할 수 있는 범위**는 -2^15 ~ (+2^15-1)
즉 2진수로 나타내었을 때
0111 1111 1111 1111 # 양수범위 최대 (+2^15-1)
1000 0000 0000 0000 # 음수다 얘부터는
1111 1111 1111 1111 # 음수범위 최소??(아무튼 끝ㅋㅋ) -2^15
```
이므로 16진수 0x8000은 산술명령어 addi
의 constant field에서 표현 가능한 범위를 벗어난다.
그래서 spim상에서 out of range error을 발생시키는데, 이때 Abort
를 누르지 않고 OK
로 계속 실행하게 되면 SPIM은 사용자가 원하는 명령을 수행하기 위해 다른 instruction을 대신 수행한다.
✅ out of range 범위는 명령어 종류(산술/논리)에 따라 결정된다.
- 산술명령어 - 상수 operand가 signed number여야 한다고 가정
- 논리명렁어 - 상수 operand가 unsigned number여야 한다고 가정
✅ 상수 operand는 10진수인지 16진수인지에 따라 해석된다. SPIM 어셈블러는 상수를 해석할 때는 어떤 명령어인지 상관이 없이 진수에 따라 해석한다.
- 10진수 - signed number로 해석
- 16진수 - unsigned number로 해석
헷갈린다면 명쾌상쾌통쾌한 교수님 글을 다시 읽어보자 나 자신아..
참고
임은진 교수님 컴퓨터구조 강의안
2021년 벨로그 글 옮겨옴,
'CS' 카테고리의 다른 글
[컴퓨터구조] #06 | slt (0) | 2023.10.16 |
---|---|
[컴퓨터구조] #05 | branch (0) | 2023.10.16 |
[컴퓨터구조] #04 | data transfer (0) | 2023.10.16 |
[컴퓨터구조] #02 | Arithmetic for Computers (0) | 2023.10.16 |
[컴퓨터구조] #01 | MIPS 산술 논리 연산 명령어 (1) | 2023.10.16 |