2. Instructions: Language of the Computer(3) - 컴퓨터 내부의 데이터 표현
#Computer_Architecture
상수 0
MIPS에서는 레지스터 0 ($zero)에 항상 상수 0을 저장해놓는다. 레지스터 간의 값 이동에 사용할 수 있다.
- 덮어쓸 수 없습니다.
- 자주 사용하는 연산에서 유용하게 사용됩니다.
예시: 두 레지스터 간의 이동에 사용
add $t2, $s1, $zero // $t2 = $s1
Unsigned Binary Integer
기초 지식이니 부가 설명 X
- 주어진 n비트 숫자는 다음과 같이 계산됩니다:
- 범위는 0에서 +2^n - 1까지입니다.
- 예: 32비트 부호 없는 정수의 범위는 0에서 4,294,967,295까지입니다.
2의 보수 부호 있는 정수(2s-Complement Signed Integer)
기초 지식이니 부가 설명 X
- n비트 숫자의 경우, 범위는 -2^n-1에서 +2^n-1 - 1까지입니다.
- 32비트의 경우 -2,147,483,648에서 +2,147,483,647까지입니다.
- -(2^(n-1))은 2의 보수 표현에서 표현할 수 없습니다.
- 가장 작은 수 : 1000 0000 …. 0000
- 가장 큰 수 : 0111 1111 …. 1111
Signed Negation (부호 변환)
애도 아는 내용이니 패스(디논을 수강했다면?)
- 값을 음수로 바꾸는 방법은 1의 보수를 취하고 1을 더하는 것입니다.
- 예시: +2를 -2로 변환
+2 = 0000 0000 0000 0000 0000 0000 0000 0010 -2 = 1111 1111 1111 1111 1111 1111 1111 1110 + 1 = 1111 1111 1111 1111 1111 1111 1111 1111
- 예시: +2를 -2로 변환
- 증명
Sign Extension (부호 확장)
- 더 많은 비트를 사용하여 숫자를 표현할 때, 숫자의 값은 유지되어야 합니다.
- ex) 16비트로 표현한 수를 32비트로 확장해야 할 때, 이 값이 바뀌면 안 된다.
- 부호 비트를 확장하는 왼쪽에 기존 수의 MSB(부호 비트)를 쫙~ 채워준다.
- unsigned 타입이면 무조건 0으로 모두 채워준다
- 예시: 8비트를 16비트로 확장
- +2: 0000 0010 → 0000 0000 0000 0010
- -2: 1111 1110 → 1111 1111 1111 1110
- MIPS 명령어 set에는 다음과 같은 명령어들이 있다.
- addi : 더할 때 immediate value의 부호가 확장된다.
- lb, lh(load byte, load halfword) : 메모리에서 byte/halfword만큼 로드하고 부호가 확장된다.
- beq(branch equal), bne(branch not equal) : 두 레지스터의 값을 비교하여 조건에 따라 분기하는데, 분기 오프셋(displacement)은 부호 확장됩니다.